You are on page 1of 34

MỤC LỤC

NỘI DUNG TRANG

LỚP VÀ ĐỐI TƯỢNG (1/3) ................................................ 1

LỚP VÀ ĐỐI TƯỢNG (2/3) ................................................ 5

LỚP VÀ ĐỐI TƯỢNG (3/3) ................................................ 9

OPERATOR OVERLOADING ........................................ 11

THỪA KẾ ............................................................................ 15

ĐA HÌNH (1/2) .................................................................... 19

ĐA HÌNH (2/2) .................................................................... 25

INTERFACE ....................................................................... 27

XỬ LÝ NGOẠI LỆ ............................................................. 29
LỚP VÀ ĐỐI TƯỢNG (1/3)

MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1. Hiểu được nguyên tắc đầu tiên (trụ cột đầu tiên) của lập trình hướng đối
tượng: Đóng gói (Encapsulation)
2. Hiểu cách mô hình các đối tượng/lớp đơn giản trong thế giới thực thành các
đối tượng/lớp trong lập trình
3. Biết và Hiểu rõ các thành phần cơ bản của một lớp
a. Fields
b. Constructors
c. Methods
4. Có kỹ năng xây dựng các lớp đơn giản, cùng với các phương thức tính toán
đơn giản thông qua ngôn ngữ lập trình C#

Bài 1. Xây dựng lớp Account


Một tài khoản ngân hàng của khách hàng có một số thông tin: Mã số tài khoản,
số tiền
 Khai báo các fields
 Thêm phương thức constructor để tạo đối tượng tài khoản có 2 thông tin
trên
 Thêm các phương thức Get/Set cho các fields

Viết phương thức Main()


 Dùng constructor để tạo 1 tài khoản, sau đó xuất thông tin tài khoản lên
màn hình
 Thay đổi số tiền trong tài khoản, sau đó xuất lại thông tin tài khoản lên màn
hình

1
Ví dụ:
Thong tin tai khoan hien tai:
- Ma so tai khoan: 123456
- So tien: 1000000

Thong tin tai khoan sau khi cap nhat:


- Ma so tai khoan: 123456
- So tien: 800000

Bài 2. Xây dựng lớp Book


Một quyển sách chứa một số thông tin: mã sách, tên sách, giá sách, giảm giá
 Khai báo các fields
 Thêm các phương thức constructors để:
o Tạo đối tượng sách có mã sách và tên sách
o Tạo đối tượng sách có đầy đủ 4 thông tin trên
 Thêm các phương thức Get/Set cho các fields
 Thêm phương thức tính giá bán của 1 quyển sách, biết rằng:
Giá bán một quyển sách = Giá sách – Giảm giá .

Viết phương thức Main()


 Dùng constructor để tạo 1 quyển sách
 In thông tin quyển sách ra màn hình, sau đó tính và xuất giá bán của quyển
sách đó.
 Thay đổi Giảm giá, sau đó in thông tin quyển sách ra màn hình
 Tính và xuất giá bán mới của quyển sách đó.

Ví dụ:
Thong tin quyen sach hien tai:
- Ma so sach: B1234
- Ten sach: Mindset
- Gia sach: 70000
- Giam gia: 7000

Gia ban cua sach: 63000

Thong tin quyen sach sau khi cap nhat:

2
- Ma so sach: B1234
- Ten sach: Mindset
- Gia sach: 70000
- Giam gia: 24000

Gia ban cua sach: 46000

Bài 3. Xây dựng lớp Student


Một sinh viên có một số thông tin: mã sinh viên, họ tên, năm sinh, địa chỉ
 Khai báo các fields
 Thêm các constructors để:
o Tạo đối tượng có mã sinh viên và tên sinh viên
o Tạo đối tượng có đầy đủ 4 thông tin trên
 Thêm các phương thức Get/Set cho các fields
 Thêm phương thức tính tuổi của sinh viên

Viết phương thức Main() dùng constructor để tạo 1 sinh viên, sau đó in thông
tin sinh viên ra màn hình và tính tuổi của sinh viên đó.

Ví dụ:
Thong tin sinh vien:
- Ma sinh vien: TH151234
- Ho ten: Nguyen Van A
- Nam sinh: 1997
- Dia chi: 123 Nguyen Trai, P10, Q5, TP.HCM

Tuoi cua sinh vien: 19 tuoi

3
Bài 4. Xây dựng lớp Circle
Một hình tròn có bán kính r
 Khai báo field
 Thêm các constructors:
o Constructor dùng để tạo đối tượng hình tròn có bán kính r
o Constructor không có tham số (còn gọi là parameterless
constructor hay default constructor) để tạo đối tượng hình tròn có
bán kính r bằng 1
 Thêm các phương thức Get/Set cho field
 Thêm phương thức Input() để nhập thông tin của hình tròn từ bàn phím
 Thêm phương thức Output() để xuất thông tin của hình tròn ra màn hình
 Thêm phương thức tính diện tích của hình tròn: 𝑆 = 𝜋. 𝑟 2
 Thêm phương thức tính chu vi của hình tròn: 𝐶 = 2. 𝜋. 𝑟

Viết phương thức Main()


 Dùng default constructor để tạo 1 hình tròn có giá trị mặc định
 Xuất thông tin hình tròn ra màn hình
 Nhập bán kính khác cho hình tròn từ bàn phím
 In thông tin hình tròn đã nhập, sau đó tính diện tích và chu vi của hình tròn
đó

Ví dụ:
Thong tin hinh tron:
Ban kinh r: 1

Nhap hinh tron:


Nhap ban kinh r: 16

Thong tin hinh tron:


Ban kinh r: 16

Dien tich hinh tron: …


Chu vi hinh tron: …

4
LỚP VÀ ĐỐI TƯỢNG (2/3)

MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1. Có kỹ năng sử dụng các properties
2. Có kỹ năng sử dụng các lớp đã xây dựng:
a. Tạo Mảng các đối tượng của lớp đã xây dựng
b. Tạo Field của lớp có kiểu là lớp khác

Bài 1. Dùng property với lớp Account


Trong lớp Account thay thế các phương thức Get/Set thành các properties. Và
kiểm tra tính hợp lệ trước khi thay đổi dữ liệu của field
 Số tiền phải là số dương

Bài 2. Dùng properties với lớp Book


Trong lớp Book thay thế các phương thức Get/Set thành properties. Và kiểm tra
tính hợp lệ trước khi thay đổi dữ liệu của các fields
 Tên sách không được là chuỗi rỗng
 Giá sách phải là số dương
 Giảm giá không được là số âm

Bài 3. Dùng properties với lớp Student


Trong lớp Student thay thế các phương thức Get/Set thành properties. Và kiểm
tra tính hợp lệ trước khi thay đổi dữ liệu của các fields
 Họ tên không được là chuỗi rỗng
 Năm sinh là phải là số dương
 Địa chỉ không được là chuỗi rỗng

5
Bài 4. Dùng properties với lớp Circle
Trong lớp Circle thay thế các phương thức Get/Set thành properties. Và kiểm tra
tính hợp lệ trước khi thay đổi dữ liệu của field
 Bán kính r là phải là số không âm

Bài 5. Sử dụng mảng đối tượng của lớp Circle


Tạo project mới, sau đó thêm lớp Circle ở project trên vào project này
Viết phương thức Main()
 Khai báo và nhập n hình tròn (số n được nhập từ bàn phím)
 Xuất thông tin n hình tròn đã nhập ra màn hình
 Tính và xuất diện tích của từng hình tròn trên
 Tìm diện tích lớn nhất trong n hình tròn trên

Ví dụ:
Nhap so duong tron n: 3

Nhap duong tron thu 1:


Ban kinh r: 5
Nhap duong tron thu 2:
Ban kinh r: 8
Nhap duong tron thu 3:
Ban kinh r: 15

3 duong tron da nhap:


Ban kinh r: 5
Ban kinh r: 8
Ban kinh r: 15

Dien tich cua 3 duong tron:


Dien tich duong tron 1: …
Dien tich duong tron 2: …
Dien tich duong tron 3: …

Dien tich duong tron lon nhat: …

6
Bài 6. Tạo lớp Color
Trên máy tính, màu (color) được biểu diễn bằng các giá trị red, green, blue (có
giá trị từ 0 đến 255) và alpha (hay transparency, mức độ trong suốt của màu, cũng
có giá trị từ 0 đến 255, với 0 là hoàn toàn trong suốt, 255 là đậm đặc). Hãy tạo lớp
Color
 Thêm các instance variables (một cách gọi khác của fields)
 Thêm các constructors
o Constructor không tham số (default constructor) để tạo đối tượng
sao cho các fields: red, green, blue, alpha có giá trị mặc định là 255
(màu trắng)
o Constructor có tham số để tạo đối tượng màu có 4 thông tin trên
o Constructor có tham số là đối tượng color cho trước. Constructor
này có nhiệm vụ tạo đối tượng màu và sao chép thông tin của đối
tượng color trong tham số vào đối tượng mới tạo (Người ta còn gọi
constructor này là Copy constructor)
public Color() {}
public Color(int red, int green, int blue, int alpha) {}
public Color(Color color) {}
 Thêm các properties cho các fields với các ràng buộc của các field như đã
mô tả
 Thêm phương thức tính giá trị mức xám (grayscale) của màu (grayscale
bằng trung bình của red, green, blue)

Bài 7. Xây dựng lớp Ball, sử dụng lớp Color làm field
Trái banh có các fields: kích thước (size hay radius), màu sắc (color) và số lần
ném banh (timeOfThrown)
 Khai báo các fields cho Ball (field color nên dùng kiểu Color đã tạo trong
bài trước)
 Thêm các constructors

7
o Constructor không tham số để tạo đối tượng Ball có những thông
tin mặc định: kích thước bằng 1, số lần ném banh là 0, màu là màu
mặc định
o Constructor có tham số để tạo đối tượng có 3 thông tin trên
 Thêm các properties cho các fields (nhớ ràng buộc dữ liệu hợp lý)
 Thêm phương thức Pop (Pop nghĩa là mô hình việc làm cho trái banh nổ):
Banh nổ nghĩa là thay đổi size thành giá trị 0
 Thêm phương thức Throw (Throw nghĩa là mô hình việc ném trái banh):
Ném banh nghĩa là cộng 1 vào số lần ném (nhưng chỉ cộng khi banh chưa
bị nổ)
 Viết phương thức Input() để nhập thông tin trái banh
 Viết phương thức Output() xuất thông tin trái banh

Viết phương thức Main()


 Khai báo và tạo n trái banh có giá trị mặc định (số n được nhập từ bàn phím)
 Nhập lại thông tin trái banh thứ 0
 Xuất thông tin n trái banh ra màn hình (kiểm tra xem dữ liệu có như mong
đợi không)
 Ném trái banh thứ 1, 2
 Cho nổ trái banh thứ 1 và nén trái banh thứ 1
 In số lần nén của các trái banh

8
LỚP VÀ ĐỐI TƯỢNG (3/3)

MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
Có kỹ năng sử dụng các lớp đã xây dựng:
a. Tạo Field của lớp là mảng/danh sách có kiểu là lớp khác
b. Tạo Phương thức có tham số là lớp
c. Tạo Phương thức có kiểu trả về là lớp

Bài 1. Xây dựng lớp Account


Một tài khoản ngân hàng của khách hàng có một số thông tin: Mã số tài khoản,
số tiền (balance)
 Khai báo các fields
 Thêm các constructors để
o Tạo tài khoản không có mã số và số tiền bằng 0 (default constructor)
o Tạo đối tượng tài khoản có 2 thông tin trên
 Thêm các properties cho các fields
 Thêm phương thức Input() để nhập thông tin tài khoản từ bàn phím
 Thêm phương thức Output() để xuất thông tin tài khoản ra màn hình

Bài 2. Xây dựng lớp Customer sử dụng lớp Account


Một khách hàng của ngân hàng có một số thông tin sau: Mã số khách hàng, số
Chứng minh nhân dân, địa chỉ. Ngoài ra, một khách hàng có thể có nhiều tài
khoản ngân hàng.
 Khai báo các fields
 Thêm các constructors
o Constructor không tham số để tạo thông tin khách hàng có những giá
trị mặc định
o Constructor tạo đối tượng khi có mã số khách hàng
9
 Thêm các properties cho các fields
 Thêm phương thức Input() để nhập thông tin khách hàng từ bàn phím
(Không nhập danh sách tài khoản của khách hàng)
 Thêm phương thức Output() để xuất thông tin khách hàng ra màn hình
(Bao gồm cả thông tin các tài khoản của khách hành)

Viết phương thức Main()


 Nhập thông tin của một khách hàng
 Xuất thông tin khách hàng đã nhập lên màn hình

Bài 3. Phương thức có tham số là lớp đã định nghĩa


Trong lớp Customer, cài đặt phương thức để thêm một tài khoản đã nhập của
khách hàng vào danh sách các tài khoản của khách hàng
public void AddAcount(Account account)

Viết phương thức Main()


 Nhập thông tin của một tài khoản
 Thêm tài khoản đã nhập vào danh sách tài khoản của khách hàng
 Xuất thông tin khách hàng đã nhập lên màn hình (kiểm tra xem có thông
tin tài khoản vừa mới thêm vào chưa)

Bài 4. Phương thức có kiểu trả về là kiểu lớp


Trong lớp Customer, viết phương thức tìm kiếm tài khoản có mã số tài khoản cho
trước.
Account SearchAccount(string accountNo)

Viết phương thức Main()


 Nhập mã số tài khoản của khách hàng
 Kiểm tra xem khách hàng có tài khoản đó không? Nếu có xuất thông tin
của tài khoản
10
OPERATOR OVERLOADING

MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1. Hiểu được ý nghĩa của operator overloading
2. Biết được các phép toán được overload và phép toán không được overload
3. Có kỹ năng sử dụng operator overloading

Bài 1. Xây dựng lớp Vector


Một vector trong không gian 2 chiều gồm có 2 phần x và y.
Ví dụ:
𝑎⃗ = (1, 2)
𝑏⃗⃗ = (3, 4)
Tổng 2 vector được định nghĩa : 𝑐⃗ = 𝑎⃗ + 𝑏⃗⃗ = (1 + 3, 2 + 4) = (4, 6)
Hiệu của 2 vector được định nghĩa : 𝑑⃗ = 𝑎⃗ − 𝑏⃗⃗ = (1 − 3, 2 − 4) = (−2, −2)

Hãy xây dựng lớp Vector:


 Khai báo cáo fields
 Viết default constructor tạo vector (0, 0)
 Viết constructor tạo vector có 2 thành phần trên
 Cài đặt các properties
 Overload phép toán cộng 2 vector
 Overload phép toán trừ 2 vector
Viết phương thức Main() tạo 2 đối tượng vector, tính tổng và hiệu 2 vector đó,
sau đó xuất kết quả ra màn hình để kiểm tra kết quả đúng hay không.

11
Bài 2. Overload phép toán so sánh
Hai vector được gọi là bằng nhau khi các thành phần của 2 vector tương ứng bằng
nhau, nghĩa là với: 𝑎⃗ = (𝑎1 , 𝑎2 ); 𝑏⃗⃗ = (𝑏1 , 𝑏2 );
𝑎 = 𝑏1
𝑎⃗ == 𝑏⃗⃗ ⟺ { 1
𝑎2 = 𝑏2

Trong lớp vector hãy overload phép toán so sánh bằng “==” giữa hai vector
Viết phương thức Main() kiểm tra phép toán “==” vừa overload

Bài 3. Cộng số thực với vector


Cộng vector với một số thực được định nghĩa như sau:
Cho 𝑎⃗ = (𝑎1 , 𝑎2 ) và số thực 𝑘
𝑎⃗ + 𝑘 = (𝑎1 + 𝑘, 𝑎2 + 𝑘)
Trong lớp vector hãy
 Overload phép toán cộng vector với 1 số thực
 Overload phép toán cộng 1 số thực với 1 vector

Bài 4. Lớp Phân số


Phân số (PhanSo) gồm có tử số và mẫu số. Hãy xây dựng lớp phân số:
 Khai báo các fields
 Constructor không tham số để tạo phân số 0/1
 Constructor có tham số để tạo phân số có 2 thông tin trên
 Cài đặt các Properties
 Phương thức nhập phân số từ bàn phím
 Phương thức xuất phân số ra màn hình
 Overload các phép toán cộng (+), trừ (-) hai phân số
 Overload các phép toán nhân (*), chia (/) hai phân số
Viết phương thức Main() nhập vào 2 phân số, tính tổng, hiệu, tích, thương của 2
phân số

12
VD:
Nhap phan so thu 1:
tu = 1
mau = 2

Nhap phan so thu 2:


tu = 3
mau = 2

1/2 + 3/2 = 4/2


1/2 - 3/2 = -2/2
1/2 * 3/2 = 3/4
1/2 / 3/2 = 2/6

Bài 5. Sử dụng lớp Phân số


Sử dụng lớp phân số trên thực hiện các chức năng
 Nhập n phân số (n nhập từ bàn phím) (Có thể dùng List nếu đã học)
 Tính tổng n phân số và xuất kết quả ra màn hình

Bài 6. Các phép toán so sánh trong phân số


Trong lớp phân số, hãy cài đặt thêm các phép toán so sánh
Trong phương thức Main()
 Nhập n phân số
 Sắp xếp các phân số tăng dần và xuất ra màn hình để kiểm chứng
 Tìm 1 phân số có giá trị lớn nhất và xuất ra màn hình phân số này

13
THỪA KẾ

MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1. Hiểu được nguyên tắc thứ hai (trụ cột thứ hai) của lập trình hướng đối
tương: thừa kế (inheritance)
2. Xây dựng lớp mới (lớp dẫn xuất) bằng cách thừa kế từ lớp cũ (lớp cơ sở)
và thêm các fields, properties và method mới
3. Sử dụng constructor của lớp cơ sở
4. Sử dụng constructor của lớp cơ sở

Bài 1. Lớp cơ sở
Một người (Person) cần mô hình trên máy gồm có các thông tin: tên (name) và
email
 Khai báo các Fields
 Cài đặt các Properties
 Viết default constructor để tạo đối tượng có giá trị mặc định
 Viết parameter constructor để tạo đối tượng có 2 thông tin trên

Bài 2. Lớp dẫn xuất


Chúng ta cần quản lý thông tin của một sinh viên (Student) trên máy tính. Sinh
viên (Student) cũng là một người (Person) thông thường, nghĩa là cũng có các
thông tin như: tên (name), email. Tuy nhiên, sinh viên còn có thêm thông tin
khác là mã sinh viên (StudentID)
Hãy xây dựng lớp Student
 Lớp Student thừa kế lớp Person
 Khai báo Field
 Cài đặt Property

15
 Viết default constructor để tạo đối tượng có giá trị mặc định
 Viết parameter constructor để tạo đối tượng có 3 thông tin trên
Viết phương thức Main() tạo 1 đối tượng sinh viên (dùng constructor để tạo) và
xuất thông tin sinh viên lên màn hình

Bài 3. Gọi constructor của lớp cơ sở


Trong bài 2, chỉnh sửa lại parameter constructor của lớp Student sao cho
constructor này có thể gọi constructor của lớp cơ sở (Person) để nhờ khởi tạo
name và email khi tạo đối tượng sinh viên.

Bài 4. Xây dựng lớp Tam giác và lớp Chữ nhật


Lớp cơ sở: Lớp hình (Shape)
Xây dựng lớp hình (Shape) dùng để mô hình hóa một hình gồm có thông tin chiều
cao (height) và chiều rộng (width) của hình.
 Khai báo các Fields
 Cài đặt default constructor để tạo đối tượng có giá trị mặc định
 Cài đặt parameter constructors để tạo đối tượng có 3 thông tin trên
 Cài đặt các properties

16
Lớp dẫn xuất: Xây dựng lớp tam giác (Triangle) và lớp hình chữ nhật
(Rectangle)
Hình Tam giác và hình chữ nhật cũng là một hình có các thông tin như sau:

height
height

base width
Trong đó tham số base của tam giác có thể coi như là width
Xây dựng 2 lớp dẫn xuất là lớp hình tam giác (Triangle) và lớp hình chữ nhật
(Rectangle) thừa kế từ lớp Shape.
Sơ đồ kế thừa:

 Cài đặt default constructor


 Cài đặt parameter constructors

17
 Cài đặt các properties (Chú ý: lớp Triangle tạo property có tên là Base
thay vì Width)
 Cài đặt thêm phương thức Area() để tính diện tích các hình tương ứng
1
𝑆𝑡𝑎𝑚 𝑔𝑖á𝑐 = × ℎ𝑒𝑖𝑔ℎ𝑡 × 𝑤𝑖𝑑𝑡ℎ
2
𝑆𝑐ℎữ 𝑛ℎậ𝑡 = ℎ𝑒𝑖𝑔ℎ𝑡 × 𝑤𝑖𝑑𝑡ℎ

Bài 5. Xây dựng lớp dựa trên sơ đồ


Cho sơ đồ lớp như sau

 Hãy xây dựng các lớp thừa kế theo sơ đồ trên


 Product có constructor với 2 tham số
 Software có constructor với 3 tham số
 Hardware có constructor với 3 tham số
 Tạo đối tượng Software và xuất thông tin đối tượng ra màn hình
 Tạo đối tượng Hardware và xuất thông tin đối tượng ra màn hình
18
ĐA HÌNH (1/2)

MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1. Hiểu được nguyên tắc thứ ba (trụ cột thứ ba) của lập trình hướng đối tượng:
đa hình (polymorphím) – sau các nguyên tắc đóng gói (encapsulation) và
thừa kế (inheritance).
2. Có kỹ năng thực hiện các bước xây dựng lớp/phương thức có tính đa
hình
a. Hiểu được từ khóa virtual trong lớp cơ sở
b. Có kỹ năng override method của lớp dẫn xuất
3. Sử dụng các lớp/phương thức có tính đa hình

Bài 1. Biết và Hiểu các bước xây dựng phương thức có tính đa hình
Có 3 loại xe hơi (Car): LandRover, Ford, Honda cần mô hình trên máy tính
LandRover Ford Honda

Mỗi loại xe trên tương ứng với một lớp: Lớp LandRover, lớp Ford, lớp Honda

Mỗi loại xe khi di chuyển (Move) sẽ dùng những động cơ khác nhau
 Xe LandRover : Dùng động cơ 2.0 L engine
 Xe Ford : Dùng động cơ V engine
 Xe Honda : Dùng động cơ i-vtec engine

Như vậy, mỗi lớp có phương thức Move() riêng để xuất ra màn hình thông tin
động cơ của xe mình đang dùng.
19
Hãy thiết kế các lớp và viết phương thức Move() của các lớp sao cho:
- Lúc đầu người dùng tạo ra một danh sách chứa các đối tượng trên (danh
sách này vừa chứa xe LandRover, vừa chứa xe Ford và vừa chứa xe
Honda, mỗi loại xe có thể được tạo nhiều lần)
- Với danh sách đối tượng đã tạo, khi ra lệnh Move (Gọi phương thức
Move()) cho từng đối tượng trong danh sách, các đối tượng sẽ dùng các
động cơ tương ứng của mình để di chuyển (yêu cầu, chỉ cần xuất ra màn
hình xe di chuyển bằng động cơ nào trong phương thức Move()). Người ta
nói, phương thức Move() như vậy có tính đa hình
Cụ thể, hãy thiết kế các lớp và viết các phương thức Move() sao cho phương thức
Main() hoạt động và cho kết quả như sau:
static void Main()
{
Car[] cars = new Car[3];

cars[0] = new LandRover();


cars[1] = new Ford();
cars[2] = new Honda();

foreach (Car car in cars)


car.Move();
}
Phương thức Move() chạy sẽ cho kết quả: car.Move() gọi Move() của
lớp LandRover
Move: LandRover (2.0 L engine)
Move: Ford (V engine) car.Move() gọi Move() của
Move: Honda (i-vtex engine) lớp Ford

car.Move() gọi Move() của


lớp Honda

20
Sơ đồ kế thừa:

 Cài đặt sơ đồ thừa kế trên


 Cài đặt phương thức Move() sao cho phương thức này có tính đa hình
 Trong trong phương thức Main(), viết lệnh kiểm tra tính đa hình của
phương thức Move() như đã mô tả

Chú ý: Phương thức Main() có thể viết khác đi (Dùng collection có tên List)
static void Main()
{
List<Car> cars = new List<Car>();
cars.Add(new LandRover());
cars.Add(new Ford());
cars.Add(new Honda());

foreach (Car car in cars)


car.Move();
}
Kết quả khi thực hiện các lệnh trên vẫn là:
21
Move: LandRover (2.0 L engine)
Move: Ford (V engine)
Move: Honda (i-vtex engine)

Bài 2. Tính đa hình của phương thức tính diện tích Area() của các hình
Có 2 loại hình khác nhau cần quản lý: hình chữ nhật (Rectange), hình tròn
(Circle).

radius
height o

width

 Hình chữ nhật: có chiều cao (height) và chiều rộng (width)


 Hình tròn: có bán kính radius

Diện tích các hình tính như sau:


𝑆𝑐ℎữ 𝑛ℎậ𝑡 = ℎ𝑒𝑖𝑔ℎ𝑡 × 𝑤𝑖𝑑𝑡ℎ
𝑆ℎì𝑛ℎ 𝑡𝑟ò𝑛 = 3.14 × 𝑟𝑎𝑑𝑖𝑢𝑠 2
Yêu cầu:
 Hãy thiết kế các lớp (vẽ sơ đồ lớp) cho bài toán sao cho phương thức tính
diện tích Area() của từng hình có tính đa hình (chú ý: lớp cơ sở không cần
phải có fields)
 Hãy cài đặt sơ đồ lớp trên sao cho phương thức tính diện tích Area() của
từng hình có tính đa hình
 Tạo một danh sách chứa một số đối tượng Rectangle, Circle (dùng phương
thức constructor để tạo đối tượng)
 Tính diện tích của từng hình (xuất diện tích ra màn hình)
 Tính tổng diện tích các hình
Bài 3. Tính đa hình của phương thức nhập (Input())/xuất (Output())

22
Trong bài 2,
 Viết phương thức nhập dữ liệu Input() cho lớp hình chữ nhật và hình tròn
sao cho phương thức này có tính đa hình
 Viết phương thức xuất dữ liệu Output() cho lớp hình chữ nhật và hình tròn
sao cho phương thức này có tính đa hình
 Trong phương thức Main()
o Nhập n hình khác nhau (n nhập từ bàn phím).
o Xuất thông tin các hình đã nhập
o Tính và xuất diện tích từng hình đã nhập. Tính và xuất diện tổng diện
tích các hình đã nhập

Phương thức Main() hoạt động cho kết quả có dạng như sau:
Nhap so hinh n: 2
Nhap hinh thu 1:
Loai hinh (Neu hinh chu nhat nhap ‘C’, hinh tron nhap ‘T’): C
Height: 3
Width: 4

Nhap hinh thu 2:


Loai hinh (Neu hinh chu nhat nhap ‘C’, hinh tron nhap ‘T’): T
Radius: 9

Cac hinh da nhap:


Hinh chu nhat: Height=3, Width=4
Hình tron: Radius=9

Dien tich hinh chu nhat: …


Dien tich hinh tron: …
Tong dien tich: …

23
ĐA HÌNH (2/2)

MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1. Phân tích, thiết kế bài toán đơn giản có tính đa hình
2. Sử dụng các lớp/phương thức có tính đa hình

Bài 1. Tính lương nhân viên


Công ty phần mềm TinySoft (cạnh tranh với Microsoft) đang cần quản lý các nhân
viên của mình. Nhân viên công ty thuộc một trong hai bộ phận: Programmer và
Tester. Thông tin cơ bản của nhân viên gồm: mã nhân viên, họ tên nhân viên
Lương hàng tháng của mỗi bộ phận như sau:
 Programmer: Mỗi lập trình viên có lương hàng tháng riêng. Nếu trong
tháng số lỗi lập trình < 20 thì được tăng thêm 10% lương.
 Tester: Mỗi nhân viên kiểm thử phần mềm ngoài mức lương cơ bản hàng
tháng, nhân viên còn nhận được tiền overtime (gọi tắt là OT: tiền làm qua
đêm). Số tiền OT bằng số giờ OT nhân với 200.000 đồng
Yêu cầu: Hãy viết chương trình nhập n nhân viên và tính lương của n nhân viên
này.

Bài 2. Tính điểm thí sinh


Phân tích, thiết kế và hiện thực theo hướng đối tượng chương trình tính điểm thi
cho các thí sinh trong một cuộc thi tin học, thông tin Cuộc thi: danh sách thí sinh.
Cuộc thi giành cho hai đối tượng thí sinh:
Chuyên (giành cho những thí sinh chưa có giải trước đây)
Siêu cúp (giành cho những thí sinh đã đoạt giải trước đây).
Biết rằng các thí sinh phải làm 3 bài thi lập trình, riêng đối tượng Chuyên làm
thêm bài thi tiếng Anh (để cộng điểm thêm), đối tượng Siêu cúp phải làm thêm
bài cơ sở dữ liệu (CSDL).

25
 Thông tin chung của các thí sinh: sbd (số báo danh), hoten (họ tên), bai1,
bai2, bai3 (điểm của bài 1, 2, 3), tongdiem (tổng điểm cuối cùng của từng
thí sinh)
 Thông tin riêng cho đối tượng Chuyên: tiengAnh (điểm tiếng Anh)
 Thông tin riêng cho đối tượng Siêu cúp: csdl (điểm CSDL)

Kết quả được xét như sau:


 Thí sinh Chuyên: Tổng 3 bài thi lập trình + điểm thưởng tiếng Anh được
xét như sau:
o 7≤tiengAnh≤8: cộng 1 điểm
o 9≤tiengAnh≤10: cộng 2 điểm
 Thí sinh Siêu cúp: Tổng điểm của 4 bài thi
Yêu cầu: Viết chương trình nhập thông tin cuộc thi và xuất tổng điểm thi của từng
thí sinh.

26
INTERFACE

MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1. Định nghĩa (khai báo) interface
2. Hiện thực (cài đặt) interface
3. Sử dụng interface

Bài 1. Cơ bản về Interface – Interface của một lớp


Một quyển sách (Book) chứa một số thông tin: mã sách, tên sách, giá sách, giảm
giá.

Khai báo interface IBook cho một quyển sách. Trong interface IBook có:
 Các properties của quyển sách
 Phương thức tính giá một quyển sách

Xây dựng lớp Book hiện thực (cài đặt) interface IBook trên

Chú ý: Phương thức tính giá bán của 1 quyển sách được tính như sau:
Giá bán một quyển sách = Giá sách – Giảm giá .

Bài 2. Cơ bản về Interface – Nhiều lớp thực hiện cùng 1 interface và thực hiện
tính đa hình
Lớp Rectangle (hình chữ nhật) có: chiều rộng và chiều cao
Lớp Cirlce (hình tròn) có: bán kính
 Xây dựng interface IShape có phương thức tính diện tích của hình
 Xây dựng lớp Rectange và lớp Circle cài đặt interface IShape trên

27
Bài 3. Tính lương nhân viên
Công ty phần mềm TinySoft đang cần quản lý các nhân viên của mình. Nhân viên
công ty thuộc một trong hai bộ phận: Programmer và Tester. Thông tin cơ bản
của nhân viên gồm: mã nhân viên, họ tên nhân viên
Lương hàng tháng của mỗi bộ phận như sau:
 Programmer: Mỗi lập trình viên có lương hàng tháng riêng. Nếu trong
tháng số lỗi lập trình < 20 thì được tăng thêm 10% lương.
 Tester: Mỗi nhân viên kiểm thử phần mềm ngoài mức lương cơ bản hàng
tháng, nhân viên còn nhận được tiền overtime (gọi tắt là OT: tiền làm qua
đêm). Số tiền OT bằng số giờ OT nhân với 200.000 đồng

Yêu cầu:
 Xây dựng interface chứa phương thức tính lương, lớp abstract chứa các
thông tin cơ bản của Programmer và Tester
 Xây dựng lớp Programmer, Tester
 Hãy viết chương trình nhập n nhân viên và tính lương của n nhân viên này.

28
XỬ LÝ NGOẠI LỆ

MỤC TIÊU
Sau khi sinh viên hoàn thành các yêu cầu của buổi này, sinh viên có thể:
1. Bắt exception
2. Ném exception
3. Hiểu và Sử dụng được một số lớp exception có sẵn

Một số lớp exception có sẵn:


 NotImplementedException
 IndexOutOfRangeException
 InvalidCastException
 FormatException
 NotSupportedException
 NullReferenceException
 StackOverflowException
 DivideByZeroException
 ArgumentNullException
 ArgumentOutOfRangeException

Bài 1. Valid lớp Person


Định nghĩa lớp Person có các fields: first name, last name, age.
Validate các setters của các fields, ném các exceptions tương ứng trong trường
hợp dữ nhập vào không hợp lệ.
Cụ thể:
 first name, last name không thể là null hay là chuỗi empty (Dùng phương
thức string.IsNullOrEmpty())
 age nằm trong [0 … 120]

29
Bước 1: Xây dựng lớp Person trong file Person.cs

Bước 2: Thêm các Properties và validate dữ liệu


Với property của field firstName:

30
Với property của field age:

Sinh viên tự làm:


 Thêm property cho field lastName và validate dữ liệu
 Trong constructor nên dùng các Properties để khởi tạo các fields (thay vì
dùng các fields trực tiếp)

Bước 3: Test lớp Person


Trong phương thức Main tạo một số đối tượng Person để kiểm tra lớp Person hoạt
động đúng đắn không

31
Bước 4: Thêm khối try … catch để bắt ngoại lệ

Sinh viên tự làm:


 Bắt ngoại lệ cho các đối tượng p3, p4, p5

Bài 2. Bắt ngoại lệ


Viết chương trình đọc một số nguyên, sau đó tính và in ra căn bậc hai của số đó.
Nếu số nhập vào là số âm thì in "Invalid number". Trong bất kỳ trường hợp nào,
cuối cùng hãy in chữ "Good bye". Dùng try-catch-finally.

Bài 3. Ném ngoại lệ


Viết phương thức ReadNumber(int min, int max) nhập một số nguyên trong
đoạn [𝑚𝑖𝑛 … 𝑚𝑎𝑥]. Nếu nhập số không hợp lệ hay là chữ thì phương thức này sẽ
ném một exception

Dùng phương thức này để viết chương trình nhập 10 số: 𝒂𝟏 , 𝒂𝟐 , … , 𝒂𝟏𝟎 , sao cho
𝟏 < 𝒂𝟏 < ⋯ < 𝒂𝟏𝟎 < 𝟏𝟎𝟎. Nếu người dùng nhập số không hợp lệ thì yêu cầu
người dùng nhập lại

32

You might also like