[OOP]: Phân tích và tìm hiểu về mô hình trừu tượng
Sau loạt bài về kiến thức cơ bản như tìm hiểu khái niệm, phương thức magic, sự kế thừa, các quy tắc chung. Trong bài này, chúng ta sẽ tiếp tục mở rộng các kiến thức trong lập trình hướng đối tượng. Cụ thể, chúng ta sẽ cùng phân tích và tím hiểu về mô hình trừu tượng trong hướng đối tượng.
1 2 3 4 5 |
<?php abstract class ABC{ abstract function test(); } ?> |
Lúc này có thể hiểu rằng, lớp ABC được gọi là lớp trừu tượng và phương thức test() được gọi là phương thức trừu tượng.
Khi đó, một lớp muốn sử dụng lớp trừu tượng, ta sẽ có cú pháp extends để kế thừa.
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php abstract class ABC{ abstract function test(); } class BCD extends ABC{ public function test(){ //Thực thi mã lệnh } } ?> |
Sự trừu tượng có thể được hiểu đơn giản như sau:
Giả sử, kiến trúc để xây dựng 1 chiếc xe sẽ bao gồm: Bánh xe, yên xe, thắng.
Như vậy, những mô hình xe máy, xe đạp, xe hơi cũng được gọi là xe khi chúng thỏa mãn những yếu tố mà kiến trúc một chiếc xe quy định.
![[OOP]: Phân tích và tìm hiểu về mô hình trừu tượng oop 04 [OOP]: Phân tích và tìm hiểu về mô hình trừu tượng](/images/post/2014/01/28/17//oop_04.jpg)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php abstract class employee{ protected $empname; protected $empage; public function setdata($empname,$empage){ $this->empname = $empname; $this->empage = $empage; } abstract function outputData(); } class EmployeeData extends employee{ public function __construct($name,$age){ $this->setdata($name,$age); } function outputData(){ echo $this->empname; echo $this->empage; } } $a = new EmployeeData("Hitesh","24"); $a->outputData(); ?> |
Giao diện trong hướng đối tượng.
Một khái niệm nữa được đưa vào mô hình hướng đối tượng là Giao diện. Giao diện cũng mang nguyên tắc của mô hình trừu tượng. Nhưng điểm khác biệt ở đây là với giao diện, chúng ta có thể cho phép một lớp sử dụng linh động giữa một hoặc nhiều giao diện cùng lúc.
1 2 3 4 5 6 7 8 |
<?php interface animal{ function sound(); } interface benefits{ function protect() } ?> |
Và để một lớp sử dụng một hoặc nhiều giao diện ta sẽ có:
1 2 3 4 5 6 7 8 9 10 |
<?php class ABC implements animal, benefits{ public function sound(){ //Thực thi mã lệnh } public function protect(){ //Thực thi mã lệnh } } ?> |
Có thể hiểu một cách đơn giản rằng, giao diện đem lại sự tùy chọn đầy đủ hơn. Nó cho phép, một lớp có thể dùng một hoặc nhiều giao diện cùng lúc. Và khi đã sử dụng, thì lớp đó phải định nghĩa các phương thức thuộc giao diện đó giống với ví dụ ở trên là lớp ABC đã phải định nghĩa 2 phương thức là sound() và protect().
Không giống như lớp trừu tượng, giao diện chỉ có thể chứa tên các phương thức. Ngoài ra nó không thể định nghĩa các phương thức hoặc chứa các thuộc tính bình thường như một lớp trừu tượng được.
Và dĩ nhiên một lớp vẫn có thể vừa kế thừa và vừa sử dụng giao diện được. Ví dụ sau sẽ thể hiện điều đó:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php interface water{ public function makeItWet(); } class weather{ public function start(){ return 'Here is some weather'; } } class rain extends weather implements water{ public function makeItWet(){ return 'It is wet'; } } $a = new rain(); echo $a->start(); echo $a->makeItWet() ?> |
(Bùi Quốc Huy)
Leave a Reply