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 (319.89 KB, 20 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
Click to edit Master subtitle style
Khoa Công nghệ thông tin
Trường Đại học Ngoại ngữ - Tin học, TP.HCM
• 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: <b>protected</b>
• Lớp cơ sở của mọi lớp: Lớp <b>object</b>
• Lớp <b>sealed</b> và lớp <b>partial </b>
• 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
• 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
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 (<i>Aggregation</i>): Lớp mới là tập hợp
hoặc sử dụng (<i>khơng thay đổi</i>) các lớp đã
có
• Thừa kế (<i>Inheritance</i>): 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ó
• 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ể
<i>Sử dụng các thuộc tính và phương thức của lớp </i>
<i>thành phần thơng qua đối tượng</i>
– 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
Số lượng lớp thành phần trong
lớp chứa có thể:
• <i>1 số ngun dương (1, 2, </i>
<i>3, ...)</i>
• <i>Dải số (0..1, 1..n)</i>
• <i>Bất kỳ giá trị nào: *</i>
• <i>Khơng ghi: mặc định là 1</i>
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
• 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
<i>(Mỗi lớp phải có: Property get, set; constructor; </i>
<i>kiểm tra ràng buộc nếu có)</i>
• 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
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
• Xúc xắc (<i><b>XucXac</b></i>)
– 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 (<i><b>NguoiChoi</b></i>)
– Thuộc tính: tên (ten), điểm (diem)
– Phương thức: gieo xúc xắc (GieoXucXac())
• Trận đấu (<i><b>TranDau</b></i>)
– Thuộc tính: xúc xắc (xucXac), 2 người chơi
(nguoiChoi), số vòng chơi <i><b>(soVong),</b></i> 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())
private int giaTri;
//Định nghĩa Constructor và Property get, set
public void SinhGiaTri()
{
Random random = new Random();
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
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 void KetThuc()
{
int diem1 = nguoiChoi1.Diem;
int diem2 = nguoiChoi2.Diem;
if (diem1 > diem2)
this.nguoiThang = this.nguoiChoi1;
else if (diem2 > diem1)
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();
• 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