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
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:
- bai_giang_lap_trinh_huong_doi_tuong_bai_05_ket_tap_va_ke_thu.pdf