Wednesday, July 4, 2007

Tìm hiểu lập trình hướng đối tượng (OOP) - 4

Trong phần này ta bàn lại vấn đề Kế thừa

- Trong thế giới thực tồn tại nhiều loại đối tượng có các thuộc tính và hành vi tương tự hoặc liên quan đến nhau ví dụ như Giáo viên, Học sinh, Công nhân,... họ đều là người, có các đặc điểm chung như: có họ tên, có nghệ nghiệp,... những đặc điểm chung của đối tượng giáo viên, học sinh,... có thể được sử dụng chung ở một mức độ nào đó
- Hơn nữa, với sự phát triển của CNTT, đã làm xuất hiện nhu cầu sử dụng lại các mã nguồn đã viết

Việc sử dụng lại mã nguồn thường thông qua một số cách như sau:
+ Sử dụng lại thông qua copy: copy mã nguồn cần sử dụng lại vào mã nguồn mới
. Tốn công, dễ nhầm lẫn trong mã nguồn
. Khó sửa lỗi do tồn tại nhiều phiên bản
+ Sử dụng lại thông qua quan hệ has_a: chuyển lớp cần sử dụng lại thành một thành phần của lớp mới


class Person {


private String name;


private Date bithday;


public String getName() {


return name;


}


...


}


class Employee {


private Person me;


private double salary;


public String getName() {


return me.getName();


}


...


}





. Việc đưa lớp cần sử dụng lại trở thành thành phần của lớp mới có nhược điểm là chưa đủ mềm dẻo, phải viết lại giao diện mới, việc truy xuất các thuộc tính của lớp sử dụng lại sẽ không thực sự mềm dẻo
Ví dụ


class Assistant {


private Employee me;


}


class Manager {


private Assistant ass;


...


}




+ Sử dụng lại thông qua cơ chế “kế thừa”
. Dựa trên quan hệ is_a
. Thừa hưởng lại các thuộc tính và phương thức đã có của lớp cha
. Chi tiết hóa cho phù hợp với mục đích sử dụng mới
. Thêm các thuộc tính mới
. Thêm hoặc hiệu chỉnh các phương thức


class Employee extends Person {


private double salary;


public boolean setSalary(double sal) {


...


salary = sal;


return true;


}


}




Với cấu trúc kế thừa thế này ta có thể cho phép kế thừa ở mức nhiều tầng như Person -> Employee -> Assistant -> Manager

No comments:

Post a Comment