Interface là gì? Interface trong PHP hướng đối tượng và Java

Em đang tìm hiểu về Interface. Em được biết thuật ngữ này được sử dụng phổ biến trong Java và PHP hướng đối tượng. 
Vậy có anh chị nào am hiểu về Interface không? Giúp em nó trả lời câu hỏi Interface là gì và Interface trong PHP hướng đối tượng và Java là như thế nào?
Em đa tạ trước.

Interface là gì


 

Interface là gì?

Interface là một thuật ngữ được sử dụng trong lập trình web. Nhưng nó thường được biết đến trong hai lập trình web trong PHP hướng đối tượng và Java.

+ Trong PHP hướng đối tượng, Interface được dịch sang tiếng Việt có nghĩa là giao thức hay giao diện. Nó là một phương tiện được sử dụng phổ biến nhằm hỗ trợ các đối tượng không liên quan giao tiếp và tương tác với nhau. Đây là một trong những định nghĩa về giá trị và phương thức mà các đối tượng đều đồng ý để hợp tác với nhau.
+ Trong Java – một ngôn ngữ lập trình hướng đối tượng và dựa trên các lớp (class), Interface được biết đến với vai trò là một bản thiết kế của một lớp có trong Java. Interface chỉ chứa những phương thức trừu tượng. Nó chính là một kỹ thuật để thu được tính trừu tượng hoàn toàn và đa kế thừa trong Java. Đồng thời nó hỗ trợ biểu diễn mối quan hệ IS-A, nó không thể được khởi tạo giống như lớp trừu tượng.

interface là gì

Interface và Abstract khác nhau như thế nào trong lập trình hướng đối tượng?

Interface và Abstract là hai khái niệm cơ bản nhất có trong lập trình OOP – Object Oriented Programming (Lập trình hướng đối tượng). Tuy nhiên, nhiều người vẫn không trách được việc nhầm lẫn và mơ hồ giữa hai khái niệm này. Dưới đây sẽ là một số so sánh và phân biệt giữa Interface và Abstract.

Khái niệm cơ bản. 

Như đã nói ở trên, Interface là một chức năng mà bạn có thể thêm vào bất cứ class nào. Interface có thể chứa đựng nhiều phương thức/hàm và tất cả phương thức/hàm đó cùng phụ thuộc vào một chức năng.
Còn Abstract class là một class cha của tất cả các class có bản chất giống nhau. Bản chất được xét tới ở Abstract class là nhiệm vụ, loại và kiểu của class. Nếu như 2 class hoàn toàn khác nhau về bản chất đều có thể cùng nhau thực hiện một Interface, nhưng để thực hiện một Abstract class thì tất cả các con phải có bản chất giống nó.

Công dụng 

Nếu bạn muốn tạo ra một bản thiết kế tổng thể nhất thì bạn nên chọn Abstract Class. Bởi vì, một bản thiết kế tổng thể chắc chắn sẽ chứa đựng những thứ đã được dựng sẵn và có những thứ mang tên Abstract. Ngoài ra, Abstract class cũng rất hữu hiệu nếu bạn muốn có thể biểu thị những  phần tử không public. Ngoài ra, Abstract Class còn là phương án tốt khi bạn cần thêm Method trong tương lai.
Nếu bạn muốn thực hiện một việc giống như cài thêm Plugin (Plugin là một bộ phần mềm hỗ trợ có thêm những tính năng cụ thể cho một phần mềm ứng dụng lớn hơn) cho một phần mềm nào đó, bạn hãy dùng Interface. Bởi lẽ thực tế các Interface có thể được hiểu giống như các Plugin hoặc thư viện hay phần mềm.

Ngoài ra, Interface và Abstract còn có những điểm khác biệt căn bản sau đây:

+ Default Implementation. Ở Interface không thể định nghĩa được code xử lý mà chỉ có thể khai báo mà thôi. Nhưng Abstract Class lại có thể định nghĩa được thân phương thức, property.
+ Multiple Inheritance. Ở Interface, một class có thể thực hiện nhiều Interface. Còn Abstract Class không hỗ trợ đa thiết kế.
+ Access Modifier. Mọi phương thức và property đều ở dạng mặc định là Public trên Interface, còn ở Abstract Class, nó có thể xác định Modifier.
+ Adding Functionality. Tất cả những phương thức và properry có trong Interface cần thực được thực hiện trong class. Còn ở trong Abstract Class, điều này là không cần thiết.
+ Fields and Constants. Interface không có, còn Abstract class thì có.

interface là gì

Interface được khai báo trong Java như thế nào?

Một Interface là một nguồn tin được khai báo với từ khóa Interface chứ không phải là class.
Bạn cần định hình được rằng, khi bạn tạo một Interface chính là bạn đang định nghĩa những gì mà class chỉ có thể làm chứ không thể nói đến nó đang làm như thế nào.
Ví dụ. Bạn đang thực hiện định nghĩa Interface People Action thông qua các hoạt động như Study (), Work ().. Khi đó, class Student và Employee thực hiện cài đặt lại Interface People Action. Điều này có nghĩa là cả 2 class Student và Employee có thể và bắt buộc phải cài đặt lại Study() và Work(). Còn việc cài đặt như thế nào thì phụ thuộc vào các cách cài đặt khác nhau của mỗi class.
+ Một class có thể cài đặt nhiều Interface.
+ Một Interface có thể mở rộng thêm nhiều Interface khác.
+ Bạn không thể sử dụng từ khóa cuối cùng khi khai báo Interface, nguyên nhân do Interface sinh ra để những đứa khác kế thừa.
+ Các phương thức trong Interface không thể khai báo với từ khóa “Static”.
+ Mọi phương thức trong Interface đều được ngầm hiểu là Public Abstract. Từ Java 8 đã cho phép thêm phương thức Method chứ không phải là Abstract  Interface thông qua từ khóa Default. Còn từ Java 9, nó cho phép Method Private và Private Static vào Interface.
+ Do các phương thức trong Interface là Abstract, nên nó cũng không thể thực hiện khai báo với từ khóa “Final”, “Strictfp” hay “native”.
+ Các “Public Static Final” được ngầm hiểu là tất cả các biến trong Interface.

Vậy khai báo hằng số trong Interface là như thế nào?

Khai báo hằng số trong Interface có nghĩa là khai báo các hằng số bên trong một Interface. Bằng cách này, bạn có thể đảm bảo được rằng các class cùng kế thừa Interface sẽ cùng truy cập vào 1 hằng số giống nhau.
Ví dụ :
Public Interface Common { int MAX_CONNECTION = 100;  // tương đương với Public Static Final int MAX_CONNECTION = 100;}
Nếu bạn cần sử dụng hằng số MAX_CONNECTION , bạn chỉ cần chọn COMMON.MAX_CONNECTION
Thật ra, việc khai báo hằng số trong Interface có một lợi thế hơn rất nhiều so với việc khai báo hằng số trong class. Nguyên nhân là trong Interface, tất cả các biến đều được ngầm hiểu là Public Static Final. Khi đó, nó chắc chắn là hằng số và giá trị của nó sẽ không bị thay đổi.

Hy vọng bài viết này đem tới cho bạn nhiều thông tin về Interface và Interface trong lập trình PHP hướng đối tượng và Java.