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]
(1)Click 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
(2)• Vấn đề tái sử dụng code & hình thức • Lý thừa kế
• Lớp sở
• Lớp dẫn xuất
• Sử dụng lớp sở
• Constructor thừa kế
• Access modifier: protected
• Lớp sở lớp: Lớp object • Lớp sealed lớp partial
NỘI DUNG
(3)• Xuất phát từ nhu cầu:
– Sử dụng lại đoạn code có sẵn
– Hoặc phát triển thêm từ 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ả bảo trì khả mơ
hình hóa
(4)• Lập trình cấu trúc: chương trình
• OOP: nhiều loại đối tượng có thuộc tính,
hành vi tương tự tái sử dụng
lớp viết
• Trong lớp tái sử dụng phương
thức
Vấn đề tái sử dụng code
(5)Có hình thức:
• Sao chép lớp cũ thành lớp khác
Hạn chế: Dư thừa, khó quản lý có thay
đổi
• Kết tập (Aggregation): Lớp tập hợp
hoặc sử dụng (khơng thay đổi) lớp có
• Thừa kế (Inheritance): Lớp phát triển
thêm thuộc tính phương thức từ lớp có
(6)KẾT TẬP (aggregation)
(7)• Thành phần lớp chứa đối tượng
của lớp cũ
– Lớp mới: Lớp chứa/Lớp toàn thể
Sử dụng thuộc tính phương thức 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ó điểm
(8)Số lượng lớp thành phần lớp chứa có thể:
• 1 số nguyên dương (1, 2,
3, )
• Dải số (0 1, n) • Bất kỳ giá trị nào: *
• Không ghi: mặc định 1
Ký hiệu quan hệ kết tập
(9)Ví dụ quan hệ kết tập
public class Point
{
private int x;
private int y;
//Định nghĩa phương thức
}
public class Triangle
{
Point dinhA; //Đ nh Aỉ
Point dinhB; //Đ nh Bỉ
Point dinhC; //Đ nh Cỉ
//Định nghĩa phương thức
(10)• Cài đặt lớp Point 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 có)
• Cài đặt lớp ListTriangle chứa danh sách
các Triangle có chức năng: nhập, xuất cho biết thơng tin tam giác có diện tích lớn
Bài tập lớp
(11)Xây dựng chương trình trị chơi xúc xắc với cách chơi sau:
• Mỗi xúc xắc có giá trị ngẫu nhiên từ
đến
• Quy định số lần gieo xúc xắc
• Hai người gieo hạt xúc xắc
• Sau lượt gieo, số điểm lượt
được tích lũy vào số điểm người chơi tương ứng
• Sau lượt gieo theo quy định, người
thắng người có tổng số điểm lớn Bài tập ví dụ
(12)• Xúc xắc (XucXac)
– Thuộc tính: giá trị mặt (giaTri)
– Phương thức: sinh ngẫu nhiên giá trị mặt
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 lớp thông tin lớp
(13)• Trận đấu (TranDau)
– Thuộc tính: xúc xắc (xucXac), người chơi
(nguoiChoi), số vòng chơi (soVong), người thắng (nguoiThang)
– Phương thức: bắt đầu (BatDau()), kết thúc
(KetThuc), hiển thị thông tin (HienThi()), thực trận đấu (ThucHienTranDau())
(14)Sơ đồ lớp
(15)public class XucXac
private int giaTri;
//Định nghĩa Constructor Property get, set //tại …
public void SinhGiaTri() {
Random random = new Random();
(16)public class NguoiChoi
private String ten;
private int diem;
//Định nghĩa constructor, property get, set //tại
public void GieoXucXac(XucXac xucXac) {
Console.Write("> Nhan Enter …");
Console.ReadLine(); xucXac.SinhGiaTri();
this.diem += xucXac.GiaTri; //get giá trị xucXac
(17)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
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);
(18)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)
(19)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();
(20)• Hãy viết lại lớp Bài tập ví dụ để
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), người chơi
thắng bán thắng
– VD: Giả sử người chơi phải chơi ván đấu
Nếu người chơi thắng trước ván người chơi thắng trận đấu
– Nếu hịa tính điểm để kết luận người thắng
Bài tập nhà