Wednesday 4 June 2014

Prinsip utama OOP : Encapsulation

Salah satu prinsip utama dalam OOP adalah "Encapsulation".

Mengikut buku, definisi encapsulation adalah suatu proses dalam menggabungkan data dan method menjadi satu single unit iaitu Class.

Kalau baca definisi saje memang takkan faham dan tak jelas. Untuk lebih memahaminya, dari segi praktikal nya pula encapsulation adalah suatu proses untuk:

1) Menyembunyikan segala informasi tentang data daripada classes atau assemblies di luar daripada lingkungan code yang tidak berkaitan.
2) Melindungi data daripada di capai dan di manipulasi oleh classes atau assemblies yang tidak sepatutnya mendapat akses.

Inilah dua objektif utama dalam prinsip encapsulation. Tapi kenapa perlu di buat begini?
- Supaya data dapat di lindungi daripada sebarang kesilapan programming yang akan memberi kesan kepada data itu.
- Supaya kita dapat mengawal bagaimana data itu di manipulasi supaya tidak di modifikasi melalui cara yang tidak sepatutnya.

Dalam proses application development, kadang-kala kita tak perlu mendedahkan cara bagaimana kita mengimplementasi sesuatu method class itu, namun cukuplah sekadar method itu di panggil. Contohnya, dalam .Net ada method untuk Sort(), tapi tak perlu lah kita ketahui lebih lanjut bagaimana method Sort() yang kompleks itu menyusun senarai item dalam list kita. Tugas kita di limitkan hanyalah untuk memanggil method itu sahaja.

Ada beberapa cara untuk melakukan encapsulation dan salah satunya adalah dengan menggunakan Properties. Untuk pemahamam yang lebih mendalam, kita akan apply encapsulation dalam class Kereta yang telah dibuat dalam entri sebelum ini:

Lakukan sedikit modifikasi ke atas property Model, Warna dan Enjin seperti dibawah:


Tapi jikalau kita menggunakan code main program yang sama, kita akan mendapat 2 compilation error berpunca daripada encapsulation yang telah kita lakukan kepada property tadi.



Bagi error 1, oleh kerana kita telah set kan property Warna sebagai ReadOnly, dalam main program kita dah tak boleh mengubah value untuk property Warna itu lagi. Kita hanya dapat memaparkannya sahaja.

Bagi error 2, oleh kerana kita telah set kan property Enjin sebagai WriteOnly, dalam main program kita dah tak boleh memaparkan value Enjin itu lagi di mana kita hanya dapat mengubah value nya sahaja.


Di sini kita boleh lihat 2 objektif utama dalam prinsip encapsulation telah tercapai. Untuk membolehkan Main program kita boleh di compile semula, kita perlu buat sedikit perubahan seperti di bawah.


Dan inilah hasil nya..