So sánh abstract và interface trong php
Dùng Interface như một “bản thiết kế” của class? Đây là một điều thường được dùng để trả lời cho hai câu hỏi: Show
Xét ở một mức độ nào đó điều này là hợp lý, nhưng như đã nói ở phần trên, nó chỉ được dùng để mô tả một Một câu trả lời có thể lý giải phần nào câu hỏi thứ hai là việc cho phép định nghĩa thân phương thức trong các interface có thể khiến cho hiệu suất bị giảm sút. Nguyên nhân là việc tìm kiếm các phương thức sẽ diễn ra lâu hơn vì phải duyệt qua các interface, thay vì chỉ cần phải tìm trong class cha của nó. Về công dụng của Bảng so sánhCuối cùng, cũng nên liệt kê các điểm khác biệt giữa hai khái niệm này để bạn có thể sử dụng được khi cần thiết. Các điểm khác biệt này có thể khác nhau tùy vào ngôn ngữ mà bạn sử dụng. Vì vậy bạn chỉ cần nhớ các điểm căn bản sau: Lớp (Class) trong lập trình hướng đối tượng là một khuôn mẫu hoặc một bản thiết kế, mô hình mô phỏng các đối tượng. Đối tượng là các thể hiện của lớp, một đối tượng là một sự tượng trưng cho một thực thể, hoặc là thực thể tồn tại trong thế giới đời thực hoặc thực thể mang tính khái niệm. Một đối tượng có thể tượng trưng cho cái gì đó cụ thể. Ví dụ: một chiếc Mercedes Benz là một đối tượng thuộc lớp Car, một chiếc IphoneX là đối tượng thuộc lớp Mobile,… Các ngôn ngữ hướng đối tượng như Java, C#,… hỗ trợ khái niệm kế thừa. Kế thừa có nghĩa là một đối tượng có thể được thừa kế các hành vi và phương thức của lớp. Bất cứ khi nào bạn tạo đối tượng mới của một lớp, bạn nói rằng bạn đang khởi tạo nó. Lớp trừu tượng (Abstract Class)Là một lớp nhưng không thể tạo ra thực thể. Abstract class có thể chứa hoặc không chứa phương thức abstract – một phương thức chỉ có khai báo mà không chứa cài đặt. abstract class Cars { int gas; int getGas() { }
abstract void run();
}
class Merc extends Cars
{
void run()
{ }
}Giải thích: Trong phần đầu tiên của mã, khai báo một lớp trừu tượng Cars. Các phương thức của lớp trừu tượng Cars sẽ được kế thừa bởi các lớp con. InterfaceMột interface không phải là một lớp (class), giống như lớp trừu tượng. Nó chứa các phương thức mà không phần thân. Một interface không thể tự làm bất cứ điều gì. Interface như một khuôn mẫu. Với ngôn ngữ Java không hỗ trợ đa kế thừa nhưng có thể triển khai nhiều interface. interface Cars { }
class Merc implements Cars
{ }Giải thích: Chúng ta có thể thấy, các phương thức của interface không có phần thân, chỉ xác định kiểu dữ liệu trả về và tên phương thức, không giống như lớp trừu tượng mà chúng ta đã khai báo trước đó. Sự khác biệt giữa Abtract class và InterfaceMột interface chứa một tập hợp các phương thức. Một lớp implements interface phải triển khai các phương thức này. Một lớp trừu tượng, giống như một interface, sẽ chứa các phương thức. Tuy nhiên, sẽ có ít nhất một phương thức đã hoàn thành tức là phương thức có phần thân. Đây là một sự khác biệt chính giữa abstract class và interface. Trong bài này, chúng ta sẽ tìm hiểu về lớp trừu tượng (abstract class) và interface trong PHP. Để học tốt bài này, các bạn cần đọc lại bài để biết cách chạy ứng dụng web PHP với XAMPP. Một lớp trừu tượng (abstract class) là một lớp chứa ít nhất một phương thức abstract (abstract method). Một phương thức abstract là một phương thức chỉ được khai báo mà không có bất cứ dòng code nào trong thân phương thức. Access modifier của abstract method phải là public hoặc protected. Lưu ý: Abstract class có thể có những thuộc tính và phương thức bình thường khác. Khi một lớp con kế thừa một lớp trừu tượng, lớp con đó phải định nghĩa lại các phương thức trừu tượng của lớp cha mà nó kế thừa được. Trong PHP, một abstract class hoặc abstract method được định nghĩa với từ khóa abstract. Ví dụ:
Lưu ý: Nếu lớp con không định nghĩa lại phương thức abstract kế thừa được từ lớp cha thì chương trình sẽ báo lỗi. 2. Interface trong PHPTrong PHP, interface chỉ chứa khai báo của những phương thức không có bất cứ dòng code nào trong thân phương thức. Những lớp con thực thi (implement) một interface phải định nghĩa lại tất cả phương thức của interface mà nó kế thừa được. Khi nhiều lớp thực thi cùng một interface thì các lớp sẽ có những hàm cùng tên với nhau nhưng được thực thi khác nhau. Đó là một biểu hiện của tính đa hình (polymorphism) trong lập trình hướng đối tượng (Object-Oriented Programming). Trong PHP, một interface được khai báo với từ khóa interface.
Các lớp thực thi một interface bằng cách sử dụng từ khóa implements.
Trong ví dụ trên, các lớp Cat, Dog, Mouse thực thi interface Animal và định nghĩa lại hàm 3. So sánh giữa abstract class và interface trong PHPInterface và abstract class khá giống nhau nhưng chúng cũng có những điểm khác nhau. Các điểm khác nhau giữa interface và abstract class là:
Trong bài này, chúng ta đã tìm hiểu về interface và abstract class. Chúng có những điểm khác nhau nhất định. Các bạn cần lưu ý những điểm khác nhau này để lựa chọn sử dụng interface hoặc abstract class cho phù hợp. |