SlideShare a Scribd company logo
1 of 72
BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM
TRAINING GIỮA KỲ HỌC KỲ I NĂM HỌC 2022 – 2023
CONTACT
bht.cnpm.uit@gmail.com
fb.com/bhtcnpm
fb.com/groups/bht.cnpm.uit
Khoa Công nghệ Phần mềm
Trường Đại học Công nghệ Thông tin
Đại học Quốc gia thành phố Hồ Chí Minh
BAN HỌC TẬP
1
OOP – Thực hành
TRAINING
Thời gian: 19:30 thứ 5 ngày 25/05/2023
Địa điểm: Microsoft Teams
Trainers: Huỳnh Lê Đan Linh – KTMP2022.2
Nguyễn Việt Khoa – KTPM2022.2
Lê Duy Nguyên – KTPM2022.2
2
Những điểm kiến thức có thể dùng đến
3
- Hàm bạn, lớp bạn, biến static, constructor/destructor...
- Nạp chồng toán tử
- Các kiến thức về public, protected và private để đảm bảo tính đóng gói
- Kế thừa, đa hình
- Kỹ năng trừu tượng hóa bài toán
- ...
Bài tập 1
4
class Phan_so {
private:
int tu;
int mau;
public:
Phan_so();
Phan_so(int);
Phan_so(int, int);
Phan_so(const Phan_so&);
Phan_so operator+ (const Phan_so&);
Phan_so& operator= (const Phan_so&);
Phan_so& operator+= (const Phan_so&);
};
Đề bài:
• Định nghĩa các phương thức
thiết lập và nạp chồng toán tử
+,=,+=,++,--,<<, >> cho lớp
Phan_so.
Bài tập 1
5
class Phan_so {
private:
int tu;
int mau;
public:
Phan_so& operator++();
Phan_so operator++(int);
friend istream& operator>>(istream&, Phan_so&);
friend ostream& operator<<(ostream&,
const Phan_so&);
};
Đề bài:
• Định nghĩa các phương thức
thiết lập và nạp chồng toán tử
+,=,+=,++,--,<<, >> cho lớp
Phan_so.
Bài tập 1
6
// Phương thức thiết lập mặc định
Phan_so::Phan_so() {
tu = 0;
mau = 1;
}
Phương thức thiết lập:
• Không có giá trị trả về
• Tên phương thức trùng với tên
lớp.
Bài tập 1
7
// Phương thức thiết lập có tham số
Phan_so::Phan_so(int a, int b) {
tu = a;
mau = b;
}
Phương thức thiết lập:
• Không có giá trị trả về
• Tên phương thức trùng với tên
lớp.
Bài tập 1
8
// Phương thức thiết lập có tham số
Phan_so::Phan_so(int a) {
tu = a;
mau = 1;
}
Phương thức thiết lập:
• Không có giá trị trả về
• Tên phương thức trùng với tên
lớp.
Bài tập 1
9
Phan_so::Phan_so(const Phan_so& temp) {
tu = temp.tu;
mau = temp.mau;
}
Phương thức thiết lập sao chép:
• Không có giá trị trả về
• Tên phương thức trùng với tên
lớp.
• Tham số đầu vào phải là tham
chiếu hằng.
Bài tập 1
10
// Phương thức của lớp
Phan_so Phan_so::operator+ (const Phan_so& x) {
Phan_so temp;
temp.tu = x.tu * mau + tu * x.mau;
temp.mau = x.mau * mau;
return temp;
}
Operator +:
• Có thể là hàm bên ngoài hoặc
phương thức của lớp
• Tham số đầu vào nên là tham
chiếu hằng (tham trị vẫn oke)
• Trả về một đối tượng chứa kết
quả của phép toán
Bài tập 1
11
// Phương thức của lớp
Phan_so& Phan_so::operator= (const Phan_so& temp){
tu = temp.tu;
mau = temp.mau;
return *this;
}
// this là con trỏ giữ địa chỉ đối tượng
// đang gọi phương thức
Operator =:
• Chỉ có thể là phương thức của
lớp.
• Tham số đầu vào nên là tham
chiếu hằng.
• Trả về một tham chiếu tới đối
tượng đang gọi phương thức.
Bài tập 1
12
// Phương thức của lớp
Phan_so& Phan_so::operator+= (const Phan_so& x) {
tu = x.tu * mau + tu * x.mau;
mau = x.mau * mau;
return *this;
}
Operator +=:
• Kết hợp giữa operator+ và
operator=.
• Nên là phương thức của lớp
Bài tập 1
13
// Phương thức của lớp
// ++a
Phan_so& Phan_so::operator++() {
*this += Phan_so(1);
return *this;
}
Operator ++ (tiền tố):
• Toán tử 1 ngôi, toán hạng duy
nhất của nó là đối tượng gọi
phương thức nên không có tham
số đầu vào.
• Trả về tham chiếu tới đối tượng
sau khi đã tăng giá trị thêm 1.
Bài tập 1
14
// Phương thức của lớp
// a++
Phan_so Phan_so::operator++(int) {
Phan_so ret = *this;
++ *this;
return ret;
}
Operator ++ (hậu tố):
• Có thêm một tham số đầu vào
giả để phân biệt với phiên bản
tiền tố
• Tăng giá trị của đối tượng lên 1,
sau đó trả về giá trị của đối
tượng trước khi tăng thêm 1.
Bài tập 1
15
class Phan_so {
friend istream& operator>>(istream&, Phan_so&);
// ...
};
istream& operator>>(istream& is, Phan_so& ps) {
cout << "Nhap tu: ";
is >> ps.tu;
cout << "Nhap mau: ";
is >> ps.mau;
return is;
}
Operator >>:
• Phải là hàm bên ngoài, và là hàm
bạn của lớp
• Tham số đầu vào đều là tham
chiếu
• Trả về một tham chiếu tới đối
tượng thuộc lớp istream.
Bài tập 1
16
class Phan_so {
friend ostream& operator<<(ostream&,
const Phan_so&);
// ...
};
ostream& operator<<(ostream& os,
const Phan_so& ps) {
os << ps.tu << "/" << ps.mau;
return os;
}
Operator <<:
• Phải là hàm bên ngoài, và là hàm
bạn của lớp
• Tham số đầu vào đều là tham
chiếu, tham số thứ 2 nên là tham
chiếu hằng.
• Trả về một tham chiếu tới đối
tượng thuộc lớp ostream.
Bài tập 2 – Tóm tắt
17
- Một Guild sẽ bao gồm n thành viên , mỗi thành viên
có tên và các chỉ số HP, ATK và DEF, một thành viên
trong Guild gồm các loại:
- Nhân loại: có thêm thuộc tính job, bao gồm Human
và Elf.
- Bán nhân: có thêm thuộc tính racial, bao gồm Orc và
Golbin.
- Dị hình: không có thêm thuộc tính nào, bao gồm
Vampire và Devil.
Bài tập 2 – Tóm tắt
18
- Elf được + 50% DEF dựa trên DEF nhập vào
- Orc được +50% HP dựa trên HP nhập vào
- Golbin được + 10% ATK dựa trên ATK nhập vào
- Vampire được +10% HP / mỗi Nhân loại trong Guild
- Devil được +10% ATK và +10% DEF / mỗi Devil
trong Guild
Bài tập 2 – Tóm tắt
19
- HP <=0 thì coi như đã chết, không còn khả năng ATK
- Mỗi lượt đánh sẽ gây sát thương (tức là trừ vào HP
của đối phương) một lượng là (ATK bản thân – DEF
đối phương), nếu DEF của đối phương cao hơn thì coi
như sát thương là 0.
Bài tập 2 – Tóm tắt
20
- Giả sử Guild đi đánh Boss, biết rằng 2 bên sẽ đánh
nhau theo lượt, và bên Guild sẽ tấn công trước, tất cả
các thành viên trong Guild sẽ lần lượt đánh vào
Boss theo thứ tự trong đội hình, sau đó Boss sẽ tấn
công vào thành viên ít máu nhất.
- Xuất ra kết quả người chiến thắng và số máu còn lại
của họ.
Bài tập 2 – Tóm tắt
21
- Một Guild sẽ bao gồm n thành viên , mỗi thành viên
có tên và các chỉ số HP, ATK và DEF, một thành viên
trong Guild gồm các loại:
- Nhân loại: có thêm thuộc tính job, bao gồm Human
và Elf.
- Bán nhân: có thêm thuộc tính racial, bao gồm Orc và
Golbin.
- Dị hình: không có thêm thuộc tính nào, bao gồm
Vampire và Devil.
Bài tập 2 – Sơ đồ lớp
22
Bài tập 2 – Phân tích
23
- Lớp Character có 5 thuộc tính, trong đó:
• dem_Nhan_loai: thuộc tính static, dùng
để đếm số lượng đối tượng Nhan_loai
được tạo, cho nó là thuộc tính protected
của lớp cha Character để các lớp con
Nhan_loai và Vampire đều có thể truy
cập được ( Vampire được +10% HP trên
mỗi Nhan_loai trong Guild )
Bài tập 2 – Phân tích
24
- Lớp Character có 5 thuộc tính, trong đó:
• dem_Nhan_loai: thuộc tính static, dùng
để đếm số lượng đối tượng Nhan_loai
được tạo, cho nó là thuộc tính protected
của lớp cha Character để các lớp con
Nhan_loai và Vampire đều có thể truy
cập được ( Vampire được +10% HP trên
mỗi Nhan_loai trong Guild )
Ôn lại kiến thức:
• Thuộc tính tĩnh (static) là các thuộc
tính đại diện cho cả một lớp đối tượng
chứ không thuộc về một đối tượng
cụ thể của lớp.
• Một biến static dùng để chứa một
thông tin chung cho cả lớp đối tượng
(giá trị hằng, biến đếm,…)
Bài tập 2 – Phân tích
25
- Lớp Character có 5 thuộc tính, trong đó:
• dem_Nhan_loai: thuộc tính static, dùng
để đếm số lượng đối tượng Nhan_loai
được tạo, cho nó là thuộc tính protected
của lớp cha Character để các lớp con
Nhan_loai và Vampire đều có thể truy
cập được ( Vampire được +10% HP trên
mỗi Nhan_loai trong Guild )
Ôn lại kiến thức:
• Lớp con được kế thừa các thuộc tính
và phương thức đã được khai báo ở
lớp cha.
Bài tập 2 – Phân tích
26
Ôn lại kiến thức:
- Ngoài việc được thừa kế, lớp con còn
có thể định nghĩa thêm các thuộc
tính, phương thức mới hoặc định
nghĩa một phiên bản khác cho các
phương thức ở lớp cha.
- Phương thức ảo (có từ khóa virtual
ở trước) là những phương thức lớp cha
muốn lớp con định nghĩa lại (hay ghi
đè – override).
Bài tập 2 – Phân tích
27
- Lớp Character có 6 phương thức, trong
đó có 2 phương thức ảo:
• Nhap(): các lớp con có các thuộc tính mới
sẽ định nghĩa lại hàm này để có thể nhập
thêm dữ liệu.
• adjust(): điều chỉnh chỉ số của nhân vật
sau khi nhập tùy theo loại, mỗi lớp con sẽ
có một phiên bản khác nhau.
Bài tập 2 – Phân tích
28
- Lớp Character có 6 phương thức, trong
đó có 2 phương thức ảo:
• Nhap(): các lớp con có các thuộc tính mới
sẽ định nghĩa lại hàm này để có thể nhập
thêm dữ liệu.
• adjust(): điều chỉnh chỉ số của nhân vật
sau khi nhập tùy theo loại, mỗi lớp con sẽ
có một phiên bản khác nhau.
Đề bài:
- Elf được + 50% DEF dựa trên DEF
nhập vào
- Orc được +50% HP dựa trên HP nhập
vào
- Golbin được + 10% ATK dựa trên ATK
nhập vào
- Vampire được +10% HP / mỗi Nhân
loại trong Guild
- Devil được +10% ATK và +10% DEF /
mỗi Devil trong Guild
Bài tập 2 – Phân tích
29
- Lớp Nhan_loai định nghĩa thêm một dữ
liệu thành viên mới là job.
- Lớp Ban_nhan cũng định nghĩa thêm một
thuộc tính mới là racial.
- Cả 2 lớp ghi đè (override) hàm Nhap() để
có thể nhập thêm dữ liệu cho thuộc tính
mới.
- Ngoài ra hàm Nhap() của lớp Nhan_loai
tăng giá trị của biến dem_Nhan_loai lên
1 sau mỗi lần nhập.
Đề bài:
- Nhân loại: có thêm thuộc tính job
- Bán nhân: có thêm thuộc tính racial
- Vampire được +10% HP / mỗi Nhân
loại trong Guild
Bài tập 2 – Phân tích
30
- Lớp Nhan_loai định nghĩa thêm một dữ
liệu thành viên mới là job.
- Lớp Ban_nhan cũng định nghĩa thêm một
thuộc tính mới là racial.
- Cả 2 lớp ghi đè (override) hàm Nhap() để
có thể nhập thêm dữ liệu cho thuộc tính
mới.
- Ngoài ra hàm Nhap() của lớp Nhan_loai
tăng giá trị của biến dem_Nhan_loai lên
1 sau mỗi lần nhập.
Bài tập 2 – Phân tích
31
- Tất cả các lớp con trừ Human sẽ ghi đè
phương thức adjust() để điều chỉnh chỉ
số nhân vật.
- Lớp Devil sẽ định nghĩa thêm một thuộc
tính static là dem_Devil và ghi đè hàm
Nhap() để tăng giá trị của dem_Devil lên
1 sau mỗi lần nhập.
- Phương thức adjust() ở Vampire và
Devil sẽ sử dụng các biến đếm static để
điều chỉnh chỉ số nhân vật.
Đề bài:
- Elf được + 50% DEF dựa trên DEF
nhập vào
- Orc được +50% HP dựa trên HP nhập
vào
- Golbin được + 10% ATK dựa trên ATK
nhập vào
- Vampire được +10% HP / mỗi Nhân
loại trong Guild
- Devil được +10% ATK và +10% DEF /
mỗi Devil trong Guild
Bài tập 2 – Phân tích
32
- Tất cả các lớp con trừ Human sẽ ghi đè
phương thức adjust() để điều chỉnh chỉ
số nhân vật.
- Lớp Devil sẽ định nghĩa thêm một thuộc
tính static là dem_Devil và ghi đè hàm
Nhap() để tăng giá trị của dem_Devil lên
1 sau mỗi lần nhập.
- Phương thức adjust() ở Vampire và
Devil sẽ sử dụng các biến đếm static để
điều chỉnh chỉ số nhân vật.
Bài tập 2 – Sơ đồ lớp
33
Bài tập 2 – Phân tích
34
- Lớp Guild gồm một mảng các con trỏ
thuộc lớp đối tượng Character.
- Tuy nhiên các phần tử của mảng này nó thể
giữ địa chỉ của các đối tượng thuộc các
lớp khác nhau, miễn chúng là lớp con của
Character.
Bài tập 2 – Phân tích
35
- Lớp Guild gồm một mảng các con trỏ
thuộc lớp đối tượng Character.
- Tuy nhiên các phần tử của mảng này nó thể
giữ địa chỉ của các đối tượng thuộc các
lớp khác nhau, miễn chúng là lớp con của
Character.
Ôn lại kiến thức:
- Miền giá trị của một biến con trỏ là
địa chỉ ô nhớ.
- Một con trỏ đối tượng thuộc lớp cơ sở
có thể giữ địa chỉ của một đối tượng
thuộc lớp dẫn xuất.
Bài tập 2 – Phân tích
36
- Mục đích sử dụng con trỏ là để áp dụng
tính chất đa hình.
- Tùy vào kiểu dữ liệu mà các con trỏ trong
mảng con trỏ Character giữ địa chỉ, các
phiên bản khác nhau của các phương thức
ảo Nhap(), adjust() tương ứng với từng
lớp con Devil, Golbin, Elf, … sẽ được
thực hiện.
Ôn lại kiến thức:
- Miền giá trị của một biến con trỏ là
địa chỉ ô nhớ.
- Một con trỏ đối tượng thuộc lớp cơ sở
có thể giữ địa chỉ của một đối tượng
thuộc lớp dẫn xuất.
Bài tập 2 – Phân tích
37
- Trong phương thức Nhap() của Guild sử
dụng thêm hàm bên ngoài là Character*
init(int type) để cấp phát vùng nhớ
cho từng biến con trỏ trong mảng.
- Hàm sẽ trả về một vùng nhớ có kích thước
bằng kích thước của kiểu dữ liệu tương
ứng với loại được đưa vào.
Đề bài:
- Human: loại 1
- Elf: loại 2
- Golbin: loại 3
- Orc: loại 4
- Vampire: loại 5
- Devil: loại 6
Bài tập 3 – Tóm tắt
38
Lớp ChungCu bao gồm các thuộc tính :
- Tên chung cư (ten),
- Số tầng (soTang),
- Diện tích chung cư (dienTich),
- Tên người quản lý (tenQL),
- Tên đại diện sở hữu (soHuu)
2 lớp CCVinHome và CCBcon được kế thừa từ lớp
ChungCu.
Bài tập 3 – Tóm tắt
39
Lớp CCVinHome:
- Tên đại diện người sở hữu : “Vinhomes”.
- Tiền thuê phòng:
• Diện tích > 600 m^2 : 10 – 15 triệu / phòng
• Diện tích <= 600 m^2: 6 – 10 triệu / phòng
Lớp CCBCons:
- Tên đại diện người sở hữu sẽ là “Bcons”.
- Tiền thuê phòng
• Diện tích > 600 m^2 : 8 – 12 triệu / phòng
• Diện tích <= 600 m^2: 5 – 8 triệu / phòng
Bài tập 3 – Class Diagram
40
Bài tập 3 – Phân tích
41
ten string
soTang int
dienTich double
tenQL string
soHuu string
Lớp ChungCu:
Bài tập 3 – Phân tích
42
Lớp ChungCu:
• Hàm void importInfo(): Xuất thông tin chung cư
• Hàm string guiThongBao(): Trả về phiếu thông báo về tình trạng tòa nhà cho ban
quản lý chung cư khu vực : “Tên người quản lý – Tên chung cư – Tên đại diện sở hữu”
Bài tập 3 – Phân tích
43
Lớp CCVinhome:
• Lớp đối tượng CCVinhome kế thừa từ lớp đối
tượng ChungCu bằng từ khóa dẫn xuất
public
• Thiết lập mặc định: soHuu = "Vinhomes";
• Hàm double tienPhong(): Trả về tiền
phòng được tính theo diện tích của chung cư
Vinhome thuộc về lớp đối tượng CCVinhome
Bài tập 3 – Phân tích
44
Lớp CCBcon:
• Lớp đối tượng CCBcon kế thừa từ lớp đối
tượng ChungCu bằng từ khóa dẫn xuất
public
• Thiết lập mặc định: soHuu = “Bcons";
• Hàm double tienPhong(): Trả về
tiền phòng được tính theo diện tích của
chung cư Bcon thuộc về lớp đối tượng
CCBcon
Bài tập 3 – Phân tích
45
Các hàm bên ngoài
Hàm void ChungCu_import(ChungCu**, int, int): Nhập thông tin các chung cư vào mảng
Hàm void ChungCu_listExport(ChungCu**, int): Xuất thông tin các chung cư vào mảng Hàm
Hàm void ChungCu_tienPhong(ChungCu**, int): Xuất Tổng số tiền mỗi tháng ban quản lý chung
cư Làng Đại Học thu về
Bài tập 4 – Tóm tắt
46
Bé An viết 3 thể loại thơ:
- Lục bát (LB): số câu chia hết cho 2, câu lục 6 chữ, câu bát 8
chữ, âm 6 câu lục hiệp vần với âm 6 câu bát, âm 8 câu bát
hiệp vần với âm 6 của câu lục tiếp theo.
- Song thất lục bát (ST): Số câu chia hết cho 4, hai câu thất 7
chữ, lục 6 chữ, bát 8 chữ, chi tiết cách hiệp vần như mô tả
sau: (T - trắc, B - bằng), các chữ cùng màu hiệp vần với nhau.
1 2 3 4 B 6 T
1 2 3 4 T 6 B
1 2 3 4 5 B
1 2 3 4 5 B 7 B
1 2 3 4 B 6 T
…
- Thất ngôn bát cú Đường luật (TN): 8 câu, 7 chữ/ câu, các câu
1 2 4 6 8 hiệp vần bằng
Bài tập 4 – Tóm tắt
47
Bé An nhận được 3 loại tranh, với 6 loại màu:
- Anh Châu (1): Vẽ cho thơ LB hoặc ST, nếu chọn màu xanh thì
vẽ thêm 1 tranh màu xanh nữa
- Anh Đông (2): Vẽ cho thơ LB hoặc TN, nếu vẽ cùng anh Châu
thì sẽ dùng màu đối lập với anh Châu, nếu không thì chỉ vẽ
tranh màu tím
- Anh Vũ (3): Chỉ vẽ nhiều nhất cho 2 bài thơ, nếu số câu thơ
chia hết cho 8 thì vẽ thêm 1 tranh cùng màu nữa. Tranh
màu vàng mất chi phí là 1000 đồng bạc, các màu khác tốn
800 đồng bạc.
Bài tập 4 – Tóm tắt
48
Yêu cầu:
- Nhập số bài thơ và các bài thơ, kiểm định xem bài thơ
có đúng hay không.
- Nếu đúng, cho phép chọn những họa sĩ vẽ cho bài
thơ đó và chọn màu.
- In ra các bài thơ đúng, sau đó in ra tổng số tranh ở
mỗi màu mà các họa sĩ phải vẽ
Bài tập 4 – Phân tích
49
Các lớp:
o Lớp BucTranh gồm 3 lớp con là Chau, Dong, Vu
o Lớp dsTranh quản lý danh sách tranh
o Lớp BaiTho gồm 3 lớp con là LB, ST, TN
Các hàm bên ngoài:
o Hàm kiemTraVan: trả về bool, truyền vào 2 string
o Hàm amTrac: trả về bool, truyền vào 1 string
Liên hệ giữa các lớp, các hàm:
o Lớp BaiTho sử dụng các hàm bên ngoài để kiểm
tra hiệp vần, bằng trắc
o Lớp BaiTho có bao gồm đối tượng thuộc lớp
dsTranh (để quản lý tranh)
Bài tập 4 – Phân tích
50
Lớp BaiTho:
- Chuỗi tenBaiTho quản lý tên bài thơ
- Mảng cauTho[m][n] để quản lý bài thơ với
câu thứ m ở dòng thứ m – 1 và chữ thứ n
trong câu ở cauTho[m-1][n-1]
- Biến soCau quản lý số câu thơ của bài thơ
- dsTranh TranhList để quản lý các tranh ở mỗi
bài thơ.
- Hàm virtual void Nhap()
- Hàm virtual bool KiemTra()
- Hàm void Xuat()
Bài tập 4 – Phân tích
51
Lớp con LB, ST, TN:
Định nghĩa lại hàm Nhap() để tạo và nhập các bức tranh tương ứng
- Kiểm tra bài thơ đã nhập có đúng hay không, nếu đúng thì cho phép nhập bức tranh
- Thông qua TranhList để tạo và nhập bức tranh
Định nghĩa lại hàm KiemTra() để kiểm tra theo đúng quy tắc
Bài tập 4 – Phân tích
52
LB:
- Số câu chia hết cho 2, câu lục 6 chữ, câu bát
8 chữ, âm 6 câu lục hiệp vần với âm 6 câu bát, âm 8
câu bát hiệp vần với âm 6 của câu lục tiếp theo.
- Họa sĩ có thể vẽ cho thơ LB: Chau, Dong, Vu
Lớp LB:
Định nghĩa lại hàm KiemTra() để kiểm tra theo
đúng quy tắc
- Nếu số câu lẻ => 0
- Chỉ số lẻ => câu lục
- Chỉ số chẵn => câu bát
- Kiểm tra hiệp vần ở các câu
0 1 2 3 4 5 6 7 8
0
1 - - - - - V
2 - - - - - V - V
3 - - - - - V
4 - - - - - V - V
5 - - - - - V
6 - - - - - V - V
Bài tập 4 – Phân tích
53
ST:
- Số câu chia hết cho 4, thất 7 chữ, lục 6, bát 8
- Họa sĩ có thể vẽ cho thơ ST: Chau, Vu
Lớp ST:
Định nghĩa lại hàm KiemTra() để kiểm tra theo
đúng quy tắc
- Nếu số câu không chia hết cho 4 => 0
- Chỉ số mod 4 = 1 => câu thất đầu tiên
- Chỉ số mod 4 = 2 => câu thất thứ hai
- Chỉ số mod 4 = 3 => câu lục
- Chỉ số mod 4 = 0 => câu bát
- Kiểm tra hiệp vần ở các câu
0 1 2 3 4 5 6 7 8
0
1 - - - - B - T
2 - - - - T - B
3 - - - - - B
4 - - - - - B - B
5 - - - - B - T
6 - - - - T - B
7 - - - - - B
8 - - - - - B - B
Bài tập 4 – Phân tích
54
TN:
- 8 câu, 7 chữ/ câu, các câu 1 2 4 6 8 hiệp vần bằng
- Họa sĩ có thể vẽ cho thơ TN: Dong, Vu
Lớp TN:
Định nghĩa lại hàm KiemTra() để kiểm tra theo
đúng quy tắc
- Nếu số câu khác 8 => 0
- Kiểm tra hiệp vần bằng ở các câu có chỉ số 1 2
4 6 8
0 1 2 3 4 5 6 7 8
0
1 - - - - - - B
2 - - - - - - B
3 - - - - - - -
4 - - - - - - B
5 - - - - - - -
6 - - - - - - B
7 - - - - - - -
8 - - - - - - B
Bài tập 4 – Phân tích
55
Bài tập 4 – Phân tích
56
Lớp BucTranh:
- Biến type để dễ quản lý
- Mảng colorName[7] chứa tên các màu tương ứng với
ID màu
- Biến idC quản lý màu vừa nhập của một đối tượng
thuộc lớp (giá trị khởi tạo -1 => chưa nhập màu nào)
3 loại tranh, với 6 loại màu:
- Anh Châu (1): chọn màu xanh thì vẽ thêm 1
tranh màu xanh nữa
- Anh Đông (2): vẽ cùng anh Châu thì dùng
màu đối lập với anh Châu, nếu không
thì tranh màu tím
- Anh Vũ (3): nhiều nhất 2 bài thơ, nếu số
câu thơ chia hết cho 8 thì vẽ thêm 1 tranh
cùng màu nữa. Tranh màu vàng mất chi phí
là 1000 đồng bạc, các màu khác tốn 800
đồng bạc.
Yêu cầu: in ra tổng số tranh ở mỗi màu mà
các họa sĩ phải vẽ
Bài tập 4 – Phân tích
57
Lớp BucTranh:
- Biến type để dễ quản lý
- Mảng colorName[7] chứa tên các màu tương ứng với
ID màu
- Biến idC quản lý màu vừa nhập của một đối tượng
thuộc lớp (giá trị khởi tạo -1 => chưa nhập màu nào)
Bài tập 4 – Phân tích
58
Lớp BucTranh:
- Hàm virtual void Nhap()
- Hàm virtual void Xuat()
- Hàm set và get idC dùng cho mục đích xử lý yêu cầu
của anh Đông
- Hàm virtual void dividedByEight() để xử lý yêu cầu
của anh Vũ
Bài tập 4 – Phân tích
59
Lớp Chau, Dong, Vu:
- Cần in ra tổng số tranh ở mỗi màu sau khi nhập tất cả các bài thơ và chọn tất cả các họa sĩ
=> Mảng tĩnh priColor[7] quản lý các ID màu và số tranh phải vẽ của ID màu đó, dùng chung cho tất cả
đối tượng thuộc lớp.
Lớp Vu chỉ vẽ nhiều nhất cho 2 bài thơ => biến tĩnh tongSoTho quản lý số bài thơ Vũ đã vẽ tranh cho.
Trường hợp số câu chia hết cho 8 quản lý bằng bool dividedbyEight
Bài tập 4 – Phân tích
60
Lớp Chau: public BucTranh
Hàm void Nhap(int i)
- Nhập id màu idC => priColor[idC]++
- Nếu idC == 2 (màu xanh) => priColor[idC]++
Hàm void Xuat(): Khớp các tranh trong mảng priColor
tương ứng với tên màu trong mảng colorName rồi xuất.
0 1 2 3 4 5 6
- 0 0 0 0 0 0
- Cam Lam Vàng Lục Tím Đỏ
Bài tập 4 – Phân tích
61
Lớp Dong: public BucTranh
Lớp dsTranh sẽ thay đổi tính năng của idC: nếu có
Châu, idC của anh Đông thay đổi thành màu vừa nhập
của anh Châu => idC != -1
Hàm void Nhap()
- Nếu idC != -1 thì thay đổi mảng priColor dựa vào idC
- Nếu idC == -1 (không có Châu) thì priColor[5]++
(màu tím)
Hàm void Xuat(): Khớp các tranh trong mảng priColor
tương ứng với tên màu trong mảng colorName rồi xuất.
Bài tập 4 – Phân tích
62
Lớp Dong: public BucTranh
Lớp dsTranh sẽ thay đổi tính năng của idC: nếu có
Châu, idC của anh Đông thay đổi thành màu vừa nhập
của anh Châu
Hàm void Nhap()
- Nếu idC != -1 thì thay đổi mảng priColor dựa vào idC
- Nếu idC == -1 (không có Châu) thì priColor[5]++
(màu tím)
Hàm void Xuat(): Khớp các tranh trong mảng priColor
tương ứng với tên màu trong mảng colorName rồi xuất.
idC priColor
Không có Châu -1 Thêm màu tím
priColor[5] ++
Có Châu ID màu
của Châu
Tìm màu đối lập của idC
priColor[ID đối lập] ++
Bài tập 4 – Phân tích
63
Lớp Vu: public BucTranh
Hàm dividedbyEight(): thay đổi giá trị dividedbyEight.
Hàm void Nhap()
- tongSoTho++
- Nếu tongSoTho <= 2 thì nhập idC, priColor[idC]++
- Nếu dividedbyEight == 1 thì priColor[idC]++
- Ngược lại thì in thông báo và không nhập nữa
Hàm int tongSoTien(): chạy trên mảng priColor và tính
tổng chi.
Hàm void Xuat(): Khớp các tranh trong mảng priColor
tương ứng với tên màu trong mảng colorName rồi xuất.
Xuất tổng chi.
Bài tập 4 – Phân tích
64
Lớp dsTranh
Mảng hoaSi[4]: bool kiểm tra sự có mặt của họa sĩ ở mỗi
bài thơ
BucTranh**bucTranh = new BucTranh*[3] quản lý các
bức tranh của 3 họa sĩ cho mỗi bài thơ
bool haveChau, dividedbyEight để xử lí các trường hợp
ngoại lệ
Bài tập 4 – Phân tích
65
Lớp dsTranh:
Constructor khởi tạo 3 đối tượng Châu, Đông, Vũ cho
bucTranh[0], bucTranh[1], bucTranh[2] => làm việc
trên 3 đối tượng này
Destructor vì có con trỏ
Hàm Nhap(int type) type dùng để quy định chế độ nhập
đặc thù của các họa sĩ (VD: Thơ TN chỉ được nhập Đông
hoặc Vũ) => được gọi và truyền đối số trong lớp LB, TN,
ST.
Ý tưởng: Khi nhập họa sĩ số 3, hoaSi[3] = 1
Hàm Xuat() in toàn bộ tình trạng tranh của họa sĩ
0 1 (Châu) 2 (Đông) 3 (Vũ)
0 1 0
Ví dụ: Có mặt Đông, không có Châu và Vũ
Bài tập 4 – Phân tích
66
Lớp dsTranh:
setDividedByEight(bool dividedbyEight) phục vụ yêu
cầu của anh Vũ
- Tại hàm Nhap() của lớp bài thơ sẽ gọi hàm này, với
đối số truyền vào là bool (soCau%8 == 0)
Bài tập 4 – Phân tích
67
Lớp dsTranh:
Hàm taoHoaSi() sẽ duyệt tình trạng mảng hoaSi để nhập
và thay đổi các thuộc tính của họa sĩ.
- Duyệt mảng hoaSi
- Họa sĩ nào có mặt (key = 1) thì nhập thông tin của họa
sĩ đó
- Xem xét sự có mặt của Châu để đổi giá trị biến
haveChau => tùy chỉnh idC của Đông nếu cần
- Xem xét giá trị biến dividedbyEight để gọi hàm
dividedByEight() của Vũ.
0 1 (Châu) 2 (Đông) 3 (Vũ)
1 1 0
Duyệt qua Châu => có mặt Châu
- haveChau = 1;
- Nhập thông tin của Châu
Duyệt qua Đông => có mặt Đông
- haveChau == 1 => setidC của Đông
bằng idC của Châu
- Nhập thông tin của Đông
Duyệt qua Vũ => không có mặt Vũ => kết
thúc
Bài tập 4 – Phân tích
68
Các hàm bên ngoài
Hàm string getVan (string a): Lấy vần của một chữ (cắt từ nguyên âm đầu tiên đến cuối chữ, trừ trường
hợp có phụ âm đầu == 'q': qua, quý... thì lấy từ nguyên âm thứ hai)
Hàm bool amTrac (string a): Nếu phụ âm cuối là 't', 'c' hoặc 'p' thì trả về true
Hàm bool hiepVan (string a, string b): Trả về true nếu hiệp vần theo đúng quy tắc (nhớ kiểm tra các
ngoại lệ như vần "an" - "ang" hay "at" - "ac", "y" - "i")
Bài tập 4 – Sơ đồ lớp
69
Tổng hợp lời giải mẫu
70
Link điểm danh
71
BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM
TRAINING GIỮA KỲ HỌC KỲ I NĂM HỌC 2022 – 2023
CONTACT
bht.cnpm.uit@gmail.com
fb.com/bhtcnpm
fb.com/groups/bht.cnpm.uit
Khoa Công nghệ Phần mềm
Trường Đại học Công nghệ Thông tin
Đại học Quốc gia thành phố Hồ Chí Minh
BAN HỌC TẬP
72
HẾT
CẢM ƠN CÁC BẠN ĐÃ THEO DÕI
CHÚC CÁC BẠN CÓ KẾT QUẢ THI THẬT TỐT!

More Related Content

Similar to BHTCNPM-Slide-OOPppppppppppp-TH-22-23 .pptx

Oop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớpOop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớpTráng Hà Viết
 
Hdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vbHdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vbDũng Đinh
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituongMinh Ngoc Tran
 
Giao an tin hoc 11 - Tuan 12 - Thuc hanh ve mang va xau - v01 - vtq ngoc
Giao an tin hoc 11 - Tuan 12 - Thuc hanh ve mang va xau - v01 - vtq ngocGiao an tin hoc 11 - Tuan 12 - Thuc hanh ve mang va xau - v01 - vtq ngoc
Giao an tin hoc 11 - Tuan 12 - Thuc hanh ve mang va xau - v01 - vtq ngocNgoc Vu Thi Quynh
 
Ky thuat l.trinh_java
Ky thuat l.trinh_javaKy thuat l.trinh_java
Ky thuat l.trinh_javaLam Man
 
Hoatdongbaiday-HaNgoc
Hoatdongbaiday-HaNgocHoatdongbaiday-HaNgoc
Hoatdongbaiday-HaNgocSP Tin K34
 
Oop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng caoOop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng caoTráng Hà Viết
 
Oop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừaOop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừaTráng Hà Viết
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toanHữu Duy Duy
 

Similar to BHTCNPM-Slide-OOPppppppppppp-TH-22-23 .pptx (20)

Chapter 4
Chapter 4Chapter 4
Chapter 4
 
Chuong 4
Chuong 4Chuong 4
Chuong 4
 
Oop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớpOop unit 04 các kỹ thuật xây dựng lớp
Oop unit 04 các kỹ thuật xây dựng lớp
 
Chuong 5
Chuong 5Chuong 5
Chuong 5
 
Chapter 3
Chapter 3Chapter 3
Chapter 3
 
Hdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vbHdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vb
 
Chuong3 c
Chuong3 c Chuong3 c
Chuong3 c
 
[Cntt] all java
[Cntt] all java[Cntt] all java
[Cntt] all java
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituong
 
Giao an tin hoc 11 - Tuan 12 - Thuc hanh ve mang va xau - v01 - vtq ngoc
Giao an tin hoc 11 - Tuan 12 - Thuc hanh ve mang va xau - v01 - vtq ngocGiao an tin hoc 11 - Tuan 12 - Thuc hanh ve mang va xau - v01 - vtq ngoc
Giao an tin hoc 11 - Tuan 12 - Thuc hanh ve mang va xau - v01 - vtq ngoc
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Ky thuat l.trinh_java
Ky thuat l.trinh_javaKy thuat l.trinh_java
Ky thuat l.trinh_java
 
Oop 2
Oop 2Oop 2
Oop 2
 
Chuong8 (2)
Chuong8 (2)Chuong8 (2)
Chuong8 (2)
 
On thitotnghiep
On thitotnghiepOn thitotnghiep
On thitotnghiep
 
Hoatdongbaiday-HaNgoc
Hoatdongbaiday-HaNgocHoatdongbaiday-HaNgoc
Hoatdongbaiday-HaNgoc
 
Chapter 3 (cont)
Chapter 3 (cont)Chapter 3 (cont)
Chapter 3 (cont)
 
Oop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng caoOop unit 05 một số kỹ thuật java nâng cao
Oop unit 05 một số kỹ thuật java nâng cao
 
Oop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừaOop unit 07 các kỹ thuật kế thừa
Oop unit 07 các kỹ thuật kế thừa
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toan
 

Recently uploaded

BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...Nguyen Thanh Tu Collection
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...Nguyen Thanh Tu Collection
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdfTrnHoa46
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANGPHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANGhoinnhgtctat
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docxTHAO316680
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfTrnHoa46
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoámyvh40253
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfVyTng986513
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxAnAn97022
 

Recently uploaded (20)

1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI LÝ LUẬN VĂN HỌC NĂM HỌC 2023-2024 - MÔN NGỮ ...
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANGPHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
PHÁT TRIỂN DU LỊCH BỀN VỮNG Ở TUYÊN QUANG
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
powerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptxpowerpoint lịch sử đảng cộng sản việt nam.pptx
powerpoint lịch sử đảng cộng sản việt nam.pptx
 

BHTCNPM-Slide-OOPppppppppppp-TH-22-23 .pptx

  • 1. BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM TRAINING GIỮA KỲ HỌC KỲ I NĂM HỌC 2022 – 2023 CONTACT bht.cnpm.uit@gmail.com fb.com/bhtcnpm fb.com/groups/bht.cnpm.uit Khoa Công nghệ Phần mềm Trường Đại học Công nghệ Thông tin Đại học Quốc gia thành phố Hồ Chí Minh BAN HỌC TẬP 1
  • 2. OOP – Thực hành TRAINING Thời gian: 19:30 thứ 5 ngày 25/05/2023 Địa điểm: Microsoft Teams Trainers: Huỳnh Lê Đan Linh – KTMP2022.2 Nguyễn Việt Khoa – KTPM2022.2 Lê Duy Nguyên – KTPM2022.2 2
  • 3. Những điểm kiến thức có thể dùng đến 3 - Hàm bạn, lớp bạn, biến static, constructor/destructor... - Nạp chồng toán tử - Các kiến thức về public, protected và private để đảm bảo tính đóng gói - Kế thừa, đa hình - Kỹ năng trừu tượng hóa bài toán - ...
  • 4. Bài tập 1 4 class Phan_so { private: int tu; int mau; public: Phan_so(); Phan_so(int); Phan_so(int, int); Phan_so(const Phan_so&); Phan_so operator+ (const Phan_so&); Phan_so& operator= (const Phan_so&); Phan_so& operator+= (const Phan_so&); }; Đề bài: • Định nghĩa các phương thức thiết lập và nạp chồng toán tử +,=,+=,++,--,<<, >> cho lớp Phan_so.
  • 5. Bài tập 1 5 class Phan_so { private: int tu; int mau; public: Phan_so& operator++(); Phan_so operator++(int); friend istream& operator>>(istream&, Phan_so&); friend ostream& operator<<(ostream&, const Phan_so&); }; Đề bài: • Định nghĩa các phương thức thiết lập và nạp chồng toán tử +,=,+=,++,--,<<, >> cho lớp Phan_so.
  • 6. Bài tập 1 6 // Phương thức thiết lập mặc định Phan_so::Phan_so() { tu = 0; mau = 1; } Phương thức thiết lập: • Không có giá trị trả về • Tên phương thức trùng với tên lớp.
  • 7. Bài tập 1 7 // Phương thức thiết lập có tham số Phan_so::Phan_so(int a, int b) { tu = a; mau = b; } Phương thức thiết lập: • Không có giá trị trả về • Tên phương thức trùng với tên lớp.
  • 8. Bài tập 1 8 // Phương thức thiết lập có tham số Phan_so::Phan_so(int a) { tu = a; mau = 1; } Phương thức thiết lập: • Không có giá trị trả về • Tên phương thức trùng với tên lớp.
  • 9. Bài tập 1 9 Phan_so::Phan_so(const Phan_so& temp) { tu = temp.tu; mau = temp.mau; } Phương thức thiết lập sao chép: • Không có giá trị trả về • Tên phương thức trùng với tên lớp. • Tham số đầu vào phải là tham chiếu hằng.
  • 10. Bài tập 1 10 // Phương thức của lớp Phan_so Phan_so::operator+ (const Phan_so& x) { Phan_so temp; temp.tu = x.tu * mau + tu * x.mau; temp.mau = x.mau * mau; return temp; } Operator +: • Có thể là hàm bên ngoài hoặc phương thức của lớp • Tham số đầu vào nên là tham chiếu hằng (tham trị vẫn oke) • Trả về một đối tượng chứa kết quả của phép toán
  • 11. Bài tập 1 11 // Phương thức của lớp Phan_so& Phan_so::operator= (const Phan_so& temp){ tu = temp.tu; mau = temp.mau; return *this; } // this là con trỏ giữ địa chỉ đối tượng // đang gọi phương thức Operator =: • Chỉ có thể là phương thức của lớp. • Tham số đầu vào nên là tham chiếu hằng. • Trả về một tham chiếu tới đối tượng đang gọi phương thức.
  • 12. Bài tập 1 12 // Phương thức của lớp Phan_so& Phan_so::operator+= (const Phan_so& x) { tu = x.tu * mau + tu * x.mau; mau = x.mau * mau; return *this; } Operator +=: • Kết hợp giữa operator+ và operator=. • Nên là phương thức của lớp
  • 13. Bài tập 1 13 // Phương thức của lớp // ++a Phan_so& Phan_so::operator++() { *this += Phan_so(1); return *this; } Operator ++ (tiền tố): • Toán tử 1 ngôi, toán hạng duy nhất của nó là đối tượng gọi phương thức nên không có tham số đầu vào. • Trả về tham chiếu tới đối tượng sau khi đã tăng giá trị thêm 1.
  • 14. Bài tập 1 14 // Phương thức của lớp // a++ Phan_so Phan_so::operator++(int) { Phan_so ret = *this; ++ *this; return ret; } Operator ++ (hậu tố): • Có thêm một tham số đầu vào giả để phân biệt với phiên bản tiền tố • Tăng giá trị của đối tượng lên 1, sau đó trả về giá trị của đối tượng trước khi tăng thêm 1.
  • 15. Bài tập 1 15 class Phan_so { friend istream& operator>>(istream&, Phan_so&); // ... }; istream& operator>>(istream& is, Phan_so& ps) { cout << "Nhap tu: "; is >> ps.tu; cout << "Nhap mau: "; is >> ps.mau; return is; } Operator >>: • Phải là hàm bên ngoài, và là hàm bạn của lớp • Tham số đầu vào đều là tham chiếu • Trả về một tham chiếu tới đối tượng thuộc lớp istream.
  • 16. Bài tập 1 16 class Phan_so { friend ostream& operator<<(ostream&, const Phan_so&); // ... }; ostream& operator<<(ostream& os, const Phan_so& ps) { os << ps.tu << "/" << ps.mau; return os; } Operator <<: • Phải là hàm bên ngoài, và là hàm bạn của lớp • Tham số đầu vào đều là tham chiếu, tham số thứ 2 nên là tham chiếu hằng. • Trả về một tham chiếu tới đối tượng thuộc lớp ostream.
  • 17. Bài tập 2 – Tóm tắt 17 - Một Guild sẽ bao gồm n thành viên , mỗi thành viên có tên và các chỉ số HP, ATK và DEF, một thành viên trong Guild gồm các loại: - Nhân loại: có thêm thuộc tính job, bao gồm Human và Elf. - Bán nhân: có thêm thuộc tính racial, bao gồm Orc và Golbin. - Dị hình: không có thêm thuộc tính nào, bao gồm Vampire và Devil.
  • 18. Bài tập 2 – Tóm tắt 18 - Elf được + 50% DEF dựa trên DEF nhập vào - Orc được +50% HP dựa trên HP nhập vào - Golbin được + 10% ATK dựa trên ATK nhập vào - Vampire được +10% HP / mỗi Nhân loại trong Guild - Devil được +10% ATK và +10% DEF / mỗi Devil trong Guild
  • 19. Bài tập 2 – Tóm tắt 19 - HP <=0 thì coi như đã chết, không còn khả năng ATK - Mỗi lượt đánh sẽ gây sát thương (tức là trừ vào HP của đối phương) một lượng là (ATK bản thân – DEF đối phương), nếu DEF của đối phương cao hơn thì coi như sát thương là 0.
  • 20. Bài tập 2 – Tóm tắt 20 - Giả sử Guild đi đánh Boss, biết rằng 2 bên sẽ đánh nhau theo lượt, và bên Guild sẽ tấn công trước, tất cả các thành viên trong Guild sẽ lần lượt đánh vào Boss theo thứ tự trong đội hình, sau đó Boss sẽ tấn công vào thành viên ít máu nhất. - Xuất ra kết quả người chiến thắng và số máu còn lại của họ.
  • 21. Bài tập 2 – Tóm tắt 21 - Một Guild sẽ bao gồm n thành viên , mỗi thành viên có tên và các chỉ số HP, ATK và DEF, một thành viên trong Guild gồm các loại: - Nhân loại: có thêm thuộc tính job, bao gồm Human và Elf. - Bán nhân: có thêm thuộc tính racial, bao gồm Orc và Golbin. - Dị hình: không có thêm thuộc tính nào, bao gồm Vampire và Devil.
  • 22. Bài tập 2 – Sơ đồ lớp 22
  • 23. Bài tập 2 – Phân tích 23 - Lớp Character có 5 thuộc tính, trong đó: • dem_Nhan_loai: thuộc tính static, dùng để đếm số lượng đối tượng Nhan_loai được tạo, cho nó là thuộc tính protected của lớp cha Character để các lớp con Nhan_loai và Vampire đều có thể truy cập được ( Vampire được +10% HP trên mỗi Nhan_loai trong Guild )
  • 24. Bài tập 2 – Phân tích 24 - Lớp Character có 5 thuộc tính, trong đó: • dem_Nhan_loai: thuộc tính static, dùng để đếm số lượng đối tượng Nhan_loai được tạo, cho nó là thuộc tính protected của lớp cha Character để các lớp con Nhan_loai và Vampire đều có thể truy cập được ( Vampire được +10% HP trên mỗi Nhan_loai trong Guild ) Ôn lại kiến thức: • Thuộc tính tĩnh (static) là các thuộc tính đại diện cho cả một lớp đối tượng chứ không thuộc về một đối tượng cụ thể của lớp. • Một biến static dùng để chứa một thông tin chung cho cả lớp đối tượng (giá trị hằng, biến đếm,…)
  • 25. Bài tập 2 – Phân tích 25 - Lớp Character có 5 thuộc tính, trong đó: • dem_Nhan_loai: thuộc tính static, dùng để đếm số lượng đối tượng Nhan_loai được tạo, cho nó là thuộc tính protected của lớp cha Character để các lớp con Nhan_loai và Vampire đều có thể truy cập được ( Vampire được +10% HP trên mỗi Nhan_loai trong Guild ) Ôn lại kiến thức: • Lớp con được kế thừa các thuộc tính và phương thức đã được khai báo ở lớp cha.
  • 26. Bài tập 2 – Phân tích 26 Ôn lại kiến thức: - Ngoài việc được thừa kế, lớp con còn có thể định nghĩa thêm các thuộc tính, phương thức mới hoặc định nghĩa một phiên bản khác cho các phương thức ở lớp cha. - Phương thức ảo (có từ khóa virtual ở trước) là những phương thức lớp cha muốn lớp con định nghĩa lại (hay ghi đè – override).
  • 27. Bài tập 2 – Phân tích 27 - Lớp Character có 6 phương thức, trong đó có 2 phương thức ảo: • Nhap(): các lớp con có các thuộc tính mới sẽ định nghĩa lại hàm này để có thể nhập thêm dữ liệu. • adjust(): điều chỉnh chỉ số của nhân vật sau khi nhập tùy theo loại, mỗi lớp con sẽ có một phiên bản khác nhau.
  • 28. Bài tập 2 – Phân tích 28 - Lớp Character có 6 phương thức, trong đó có 2 phương thức ảo: • Nhap(): các lớp con có các thuộc tính mới sẽ định nghĩa lại hàm này để có thể nhập thêm dữ liệu. • adjust(): điều chỉnh chỉ số của nhân vật sau khi nhập tùy theo loại, mỗi lớp con sẽ có một phiên bản khác nhau. Đề bài: - Elf được + 50% DEF dựa trên DEF nhập vào - Orc được +50% HP dựa trên HP nhập vào - Golbin được + 10% ATK dựa trên ATK nhập vào - Vampire được +10% HP / mỗi Nhân loại trong Guild - Devil được +10% ATK và +10% DEF / mỗi Devil trong Guild
  • 29. Bài tập 2 – Phân tích 29 - Lớp Nhan_loai định nghĩa thêm một dữ liệu thành viên mới là job. - Lớp Ban_nhan cũng định nghĩa thêm một thuộc tính mới là racial. - Cả 2 lớp ghi đè (override) hàm Nhap() để có thể nhập thêm dữ liệu cho thuộc tính mới. - Ngoài ra hàm Nhap() của lớp Nhan_loai tăng giá trị của biến dem_Nhan_loai lên 1 sau mỗi lần nhập. Đề bài: - Nhân loại: có thêm thuộc tính job - Bán nhân: có thêm thuộc tính racial - Vampire được +10% HP / mỗi Nhân loại trong Guild
  • 30. Bài tập 2 – Phân tích 30 - Lớp Nhan_loai định nghĩa thêm một dữ liệu thành viên mới là job. - Lớp Ban_nhan cũng định nghĩa thêm một thuộc tính mới là racial. - Cả 2 lớp ghi đè (override) hàm Nhap() để có thể nhập thêm dữ liệu cho thuộc tính mới. - Ngoài ra hàm Nhap() của lớp Nhan_loai tăng giá trị của biến dem_Nhan_loai lên 1 sau mỗi lần nhập.
  • 31. Bài tập 2 – Phân tích 31 - Tất cả các lớp con trừ Human sẽ ghi đè phương thức adjust() để điều chỉnh chỉ số nhân vật. - Lớp Devil sẽ định nghĩa thêm một thuộc tính static là dem_Devil và ghi đè hàm Nhap() để tăng giá trị của dem_Devil lên 1 sau mỗi lần nhập. - Phương thức adjust() ở Vampire và Devil sẽ sử dụng các biến đếm static để điều chỉnh chỉ số nhân vật. Đề bài: - Elf được + 50% DEF dựa trên DEF nhập vào - Orc được +50% HP dựa trên HP nhập vào - Golbin được + 10% ATK dựa trên ATK nhập vào - Vampire được +10% HP / mỗi Nhân loại trong Guild - Devil được +10% ATK và +10% DEF / mỗi Devil trong Guild
  • 32. Bài tập 2 – Phân tích 32 - Tất cả các lớp con trừ Human sẽ ghi đè phương thức adjust() để điều chỉnh chỉ số nhân vật. - Lớp Devil sẽ định nghĩa thêm một thuộc tính static là dem_Devil và ghi đè hàm Nhap() để tăng giá trị của dem_Devil lên 1 sau mỗi lần nhập. - Phương thức adjust() ở Vampire và Devil sẽ sử dụng các biến đếm static để điều chỉnh chỉ số nhân vật.
  • 33. Bài tập 2 – Sơ đồ lớp 33
  • 34. Bài tập 2 – Phân tích 34 - Lớp Guild gồm một mảng các con trỏ thuộc lớp đối tượng Character. - Tuy nhiên các phần tử của mảng này nó thể giữ địa chỉ của các đối tượng thuộc các lớp khác nhau, miễn chúng là lớp con của Character.
  • 35. Bài tập 2 – Phân tích 35 - Lớp Guild gồm một mảng các con trỏ thuộc lớp đối tượng Character. - Tuy nhiên các phần tử của mảng này nó thể giữ địa chỉ của các đối tượng thuộc các lớp khác nhau, miễn chúng là lớp con của Character. Ôn lại kiến thức: - Miền giá trị của một biến con trỏ là địa chỉ ô nhớ. - Một con trỏ đối tượng thuộc lớp cơ sở có thể giữ địa chỉ của một đối tượng thuộc lớp dẫn xuất.
  • 36. Bài tập 2 – Phân tích 36 - Mục đích sử dụng con trỏ là để áp dụng tính chất đa hình. - Tùy vào kiểu dữ liệu mà các con trỏ trong mảng con trỏ Character giữ địa chỉ, các phiên bản khác nhau của các phương thức ảo Nhap(), adjust() tương ứng với từng lớp con Devil, Golbin, Elf, … sẽ được thực hiện. Ôn lại kiến thức: - Miền giá trị của một biến con trỏ là địa chỉ ô nhớ. - Một con trỏ đối tượng thuộc lớp cơ sở có thể giữ địa chỉ của một đối tượng thuộc lớp dẫn xuất.
  • 37. Bài tập 2 – Phân tích 37 - Trong phương thức Nhap() của Guild sử dụng thêm hàm bên ngoài là Character* init(int type) để cấp phát vùng nhớ cho từng biến con trỏ trong mảng. - Hàm sẽ trả về một vùng nhớ có kích thước bằng kích thước của kiểu dữ liệu tương ứng với loại được đưa vào. Đề bài: - Human: loại 1 - Elf: loại 2 - Golbin: loại 3 - Orc: loại 4 - Vampire: loại 5 - Devil: loại 6
  • 38. Bài tập 3 – Tóm tắt 38 Lớp ChungCu bao gồm các thuộc tính : - Tên chung cư (ten), - Số tầng (soTang), - Diện tích chung cư (dienTich), - Tên người quản lý (tenQL), - Tên đại diện sở hữu (soHuu) 2 lớp CCVinHome và CCBcon được kế thừa từ lớp ChungCu.
  • 39. Bài tập 3 – Tóm tắt 39 Lớp CCVinHome: - Tên đại diện người sở hữu : “Vinhomes”. - Tiền thuê phòng: • Diện tích > 600 m^2 : 10 – 15 triệu / phòng • Diện tích <= 600 m^2: 6 – 10 triệu / phòng Lớp CCBCons: - Tên đại diện người sở hữu sẽ là “Bcons”. - Tiền thuê phòng • Diện tích > 600 m^2 : 8 – 12 triệu / phòng • Diện tích <= 600 m^2: 5 – 8 triệu / phòng
  • 40. Bài tập 3 – Class Diagram 40
  • 41. Bài tập 3 – Phân tích 41 ten string soTang int dienTich double tenQL string soHuu string Lớp ChungCu:
  • 42. Bài tập 3 – Phân tích 42 Lớp ChungCu: • Hàm void importInfo(): Xuất thông tin chung cư • Hàm string guiThongBao(): Trả về phiếu thông báo về tình trạng tòa nhà cho ban quản lý chung cư khu vực : “Tên người quản lý – Tên chung cư – Tên đại diện sở hữu”
  • 43. Bài tập 3 – Phân tích 43 Lớp CCVinhome: • Lớp đối tượng CCVinhome kế thừa từ lớp đối tượng ChungCu bằng từ khóa dẫn xuất public • Thiết lập mặc định: soHuu = "Vinhomes"; • Hàm double tienPhong(): Trả về tiền phòng được tính theo diện tích của chung cư Vinhome thuộc về lớp đối tượng CCVinhome
  • 44. Bài tập 3 – Phân tích 44 Lớp CCBcon: • Lớp đối tượng CCBcon kế thừa từ lớp đối tượng ChungCu bằng từ khóa dẫn xuất public • Thiết lập mặc định: soHuu = “Bcons"; • Hàm double tienPhong(): Trả về tiền phòng được tính theo diện tích của chung cư Bcon thuộc về lớp đối tượng CCBcon
  • 45. Bài tập 3 – Phân tích 45 Các hàm bên ngoài Hàm void ChungCu_import(ChungCu**, int, int): Nhập thông tin các chung cư vào mảng Hàm void ChungCu_listExport(ChungCu**, int): Xuất thông tin các chung cư vào mảng Hàm Hàm void ChungCu_tienPhong(ChungCu**, int): Xuất Tổng số tiền mỗi tháng ban quản lý chung cư Làng Đại Học thu về
  • 46. Bài tập 4 – Tóm tắt 46 Bé An viết 3 thể loại thơ: - Lục bát (LB): số câu chia hết cho 2, câu lục 6 chữ, câu bát 8 chữ, âm 6 câu lục hiệp vần với âm 6 câu bát, âm 8 câu bát hiệp vần với âm 6 của câu lục tiếp theo. - Song thất lục bát (ST): Số câu chia hết cho 4, hai câu thất 7 chữ, lục 6 chữ, bát 8 chữ, chi tiết cách hiệp vần như mô tả sau: (T - trắc, B - bằng), các chữ cùng màu hiệp vần với nhau. 1 2 3 4 B 6 T 1 2 3 4 T 6 B 1 2 3 4 5 B 1 2 3 4 5 B 7 B 1 2 3 4 B 6 T … - Thất ngôn bát cú Đường luật (TN): 8 câu, 7 chữ/ câu, các câu 1 2 4 6 8 hiệp vần bằng
  • 47. Bài tập 4 – Tóm tắt 47 Bé An nhận được 3 loại tranh, với 6 loại màu: - Anh Châu (1): Vẽ cho thơ LB hoặc ST, nếu chọn màu xanh thì vẽ thêm 1 tranh màu xanh nữa - Anh Đông (2): Vẽ cho thơ LB hoặc TN, nếu vẽ cùng anh Châu thì sẽ dùng màu đối lập với anh Châu, nếu không thì chỉ vẽ tranh màu tím - Anh Vũ (3): Chỉ vẽ nhiều nhất cho 2 bài thơ, nếu số câu thơ chia hết cho 8 thì vẽ thêm 1 tranh cùng màu nữa. Tranh màu vàng mất chi phí là 1000 đồng bạc, các màu khác tốn 800 đồng bạc.
  • 48. Bài tập 4 – Tóm tắt 48 Yêu cầu: - Nhập số bài thơ và các bài thơ, kiểm định xem bài thơ có đúng hay không. - Nếu đúng, cho phép chọn những họa sĩ vẽ cho bài thơ đó và chọn màu. - In ra các bài thơ đúng, sau đó in ra tổng số tranh ở mỗi màu mà các họa sĩ phải vẽ
  • 49. Bài tập 4 – Phân tích 49 Các lớp: o Lớp BucTranh gồm 3 lớp con là Chau, Dong, Vu o Lớp dsTranh quản lý danh sách tranh o Lớp BaiTho gồm 3 lớp con là LB, ST, TN Các hàm bên ngoài: o Hàm kiemTraVan: trả về bool, truyền vào 2 string o Hàm amTrac: trả về bool, truyền vào 1 string Liên hệ giữa các lớp, các hàm: o Lớp BaiTho sử dụng các hàm bên ngoài để kiểm tra hiệp vần, bằng trắc o Lớp BaiTho có bao gồm đối tượng thuộc lớp dsTranh (để quản lý tranh)
  • 50. Bài tập 4 – Phân tích 50 Lớp BaiTho: - Chuỗi tenBaiTho quản lý tên bài thơ - Mảng cauTho[m][n] để quản lý bài thơ với câu thứ m ở dòng thứ m – 1 và chữ thứ n trong câu ở cauTho[m-1][n-1] - Biến soCau quản lý số câu thơ của bài thơ - dsTranh TranhList để quản lý các tranh ở mỗi bài thơ. - Hàm virtual void Nhap() - Hàm virtual bool KiemTra() - Hàm void Xuat()
  • 51. Bài tập 4 – Phân tích 51 Lớp con LB, ST, TN: Định nghĩa lại hàm Nhap() để tạo và nhập các bức tranh tương ứng - Kiểm tra bài thơ đã nhập có đúng hay không, nếu đúng thì cho phép nhập bức tranh - Thông qua TranhList để tạo và nhập bức tranh Định nghĩa lại hàm KiemTra() để kiểm tra theo đúng quy tắc
  • 52. Bài tập 4 – Phân tích 52 LB: - Số câu chia hết cho 2, câu lục 6 chữ, câu bát 8 chữ, âm 6 câu lục hiệp vần với âm 6 câu bát, âm 8 câu bát hiệp vần với âm 6 của câu lục tiếp theo. - Họa sĩ có thể vẽ cho thơ LB: Chau, Dong, Vu Lớp LB: Định nghĩa lại hàm KiemTra() để kiểm tra theo đúng quy tắc - Nếu số câu lẻ => 0 - Chỉ số lẻ => câu lục - Chỉ số chẵn => câu bát - Kiểm tra hiệp vần ở các câu 0 1 2 3 4 5 6 7 8 0 1 - - - - - V 2 - - - - - V - V 3 - - - - - V 4 - - - - - V - V 5 - - - - - V 6 - - - - - V - V
  • 53. Bài tập 4 – Phân tích 53 ST: - Số câu chia hết cho 4, thất 7 chữ, lục 6, bát 8 - Họa sĩ có thể vẽ cho thơ ST: Chau, Vu Lớp ST: Định nghĩa lại hàm KiemTra() để kiểm tra theo đúng quy tắc - Nếu số câu không chia hết cho 4 => 0 - Chỉ số mod 4 = 1 => câu thất đầu tiên - Chỉ số mod 4 = 2 => câu thất thứ hai - Chỉ số mod 4 = 3 => câu lục - Chỉ số mod 4 = 0 => câu bát - Kiểm tra hiệp vần ở các câu 0 1 2 3 4 5 6 7 8 0 1 - - - - B - T 2 - - - - T - B 3 - - - - - B 4 - - - - - B - B 5 - - - - B - T 6 - - - - T - B 7 - - - - - B 8 - - - - - B - B
  • 54. Bài tập 4 – Phân tích 54 TN: - 8 câu, 7 chữ/ câu, các câu 1 2 4 6 8 hiệp vần bằng - Họa sĩ có thể vẽ cho thơ TN: Dong, Vu Lớp TN: Định nghĩa lại hàm KiemTra() để kiểm tra theo đúng quy tắc - Nếu số câu khác 8 => 0 - Kiểm tra hiệp vần bằng ở các câu có chỉ số 1 2 4 6 8 0 1 2 3 4 5 6 7 8 0 1 - - - - - - B 2 - - - - - - B 3 - - - - - - - 4 - - - - - - B 5 - - - - - - - 6 - - - - - - B 7 - - - - - - - 8 - - - - - - B
  • 55. Bài tập 4 – Phân tích 55
  • 56. Bài tập 4 – Phân tích 56 Lớp BucTranh: - Biến type để dễ quản lý - Mảng colorName[7] chứa tên các màu tương ứng với ID màu - Biến idC quản lý màu vừa nhập của một đối tượng thuộc lớp (giá trị khởi tạo -1 => chưa nhập màu nào) 3 loại tranh, với 6 loại màu: - Anh Châu (1): chọn màu xanh thì vẽ thêm 1 tranh màu xanh nữa - Anh Đông (2): vẽ cùng anh Châu thì dùng màu đối lập với anh Châu, nếu không thì tranh màu tím - Anh Vũ (3): nhiều nhất 2 bài thơ, nếu số câu thơ chia hết cho 8 thì vẽ thêm 1 tranh cùng màu nữa. Tranh màu vàng mất chi phí là 1000 đồng bạc, các màu khác tốn 800 đồng bạc. Yêu cầu: in ra tổng số tranh ở mỗi màu mà các họa sĩ phải vẽ
  • 57. Bài tập 4 – Phân tích 57 Lớp BucTranh: - Biến type để dễ quản lý - Mảng colorName[7] chứa tên các màu tương ứng với ID màu - Biến idC quản lý màu vừa nhập của một đối tượng thuộc lớp (giá trị khởi tạo -1 => chưa nhập màu nào)
  • 58. Bài tập 4 – Phân tích 58 Lớp BucTranh: - Hàm virtual void Nhap() - Hàm virtual void Xuat() - Hàm set và get idC dùng cho mục đích xử lý yêu cầu của anh Đông - Hàm virtual void dividedByEight() để xử lý yêu cầu của anh Vũ
  • 59. Bài tập 4 – Phân tích 59 Lớp Chau, Dong, Vu: - Cần in ra tổng số tranh ở mỗi màu sau khi nhập tất cả các bài thơ và chọn tất cả các họa sĩ => Mảng tĩnh priColor[7] quản lý các ID màu và số tranh phải vẽ của ID màu đó, dùng chung cho tất cả đối tượng thuộc lớp. Lớp Vu chỉ vẽ nhiều nhất cho 2 bài thơ => biến tĩnh tongSoTho quản lý số bài thơ Vũ đã vẽ tranh cho. Trường hợp số câu chia hết cho 8 quản lý bằng bool dividedbyEight
  • 60. Bài tập 4 – Phân tích 60 Lớp Chau: public BucTranh Hàm void Nhap(int i) - Nhập id màu idC => priColor[idC]++ - Nếu idC == 2 (màu xanh) => priColor[idC]++ Hàm void Xuat(): Khớp các tranh trong mảng priColor tương ứng với tên màu trong mảng colorName rồi xuất. 0 1 2 3 4 5 6 - 0 0 0 0 0 0 - Cam Lam Vàng Lục Tím Đỏ
  • 61. Bài tập 4 – Phân tích 61 Lớp Dong: public BucTranh Lớp dsTranh sẽ thay đổi tính năng của idC: nếu có Châu, idC của anh Đông thay đổi thành màu vừa nhập của anh Châu => idC != -1 Hàm void Nhap() - Nếu idC != -1 thì thay đổi mảng priColor dựa vào idC - Nếu idC == -1 (không có Châu) thì priColor[5]++ (màu tím) Hàm void Xuat(): Khớp các tranh trong mảng priColor tương ứng với tên màu trong mảng colorName rồi xuất.
  • 62. Bài tập 4 – Phân tích 62 Lớp Dong: public BucTranh Lớp dsTranh sẽ thay đổi tính năng của idC: nếu có Châu, idC của anh Đông thay đổi thành màu vừa nhập của anh Châu Hàm void Nhap() - Nếu idC != -1 thì thay đổi mảng priColor dựa vào idC - Nếu idC == -1 (không có Châu) thì priColor[5]++ (màu tím) Hàm void Xuat(): Khớp các tranh trong mảng priColor tương ứng với tên màu trong mảng colorName rồi xuất. idC priColor Không có Châu -1 Thêm màu tím priColor[5] ++ Có Châu ID màu của Châu Tìm màu đối lập của idC priColor[ID đối lập] ++
  • 63. Bài tập 4 – Phân tích 63 Lớp Vu: public BucTranh Hàm dividedbyEight(): thay đổi giá trị dividedbyEight. Hàm void Nhap() - tongSoTho++ - Nếu tongSoTho <= 2 thì nhập idC, priColor[idC]++ - Nếu dividedbyEight == 1 thì priColor[idC]++ - Ngược lại thì in thông báo và không nhập nữa Hàm int tongSoTien(): chạy trên mảng priColor và tính tổng chi. Hàm void Xuat(): Khớp các tranh trong mảng priColor tương ứng với tên màu trong mảng colorName rồi xuất. Xuất tổng chi.
  • 64. Bài tập 4 – Phân tích 64 Lớp dsTranh Mảng hoaSi[4]: bool kiểm tra sự có mặt của họa sĩ ở mỗi bài thơ BucTranh**bucTranh = new BucTranh*[3] quản lý các bức tranh của 3 họa sĩ cho mỗi bài thơ bool haveChau, dividedbyEight để xử lí các trường hợp ngoại lệ
  • 65. Bài tập 4 – Phân tích 65 Lớp dsTranh: Constructor khởi tạo 3 đối tượng Châu, Đông, Vũ cho bucTranh[0], bucTranh[1], bucTranh[2] => làm việc trên 3 đối tượng này Destructor vì có con trỏ Hàm Nhap(int type) type dùng để quy định chế độ nhập đặc thù của các họa sĩ (VD: Thơ TN chỉ được nhập Đông hoặc Vũ) => được gọi và truyền đối số trong lớp LB, TN, ST. Ý tưởng: Khi nhập họa sĩ số 3, hoaSi[3] = 1 Hàm Xuat() in toàn bộ tình trạng tranh của họa sĩ 0 1 (Châu) 2 (Đông) 3 (Vũ) 0 1 0 Ví dụ: Có mặt Đông, không có Châu và Vũ
  • 66. Bài tập 4 – Phân tích 66 Lớp dsTranh: setDividedByEight(bool dividedbyEight) phục vụ yêu cầu của anh Vũ - Tại hàm Nhap() của lớp bài thơ sẽ gọi hàm này, với đối số truyền vào là bool (soCau%8 == 0)
  • 67. Bài tập 4 – Phân tích 67 Lớp dsTranh: Hàm taoHoaSi() sẽ duyệt tình trạng mảng hoaSi để nhập và thay đổi các thuộc tính của họa sĩ. - Duyệt mảng hoaSi - Họa sĩ nào có mặt (key = 1) thì nhập thông tin của họa sĩ đó - Xem xét sự có mặt của Châu để đổi giá trị biến haveChau => tùy chỉnh idC của Đông nếu cần - Xem xét giá trị biến dividedbyEight để gọi hàm dividedByEight() của Vũ. 0 1 (Châu) 2 (Đông) 3 (Vũ) 1 1 0 Duyệt qua Châu => có mặt Châu - haveChau = 1; - Nhập thông tin của Châu Duyệt qua Đông => có mặt Đông - haveChau == 1 => setidC của Đông bằng idC của Châu - Nhập thông tin của Đông Duyệt qua Vũ => không có mặt Vũ => kết thúc
  • 68. Bài tập 4 – Phân tích 68 Các hàm bên ngoài Hàm string getVan (string a): Lấy vần của một chữ (cắt từ nguyên âm đầu tiên đến cuối chữ, trừ trường hợp có phụ âm đầu == 'q': qua, quý... thì lấy từ nguyên âm thứ hai) Hàm bool amTrac (string a): Nếu phụ âm cuối là 't', 'c' hoặc 'p' thì trả về true Hàm bool hiepVan (string a, string b): Trả về true nếu hiệp vần theo đúng quy tắc (nhớ kiểm tra các ngoại lệ như vần "an" - "ang" hay "at" - "ac", "y" - "i")
  • 69. Bài tập 4 – Sơ đồ lớp 69
  • 70. Tổng hợp lời giải mẫu 70
  • 72. BAN HỌC TẬP CÔNG NGHỆ PHẦN MỀM TRAINING GIỮA KỲ HỌC KỲ I NĂM HỌC 2022 – 2023 CONTACT bht.cnpm.uit@gmail.com fb.com/bhtcnpm fb.com/groups/bht.cnpm.uit Khoa Công nghệ Phần mềm Trường Đại học Công nghệ Thông tin Đại học Quốc gia thành phố Hồ Chí Minh BAN HỌC TẬP 72 HẾT CẢM ƠN CÁC BẠN ĐÃ THEO DÕI CHÚC CÁC BẠN CÓ KẾT QUẢ THI THẬT TỐT!