Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Programming
Gamedevelopment

Tip Cepat: Prinsip Enkapsulasi OOP

by
Difficulty:BeginnerLength:MediumLanguages:
This post is part of a series called Beginner's Guide to OOP.
Quick Tip: The OOP Principle of Coupling
Quick Tip: The OOP Principle of Abstraction

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Kita telah membahas pemrograman berorientasi objek secara umum untuk pengembang permainan dan prinsip OOP spesifik dari cohesion dan coupling. Sekarang mari kita lihat di enkapsulasi dan bagaimana ini membantu untuk menjaga kode lebih mudah dipelihara dan digabungkan secara longgar.


Catatan: Meskipun Tip Cepat ini dijelaskan menggunakan Java, Anda seharusnya dapat menggunakan teknik dan konsep yang sama di hampir setiap lingkungan pengembangan game.


Apa itu Enkapsulasi?

Enkapsulasi adalah prinsip menyembunyikan informasi. Artinya, pelaksanaannya (pekerjaan internal) dari sebuah objek tersembunyi dari sisa program.

Contoh yang populer yang Anda dengar mengenai enkapsulasi adalah saat sedang mengendarai sebuah mobil. Apakah Anda perlu tahu persis bagaimana setiap aspek dari mobil bekerja (mesin, karburator, alternator, dan sebagainya)? Tidak - Anda perlu tahu bagaimana menggunakan roda kemudi, rem, akselerator, dan sebagainya.

Contoh lain adalah mencari nilai dalam array. Di Java, Anda dapat melakukan hal berikut:

Kode di atas akan mengembalikan true jika nilai 11 ada di myArray, jika tidak akan mengembalikan false. Bagaimana cara kerja metode contains()? Teknik pencarian mana yang digunakan? Apakah melakukan pra-penyortiran array sebelum mencari? Jawabannya adalah itu bukannlah masalah karena pelaksanaan yang sebenarnya dari metode adalah tersembunyi.


Mengapa Enkapsulasi Berguna?

Enkapsulasi membantu membuat kode yang berhubungan renggang. Karena rinciannya tersembunyi, mengurangi kemampuan objek-objek lain untuk langsung mengubah kondisi dan perilaku objek.

Hal ini juga sangat membantu ketika Anda harus mengubah tipe data dari variabel. Mari kita katakan Anda memutuskan untuk menggunakan String untuk melacak waktu dalam format "hh:mm:ss". Setelah beberapa saat, Anda akan menyadari bahwa int yang mewakili detik mungkin tipe data yang lebih baik untuk waktu. Tidak hanya Anda harus mengubah jenis data dalam objek, tetapi juga setiap kali Anda direferensikan waktu objek di seluruh program!

Sebaliknya, Anda dapat menggunakan apa yang dikenal sebagai funsi getter dan setter. Getter dan setter biasanya adalah fungsi kecil yang mengembalikan dan menetapkan variabel masing-masing. Fungsi getter untuk mendapatkan waktu akan terlihat sebagai berikut:

Getter akan mengembalikan nilai String: variabel time. Sekarang ketika kita ingin mengubah time menjadi int, bukannya mengubah semua panggilan getter kita dapat hanya mengubah fungsi getter untuk mengubah tipe data int menjadi tipe data String

Operator % dikenal sebagai operator modulus dan mengembalikan sisa divisi. Jadi 10 % 3 akan mengembalikan 1 karena 10 / 3 = 3 dengan sisa 1.

Fungsi getter sekarang mengembalikan String dan tidak ada satupun panggilan ke fungsi harus diubah. Oleh karena itu kode lebih mudah dipelihara.


Bagaimana Menerapkan Prinsip Ini

Asteroid

Mari kita kembali ke contoh sebuah kapal yang menembakkan sebuah peluru yang diperkenalkan dalam artikel coupling. Ingat bahwa kita mendefinisikan sebuah kapal sebagai berikut:

Agar kapal menembakkan peluru, semua yang harus Anda lakukan adalah memanggil ship.fire(). Bagaimana kode mengimplementasikan menembakkan peluru ini tidak penting, karena semua yang kita pedulikan adalah tentang menembakkan sebuah peluru. Dengan cara ini, sebaliknya jika Anda ingin mengubah kode untuk menembakkan ledakan laser, Anda hanya perlu mengubah metode fire() dan bukan setiap panggilan untuk ship.fire().

Hal ini memungkinkan Anda untuk memiliki kemampuan untuk mengubah aspek tentang bagaimana kapal bekerja tanpa harus mengubah bagaimana objek kapal digunakan di mana-mana.

Tetris

Tetris memiliki beberapa cara untuk berurusan dengan mengosongkan baris. Meng-enkapsulasi perilaku membersihkan sebuah baris akan memungkinkan Anda untuk dengan cepat mengubah metode mana yang Anda gunakan tanpa harus menulis ulang setiap penggunaannya. Ini bahkan akan memungkinkan Anda untuk mengubah metode membersihkan baris untuk menciptakan mode bermain yang berbeda dalam permainan.

Pac-Man

Ada satu lagi fitur enkapsulasi yang berhubungan dengan menyembunyikan akses ke suatu objek. Ada berkali-kali dimana Anda tidak ingin akses eksternal ke status atau perilaku objek, dan juga ingin menyembunyikannya dari objek lain. Untuk melakukan ini, Anda dapat menggunakan access level modifiers yang memberikan atau menyembunyikan akses ke status dan perilaku objek.

Access level modifiers menetapkan dua tingkat akses:

  • public - setiap objek dapat mengakses setiap saat variabel atau fungsi.
  • private - hanya obyek yang berisi variabel atau fungsi dapat mengaksesnya.

(Ada tingkat ketiga - protected - tapi kita akan membahasnya di posting yang akan datang.)

Ingat bahwa ghost telah menyatakan:

  • color
  • name
  • state
  • direction
  • speed

.. .dan didefinisikan sebagai berikut:

Karena changeColor(), changeSpeed(), dan changeDirection() adalah fungsi pembantu dan tidak seharusnya dapat diakses dari manapun kecuali di dalam class, kita dapat mendefinisikan mereka sebagai fungsi private. Semua kondisi dari ghost dapat juga dinyatakan private karena mereka tidak boleh dimodifikasi dari luar kelas, dan hanya diakses melalui fungsi getter dan setter. Hal ini akan mengubah class didefinisikan sebagai berikut:


Kesimpulan

Enkapsulasi dapat membantu untuk membuat kode lebih mudah dipelihara dengan membantu untuk mencegah efek riak dari perubahan kode. Hal ini juga membantu dengan menciptakan kode yang digabungkan secara longgar dengan mengurangi akses langsung ke status dan perilaku objek.

Di Tip Cepat selanjutnya, kita akan membahas prinsip dari abstraksi dan bagaimana itu dapat membantu untuk mengurangi redundansi kode. Ikuti kami di Twitter, Facebook, atau Google+ untuk tetap up to date dengan posting terbaru.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.