Bài giảng Mẫu thiết kế hướng đối tượng và ứng dụng: Các nguyên lý các nguyên lý lập trình hướng đối tượng trình bày các nội dung: Phần mềm hướng đối tượng, nguyên lý Open-Close, nguyên lý Nghịch đảo phụ thuộc... Mời các bạn cùng tham khảo.
Trang 1Cac nguyen ly
lập trình hướng đôi tượng
Nguyên Minh Huy
Bộ môn Công nghệ Phân mêm
Email: nmhuy@fit.homuns.edu.vn
Trang 2Noi dung
=m Phân mêm hướng đôi tượng
m Nguyên lý Open-Close
m Nguyên lý Nghịch đảo phụ thuộc
= Nguyên lý Thay thê Liskov
m Nguyên lý Phân tách Interface
m Thảo luận
Trang 3Noi dung
> Phân mêm hướng đôi tượng
m Nguyên lý Open-Close
m Nguyên lý Nghịch đảo phụ thuộc
= Nguyên lý Thay thê Liskov
m Nguyên lý Phân tách Interface
m Thảo luận
Trang 4Phân mêm hướng đôi tượng
=m Phân mêm là gi?
> “A computer program, enable a computer to
perform a specific task’ (wikipedia)
Software is something that is soft!!
our thoughts The code Is only the representation
of the ideas, and the ideas are really the software”
(Hardware is from Mars; Software is from Venus,
Winn Rosch).
Trang 5
Phan mém hu@ng doi tuong
=m Thê nào là phân mêm hướng đôi tượng?2
a
«2
Tuân thủ nguyên lý lập trình hướng đôi tượng thông qua lây??
việc vận dụng các tính chất lập trình hướng đôi tượng
Trang 6Phân mêm hướng đôi tượng
> Tí (The Open-Closed Principle)
>Ti- |
Nguyên ly Nghịch đảo phụ thuộc
TT (The Dependency Inversion Principle)
a Nguy oN C (The Liskov Substitution Principle) Nguyén ly Thay thé Liskov guyen ly Thay en tang ý
> La Nguyén ly Phan tach Interface nướng đôi
tu) (The Interface Segregation Principle)
Trang 7Noi dung
=m Phân mêm hướng đôi tượng
> Nguyên lý Open-Close
m Nguyên lý Nghịch đảo phụ thuộc
= Nguyên lý Thay thê Liskov
m Nguyên lý Phân tách Interface
m Thảo luận
Trang 8Nguyen ly Open-Close
= Betrand Meyers dé cap lan dau
tién nam 1988 trong Object
Oriented Software Construction
m Phát biêu:
“Các thực thể phân mêm (hàm, đơn thê, đối tượng, .)
nên được xây dựng theo hướng mở cho việc mở rộng
(be opened for extension) nhưng đóng đổi với việc sửa đối (be closed for modification)”
Trang 10Nguyen ly Open-Close
m Ví dụ chương trình vẽ hình:
public enum ShapeType { LINE, RECTANGLE }
public abstract class Shape
Ẳ
I
public class Line: Shape
Ẳ
public abstract ShapeType getT ype();
public override ShapeType getType();
public void drawLine();
I
public class Rectangle: Shape
{
public override ShapeType getType();
public void drawRectangle();
Trang 11foreach (Shape s in shapeList)
switch (s.getT ype())
Trang 14public abstract void draw();
public override void draw();
public override void draw();
public override void draw();
ly Open-Close
Trang 16Nguyen ly Open-Close
m Ghi chu:
> Nguyên lý cốt lõi của phân tích thiết kê hướng đồi
tượng
> Ưu tiên áp dụng nguyên lý cho các thực thê phan
mêm phải thường xuyên nâng cập, mở rộng
> Việc tuân thủ nguyên lý mang tính tương đôi, phụ
thuộc ngữ cảnh.
Trang 17Nguyen ly Open-Close
m Áp dụng:
> Thuộc tính của đôi tượng là private dé han ché sw
ket dinh khong can thiet (coupling)
Đối tượng nắm giữ thông tin va chịu trách nhiệm trên thông tin mình nắm giữ'!!
> Hạn chê ép kiêu động (runtime type-casting)
public void doSomething(Vehicle vehicle)
Trang 18Noi dung
=m Phân mêm hướng đôi tượng
m Nguyên lý Open-Close
> Nguyên lý Nghịch đảo phụ thuộc
= Nguyên lý Thay thê Liskov
m Nguyên lý Phân tách Interface
m Thảo luận
Trang 19Nguyên lý Nghịch đảo phụ thuộc
m Phát biêu:
“Các thành phân trong phần mềm không nên phụ thuộc
vào những cái riêng, cụ thể (details) ma nguoc lại nên
phụ thuộc vào những cái chung, tổng quát
(abstractions) của những cái riêng, cụ thể đó
Những cái chung, tông quát không nên phụ vào những
cái riêng, cụ thê Sự phụ thuộc này nên được đảo ngược
lat.”
Trang 20Nguyên lý Nghịch đảo phụ thuộc
Không tuân thủ
Bus
Trang 21Nguyên ly Nghịch đảo phụ thuộc — Vi du
Keyboard ƒƑ copy I Printer
public void copy()
Ẳ
char C;
while ((c = keyboard.read()) != ‘q’)
printer.write(c);
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 22Nguyên ly Nghịch đảo phụ thuộc — Vi du
File file = new File();
Trang 23Nguyên ly Nghịch đảo phụ thuộc — Vi du
Trang 24Nguyên lý Nghịch đảo phụ thuộc — Ghi chu
m Ghi chú:
> Có môi liên hệ mật thiết với nguyên lý Open-Close
> “Chia đề trị” theo hướng lập trình câu trúc dễ vi
environment, where requirements regularly change
as program develops, this flexibility is essential.”
Trang 25Nguyên lý Nghịch đảo phụ thuộc — Ap dung
m Áp dụng:
> Làm việc với lớp cơ sở thay vì lớp kê thừa cụ thê
public void doSomething(Car car)
Trang 26Noi dung
=m Phân mêm hướng đôi tượng
m Nguyên lý Open-Close
m Nguyên lý Nghịch đảo phụ thuộc
> Nguyên lý Thay thê Liskov
m Nguyên lý Phân tách Interface
m Thảo luận
Trang 27Nguyén ly Thay thé Liskov
= Barbara Liskov dé cap lan
dau tién tai OOPSLA 87
m Phát biêu:
“Lớp B chỉ nên kế thừa từ lớp A khi và chỉ khi với mọi
hàm F thao tác trên các đôi tượng của A, cách cư xử
(behaviors) của F không thay đổi khi ta thay thế
(substitute) các đối tượng của A bằng các đôi tượng
của B.”
Trang 28Nguyén ly Thay thé Liskov
Z Không tuân thủ nguyên
Derive
Trang 29
Nguyén ly Thay thé Liskov
m Ví dụ về hậu quả kê thừa chỉ đề tái sử dụng code:
class Stack
Ẳ
// Khai báo thêm dữ liệu của Stack
public virtual void push(int n);
public virtual int pop();
I
class Queue: Stack
Ẳ
// Khai báo dữ liệu của Queue
public override void push(int n);
public override int pop();
I
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 30Nguyén ly Thay thé Liskov
Trang 31Nguyén ly Thay thé Liskov
m Ghi chu:
> Có môi liên hệ mật thiết với nguyên lý Open-Close
> Ưu tiên áp dụng nguyên lý cho các thực thê phân
mêm phải thường xuyên nâng câp, mở rộng
> Việc tuân thủ nguyên lý mang tính tương đôi, phụ
thuộc ngữ cảnh
When you inherit from one class,
you sign a contract with that class!!
Trang 32Nguyén ly Thay thé Liskov
Trang 33Nguyén ly Thay the Liskov
CuuDuongThanCong.com
Trang 34Noi dung
=m Phân mêm hướng đôi tượng
m Nguyên lý Open-Close
m Nguyên lý Nghịch đảo phụ thuộc
= Nguyên lý Thay thê Liskov
> Nguyén ly Phan tach Interface
m Thảo luận
Trang 35Nguyen ly Phan tach Interface
m Phát biêu:
“Không nên buộc các thực thê phân mêm phụ thuộc vào
những interface mà chúng không sử dụng đến ”
Trang 36Nguyen ly Phan tach Interface
“Fat” interface hoac
Trang 37Nguyen ly Phan tach Interface
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 38Nguyen ly Phan tach Interface
m Ghi chu:
> Có mỗi liên hệ với nguyên lý Open-Close
> Thiết kê lớp đôi tượng đơn giản, gọn nhẹ
Trang 39Nguyen ly Phan tach Interface
Trang 40
Nguyen ly Phan tach Interface
Trang 41Noi dung
=m Phân mêm hướng đôi tượng
m Nguyên lý Open-Close
m Nguyên lý Nghịch đảo phụ thuộc
= Nguyên lý Thay thê Liskov
m Nguyên lý Phân tách Interface
> Thao luận
Trang 42Tháo luận
Trang 43
We are building hard software!!
CuuDuongThanCong.com https://fb.com/tailieudientucntt