Professional Documents
Culture Documents
Chuong-06 CacNguyenLyVaPattern
Chuong-06 CacNguyenLyVaPattern
Chuong-06 CacNguyenLyVaPattern
Trường Đại học Công nghiệp Thực phẩm Tp. Hồ Chí Minh
Trường Đại học Công nghiệp Thực phẩm Tp. Hồ Chí Minh
CHƯƠNG 4
MỘT SỐ NGUYÊN LÝ VÀ
PATTERN CƠ BẢN
ĐẠI HỌC CHÍNH QUY
4/19/2022
1
4/19/2022
MỤC TIÊU
NỘI DUNG
2
4/19/2022
GIỚI THIỆU
Một sản phẩm làm ra luôn luôn có sự thay đổi và
mở rộng chức năng theo thời gian.
Trong quy trình phát triển phần mềm, khâu phân
tích và thiết kế là cực kỳ quan trọng → một phần
mềm có thể dễ dàng đáp ứng với thay đổi nhất.
Để thiết kế một phần mềm có độ linh hoạt cao, cần
áp dụng các kiến thức về Design pattern các
nguyên tắc trong thiết kế và lập trình.
3
4/19/2022
GIỚI THIỆU
SOLID
5 nguyên tắc của thiết kế hướng đối tượng
Single responsibility principle
Open/closed principle
Liskov substitution principle
Interface segregation principle
Dependency inversion principle
4
4/19/2022
Ví dụ 1:
5
4/19/2022
2. OPEN/CLOSED PRINCIPLE
Nguyên lý đóng/mở
Nội dung: Có thể thoải mái mở rộng 1 class, nhưng
không được sửa đổi bên trong class đó.
Open for extension
Khả năng sử dụng lại class, function. Đồng thời có
thể thêm các tính năng mới.
Close for modification
Không (hạn chế) sửa đổi (update, delete) class,
function đã tạo.
19/04/2022 Lập trình hướng đối tượng 12
6
4/19/2022
2. OPEN/CLOSED PRINCIPLE
Nguyên lý đóng/mở
Nội dung: Có thể thoải mái mở rộng 1 class, nhưng
không được sửa đổi bên trong class đó.
Open for extension
Khả năng sử dụng lại class, function. Đồng thời có
thể thêm các tính năng mới.
Close for modification
Không (hạn chế) sửa đổi (update, delete) class,
function đã tạo.
19/04/2022 Lập trình hướng đối tượng 13
2. OPEN/CLOSED PRINCIPLE
Ví dụ 2: Ta có class Shape, và 2 class Square, Circle kế
thừa từ Shape. Class AreaDisplay tính diện tích các
hình này và in ra.
7
4/19/2022
2. OPEN/CLOSED PRINCIPLE
Ví dụ 2: Ta có class Shape, và 2 class Square, Circle kế
thừa từ Shape. Class AreaDisplay tính diện tích các
hình này và in ra.
2. OPEN/CLOSED PRINCIPLE
Ví dụ 2: Ta có class Shape, và 2 class Square, Circle kế
thừa từ Shape. Class AreaDisplay tính diện tích các
hình này và in ra.
Thêm nhiều class
(hình), giải quyết
như thế nào?
8
4/19/2022
2. OPEN/CLOSED PRINCIPLE
Áp dụng OCP, ta sẽ cải tiến lại như sau, bằng cách sử
dụng Lớp trừu tượng và chuyển phương thức tính
diện tích vào mỗi class.
2. OPEN/CLOSED PRINCIPLE
Khi đó class AreaDisplay trở thành:
In ra diện tích của các hình thêm vào mà không cần sửa
source code của lớp.
9
4/19/2022
Mở rộng một tính năng như sau: ứng cử vào chức bí thư
Đoàn khoa
10
4/19/2022
String getStudentInfo();
Student
int runForSecretary();
String getStudentInfo();
Student
int runForSecretary();
11
4/19/2022
String getStudentInfo();
Student
int runForSecretary();
12
4/19/2022
13
4/19/2022
14
4/19/2022
15
4/19/2022
16
4/19/2022
}
public class FlappyBird : IAnimal, IBird {
...
19/04/2022 Lập trình hướng đối tượng 34
17
4/19/2022
Vehicle Car
Truck
18
4/19/2022
File
19
4/19/2022
Keyboard …
FileReader … PrinterWriter FileWriter
Reader
NỘI DUNG
20
4/19/2022
21
4/19/2022
22
4/19/2022
4.2.1. SINGLETON
Là pattern đảm bảo rằng một lớp chỉ có một
thể hiện (instance) duy nhất
Cung cấp một cổng giao tiếp chung nhất để
truy cập vào lớp đó.
4.2.1. SINGLETON
Ví dụ 1:Có thể có rất nhiều máy in (Printer)
trong hệ thống nhưng chỉ có thể tồn tại duy
nhất một Phần quản lý máy in (Sprinter
Spooler)
23
4/19/2022
4.2.1. SINGLETON
Ví dụ 2: Trong ứng dụng có chức năng bật, tắt
nhạc nền của một ứng dụng. Trong setting của app
cho phép người dùng quản lí việc mở hay tắt nhạc.
Không thể tạo 1 instance để mở nhạc rồi sau đó lại
tạo 1 instance khác để tắt nhạc => cần sử dụng
singleton để quản lí việc này.
4.2.1. SINGLETON
Vai trò:
Quản lý việc truy cập tốt hơn vì chỉ có một thể
hiện đơn nhất.
Quản lý số lượng thể hiện (đối tượng) của một lớp
Khả chuyển hơn so với việc dùng một lớp có
thuộc tính là static
24
4/19/2022
4.2.1. SINGLETON
Cách tạo Singleton pattern
Xây dựng Private constructor để đảm bảo rằng
class lớp khác không thể truy cập vào constructor
và tạo ra instance mới.
Sử dụng private static để đảm bảo thể hiện của
class là duy nhất.
Tạo một public static menthod getInstance() trả
về instance giúp client có thể truy cập vào đối
tượng
4.2.1. SINGLETON
Cách tạo Singleton pattern
25
4/19/2022
4.2.1. SINGLETON
Cách tạo Singleton pattern
26
4/19/2022
27
4/19/2022
28
4/19/2022
29
4/19/2022
30