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

Bài giảng Lập trình hướng đối tượng (dùng JAVA): Chương 3 (Phần 2) - Trần Minh Thái

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 (15.43 MB, 118 trang )

Chương 3
Lập trình Hướng đối tượng với Java (tt)

TRẦN MINH THÁI
Email:
Website: www.minhthai.edu.vn
Cập nhật: 02 tháng 07 năm 2016


Nội dung
#2

1.
2.
3.
4.
5.

Vấn đề tái sử dụng code
Kế thừa trong Java
Tính đa hình trong Java
Cài đặt interface trong Java
Lập trình tổng quát


Vấn đề tái sử dụng code
#3







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
Ư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


Các hình thức tái sử dụng code
#4



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 hợp: Lớp mới là tập hợp hoặc sử dụng các lớp đã có
Kế thừa: 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ó


Kết hợp (Aggregation)

#5





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 tồn thể
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

Lớp chứa tái 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


Ký hiệu Kết hợp
#6







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


Ví dụ Lớp ToaDoDiem
#7


Ví dụ Lớp ToaDoDiem (tt)
#8


Ví dụ Lớp TamGiac

#9


Ví dụ Lớp TamGiac (tt)
#10


Bài tập 1
#11

Xây dựng một trò chơi xúc xắc. Cách chơi như sau:







Mỗi hạt xúc xắc được gieo sẽ có giá trị ngẫu nhiên 1..6
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
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

Hãy xác định các lớp cần thiết và cài đặt


Xác định lớp
#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())


Xác định lớp
#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())


Xác định lớp
#14


Lớp XucXac

#15

public class XucXac {
private int giaTri;

public int getGiaTri() {
return giaTri;
}
public void setGiaTri(int giaTri) {
this.giaTri = giaTri;
}
public XucXac(){
giaTri=1;
}
public void sinhGiaTri(){
Random random = new Random();
this.giaTri=random.nextInt(5) + 1;
}
}


Lớp NguoiChoi
#16

public class NguoiChoi {
private String ten;
private int diem;
public String getTen() {
return ten;
}

public void setTen(String ten) {
this.ten = ten;
}
public int getDiem() {
return diem;
}
public void setDiem(int diem) {
this.diem = diem;
}


Lớp NguoiChoi
#17

public NguoiChoi(String ten){
this.ten=ten;
this.diem=0;
}
public void gieoXucXac(XucXac xucXac){
Scanner sn = new Scanner(System.in);
System.out.print(">>> Hay nhan Enter
de gieo xuc xac...");
sn.nextLine();
xucXac.sinhGiaTri();
this.diem+=xucXac.getGiaTri();
System.out.println("-- Diem: "
+ this.diem);
}
}



Lớp TranDau
#18

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

public TranDau(String ten1, String ten2,
int soVong){
this.nguoiChoi1 = new NguoiChoi(ten1);
this.nguoiChoi2 = new NguoiChoi(ten2);
this.xucXac = new XucXac();
this.soVong = soVong;
}


Lớp TranDau
#19

public void batDau(){
System.out.println("Tran dau bat dau...");
for(int i=1; i<=this.soVong; i++){
System.out.printf("***** Vong %d *****\n",i);
System.out.println(">" + nguoiChoi1.getTen()
+ " gieo xuc xac");
nguoiChoi1.gieoXucXac(xucXac);

System.out.println(">" + nguoiChoi2.getTen()
+ " gieo xuc xac");
nguoiChoi2.gieoXucXac(xucXac);
}
}


Lớp TranDau
#20

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


Lớp TranDau
public void hienThi(){
#21

System.out.println("* Ket qua tran dau *");
System.out.printf("- Diem cua %s: %d",
nguoiChoi1.getTen(), nguoiChoi1.getDiem());
System.out.printf("- Diem cua %s: %d",
nguoiChoi2.getTen(), nguoiChoi2.getDiem());
if(nguoiThang!=null)

System.out.printf("Nguoi thang cuoc: %s",
nguoiThang.getTen());
else
System.out.println("Tran dau hoa!!!");

}
public void thucHienTranDau(){
batDau();
ketThuc();
hienThi();
}
}


public class XucXacTest {
public static void main(String []args){
#22

String ten1, ten2;
int soVong;
Scanner sn = new Scanner(System.in);

System.out.print("> Ten nguoi choi 1: ");
ten1=sn.nextLine();
System.out.print("> Ten nguoi choi 2: ");
ten2=sn.nextLine();
System.out.print("> So vong dau: ");
soVong=sn.nextInt();

TranDau tranDau = new

TranDau(ten1, ten2, soVong);
tranDau.thucHienTranDau();
}
}


Bài tập 2
#23

Hãy viết lại các lớp trong Bài tập 1 để thoả u cầu sau:




Có thêm thuộc tính soBanThang ghi lại số bàn thắng
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


Kế thừa (Inheritance)
#24



Ngồi việc nhóm các đối tượng có cùng tập thuộc tính/hành vi lại với nhau thành một lớp, con
người thường nhóm các đối tượng có cùng một số thuộc tính/ hành vi



Ví dụ: nhóm tất cả xe chạy bằng động cơ thành một nhóm, rồi phân thành các nhóm nhỏ hơn

tuỳ theo loại xe (xe ơ tơ, xe tải, ...)


Kế thừa
#25



Mỗi nhóm con là một lớp các đối tượng tương tự, nhưng giữa các nhóm con có chung một số
đặc điểm



Quan hệ giữa các nhóm con với nhóm lớn được gọi là quan hệ “là một” (is-a)


×