1. Lớp trừu tượng abstractNếu bạn đã từng học qua lập trình hướng đối tượng một ngôn ngữ bất kỳ khác như C++, Java thì abstract khá quen thuộc, và trong php đây cũng là một tính chất của lập trình hướng đối tượng nhưng nó không được xếp vào tính chất quan trọng, tính chất này giống như tính kế thừa theo tầm nhìn bề ngoài. Lớp Abstract sẽ định nghĩa các hàm (phương thức) mà từ đó các lớp con sẽ kế thừa nó và Overwrite lại (tính đa hình). Tất cả các phương thức của lớp abstract đều phải được khai báo là abstract và phải ở mức protected và public, không được ở mức private. Lớp Abstract có thể có thuộc tính nhưng thuộc tính không được khai báo là abstract, và bạn không thể khởi tạo một biến của lớp Abstract được. Show Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức. Để khai báo một lớp Abstract ta dùng cú pháp sau: abstract class BaseClass { // phương thức ở mức protected abstract protected function hello(); // Phương thức ở mức public abstract public function hi(); } Trong lớp Abstract các phương thức bạn khai báo ở dạng Abstract đều phải tuân theo cú pháp trên, tức là bạn không được định nghĩa thêm dòng lệnh nào bên trong nó. Như ví dụ dưới này là sai. abstract class BaseClass { // Phương thức này sai vì hàm hello là // hàm abstract nên không được code bên trong nó abstract protected function hello() { // dòng code echo 1; } } Như tôi nói ở trên bạn không thể tạo một biến đối tượng mới của lớp Abstract, như ví dụ dưới này là sai: abstract class BaseClass { abstract protected function hello(); } // Sai vì BaseClass là lớp Abstract nên không // khởi tạo mới được $base = new BaseClass(); Mức truy cập các hàm của Abstract phải ở public hoặc protected để lớp kế thừa có thể định nghĩa lại và các thuộc tính của lớp Abstract không được khai báo Abstract. Các bạn xem ví dụ dưới đây: abstract class BaseClass { // Đúng public $name; // Sai vì các thuộc tính không được để ở dạng abstract abstract public $title; // Đúng abstract protected function hello(); // Sai vì hàm abstract không thể ở private abstract private function hi_there(); } Lớp kế thừa từ lớp Abstracth phải Rewrite lại tất cả các hàm Abstract trong lớp Abstract, nếu không sẽ bị báo sai. Ví dụ: abstract class Person { protected $ten; protected $cmnd; protected $namsinh; abstract public function showInfo(); } // Lớp này sai vì chưa viết lại hàm showInfo class CongNhan extends Person { } // Lớp này đúng vì ta đã khai báo, viết lại // đầy đủ các hàm abstract class SinhVien extends Person { public function showInfo(){ } } 2. Hàm và lớp finalLớp Final là lớp được khai báo là lớp cuối cùng, không một lớp nào có thể kế thừa nó. Tương tự như hàm Final trong Abstract hoặc trong kế thừa chỉ để gọi sử dụng, không được viết lại (Override). Để dễ hình dung các bạn xem ví dụ sau đây và thông qua phần ghi chú tôi đã giải thích. // Lớp Filnal final class Person { protected $ten; protected $cmnd; protected $namsinh; public function showInfo() { echo 'freetuts.net'; } } // Hàm này sẽ bị báo lỗi vì lớp SinhVien // đã kế thừa một lớp Final, điều này là không thể class SinhVien extends Person { } // Đoạn code này đúng vì lớp Final được // sử dụng bình thường như các lớp khác // chỉ có điều là không được kế thừa $person = new Person; $person->showInfo(); Ví dụ hàm final: class Person { protected $ten; protected $cmnd; protected $namsinh; final public function showInfo() { echo 'freetuts.net'; } } // Lớp này đúng vì lớp Person không phải // là một lớp final class SinhVien extends Person { // Hàm này sai vì hàm showInfo // là hàm final trong lớp Person // nên không thể Override lại public function showInfo(){ } public function Go() { // Đoạn code này đúng vì hàm final được // sử dụng bình thường $this->showInfo(); } } 3. Lời kếtTrong bài này chúng ta đã tìm hiểu được thế nào là lớp Abstract (lớp trừu tượng) và từ khóa Final trong php. Qua bài này tôi hy vọng các bạn hiểu được bốn tính chất của lập trình hướng đối tượng mà bất kỳ một ngôn ngữ nào khác đều phải tuân theo quy luật này. Nếu bạn thấy một ngôn ngữ nào mà không có đầy đủ bốn tính chất này thì ngôn ngữ đó không phải là ngôn ngữ có hỗ trợ lập trình hướng đối tượng (như Javascript). Bài tiếp theo chúng ta sẽ tìm hiểu Interface Trong PHP Lập trình hướng đối tượng (oop) hiện nay đang là một kĩ thuật rất quang trọng cho dân lập trình, không chỉ riêng ngôn ngữ php mà còn áp dụng cho rất nhiều ngôn ngữ khác, bài viết sau đây sẽ giúp chúng ta biết tổng qua được hướng đối tượng là gì và những tính chất của nó. Hướng đối tượng là gì đây là một kỹ thuật lập trình cho phép lập trình viên tạo ra các đối tượng trong code trừu tượng hóa các đối tượng thực tế trong cuộc sống. Hướng tiếp cận này hiện đang rất thành công và đã trở thành một trong những khuôn mẫu phát triển phần mềm, đặc biệt là các phần mềm cho doanh nghiệp. 4 Tính chất của hướng đối tượngHọc Tiếng Anh với Thầy giáo Nổi tiếng Việt Nam và thế giới, Chuẩn Quốc Tế, Giá Rẻ, Click Ngay Học Tiếng Anh với Thầy giáo Nổi tiếng Việt Nam và thế giới, Chuẩn Quốc Tế, Giá Rẻ, Click
Ngay Tính thừa kế:Lớp cha có thể chia sẻ dữ liệu và phương thức cho các lớp con, các lớp con khỏi phải định nghĩa lại những logic chung, giúp chương trình ngắn gọn. Nếu lớp cha là interface, thì lớp con sẽ di truyền những contract trừu tượng từ lớp cha. Để hiểu rõ hơn về tính kế thừa trong PHP bạn có thể tham khảo bài viết TÍNH KẾ THỪA TRONG PHP Tính đóng gói (encapsulation):
- Public: Đây là mức truy cập thoáng nhất bởi vì bạn có thể truy cập tới các phương thức và thuộc tính ở bất cứ đâu, dù trong nộ bộ của lớp hay ở lớp con hay cả bên ngoài lớp đều được. - Protected: chỉ cho phép truy xuất nội bộ trong lớp đó và lớp kế thừa, riêng ở bên ngoài lớp sẽ không truy xuất đc - Private: Đây là thành phần chỉ dành riêng cho nội
bộ của lớp, nghĩa là ta không thể truy xuất tới thành phần private ở lớp con hoặc ở bên ngoài lớp. Tính trừu tượng (abstraction):
Để hiểu hơn về tính từu tượng, các bạn có thể tham khảo bài viết so sánh Abstract Class và Interface Tính đa hình (polymorphism):Có thể thực hiện nhiều nhiệm vụ khác nhau, có thể tùy biến khi sử dụng cùng một đoạn code
xem thêm bài viết: phân biệt lớp và đối tượng trong lập trình hướng đối tượng với php Bài viết này chỉ giới thiệu sơ qua về hướng đối tượng và những tính chất của nó, mạng nặng tính lý thuyết, vì thời gian có hạn nên chúng tôi sẽ cung cấp những ví dụ cụ thể và chi tiết hơn trong những phần tiếp theo, mời độc giả đón đọc Bài viết này được lấy nguồn tham khảo từ viblo.asia:https://viblo.asia/p/tim-hieu-ve-lap-trinh-huong-doi-tuong-object-oriented-programming-bxjvZwlBGJZ và freetuts.net: https://viblo.asia/p/4-tinh-chat-cua-lap-trinh-huong-doi-tuong-trong-java-bJzKmMjPK9N trong một sô đoạn văn |