Abstract class là gì? Phân biệt Abstract class và Interface

Abstraction của OOP bật mý những đặc tính mang tính thiết yếu, giấu đi thông tin không quan trọng. Abstraction chỉ hoàn toàn có thể đạt được khi bạn trải qua Abstract Class. Các bạn hãy cùng tìm hiểu và khám phá Abstract Class là gì nhé .
Chắc hẳn là mọi lập trình viên lúc bấy giờ đều đã quá quen với lập trình hướng đối tượng người tiêu dùng, nhưng với Abstract Class và Interface thì bạn có thực sự hiểu chúng ? Abstract class là gì ? Phân biệt Abstract Class và Interface như thế nào ? Rất nhiều người trong số tất cả chúng ta đã sử dụng chúng nhiều nhưng lại chưa thực sự hiểu thực chất, tất cả chúng ta cùng nhau tìm hiểu và khám phá rõ hơn để hoàn toàn có thể phân biệt Abstract Class và Interface và hoàn toàn có thể ứng dụng chúng tốt hơn nhé .

I. Abstract class là gì?

Abstract Class là gì ? Nó có nghĩa là một lớp trừu tượng. Abstract Class là một loại lớp trong OOP, còn được biết đến là lập trình hướng đối tượng người dùng. Abstract Class khai báo cho một hay nhiều method trừu tượng cùng một lúc. Chúng hoàn toàn có thể có riêng hoặc có cả method trừu tượng và method đơn cử. Một lớp thông thường thì sẽ không hề có method trừu tượng. Điều này có nghĩa rằng một abstract class bắt buộc phải chứa tối thiểu một method trừu tượng. Có 2 loại method gồm có abstract method và method thường :

  • abstract method là method trống không có khả năng thực thi.
  • method thường là method có khả năng thực thi.

Không thể khởi tạo mọi loại đối tượng của abstract class và hơn hết là không hỗ trợ đa kế thừa. Phương thức abstract của abstract class sẽ không được phép khai báo về nội dung phương thức. Nó chỉ có thể là những định nghĩa tên cũng như các tham số đầu vào.

Abstract class là gì?

Abstract class là gì ?

Mức truy cập của các hàm của abstract phải ở chế độ public hoặc protected để lớp kế thừa sau có thể định nghĩa lại và các thuộc tính của lớp abstract sẽ không được khai báo abstract. Ví dụ như: khai báo 1 abstract class. 
Một Abstract Class không thể tạo ra trưđối tượng nhưng nó có thể bao gồm lớp con. Khi một lớp trừu tượng mà bao gồm các lớp con, lớp con sẽ thường cung cấp triển khai cụ thể cho tất cả các method trừu tượng của lớp cha trước đó. Ngoài ra, lớp trừu tượng này có thể có trường động và trường tĩnh. Tuy nhiên, nếu lớp con không thực hiện triển khai cho lớp cha, nó cũng sẽ là một lớp trừu tượng tiếp theo.

II. Interface là gì? 

Interface là một Template (khuôn mẫu) cố định, nó không phải là một lớp đối tượng nào hết. Để khai báo một Interface ta sẽ dùng từ khóa interface để thay thế cho từ khóa class. Hầu như tất cả các hàm trong interface đều sẽ ở dạng khai báo và không được định nghĩa (giống lớp abstract). Đây chính là cấu trúc trong OOP cho phép các class khác có thể implements với nhau. Một đối tượng implement một interface thì nó sẽ phải khai báo và định nghĩa lại tất cả các hàm trong Interface. Interface là dạng không thể khởi tạo. Phương thức trong Interface là bắt buộc toàn bộ các phương thức trừu tượng. Các phương thức trong Interface này chỉ có thể được định nghĩa cụ thể với khả năng là public và cũng không được định nghĩa chính xác nội dung. Interface có thể được extends từng thời điểm với nhau.
1 class có thể implements ra nhiều Interface. Ví dụ như:     

III. Phân biệt Abstract class và Interface 

Mục đích chính của đối tượng người tiêu dùng là nhằm mục đích tổ chức triển khai một mạng lưới hệ thống mã nguồn tốt hơn, mã nguồn có năng lực tái sử dụng và làm cho lập trình giống như việc tổ chức triển khai quản những đối tượng người dùng trên quốc tế thực. Người ta “ đẻ ” ra những khái niệm về Class, abstract class, interface, inner class nhằm mục đích Giao hàng cho mục tiêu to lớn này. Sau đây là những nghiên cứu và phân tích rõ hơn để mọi người hoàn toàn có thể phân biệt Abstract Class và Interface .

Abstract class

Giả sử bạn có hai lớp đó là ConNguoi và ConCho, và bạn có một thuộc tính là viTri. Cả hai lớp này thì đều có một hàm là thaydoiViTri, nó nhận vào một tọa độ và update tọa độ mới trực tiếp cho hai đối tượng người tiêu dùng thuộc hai lớp này. Như vậy bạn cần phải viết hai được đoạn mã nguồn giống nhau cho hai lớp khác nhau .Vậy thì có cách nào tái sử dụng đoạn mã nguồn này thuận tiện không ? Bạn hoàn toàn có thể tạo một lớp cha của cả hai lớp này đó là lớp DongVat, setup phương pháp thaydoiViTri cho nó. Nhưng điều này sẽ lại gây ra một yếu tố đó là khi có một người khác sử dụng thư viện do bạn viết ra, người ta cũng hoàn toàn có thể tạo một đối tượng người dùng khác của lớp ĐộngVật mà thực tiễn, đối tượng người tiêu dùng đó lại không có ý nghĩa và sẽ làm sai hoạt động giải trí của hàng loạt thư viện bạn viết ra .Lúc đó người ta sẽ lại nghĩ ra khái niệm abstract class, là một lớp nhưng lại không hề tạo ra thực thể. Về mặt kỹ thuật thì abstract class hoàn toàn có thể chứa hoặc là không chứa phương pháp abstract – một phương pháp chỉ hoàn toàn có thể khai báo mà không chứa mục thiết lập .

Interface

Ở C++ sẽ không tồn tại khái niệm interface chuyên về mặt kỹ thuật, nhưng ở java thì lại có, nguyên nhân thì chúng ta tạm thời bỏ qua nhưng bạn có thể tìm hiểu kĩ hơn để hiểu rõ hơn về interface. Interface nó giống như một hợp đồng, nói rằng những lớp nào implement interface này phải thực hiện được những hàm được khai báo trong interface đó.
Lấy tiếp ví dụ ở trên. Giả sử ở đâu đó nơi mà bạn có một hàm thay đổi vị trí cho một object nào đó. Bạn có thể viết hàm thay đổi vị trí cho Người, cho Động Vật, cho Con Chó, nhưng giả sử có thêm một lớp nữa là lốp Xe thì sao? Có cách nào để có thể biết được một đối tượng bất kỳ có thể di chuyển được không? Khi đó, bạn có thể tạo ra một interface bất kì tên là Movable, và yêu cầu bất kỳ lớp nào implement phương thức này thì sẽ đều phải cài đặt một phương thức đó là thaydoiViTri.

Inner class

Inner Class, là một lớp mà ở đó bạn chỉ sử dụng bên trong một lớp hay một phương pháp hay một đoạn chương trình, tiềm năng chính là làm cho việc tổ chức triển khai mã nguồn rõ ràng hơn. Inner class có rất nhiều loại, thường thì inner class được dùng để xử lý sự kiện, viết giải quyết và xử lý cho multithreaded job v.v … Mình mới chỉ xài những cái đó, còn ứng dụng khác thì mình không rõ lắm .

1. Sự giống nhau cơ bản giữa Abstract class và Interface   

Không thể tạo ra một biến giống kiểu interface hoặc abstract class.
Nếu đó là phương thức abstract thì chắc chắn phải được khai báo lại trong class con.
Cả interface và abstract class đều có tính chất kế thừa.

2. Sự khác nhau cơ bản giữa Abstract class và Interface

Tất cả phương thức mà có trong interface luôn luôn(được hiểu) là abstract.
Các phương thức có trong abstract class sẽ là abstract hoặc không phải là abstract.
Có thể implements nhiều interface nhưng chúng sẽ không thể extends trực tiếp với nhiều class.
Các phương thức có trong interface sẽ luôn luôn phải để là public, khác với abstract class bạn có thể để là public, private hoặc protected.

III.  Sử dụng Abstract class và Interface

Abstract Class tương tự như với Interface. Bạn đều không hề tạo ra đối tượng người tiêu dùng riêng cho chúng. Chúng đều hoàn toàn có thể chứa những method được khai báo rõ ràng có hoặc không có tiến hành. Tuy nhiên, với Abstract Class thì bạn lại hoàn toàn có thể khai báo những trường không tĩnh. Bạn cũng hoàn toàn có thể tự xác lập những method mà công khai minh bạch hay method được bảo vệ và method đơn cử riêng tư .

Hướng dẫn sử dụng Abstract class và interface

Hướng dẫn sử dụng Abstract class và interfaceVới Interface, những trường đều được tự động hóa là công khai minh bạch và tĩnh. Các method bạn sẽ khai báo hay định nghĩa thì ( là những method mặc định ) đều là công khai minh bạch. Ngoài ra, bạn chỉ hoàn toàn có thể extend một lớp một, mặc dầu lớp đó có trừu tượng hay không. Ngoài ra thì bạn lại hoàn toàn có thể tiến hành một cách không số lượng giới hạn số lượng Interface .

  • Interface : Khi bạn muốn tạo dựng một bộ khung chuẩn nào đó bao gồm các chức năng mà những module hay project luôn cần. Giống như là sau khi nhận requirement của khách hàng về team thì sau đó team sẽ ngồi với nhau và phân tích các đầu mục các tính năng của từng module, tiếp theo đó triển khai vào code viết các interface như đã phân tích ở trên, để các bạn dev sau có thể nhìn vào đó để thực hiện đầy đủ các tính năng (khi đã implement rồi thì không sót một tính năng nào ^^).
  • Abstract class: Giống như demo trên bạn có thể hiểu rằng là khi định nghĩa một đối tượng có những chức năng như A,B,C trong đó tính năng A,B chắc chắn sẽ được thực thi theo cách nào đó, còn tính năng C phải phụ thuộc vào những đối tượng cụ thể là gì, như đối tượng Dog, Cat tuy chúng đều có điểm chung là có thể phát ra âm thanh nhưng những âm thanh đó là khác nhau. Vì vậy method Speak() là abstract method chỉ để nhận định ra rằng tính năng này còn dang dở chưa rõ khi nào thực thi, các lớp extend sẽ phải hoàn thành nốt tính năng này, còn những tính năng khác đã hoàn thành thì vẫn sẽ sử dụng như bình thường đây là những tính năng chung

IV.  Ví dụ về Abstract class   

1. Trường hợp nên dùng Abstract class

Trong một ứng dụng khác về vẽ hướng đối tượng người tiêu dùng, bạn hoàn toàn có thể vẽ hình tròn trụ, hình vuông vắn, hình chữ nhật, đường kẻ hay đường cong Bezier … Những đối tượng người tiêu dùng này này đều có những đặc thù chung nhất định ( như vị trí, khuynh hướng, kiểm soát và điều chỉnh màu đường viền, màu trong ) và những hành vi đơn cử ( như vận động và di chuyển, quay, xoay, kiểm soát và điều chỉnh kích cỡ, vẽ ). Một vài đặc thù và hành vi của những đối tượng người dùng này sẽ là giống nhau ( như vị trí, màu viền hay vận động và di chuyển ). Số khác sẽ nhu yếu những tiến hành khác nhau như kiểm soát và điều chỉnh size, tỉ lệ hay vẽ. Tất cả những GraphicObject phải có năng lực vẽ thậm chí còn là kiểm soát và điều chỉnh size của nó, chỉ khác nhau ở cách chúng triển khai việc đó như thế nào .

Sử dụng Abstract class

Đây là một trường hợp hoàn hảo để chúng ta sử dụng lớp cha là Abstract Class. Bạn có thể tận dụng hết những điểm giống nhau và khai báo các đối tượng này đều kế thừa từ đối tượng cha là GraphicObject. Mô hình dưới đây sẽ thể hiện rõ ràng về mối liên hệ này:

Đầu tiên, bạn sẽ khai báo một Abstract Class, ở đây tất cả chúng ta thấy chính là GraphicObject, để cung ứng những biến thành viên và những method được sử dụng ở đó bởi tổng thể những lớp con. Đó hoàn toàn có thể là vị trí hiện tại cho method moveTo. GraphicObject cũng phải khai báo đơn cử với những method trừu tượng cho phần method, ví dụ như draw hay resize để hoàn toàn có thể tiến hành những lớp con. Tuy nhiên những method này phải được tiến hành một cách khác nhau. Lớp cha GraphicObject trông như sau :Mỗi lớp con không trừu tượng của GraphicObject, như Circle và Rectangle, phải phân phối tiến hành cho những method draw và resize :

V.  Kết luận 

Vậy qua bài viết trên của 123job.vn bạn đã hiểu Abstract class là gì chưa ? Đó là hàng loạt những hiểu biết, thông tin của chúng mình về abstract class và interface trong php để giúp bạn đọc hiểu biết được Abstract class là gì. Qua đó sẽ giúp những bạn phân biệt Abstract Class và Interface Kiến thức mình cũng hạn chế có gì sai sót mong những bạn comment góp phần để chúng mình chỉnh sửa sớm nhất hoàn toàn có thể. Cảm ơn mọi người đã theo dõi !