Tải bản đầy đủ (.pptx) (59 trang)

Bài giảng Lập trình hướng đối tượng Chương 5 Trường Đại học Ngoại ngữ Tin học

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (291.25 KB, 59 trang )

Click to edit Master subtitle style

CHƯƠNG 5:

THỪA KẾ

Khoa Công nghệ thông tin
Trường Đại học Ngoại ngữ - Tin học, TP.HCM

1


NỘI DUNG
Vấn đề tái sử dụng code & các hình thức
Lý do thừa kế
Lớp cơ sở
Lớp dẫn xuất
Sử dụng lớp cơ sở
Constructor và thừa kế
Access modifier: protected
Lớp cơ sở của mọi lớp: Lớp object
Lớp sealed và lớp partial

2


Vấn đề tái sử dụng code
Xuất phát từ nhu cầu:
Sử dụng lại những đoạn code có sẵn
Hoặc phát triển thêm từ những code có sẵn mà khơng phải viết lại từ đầu


 Ưu điểm:
Giảm chi phí
Nâng cao khả năng bảo trì và khả năng mơ hình hóa

3


Vấn đề tái sử dụng code
Lập trình cấu trúc: chương trình con
OOP: nhiều loại đối tượng có thuộc tính, hành vi tương tự nhau  tái sử dụng các
lớp đã viết
Trong một lớp vẫn tái sử dụng phương thức

4


Các hình thức tái sử dụng code
Có 3 hình thức:
Sao chép lớp cũ thành 1 lớp khác
 Hạn chế: Dư thừa, khó quản lý khi có thay đổi
Kết tập (Aggregation): Lớp mới là tập hợp hoặc sử dụng (không thay đổi) các lớp
đã có
Thừa kế (Inheritance): Lớp mới phát triển thêm các thuộc tính hoặc phương thức
từ lớp đã có

5


KẾT TẬP (aggregation)


6


Kết tập (Aggregation)
Thành phần lớp mới chứa các đối tượng của lớp cũ
Lớp mới: Lớp chứa/Lớp toàn thể
Sử dụng các thuộc tính và phương thức của lớp thành phần thơng qua đối tượng
Lớp cũ: Lớp thành phần

Ví dụ:
Lớp cũ: Điểm (Point)
Lớp mới: Tam giác (Triangle) có 3 điểm

7


Ký hiệu quan hệ kết tập
Số lượng lớp thành phần trong lớp chứa có thể:
1 số nguyên dương (1, 2, 3, ...)
Dải số (0..1, 1..n)
Bất kỳ giá trị nào: *
Không ghi: mặc định là 1

8


Ví dụ quan hệ kết tập
public class Point
{
private int x;

private int y;
//Định nghĩa các phương thức
}

public class Triangle
{
Point dinhA; //Đỉnh A
Point dinhB; //Đỉnh B
Point dinhC; //Đỉnh C
//Định nghĩa các phương thức
}

9


Bài tập tại lớp
Cài đặt lớp Point và lớp Triangle có chức năng:
Nhập
Xuất
Tính chu vi
Tính diện tích
(Mỗi lớp phải có: Property get, set; constructor; kiểm tra ràng buộc nếu có)

Cài đặt lớp ListTriangle chứa danh sách các Triangle có chức năng: nhập, xuất và
cho biết thơng tin tam giác có diện tích lớn nhất

10


Bài tập ví dụ

Xây dựng chương trình trị chơi xúc xắc với cách chơi như sau:
Mỗi xúc xắc sẽ có giá trị ngẫu nhiên từ 1 đến 6
Quy định số lần gieo xúc xắc
Hai người lần lượt gieo 1 hạt xúc xắc
Sau mỗi lượt gieo, số điểm của lượt đó được tích lũy vào số điểm của người chơi
tương ứng
Sau các lượt gieo theo quy định, người thắng cuộc là người có tổng số điểm lớn
hơn

11


Phát hiện lớp và thông tin của lớp
Xúc xắc (XucXac)
Thuộc tính: giá trị của mặt (giaTri)
Phương thức: sinh ngẫu nhiên giá trị mặt của xúc xắc (SinhGiaTri())

Người chơi (NguoiChoi)
Thuộc tính: tên (ten), điểm (diem)
Phương thức: gieo xúc xắc (GieoXucXac())

12


Phát hiện lớp và thông tin của lớp
Trận đấu (TranDau)
Thuộc tính: xúc xắc (xucXac), 2 người chơi (nguoiChoi), số vịng chơi (soVong), người
thắng cuộc (nguoiThang)
Phương thức: bắt đầu (BatDau()), kết thúc (KetThuc), hiển thị thông tin (HienThi()), thực
hiện trận đấu (ThucHienTranDau())


13


Sơ đồ lớp

14


public class XucXac

private int giaTri;

//Định nghĩa Constructor và Property get, set
//tại đây …

public void SinhGiaTri()
{
Random random = new Random();
this.giaTri = random.Next(1, 7);
}


public class NguoiChoi
private String ten;
private int diem;

//Định nghĩa constructor, property get, set
//tại đây ...


public void GieoXucXac(XucXac xucXac)
{
Console.Write("> Nhan Enter …");
Console.ReadLine();
xucXac.SinhGiaTri();
this.diem += xucXac.GiaTri; //get giá trị xucXac
Console.Write(" - Diem hien tai = " + this.diem);
}


public class TranDau
private XucXac xucXac;
private NguoiChoi nguoiChoi1;
private NguoiChoi nguoiChoi2;
private NguoiChoi nguoiThang;
private int soVong;

//Định nghĩa constructor, property get, set tại đây...
public void BatDau()
{
Console.WriteLine("Tran dau bat dau...");
for (int i = 1; i <= this.soVong; i++)
{
Console.WriteLine("***** Vong {0} *****", i);
Console.WriteLine(nguoiChoi1.Ten+" gieo xuc xac");
nguoiChoi1.GieoXucXac(xucXac);
Console.WriteLine(nguoiChoi2.Ten+" gieo xuc xac");
nguoiChoi2.GieoXucXac(xucXac);
}
}



public class TranDau

public void KetThuc()
{
int diem1 = nguoiChoi1.Diem;
int diem2 = nguoiChoi2.Diem;
if (diem1 > diem2)
this.nguoiThang = this.nguoiChoi1;
else if (diem2 > diem1)
this.nguoiThang = this.nguoiChoi2;
}


public class TranDau
public void HienThi()
{
Console.WriteLine("*** Ket qua tran dau ***");
Console.WriteLine("- Diem cua {0}: {1}", nguoiChoi1.Ten,
nguoiChoi1.Diem);
Console.WriteLine("- Diem cua {0}: {1}", nguoiChoi2.Ten,
nguoiChoi2.Diem);
if (nguoiThang != null)
Console.WriteLine("Nguoi thang: " + nguoiThang.Ten);
else
Console.WriteLine("Tran dau hoa!!!");
}

public void ThucHienTranDau()

{
BatDau();
KetThuc();
HienThi();
}


Bài tập về nhà
Hãy viết lại các lớp trong Bài tập ví dụ trên để thoả u cầu sau:
Có thêm thuộc tính soBanThang ghi lại số bàn thắng
Cho biết số ván đấu (>2), nếu người chơi nào thắng quá bán đầu tiên thì sẽ thắng
VD: Giả sử 2 người chơi phải chơi 3 ván đấu. Nếu người chơi nào thắng trước 2 ván thì
người chơi đó thắng cả trận đấu
Nếu hịa thì tính điểm để kết luận người thắng

20


THỪA KẾ

21


3 ngun tắc lập trình hướng đối tượng
Đóng gói (Encapsulation) và Giao diện (Interface)
Ẩn chi tiết của lớp (Đóng gói), chỉ cung cấp các phương thức cần thiết để dùng (Giao
diện)

Thừa kế (Inheritance)
Tạo lớp mới thừa kế lớp đã có


Đa hình (Polymorphism)
Khả năng tạo ra các lớp dẫn xuất, cài đặt cùng một method của lớp cơ sở theo những
cách khác nhau (tùy từng lớp dẫn xuất)

22


Thừa kế (Inheritance)

Tạo lớp mới bằng cách phát triển từ lớp đã có
Lớp mới thừa kế những thành viên đã có trong lớp cũ
Lớp cũ: Lớp cha (superclass), lớp cơ sở (baseclass)
Lớp mới: Lớp con (subclass), lớp dẫn xuất (derived class)

23


Kế thừa
Lớp cơ sở
Lớp tổng quát hơn trong mối quan hệ “is-a”
Có cùng tập thuộc tính và hành vi

Lớp dẫn xuất
Lớp cụ thể hơn trong một quan hệ “is-a”
Có cùng tập thuộc tính và hành vi (do kế thừa từ lớp cơ sở), cộng thêm tập thuộc tính và
hành vi của riêng nó

24



Ký hiệu kế thừa


×