Bài giảng Lập trình hướng đối tượng - Bài 05: Kết tập và kế thừa

8/24/2011  
Mục tiêu bài học  
Giải thích về khái niệm tái sử dụng mã nguồn  
Chỉ ra được bản chất, mô tả các khái niệm  
Bộ môn Công nghệ Phần mềm  
Viện CNTT & TT  
Trường Đại học Bách Khoa Hà Nội  
liên quan đến đến kết tập và kế thừa  
So sánh kết tập và kế thừa  
Biểu diễn được kết tập và kế thừa trên UML  
Giải thích nguyên lý kế thừa và thứ tự khởi  
tạo, hủy bỏ đối tượng trong kế thừa  
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG  
Bài 05. Kết tập và kế thừa  
Áp dụng các kỹ thuật, nguyên lý về kết tập  
và kết thừa trên ngôn ngữ lập trình Java  
2
Nội dung  
Nội dung  
1. Tái sử dụng mã nguồn  
2. Kết tập (Aggregation)  
3. Kế thừa (Inheritance)  
1. Tái sử dụng mã nguồn  
2. Kết tập (Aggregation)  
3. Kế thừa (Inheritance)  
3
4
1. Tái sử dụng mã nguồn (2)  
1. Tái sử dụng mã nguồn (Re-usability)  
Các cách sử dụng lại lớp đã có:  
5
6
1
8/24/2011  
Nội dung  
Ưu điểm của tái sử dụng mã nguồn  
1. Tái sử dụng mã nguồn  
2. Kết tập (Aggregation)  
3. Kế thừa (Inheritance)  
7
8
2. Kết tập  
2.1. Bản chất của kết tập  
Ví dụ:  
Lớp toàn thể chứa đối tượng  
của lớp thành phần  
9
10  
Ví dụ  
2.2. Biểu diễn kết tập bằng UML  
1
4
TuGiac  
Diem  
11  
12  
2
8/24/2011  
class TuGiac  
{
private Diem d1, d2;  
2.3. Minh họa trên Java  
private Diem d3, d4;  
public TuGiac(Diem p1, Diem p2,  
class Diem {  
private int x, y;  
public Diem(){}  
Diem p3, Diem p4){  
d1  
=
p1; d2  
=
p2; d3  
=
p3; d4 = p4;  
}
public Diem(int x, int y) {  
this.x = x; this.y = y;  
}
public void setX(int x){ this.x = x; }  
public int getX() { return x; }  
public void hienThiDiem(){  
System.out.print("(" + x + ", "  
+ y + ")");  
public TuGiac(){  
d1  
d3  
=
=
new Diem();  
d2  
=
=
new Diem(0,1);  
new Diem (1,0);  
new Diem (1,1); d4  
}
public void printTuGiac(){  
d1.printDiem(); d2.printDiem();  
d3.printDiem(); d4.printDiem();  
System.out.println();  
}
}
}
13  
14  
}
Ví dụ khác về Kết tập  
Game  
Die  
3
- value : int  
+ throw()  
Một trò chơi gồm 2 đối thủ, 3 quân súc sắc  
và 1 trọng tài.  
Player  
Arbitrator  
- name : String  
- points : int  
2
- name : String  
+ throwDie()  
+ countingPoints()  
15  
16  
Nội dung  
2.4. Thứ tự khởi tạo trong kết tập  
1. Tái sử dụng mã nguồn  
2. Kết tập (Aggregation)  
3. Kế thừa (Inheritance)  
17  
18  
3
8/24/2011  
3.1. Tổng quan về kế thừa  
3.1.1. Bản chất kế thừa  
Ví dụ:  
Kế thừa (Inherit, Derive)  
19  
21  
23  
20  
3.1.1. Bản chất kế thừa (2)  
3.1.2. Biểu diễn kế thừa trong UML  
Lớp con  
Là một loại (is-a-kind-of) của lớp cha  
Mammal  
Whale  
Horse  
22  
Phân biệt kế thừa và kết tập  
3.1.3. Kết tập và kế thừa  
Kế thừa  
Kết tập  
So sánh kết tập và kế thừa?  
Giống nhau?  
Khác nhau?  
24  
4
8/24/2011  
3.1.4. Cây phân cấp kế thừa  
(Inheritance hierarchy)  
3.1.4. Cây phân cấp kế thừa (2)  
A
Siblings  
B
C
Ve h icle  
Hình  
Hình hai chiều  
Hình ba chiều  
Hình lăng trụ  
Ca r  
Mo t o  
Sp o r t Ca r  
Co m p a ct  
Sp o r t Mo t o  
Hình tròn  
Tứ giác  
Tam giác  
Hình cầu  
Tứ diện  
25  
26  
30  
Lớp Object  
Lớp Object (2)  
Trong gói java.lang  
27  
3.2. Nguyên lý kế thừa  
3.2. Nguyên lý kế thừa (2)  
Các trường hợp không được phép kế thừa?  
public  
protected private  
Không có  
Cùng lớp  
Lớp con  
cùng gói  
Lớp con  
khác gói  
Khác gói,  
non-inher  
29  
5
8/24/2011  
public class TuGiac  
{
protected Diem d1, d2, d3, d4;  
public void setD1(Diem _d1) {d1=_d1;}  
public Diem getD1(){return d1;}  
public void printTuGiac(){...}  
3.3. Cú pháp kế thừa trên Java  
Cú pháp kế thừa trên Java:  
Ví dụ:  
}
public class HinhVuong extends TuGiac  
{
class HinhVuong extends TuGiac {  
public HinhVuong(){  
d1 = new Diem(0,0); d2  
d3 = new Diem(1,0); d4  
}
...  
}
=
=
new Diem(0,1);  
new Diem(1,1);  
}
public class Test{  
public static void main(String args[]){  
HinhVuong hv new HinhVuong();  
=
hv.printTuGiac();  
}
31  
33  
35  
}
32  
public class TuGiac  
{
protected Diem d1, d2, d3, d4;  
public void printTuGiac(){...}  
public TuGiac(){...}  
Ví dụ 2  
class Person  
{
public TuGiac(Diem d1, Diem d2,  
Diem d3, Diem d4)  
private String name;  
private Date bithday;  
public String getName() {return name;}  
...  
{
...}  
}
public class HinhVuong extends TuGiac  
public HinhVuong(){ super();  
{
}
}
public HinhVuong(Diem d1, Diem d2,  
Diem d3, Diem d4){  
super(d1, d2, d3, d4);  
}
class Employee extends Person  
private double salary;  
public boolean setSalary(double sal){  
salary sal;  
return true;  
{
=
}
public class Test{  
public static void main(String args[]){  
HinhVuong hv new HinhVuong();  
}
public String getDetail(){  
String name+", "+birthday+", "+salary;  
}
=
s
=
hv.printTuGiac();  
}
34  
}
}
Ví dụ 2  
Ví dụ 2 (tiếp)  
class Person  
{
public class Test  
{
protected String name;  
protected Date bithday;  
public String getName() {return name;}  
...  
public static void main(String args[]){  
Employee e = new Employee();  
e.setName("John");  
e.setSalary(3.0);  
}
}
class Employee extends Person  
private double salary;  
public boolean setSalary(double sal){  
salary sal;  
return true;  
{
}
=
}
public String getDetail(){  
String name+", "+birthday+", "+salary;  
s
=
}
36  
}
6
8/24/2011  
Ví dụ 3 – Cùng gói  
Ví dụ 3 – Khác gói  
package abc;  
public class Person  
public class Person {  
Date birthday;  
{
protected Date birthday;  
protected String name;  
...  
String name;  
...  
}
}
public class Employee extends Person {  
...  
import abc.Person;  
public class Employee extends Person  
...  
public String getDetail()  
String s;  
public String getDetail() {  
{
String s;  
String s = name + "," + birthday;  
s += ", " + salary;  
{
s = name + ","  
return s;  
+ birthday + "," + salary;  
return s;  
}
}
}
37  
38  
}
3.4.1. Tự động gọi constructor của lớp  
cha  
3.4. Khởi tạo và huỷ bỏ đối tượng  
public class TuGiac  
{
protected Diem d1, d2;  
protected Diem d3, d4;  
public TuGiac(){  
System.out.println  
("Lop cha TuGiac()");  
}
public class Test  
{
Khởi tạo đối tượng:  
public static void  
main(String arg[])  
{
Hủy bỏ đối tượng:  
HinhVuong hv  
=
new HinhVuong();  
//…  
}
}
}
public class HinhVuong  
extends TuGiac  
{
public HinhVuong(){  
//Tu dong goi TuGiac()  
System.out.println  
("Lop con HinhVuong()");  
}
39  
40  
}
3.4.2. Gọi trực tiếp constructor của lớp  
cha  
Ví dụ  
public class TuGiac  
protected Diem d1, d2;  
protected Diem d3, d4;  
public TuGiac(Diem d1,  
Diem d2, Diem d3, Diem d4){  
System.out.println("Lop cha  
TuGiac(d1, d2, d3, d4)");  
public class Test  
public static  
void main(String  
arg[])  
{
{
{
Bắt buộc nếu lớp cha không có phương thức  
khởi tạo mặc định  
HinhVuong hv  
new  
=
HinhVuong();  
}
this.d1  
this.d3  
=
=
d1; this.d2  
d3; this.d4  
=
=
d2;  
d4;  
}
}
}
public class HinhVuong extends TuGiac  
{
public HinhVuong(){  
System.out.println  
("Lop con HinhVuong()");  
}
}
41  
42  
7
pdf 7 trang baolam 28/04/2022 7900
Bạn đang xem tài liệu "Bài giảng Lập trình hướng đối tượng - Bài 05: Kết tập và kế thừa", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_bai_05_ket_tap_va_ke_thu.pdf