Tải bản đầy đủ (.pdf) (20 trang)

Bài giảng Lập trình hướng đối tượng: Chương 5 - ĐH 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 (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


<b>THỪA KẾ</b>



Khoa Công nghệ thông tin


Trường Đại học Ngoại ngữ - Tin học, TP.HCM


</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=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: <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>


<b>NỘI DUNG</b>



</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=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


</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=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



</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

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 đã


• 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ó


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

KẾT TẬP (aggregation)



</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=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ể


<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


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

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>


Ký hiệu quan hệ kết tập



</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

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


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=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


<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


nhất


Bài tập tại lớp



</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

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

Bài tập ví dụ



</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

• 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())


Phát hiện lớp và thơng tin của lớp



</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

• 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())


</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

Sơ đồ lớp



</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

public class XucXac



private int giaTri;


//Định nghĩa Constructor và Property get, set


//tại đây …


public void SinhGiaTri()
{


Random random = new Random();


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

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


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=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 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);


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=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)


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=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();


</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

• 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


Bài tập về nhà



</div>


<!--links-->

×