2020.07.21

Tính kế thừa (Inheritance) trong lập trình hướng đối tượng

tinh ke thua

Tính kế thừa là 1 trong những đặc trưng chính yếu của lập trình hướng đối tượng. Vì lý do này nên trước khi mô tả chi tiết hơn về tính kế thừa mình muốn chia sẻ với các bạn đôi nét về lập trình hướng đối tượng. 

Trong bài viết này mình sẽ giới thiệu cho các bạn biết về tính kế thừa kèm theo những ví dụ cụ thể. Đối tượng của bài viết này sẽ là các bạn chưa biết về lập trình hướng đối tượng, hoặc đã biết rồi nhưng muốn hiểu rõ hơn về lập trình hướng đối tượng cũng như các đặc tính có liên quan đến lập trình hướng đối tượng chẳng hạn như tính kế thừa được đề cập trong bài viết này.

 

Lập trình hướng đối tượng (Object Oriented Programming)

Lập trình hướng đối tượng là 1 mô hình lập trình (programming paradigm) dựa trên khái niệm của “đối tượng” (object). Đối tượng này thông thường sẽ bao gồm các thuộc tính và các phương thức để truy xuất hoặc thao tác trên các thuộc tính của đối tượng đó.

 

Chẳng hạn nếu bạn định nghĩa 1 đối tượng là bác sĩ (Doctor) thì các thuộc tính đi kèm có thể là bằng cấp, học vị, chuyên khoa, thâm niên,.. và các phương thức đi kèm có thể là tư vấn, khám bệnh,…

 

Nhưng đôi lúc bạn sẽ nghĩ rằng bác sĩ chuyên khoa nhi thì chuyên khám bệnh cho trẻ em, bác sĩ tim mạch thì chuyên tư vấn khám chữa bệnh cho bệnh nhân bị các bệnh lý về tim mạch,… thì tôi sẽ diễn đạt thế nào? Vâng, đây là 1 trong những lý do mà chúng ta có tính kế thừa trong lập trình hướng đối tượng.

 

Tính kế thừa (Inheritance)

Tính kế thừa trong lập trình hướng đối tượng thể hiện mối quan hệ cha-con giữa các lớp (classes) với nhau và nhờ vào mối quan hệ này cho phép lớp con (child class) thừa hưởng những đặc tính của lớp cha (parent class), các đặc tính này có thể bao gồm thuộc tính (attributes) hoặc các phương thức (methods) được định nghĩa trong lớp cha.

 

 

Trong biểu đồ trên đây 

  • Mỗi một hình vuông/chữ nhật đại diện cho 1 lớp (class).
  • “Bác sĩ” chính là lớp cha (parent class).
  • “Bác sĩ Chuẩn Đoán Hình Ảnh”, “Bác sĩ Nhi Khoa” và “Bác sĩ Nội Khoa” là các lớp con (children classes) của lớp cha “Bác sĩ” và đều kế thừa được các thuộc tính và phương thức của lớp “Bác sĩ” .
  • Tương tự “Bác sĩ Nhi Nội Tiết” lại là lớp con của “Bác sĩ Nhi Khoa” và cũng kế thừa được các thuộc tính và phương thức của lớp cha tương ứng.
  • Việc lớp con kế thừa được thuộc tính hay phương thức nào từ lớp cha sẽ được khai báo trong lớp cha thông qua 1 số từ khóa như private, public, protected,… đây là đặc tính đóng gói (encapsulation) trong lập trình hướng đối tượng, nhưng trong bài viết này mình sẽ không đề cập đặc tính này.
  • Nếu các bạn để ý thì lớp “Bác sĩ Chuẩn Đoán Hình Ảnh” ngoài những thuộc tính và phương thức kế thừa từ lớp “Bác sĩ” ra thì còn có thêm 1 phương thức đặc trưng riêng của lớp này là “Siêu Âm”. Điều này thể hiện rõ việc linh động và mở rộng được của tính kế thừa trong lập trình hướng đối tượng.

 

Phần bên dưới sẽ là mã nguồn (source codes) để minh họa cho biểu đồ bên trên

Cảm ơn bạn đã xem qua bài viết của mình.

 

Tham khảo

  1. Wiki/Object-oriented
  2. Wiki/Inheritance_(object-oriented_programming)
  3. java-class-inheritance
  4. khoa va chuyen khoa y hoc