ReySnts BasicOOGPWithCsharpAndUnity
ReySnts BasicOOGPWithCsharpAndUnity
Oleh
Reynaldy Sentosa
Indonesia
10 April 2024
DAFTAR ISI
JUDUL .......................................................................................................................... i
1. C# ......................................................................................................................... 1
2.2. Buka-Tutup.................................................................................................. 13
3. Pola Desain......................................................................................................... 14
3.1. Factory......................................................................................................... 15
ii
3.3. Singleton ..................................................................................................... 16
iii
iv
TINJAUAN PUSTAKA
1. C#
1.1. Variabel
Variabel merupakan sebuah tempat dalam RAM (atau Memori Akses Acak)
komputer untuk menyimpan dan memproses data masukan yang kerap berubah atau
bervariasi selama berjalannya suatu program. Karakteristik variabel terdiri dari nama,
nilai, dan tipe data. Nama variabel harus unik karena berperan sebagai identitas memori
dan identitas bertujuan. Nama variabel disebut identitas memori karena merujuk ke
sebuah alamat memori yang membedakannya dengan alamat memori lainnya dalam
memori stack. Sebaliknya, nama variabel disebut identitas bertujuan karena
melambangkan kegunaannya atau manfaatnya saat diakses dalam kode program
(Nakov, 2013, hal. 111 dan 123-126).
Tipe data variabel dapat dibedakan antara tipe data primitif (atau tipe nilai) dan
tipe (data) referensi. Tipe nilai terdiri dari bool (atau benar-salah), char (atau karakter),
float (atau bilangan desimal), int (atau bilangan bulat), dan sebagainya. Sebaliknya, tipe
referensi terdiri dari array/larik (atau sekumpulan variabel), class/kelas (atau cetakan
objek), interface/antarmuka (atau kelas abstrak murni), string (atau sekumpulan
karakter), dan lain-lain. Variabel dengan tipe nilai bersifat primitif/statis karena
menyimpan nilainya secara langsung dalam memori stack, sedangkan variabel dengan
tipe referensi bersifat dinamis karena menggunakan memori stack untuk menyimpan
alamat yang menunjukkan lokasi penyimpanan nilainya dalam memori heap. Itulah
mengapa variabel bertipe nilai harus memiliki literal (atau nilai tertentu) saat
dideklarasikan (atau didaftarkan dalam program), sedangkan variabel bertipe referensi
dapat bernilai null saat dideklarasikan (Nakov, 2013, hal. 128-131).
1
2
1.4. Perulangan
Perulangan merupakan sebuah kendali yang digunakan untuk mengulang
pengeksekusian seruntun perintah atau kode program. Perulangan terdiri dari
perulangan kondisional dan perulangan foreach. Perulangan kondisional merupakan
sebuah perulangan yang terus dilakukan hingga memenuhi kondisi (atau hasil ekspresi
boolean) tertentu secara benar/tepat. Perulangan kondisional terdiri dari perulangan
while, perulangan do-while, perulangan for, dan perulangan bersarang. Perulangan
foreach merupakan perluasan dari perulangan for yang digunakan untuk menelusuri
setiap elemen (tanpa perlu mengetahui indeksnya) dalam (sebuah) koleksi. Dalam
istilah perulangan, terdapat operator break dan operator continue. Operator break
digunakan untuk menghentikan sebuah perulangan secara langsung, sedangkan
operator continue digunakan untuk melewati sebuah iterasi tanpa menghentikan
perulangan (Nakov, 2013, hal. 211, 215-216, 221, dan 225-226).
3
1.5. Larik
Larik merupakan sebuah variabel bertipe referensi yang objeknya dapat
berisikan sekumpulan elemen (berupa variabel) yang bertipe data sama dan memiliki
indeks (atau urutan angka) yang berjangkau dari nol ke panjangnya (atau jumlahnya)
dikurangi satu. Larik menggunakan kata kunci new untuk mengalokasikan ruang bagi
seluruh elemennya ke dalam memori heap. Larik menugaskan nilai (variabel) bawaan
kepada setiap elemen yang nilainya tidak dilakukan inisialisasi (atau ditugaskan
pertama kali) setelah dideklarasikan. Larik memperlakukan setiap elemennya seperti
variabel yang nilainya dapat diakses (untuk dibaca ataupun diubah) melalui indeksnya.
Larik dapat menyebabkan eror (berupa pengecualian) kalau (salah satu) elemennya
diakses secara tidak valid, misalnya karena indeksnya berada di luar jangkauan. Larik
umumnya bekerja bersama (atau di dalam) perulangan for saat beberapa (atau setiap)
nilai elemennya hendak diubah, juga biasanya bekerja bersama perulangan foreach saat
beberapa nilai elemennya hanya dibaca (Nakov, 2013, hal. 235-240 dan 244-246).
1.6. Metode
Metode merupakan penerapan konsep “membagi dan menaklukan” Romawi
Kuno yang tidak terhindarkan karena dapat membantu pemisahan dari suatu
masalah/tugas (dalam hal ini adalah program) besar/kompleks ke beberapa
bagian/masalah kecil. Metode menawarkan penggunaan kembali sebuah implementasi
atau blok kode (antara tanda kurung kurawal buka dan tanda kurung kurawal tutup)
dalam tubuhnya untuk menyusun sebuah program agar lebih mudah dibaca/dipahami
oleh (rekan) pengembang lain dan menghindari (kebingungan akibat) adanya
duplikasi/pengulangan. Metode terdiri dari tipe (data) kembalian dan khas/spesifikasi
yang terdiri dari nama dan parameter (atau informasi tambahan yang berupa variabel)
untuk membedakannya dengan metode lain. Sekumpulan metode dengan kesamaan
nama dan perbedaan jumlah parameter atau perbedaan (urutan) penempatan parameter
disebut method overloading atau pembebanan metode secara berlebihan (Nakov, 2013,
hal. 293-297, 303-304, dan 321).
Dalam istilah metode, terdapat variabel lokal, operator return dan tipe (data)
void. Variabel (dengan jangkauan/skop) lokal merupakan sebuah variabel yang hanya
dapat dideklarasikan dan hanya dapat digunakan dalam sebuah implementasi metode.
Operator return digunakan untuk menghentikan sebuah metode secara langsung dan
mengembalikan sebuah nilai (bertipe) kembalian dari metode tersebut ke metode lain
yang memanggilnya. Tipe void menandakan bahwa sebuah metode tidak
mengembalikan nilai apa pun (Nakov, 2013, hal. 300-301 dan 329-330).
Kelas merupakan sebuah blok bangunan yang tidak terpisahkan dalam OOP
karena (berperan sebagai cetak biru atau struktur yang) menggambarkan suatu objek
(yang berperan sebagai contohnya/turunannya). Kelas dapat terdiri dari (beberapa
elemen, seperti) atribut/bidang sebagai (variabel) datanya, properti (sebagai perluasan
fungsionalitas terhadap atributnya), ataupun metode (untuk memanipulasi datanya)
(Nakov, 2013, hal. 386-388).
Dalam istilah kelas dan objek, terdapat operator titik, konstruktor, dan anggota
statis. Operator titik digunakan untuk mengakses (sebuah) elemen kelas dari (sebuah)
objek di luar implementasi metode yang berada di dalam kelas yang sama. Konstruktor
5
merupakan sebuah metode khusus tanpa nama dan tanpa nilai kembalian yang langsung
dipanggil saat (program) membuat (sebuah) objek dari suatu kelas. Anggota statis
merupakan elemen kelas yang tidak mewakili (atau tidak dimiliki oleh) objeknya, tetapi
hanya mewakili kelas itu sendiri (Nakov, 2013, hal. 393-394 dan 396-397).
Pengubah akses terdiri dari tingkatan publik dan tingkatan privat. Tingkat akses
publik (yang dinyatakan dengan kata kunci public) merupakan tingkatan yang tidak
terbatas karena memungkinkan agar (sebuah) elemen kelas dapat diakses di seluruh
kelas lainnya. Sebaliknya, tingkat akses privat (yang dinyatakan dengan kata kunci
private) merupakan tingkatan yang paling ketat karena membatasi agar (suatu) elemen
kelas hanya dapat diakses di dalam kelas itu sendiri (Nakov, 2013, hal. 508-509).
Konstanta merupakan atribut kelas yang nilainya hanya dapat ditugaskan saat
ia dideklarasikan (dengan kata kunci const atau kata kunci readonly). Jika konstanta
dideklarasikan dengan kata kunci const, maka sifatnya mirip dengan sifat anggota statis.
Jika konstanta dideklarasikan dengan kata kunci readonly, maka inisialisasi nilainya
dapat dilakukan di dalam konstruktor (Nakov, 2013, hal. 516-517).
Properti merupakan pencampuran elemen kelas antara atribut dan metode yang
bertujuan untuk menjamin enkapsulasi. Properti mirip atribut karena memiliki nilai dan
tipe data, juga mirip metode karena dapat memiliki (atau menjalankan) beberapa
metode pengakses khusus (dalam mencapai tujuannya). Properti dalam menjamin
enkapsulasi berarti memvalidasi ataupun mengizinkan (atau menentukan boleh atau
tidaknya) pembacaan ataupun pengubahan data (dari nilainya atau nilai atribut lain yang
diwakilkan) di dalam kelas lainnya. Metode pengakses khusus properti dapat dibedakan
antara getter (yang didefinisikan dengan kata kunci get untuk membaca data) dan setter
(yang didefinisikan dengan kata kunci set untuk mengubah data) (Nakov, 2013, hal.
549-550 dan 555-558).
6
Lis (atau daftar) merupakan sebaris elemen yang saling berurutan. Lis sama
seperti larik, yaitu memiliki panjang (yang dinyatakan dengan properti Count). Lis
dapat menjalankan beberapa metode, seperti Add (untuk menambahkan sebuah elemen
baru yang diposisikan setelah indeks elemen terakhir), Insert (untuk menambahkan
sebuah elemen baru di indeks tertentu), Clear (untuk menghapus semua elemen),
Contains (untuk memeriksa ada atau tidaknya suatu elemen), Remove (untuk
menghapus sebuah elemen tertentu), RemoveAt (untuk menghapus sebuah elemen di
indeks tertentu), IndexOf (untuk mengembalikan indeks elemen tertentu), dan this
(untuk mengakses sebuah elemen di indeks tertentu) (Nakov, 2013, hal. 642-643 dan
655-656).
Koleksi generik merupakan struktur data yang menjamin kesamaan tipe data
bagi setiap elemennya. Koleksi generik bertujuan untuk mengatasi lambatnya waktu
eksekusi program akibat pengaksesan (setiap) elemen lis. Dalam hal ini, pengaksesan
(sebuah) elemen lis memerlukan perubahan tipe data elemen dari tipe data objek ke tipe
data yang diinginkan (atau tipe data yang seharusnya) (Nakov, 2013, hal. 661-662).
Tumpukan merupakan (salah satu) struktur data klasik yang umum digunakan.
Tumpukan menerapkan konsep LIFO (atau Masuk Terakhir dan Keluar Pertama), yaitu
hanya dapat melaksanakan metode Push (yang mirip dengan metode Add pada lis),
metode Pop (yang mirip dengan metode RemoveAt di indeks terakhir pada lis), dan
metode Peek (yang mirip dengan metode this di indeks terakhir pada lis). Tumpukan
yang diimplementasikan dengan kelas generik Stack<T> dapat menjalankan beberapa
metode tambahan, seperti Count, Clear, dan Contains (yang ketiganya mirip dengan
metode-metode di lis), serta ToArray (untuk mengembalikan sebuah larik yang
berisikan seluruh elemennya) (Nakov, 2013, hal. 669-671).
8
1.10. Kamus
Kamus di dunia nyata menggambarkan (setiap) kata sebagai (sebuah) kunci dan
keterangan (yang berkaitan dengan) kata (tersebut) sebagai (sebuah) nilai. Kamus/Peta
(dalam istilah struktur data) merupakan larik asosiatif karena setiap elemennya
mewakili sebuah pasangan antara kunci (yang unik untuk mencari sebuah nilai) dan
nilai (sebagai data yang disimpan). Kamus dapat menjalankan beberapa metode, seperti
Add (untuk menambahkan sebuah elemen baru), Remove (untuk mengembalikan bisa
atau tidaknya penghapusan sebuah elemen dari kunci tertentu), ContainsKey (untuk
memeriksa ada atau tidaknya suatu elemen dari kunci tertentu), Count (untuk
mengembalikan jumlah elemen), this (untuk membaca atau menambahkan sebuah
elemen dari kunci tertentu), dan TryGetValue (untuk mengembalikan bisa atau tidaknya
pengembalian sebuah nilai elemen dari kunci tertentu). Kamus akan mengembalikan
pengecualian kalau pemanggilan Add dilakukan dengan (menentukan) kunci dari salah
satu elemen atau pengaksesan this tidak menemukan (suatu) elemen yang (ingin) dicari.
Kamus menggunakan antarmuka IDictionary<TKey, TValue> untuk
mengimplementasikan kelas Dictionary<TKey, TValue> (Nakov, 2013, hal. 727-730
dan 737).
OOP juga memungkinkan penggunaan beberapa baris kode melalui keempat prinsip
dasarnya: Pewarisan, Abstraksi, Enkapsulasi, dan Polimorfisme (Nakov, 2013, hal.
808).
Kohesi dalam suatu metode berarti seberapa kuat hubungan antara beberapa baris kode
sebagai bagian dari implementasinya dalam melaksanakan tugasnya. Kohesi Kuat
merupakan salah satu aturan dasar untuk menulis kode berkualitas tinggi (yang dapat
dicapai) dengan memastikan agar suatu komponen hanya melaksanakan satu tugas
(Nakov, 2013, hal. 836-837).
2. Prinsip SOLID
SOLID merupakan (sekumpulan) prinsip desain yang dapat memengaruhi cara
kerja Pola Desain. SOLID dapat membantu pemrogram agar kode yang ia tulis lebih
sederhana (atau lebih mudah dipahami dan lebih mudah disesuaikan). SOLID terdiri
atas lima konsep, yaitu SRP (atau Prinsip Tanggung Jawab Tunggal), OCP (atau Prinsip
Buka-Tutup), LSP (atau Prinsip Substitusi Liskov), ISP (atau Prinsip Segregasi
Antarmuka), dan DIP (atau Prinsip Inversi Dependensi) (Krogh-Jacobsen, 2022, hal.
8).
2.2. Buka-Tutup
OCP merupakan prinsip desain yang menyatakan bahwa (suatu bagian dari)
sebuah kelas harus terbuka (atau bersedia) untuk diperluas (dengan berbagai bentuk
yang berupa kelas dan mewarisi sebuah kelas abstrak) dan (bagian-bagian lainnya yang
bersifat internal harus) tertutup (atau tidak terpengaruh) untuk dimodifikasi (atau
diganti ataupun diubah). OCP dapat menyederhanakan perluasan (atau berbagai
penambahan bentuk baru) dengan menghindari penggunaan (sekumpulan) pernyataan
kondisional (yang memproses setiap bentuk baru tersebut). OCP (juga) dapat
mempermudah pengawakutuan karena berbagai eror ataupun serangga dapat ditemukan
pada kode program di dalam setiap bentuk (baru) secara terpisah (Krogh-Jacobsen,
2022, hal. 12 dan 14).
dari suatu antarmuka besar ke beberapa antarmuka kecil. ISP dapat memaksimalkan
penyesuaian (dalam) kode (program) dengan menjaga agar setiap antarmuka tetap
ringkas atau singkat. ISP (juga secara tidak langsung) dapat mempermudah modifikasi
kode (program) (Krogh-Jacobsen, 2022, hal. 21 dan 24).
3. Pola Desain
Pola Desain merupakan sebuah cetak biru siap pakai yang dapat disesuaikan
untuk menjawab suatu persoalan yang umumnya terjadi dalam pemrograman perangkat
lunak. Pola Desain dapat menggambarkan berbagai solusi dalam tingkatan yang lebih
tinggi (daripada sekadar algoritma) karena (urutan) penerapannya (dalam berbagai
kode program) dapat dilakukan secara berbeda. Pola Desain didasarkan pada konsep
pola yang digunakan untuk mendesain (atau menggambarkan) lingkungan perkotaan
dalam sebuah buku yang ditulis oleh Christopher Alexander dan dirilis pada 1977. Pola
Desain kemudian digagaskan oleh GoF (atau keempat penulis legendaris) yang terdiri
dari Erich Gamma, John Vlissides, Ralph Johnson, dan Richard Helm dalam sebuah
buku yang dirilis pada 1994. Pola Desain sebaiknya dipelajari pemrogram karena cara
kerjanya sudah terjamin (dari beberapa percobaan ataupun pengujian) (Shvets, 2023).
bahasa pemrograman disebut Pola Arsitektur. Pola Desain juga dapat dibedakan
berdasarkan tujuannya ke dalam tiga kelompok utama, yaitu Pola Kreasi (untuk
meningkatkan kemudahan penyesuaian dan penggunaan kembali kode dalam
pembuatan objek), Pola Struktural (untuk memperbesar struktur kelas dan menjaganya
agar lebih efisien dan lebih mudah disesuaikan), dan Pola Perilaku (untuk membagi
tanggung jawab atau tugas kepada setiap objek dan untuk menjaga agar komunikasi
antar objek tetap memberikan dampak yang baik) (Shvets, 2023).
3.1. Factory
Factory merupakan Pola Kreasi yang dapat digunakan untuk (memunculkan
atau) menciptakan berbagai jenis objek gim selama berlangsungnya permainan dalam
sebuah adegan Unity. Factory dapat diterapkan dengan mendefinisikan sebuah kelas
(dasar) abstrak pabrik (Factory) dan sebuah antarmuka produk (IProduct). Factory
kemudian mendefinisikan sebuah metode produksi (GetProduct sebagai elemen
abstrak) di dalam kelas abstrak pabrik untuk menciptakan (atau menyalin cetakan dari
suatu produk tertentu yang berupa) objek gim (pada posisi tertentu), juga (dapat)
mendefinisikan sebuah metode inisialisasi (Initialize sebagai elemen abstrak) di dalam
antarmuka produk untuk melakukan sesuatu (atau hal-hal tertentu) saat metode
produksi dipanggil. Factory akhirnya dapat menurunkan kelas abstrak pabrik yang
dapat memproduksi suatu implementasi antarmuka produk, misalnya (kelas turunan)
FactoryA memproduksi (implementasi antarmuka) ProductA dan FactoryB
memproduksi ProductB, di mana ProductA mungkin merupakan (turunan dari kelas
abstrak) obat (Spell), sedangkan ProductB mungkin merupakan pasukan (Troop).
Factory menyediakan keuntungan saat tersedia banyak jenis produk yang dapat (atau
perlu) diproduksi, di mana setiap kelas (turunan) produk dapat berdiri sendiri dan tidak
(perlu) memengaruhi kelas produk lainnya ataupun kelas (turunan) pabrik( yang
memproduksi)nya, sehingga dapat mempersingkat (jumlah baris kode) kelas pabriknya.
Factory tidak cocok untuk permainan dengan produk yang jenisnya sedikit (atau
berjumlah kecil) karena mendorong pendefinisian sejumlah kelas (turunan pabrik
ataupun produk) yang sesungguhnya tidak diperlukan. Factory dapat disesuaikan atau
ditingkatkan dengan menggunakan kamus untuk mempermudah pencarian produk;
mendefinisikan suatu kelas statis manajer pabrik dan suatu koleksi statis produk sebagai
16
3.3. Singleton
Singleton (atau Objek Tunggal) merupakan Pola Kreasi yang (menurut GoF)
memastikan bahwa suatu kelas hanya dapat membuat satu objek atau turunan (sebagai
Singleton) dari dirinya sendiri beserta akses global yang mudah terhadap objek
tunggalnya tersebut. Singleton cocok untuk kelas manajer yang mengatur suatu hal
(secara keseluruhan) dalam sebuah adegan di Unity. Singleton ternyata pernah
dikelompokkan sebagai Anti-Pola dan disebut bereputasi buruk (dalam sebuah buku
yang ditulis oleh Robert Nystrom) karena kemudahan akses global tersebut cenderung
mudah disalahgunakan dan (diam-diam) memunculkan ketergantungan (antar kelas)
17
3.4. Command
Command merupakan Pola Perilaku yang dapat digunakan untuk menyimpan
seruntun (objek dari kelas) perintah (atau tindakan) di dalam suatu (koleksi atau)
struktur data (seperti tumpukan). Command dapat diterapkan dengan mendefinisikan
sebuah antarmuka (ICommand) yang meliputi sebuah metode (Execute) untuk
melakukan perintah dan sebuah metode (Undo) untuk membatalkan (atau melakukan
sesuatu yang berlawanan dengan) perintah, kemudian mengimplementasikannya ke
berbagai kelas perintah. Command akhirnya dapat menjalankan berbagai perintah
dengan mendefinisikan sebuah kelas (CommandInvoker) yang memasukkan objek (dari
kelas) perintah (tertentu) ke dalam tumpukan pembatalan (perintah bernama
undoStack) setelah melakukan (suatu) perintah tertentu, juga menghapus objek perintah
puncak (atau terbaru) dari tumpukan pembatalan setelah membatalkan perintah
tertentu. Command menyediakan keuntungan dengan mempermudah pemutaran
(ulang) dan pengaturan kombinasi (atau kombo) tindakan, tetapi dapat memperbanyak
(atau memperbesar) struktur kode program. Command dapat diperluas atau
ditingkatkan dengan menambah implementasi (atau jenis) kelas perintah; menambah
sebuah metode (Redo) untuk mengulangi perintah dengan memasukkan objek perintah
puncak (yang dihapus) dari tumpukan pembatalan ke tumpukan pengulangan (bernama
redoStack) setelah membatalkan perintah, juga menghapus objek perintah puncak dari
tumpukan pengulangan dan menambahkannya ke tumpukan pembatalan setelah
mengulangi perintah; menggunakan koleksi berbeda (selain tumpukan) sebagai
penyangga (atau tempat penyimpanan sementara) objek perintah, seperti antrean atau
lis; dan menggunakan konstruktor pada (saat membuat sebuah) objek perintah (Krogh-
Jacobsen, 2022, hal. 62-64 dan 66-68).
18
3.5. State
State (atau Keadaan) merupakan Pola Perilaku yang mewujudkan suatu FSM
(atau Mesin dengan berbagai Keadaan dalam jumlah Terbatas dan digunakan) untuk
mengamati setiap keadaan dalam sebuah objek (yang berupa aktor ataupun benda
dalam) gim. State menggambarkan sebuah Diagram Keadaan (dengan satu keadaan
yang sedang aktif dalam suatu saat dan dapat memicu suatu transisi atau perpindahan
ke keadaan lainnya menurut kondisi tertentu). State (menurut GoF) dapat memisahkan
setiap keadaan (ke sebuah kelas) agar dapat berdiri sendiri (atau tidak saling
bergantung). State dapat diterapkan dengan (mendefinisikan) sebuah antarmuka (untuk
diimplementasikan oleh setiap keadaan) dan sebuah kelas (sebagai) FSM. State
menyediakan beberapa keuntungan dengan mematuhi Prinsip SOLID, yaitu
memisahkan sebuah kelas FSM monolit ke beberapa kelas keadaan (dengan SRP) dan
memungkinkan penambahan (berbagai) keadaan baru tanpa pernyataan kondisional
yang rumit (dengan OCP). State terasa berlebihan kalau suatu objek gim hanya
memiliki keadaan dalam jumlah yang sangat kecil atau kurang rumit. State dapat
diterapkan untuk beberapa konteks (yang lebih) rumit, yaitu dapat disertakan dengan
animasi (karakter), dapat disertakan dengan acara (atau dengan Pola Observer), dapat
berupa hierarki (dengan mendefinisikan suatu kelas keadaan induk yang mewarisi
beberapa kelas keadaan turunan), dan dapat menerapkan AI (atau Kecerdasan Buatan)
sederhana untuk berbagai karakter (dalam) gim (Krogh-Jacobsen, 2022, hal. 70, 72-74,
dan 76-78).
3.6. Observer
Observer merupakan Pola Perilaku yang digunakan untuk mengurangi berbagai
ketergantungan saat suatu objek berkomunikasi (atau terhubung) dengan (merujuk)
objek lainnya secara berlebihan. Observer menggunakan relasi satu-ke-banyak, yaitu
sebuah objek berperan sebagai (penerbit atau) subjek dengan delegasi (atau
kemampuan) untuk menyiarkan acara (sebagai penanda bahwa sesuatu telah terjadi atau
beberapa metode telah dipanggil) ke beberapa objek lainnya sebagai (pelanggan atau
pendengar atau) pengamat dengan metode sebagai pelaksana (yang berlangganan dan
bereaksi atau memberikan respons ke) acara. Observer dapat menggunakan beberapa
19
jenis delegasi (acara) di dalam subjeknya, salah satunya yaitu Action<T1, T2...T16>
yang bertipe (kembalian) void dan dapat menampung hingga enam belas parameter
masukan generik. Observer dapat menimbulkan eror kalau (beberapa) objek pengamat
yang masih berlangganan malah dihancurkan atau dimatikan saat adegan sedang
berjalan, sehingga objek pengamat dapat berhenti berlangganan melalui metode
OnDestroy atau metode OnDisable. Observer dapat menerapkan subjek ke berbagai hal
dalam permainan, seperti memanggil acara saat mengalahkan musuh, mengambil
barang, mengatur kondisi menang atau kalah, mengatur nilai skor, dan mengendalikan
UI (atau Antarmuka Pengguna). Observer juga dapat menerapkan pengamat untuk
bereaksi ke berbagai (pemanggilan) acara, seperti memunculkan efek partikel,
memunculkan potongan adegan, memutar suara, dan mengganti animasi. Observer
menyediakan beberapa keuntungan, yaitu memisahkan subjek dari (para) pengamatnya,
mengusahakan agar setiap pengamat merespons (acara) subjek dengan metodenya
sendiri, dan (sangat) cocok untuk dipadukan dengan Pola MVP (atau MVC). Observer
dapat menimbulkan beberapa tantangan, yaitu menambah kerumitan (dengan
menghentikan langganan dari setiap pengamatnya) saat menghapus suatu subjek, tetap
memerlukan ketergantungan oleh (setiap) pengamat terhadap (suatu) subjek, dan dapat
menimbulkan masalah (pada) performa (aplikasi) seiring banyaknya objek gim yang
berperan sebagai pengamat dalam sebuah adegan (besar) (Krogh-Jacobsen, 2022, hal.
80-84 dan 86).
3.7. Model-View-Presenter
MVC (atau Model-View-Controller) merupakan Pola Arsitektur yang umumnya
digunakan untuk mengembangkan (sesuatu yang berhubungan dengan) UI (dalam)
aplikasi. MVC bertujuan untuk mengurangi kemungkinan terjadinya kohesi rendah
(dengan menerapkan Prinsip SRP) dan kopling ketat (karena munculnya
ketergantungan yang sesungguhnya tidak diperlukan) dalam kode program aplikasi.
MVC memisahkan aplikasi ke dalam tiga lapisan, yaitu Model (sebagai tempat
penyimpanan yang bertugas untuk mengurus berbagai data dengan nilai tertentu),
Tampilan (yang bertugas untuk menyajikan data dari Model ke layar komputer agar
dapat dilihat oleh pengguna), dan Pengontrol (sebagai bagian dari otak aplikasi yang
bertugas untuk menerima input pengguna dan mengubah nilai data ke Model) (Krogh-
Jacobsen, 2022, hal. 89-90).
20
Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design Patterns: Elements of
Reusable Object-Oriented Software 1st Edition. Baarn: Addison-Wesley.
Krogh-Jacobsen, T. (2022, Oktober 13). Level Up Your Code with Game Programming
Patterns. Diambil kembali dari Unity Blog: [Link]
your-code-with-game-programming-patterns
Nakov, S. (2013). Fundamentals of Computer Programming with C#. Diambil kembali dari
Nakov's Free Books: Programming with C#, Java, JavaScript, Python and C++:
[Link]
Nordeus, E. (2023). Game Programming Patterns in Unity with C#. Diambil kembali dari
GitHub: [Link]
Nystrom, R. (2011). Game Programming Patterns. Diambil kembali dari Game Programming
Patterns: [Link]
Shvets, A. (2023). Refactoring and Design Patterns. Diambil kembali dari Refactoring Guru:
[Link]
21