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[r]
Trang 1Click to edit Master subtitle style
THỪA KẾ
Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học, TP.HCM
CHƯƠNG 5:
Trang 2• 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
NỘI DUNG
2
Trang 3• 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
Vấn đề tái sử dụng code
Trang 4• 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
Vấn đề tái sử dụng code
4
Trang 5Có 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ó
Các hình thức tái sử dụng code
Trang 6KẾT TẬP (aggregation)
6
Trang 7• 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
Kết tập (Aggregation)
Trang 8Số 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
Ký hiệu quan hệ kết tập
8
Trang 9Ví dụ quan hệ kết tập
public class Point
{
private int x;
private int y;
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
}
Trang 10• 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
Bài tập tại lớp
10
Trang 11Xâ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
Bài tập ví dụ
Trang 12• 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())
Phát hiện lớp và thông tin của lớp
12
Trang 13• 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())
Phát hiện lớp và thông tin của lớp
Trang 14Sơ đồ lớp
14
Trang 15public class XucXac
private int giaTri;
//Định nghĩa Constructor và Property get, set //tại đây …
public void SinhGiaTri()
{
Random random = new Random ();
}
Trang 16public class NguoiChoi
//Định nghĩa constructor, property get, set
//tại đây
{
Console Write( "> Nhan Enter …" );
Console ReadLine();
xucXac.SinhGiaTri();
this diem += xucXac.GiaTri; //get giá trị xucXac
Console Write( " - Diem hien tai = " + this diem); }
Trang 17public 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 " );
Console WriteLine( "***** Vong {0} *****" , i);
Console WriteLine(nguoiChoi1 Ten + " gieo xuc xac" );
nguoiChoi1.GieoXucXac(xucXac);
nguoiChoi2.GieoXucXac(xucXac);
}
Trang 18public class TranDau
public void KetThuc()
{
}
Trang 19public class TranDau
public void HienThi()
{
Console WriteLine( "*** Ket qua tran dau ***" );
Console WriteLine( "- Diem cua {0} : {1} " , nguoiChoi1 Ten ,
Console WriteLine( "- Diem cua {0} : {1} " , nguoiChoi2 Ten ,
Console WriteLine( "Nguoi thang: " + nguoiThang Ten );
else
Console WriteLine( "Tran dau hoa!!!" );
}
public void ThucHienTranDau()
{
BatDau();
HienThi();
Trang 20• Hãy viết lại các lớp trong Bài tập ví dụ trên để thoả yê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
Bài tập về nhà
20