Thursday 3 July 2014

Prinsip utama OOP : Abstraction

Entri sebelum ini kita telah belajar tentang Encapsulation. Dalam entri kali ini pula kita akan belajar mengenai Abstraction yang mana mempunyai persamaan dengan encapsulation dari segi objektifnya akan tetapi sebenarnya adalah dua konsep yang berbeza.

Secara umumnya,  Abstraction adalah satu cara untuk menunjukkan data yang relevan atau diperlukan sahaja kepada pengguna yang berkaitan.

Data yang tidak relevan pula akan di sembunyikan atau di hadkan capaiannya dengan menggunakan access modifiers atau dengan menggunakan abstract class / interface.

Nampak macam sama dengan encapsulation yang mana objektifnya juga adalah untuk menyembunyikan data dan menghadkan capaian. Tapi di mana kah perbezaan nya?


Abstraction
Encapsulation
Menyembunyikan data yang tidak relevan / tidak diperlukan
Menyembunyikan kompleksiti
Di applikasikan semasa proses design
Di applikasikan semasa proses implementasi
Perbezaan Abstraction dan Encapsulation


Untuk lebih memahami perbezaan ini, kita akan lihat applikasi abstraction dan encapsulation dalam class Kereta yang telah di bangunkan sebelum ini.


Contoh kod di bawah menunjukkan prinsip Abstraction telah di applikasi semasa proses design. Di sini kita tetapkan data warna sebagai private dan property Warna hanya boleh di capai dan di baca tetapi tidak boleh di ubah data nya.



Kemudian, kita lakukan modifikasi pada method Drive() untuk memaparkan model dan warna kereta.



Dalam class Program, kita akan mengimplementasi abstraction yang telah di applikasikan semasa dalam proses design tadi.

Disini, kita telah menyembunyikan data yang tidak relevan iaitu data Warna daripada class Program dan kita hanyalah perlu meng set kan data untuk entiti Model sahaja. 

Kemudian kita mengimplementasi method Drive( ) pula yang mana class Program tidak perlu tahu akan kompleksiti nya dan cara method Drive() ini menjalankan kerjanya. Di sini lah berlakunya proses encapsulation.



Kesimpulannya, apa yang class Program perlukan hanyalah value untuk entiti Model  dan implementasi method Drive() untuk mendapatkan hasil paparan seperti di bawah:



Mudah bukan?