Abstract Class là gì? Công cụ để đạt được Abstraction

Abstraction của OOP tiết lộ những đặc tính cần thiết, giấu đi thông tin không quan trọng. Abstraction chỉ có thể đạt được thông qua Abstract Class. Hãy cùng tìm hiểu Abstract Class là gì nhé. 

1. Abstract Class là gì?

Abstract Class có nghĩa là một lớp trừu tượng. Abstract Class là một loại lớp trong OOP – Lập trình hướng đối tượng. Abstract Class khai báo một hay nhiều method trừu tượng. Chúng có thể có cả method trừu tượng và method cụ thể. Một lớp bình thường không thể có method trừu tượng. Điều này có nghĩa là một abstract class phải chứa ít nhất một method trừu tượng. 

abstract class là một lớp trừu tượng

Một method trừu tượng là một method được khai báo không có triển khai (không có dấu ngoặc nhọn và kết thúc là một dấu chấm phẩy).

Một Abstract Class không thể tạo đối tượng nhưng có thể bao gồm lớp con. Khi một lớp trừu tượng bao gồm các lớp con, lớp con thường cung cấp triển khai cho tất cả các method trừu tượng của lớp cha. Ngoài ra, lớp trừu tượng có thể có trường động và trường tĩnh. Tuy nhiên, nếu lớp con không triển khai cho lớp cha, nó cũng sẽ là một lớp trừu tượng.

2. Abstract Class và Interface 

Abstract Class giống với Interface. Bạn đều không thể tạo đối tượng cho chúng. Chúng đều có thể chứa các method được khai báo có hoặc không có triển khai. Tuy nhiên, với Abstract Class, bạn có thể khai báo những trường không tĩnh. Bạn cũng có thể xác định các method công khai, method được bảo vệ và method cụ thể riêng tư. 

Với Interface, các trường đều tự động là công khai và tĩnh. Các method bạn khai báo hay định nghĩa (là những method mặc định) đều là công khai. Ngoài ra, bạn chỉ có thể extend một lớp, dù lớp đó có trừu tượng hay không. Nhưng bạn lại có thể triển khai không giới hạn số lượng Interface. 

3. Sử dụng Abstract Class và Interface

Bạn nên cân nhắc sử dụng Abstract Class trong những trường hợp sau:

  • Bạn muốn chia sẻ code giữa một vài lớp có liên hệ thân thiết.
  • Bạn kỳ vọng rằng những lớp extend Abstract Class của bạn có chung nhiều method hoặc trường hoặc yêu cầu truy cập bộ điều chỉnh thay vì công khai bộ điều chỉnh. (Ví dụ là được bảo vệ hoặc riêng tư).
  • Bạn muốn khai báo trường động hoặc trường tĩnh. Điều này cho phép bạn định nghĩa method có thể tiếp cận và điều chỉnh tính chất của đối tượng.

Với Interface, bạn nên sử dụng khi:

  • Bạn kỳ vọng rằng những lớp không liên quan sẽ triển khai interface của bạn. Ví dụ, Interface ComparableCloneable được triển khai bởi những lớp không liên quan. 
  • Bạn muốn cụ thể hóa hành vi của một loại dữ liệu nhất định, nhưng không bận tâm đến ai sẽ triển khai hành vi.
  • Bạn muốn tận dụng nhiều loại kế thừa (inheritance). 

4. Ví dụ về Abstract Class

Trường hợp nên dùng Abstract Class

Trong một phần mềm vẽ hướng đối tượng, bạn có thể vẽ hình tròn, hình chữ nhật, đường kẻ, đường cong Bezier… Những đối tượng này này đều có các tính chất nhất định (như vị trí, định hướng, màu đường viền, màu trong) và các hành vi (như di chuyển, quay, điều chỉnh kích thước, vẽ).

Một vài tính chất và hành vi của những đối tượng này là giống nhau (như vị trí, màu viền, di chuyển). Số khác yêu cầu những triển khai khác nhau như điều chỉnh kích thước hay vẽ. Tất cả các GraphicObject phải có khả năng vẽ hay điều chỉnh kích thước của nó, chỉ khác nhau ở cách chúng thực hiện việc đó.

Sử dụng Abstract Class

Đây là một trường hợp hoàn hảo để sử dụng lớp cha là Abstract Class. Bạn có thể tận dụng 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 thể hiện rõ mối liên hệ này:

Mô hình ví dụ về Abstract Class
Các lớp hình chữ nhật, đường kẻ, đường cong Bezier và hình tròn đều kế thừa từ lớp cha GraphicObject (Nguồn: Oracle)

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

Hình ảnh một Abstract Class
Hình ảnh lớp cha GraphicObject, một abstract class.
(Nguồn: Oracle)

Mỗi lớp con không trừu tượng của GraphicObject, như Circle và Rectangle, phải cung cấp triển khai cho các method draw và resize: 

Lớp con không trừu tượng thuộc Abstract Class
Khai báo lớp không trừu tượng thuộc một lớp cha Abstract Class

Got It hy vọng rằng bài viết trên đây đã cung cấp cho bạn một cái nhìn đầy đủ hơn về Abstract Class là gì. Happy Coding!

Got It Vietnam – Tham khảo: Guru99, Oracle, W3schools

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

Khanh Chi
Khanh Chi
January 26, 2021
0
Share this post to:
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan
Abstract Class là gì? Công cụ để đạt được Abstraction

Abstract Class là gì? Công cụ để đạt được Abstraction

Abstraction của OOP tiết lộ những đặc tính cần thiết, giấu đi thông tin không quan trọng. Abstraction chỉ có thể đạt được thông qua Abstract Class. Hãy cùng tìm hiểu Abstract Class là gì nhé.  Mục lục1. Abstract Class là gì?2. Abstract Class và Interface 3. Sử dụng Abstract Class và Interface4. Ví dụ về […]
4 tính chất của OOP – Lập trình hướng đối tượng

4 tính chất của OOP – Lập trình hướng đối tượng

OOP là mô hình lập trình phổ biến nhất. Nó được giảng dạy như một tiêu chuẩn lập trình cho các lập trình viên. Hãy cùng tìm hiểu về 4 tính chất của OOP nhé.  Mục lụcOOP là gì?4 tính chất của OOPTính đóng góiTính trừu tượngTính kế thừaTính đa hình OOP là gì? Trước […]
Test Automation là gì? Các phương pháp Test Automation tốt nhất

Test Automation là gì? Các phương pháp Test Automation tốt nhất

Test Automation có vai trò quan trọng trong việc đảm bảo chất lượng của phần mềm. Vậy Test Automation là gì? Có bao nhiêu phương pháp Test Automation? Hãy cùng Got It khám phá trong bài viết này nhé! Mục lụcTest Automation là gì?Đặc điểm của Test Automation?Ưu điểm của Test AutomationHạn chế của Test […]
Test Report là gì? Cách thực hiện một Test Report hợp lý

Test Report là gì? Cách thực hiện một Test Report hợp lý

Test Report (Báo cáo Kiểm thử) là một phần cần thiết trong quá trình phát triển sản phẩm để đảm bảo sản phẩm của bạn đang được hoàn thiện một cách tốt nhất. Tuy nhiên, Test Report là gì? Làm thế nào để để thực hiện được một Test Report hoàn chỉnh? Hãy cùng đọc […]
Backend là gì? Tổng quan về kiến trúc backend

Backend là gì? Tổng quan về kiến trúc backend

Nhiều người nghĩ là website chỉ có những giao diện hiện hữu. Thực ra, đằng sau chúng là những hoạt động chạy ngầm gọi là backend. Vậy backend là gì? Hãy cùng Got It tìm hiểu qua bài viết bên dưới nhé! Mục lụcBackend là gì?Tại sao cần backend?Backend là cầu nối thông tin giữa […]
PyCharm là gì?

PyCharm là gì?

Bạn muốn tìm hiểu PyCharm là gì? Lý do tại sao nên dùng Pycharm? Hãy cùng Got It tìm hiểu trong bài viết này nhé! Mục lụcPyCharm là gì?Các tính năng của PyCharm: Tại sao chúng ta nên sử dụng nó cho dự án Python tiếp theo của mình?1. Trình sửa code thông minh2. Điều […]