Tulisan ini diterjemahkan dari artikel yang berjudul “Class Abstraction in PHP” oleh Dave Smith [phpclasses.org], dengan seijin dari penulis. Ketika anda sudah siap untuk berbagi kode anda untuk digunakan oleh developer lain, anda akan perlu mengontrol bagaimana kode itu digunakan dan memberikan cara agar bisa dikembangkan. PengenalanPada tutorial ini saya anggap anda sudah mengetahui dengan baik tentang class inheritance (Pewarisan Kelas), visibility (Visibilitas) and instantiation. Anda bisa melihat artikel sebelumnya. Perlu dicatat bahwa contoh yang ada di dalam tutorial ini masih belum lengkap dan disediakan hanya untuk menggambarkan konsep. Apakah Kelas Abstraksi itu?Kelas Abstraksi adalah merupakan suatu cara untuk kelas melakukan pengembangan dari kelas lainnya dalam mengimplementasikan suatu method tertentu. Kelas utama / Parent Class kita sebut “Abstract Class” dan child class kita sebut dengan “concrete class”, dan method dari concrete class yang diimplementasikan disebut “Abstract Methods”. Beberapa Hal Penting yang perlu diingat
Contoh berikut menggambarkan bagaimana hal ini bekerja. Abstraksi Sebagai TemplateJenis pertama dari kelas abstrak kita sebut sebagai template. Template hanya berisi abstract methods. Kelas abstrak sebagai template sangat bermanfaat ketika kamu ingin mengatur sesuatu yang spesifik pada setiap kelas concrete, memastikan keseragaman model. abstract class theBoss { abstract protected function showWork($project); } Seperti kita lihat, ini adalah sebuah kelas abstrak dengan nama theBoss dan memiliki sebuah method abstrak yaitu showWork. Method showWork memiliki sebuah properti, $project yang kita sebut sebagai method signature. Kelas ConcreteSekarang mari kita kembangkan kelas abstrak theBoss melalui sebuah kelas concrete. class theEmployee extends theBoss { public function showWork( $project = 'Nothing' ) { $work = 'I am working on '.$project; return $work; } public function startWork($project) { return $this->showWork($project); } } Disini kita memiliki kelas theEmployee yang merupakan pengembangan dari kelas theBoss. Kelas ini telah melakukan tugasnya dan menjalankan method showWork dengan method signature yang cocok. class theContractor extends theEmployee { public function showWork( $project, $employeeName='' ) { $work = empty($employeeName) ? 'I am working on ' . $project : $employeeName . ' has me working on '.$project; return $work; } Disini kita memiliki kelas theContractor pengembangan dari kelas theEmployee yang dikembangkan dari kelas theBoss. kelas ini juga telah melaksanakan tugasnya dan menjalankan method showWork dengan ciri yang sama (matching signature). Abstraksi sebagai implementasi parsialIni adalah jenis kedua dari kelas abstract yang akan kita sebut sebagai implementasi parsial / partial implementation. Sebuah partial implementation sepenuhnya berisi implemented methods, disebut common methods, bersama dengan abstract methods. Kelas abstract sebagai partial implementation dapat jauh lebih berguna daripada hanya sebagai template. abstract class theBoss { abstract protected function showWork( $project ); final public function assignWork( $employee, $project) { $assigned = $employee . ' will be working on ' . $project; return $assigned; } } Bisa anda lihat, theBoss telah diimplementasikan sebagai method biasa (common method), assignWork diwarisi oleh semua kelas concrete. dengan menambahkan kata kunci final pada method sehingga tidak ada kelas concrete yang mengimplementasikannya berbeda. Dapatkah kelas properti menjadi Abstrak?Jawaban yang sederhana adalah tidak. Tidak perlu untuk kelas properti menjadi abstrak. Properti kelas dan konstanta tidak diimplementasikan, sebaliknya mereka dinyatakan(declare), yang dengan cara itu yang sudah membuat mereka abstrak. Mereka mengikuti aturan yang sama dan diperlakukan dengan cara yang sama ketika diyatakan(deklarasikan) dalam sebuah kelas abstrak. KesimpulanKelas abstraksi berguna setiap kali Anda ingin menyediakan implementasi umum di objek serupa. Ini adalah roadmap untuk bagaimana benda serupa diciptakan sehingga mereka dapat memanfaatkan setiap metode umum sambil memberikan fleksibilitas untuk menerapkan metode abstrak yang paling sesuai dengan kebutuhan objek. |