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 - Nguyễn Minh Huy

43 98 0
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 - Nguyễn Minh Huy

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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.

Các nguyên lý 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.hcmuns.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung Phần mềm hướng đối tượng Nguyên lý OpenOpen-Close Nguyên lý Nghịch đảo phụ thuộc Nguyên lý Thay Liskov Nguyên lý Phân tách Interface Thảo luận CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung Phần mềm hướng đối tượng Nguyên lý OpenOpen-Close Nguyên lý Nghịch đảo phụ thuộc Nguyên lý Thay Liskov Nguyên lý Phân tách Interface Thảo luận CuuDuongThanCong.com https://fb.com/tailieudientucntt Phần mềm hướng đối tượng Phần mềm gì? “A computer program, enable a computer to perform a specific task” (wikipedia (wikipedia) ) “Software is nothing but a set of ideas express a Software is something that is are soft!! way to something Those ideas written in a code the same way our words and sentences code 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, Venus, Winn Rosch) Rosch) CuuDuongThanCong.com https://fb.com/tailieudientucntt Phần mềm hướng đối tượng Thế phần mềm hướng đối tượng? Có khai báo sử dụng đối tượng? Chưa đủ!! Tuân thủ nguyên lý lập trình hướng đối đối tượng thơng Sử dụng tượng thếqua đây?? việc vận dụng tính chất lập trình hướng đối tượng CuuDuongThanCong.com https://fb.com/tailieudientucntt Phần mềm hướng đối tượng Ba tính chất lập trình hướng đối tượng: Ngun lý Open-Close (The Principle) Tính đóng góiOpen-Closed (Encapsulation) Tính kế thừa (Inheritance) Ngun lý Nghịch đảo phụ thuộc Tính(The đa hình (Polymorphism) Dependency Inversion Principle) Nguyên lý lập trình hướng đối tượng: Nguyên lý Thay Liskov Những quy tắc mang tính chất (The Liskov Substitution Principle) tảng Có tính khái qt trừu tượng cao Là “kim Nguyên nam” cho phân tích thiết kế hướng đối lý Phân tách Interface tượng (The Interface Segregation Principle) CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung Phần mềm hướng đối tượng Nguyên lý OpenOpen-Close Nguyên lý Nghịch đảo phụ thuộc Nguyên lý Thay Liskov Nguyên lý Phân tách Interface Thảo luận CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý OpenOpen-Close Betrand Meyers đề cập lần năm 1988 Object Oriented Software Construction Phát biểu: “Các thực thể phần mềm (hàm, đơn thể, đối tượng, ) nên xây dựng theo hướng mở cho việc mở rộng (be opened for extension) extension) đóng việc sửa đổi (be (be closed for modification)” modification)” CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý OpenOpen-Close Không tuân thủ nguyên lý Open-Close!! Phần mềm CuuDuongThanCong.com Phần mềm https://fb.com/tailieudientucntt Nguyên lý OpenOpen-Close Ví dụ chương trình vẽ hình: public enum ShapeType { LINE, RECTANGLE } public abstract class Shape { public abstract ShapeType getType(); } public class Line: Shape { public override ShapeType getType(); public void drawLine(); } public class Rectangle: Shape { public override ShapeType getType(); public void drawRectangle(); } CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý Thay Liskov Ví dụ hậu kế thừa để tái sử dụng code: class Stack { private ArrayList data; // Khai báo thêm liệu Stack public virtual void push(int n); public virtual int pop(); } class Queue: Stack { // Khai báo liệu Queue public override void push(int n); public override int pop(); } CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý Thay Liskov int myFunc(Stack s) { s.push(5); s.push(6); s.push(7); int int a = s.pop(); b = s.pop(); if (a == && b == 6) return a * b; throw new ArgumentException(); } CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý Thay Liskov Ghi chú: Có mối liên hệ mật thiết với nguyên lý OpenOpen-Close Ưu tiên áp dụng nguyên lý cho 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!! CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý Thay Liskov Áp dụng: Quan hệ ISIS-A khơng xác việc xác định kế thừa public double doSomething(Rectangle obj) { obj.setWidth(5); obj.setHeight(6); if (obj.Area == 30) return obj.Area; throw new ArgumentException(); Rectangle Square } CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý Thay Liskov Áp dụng: Sử dụng subtype composition thay dùng subclass Let’s think about it!!! CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung Phần mềm hướng đối tượng Nguyên lý OpenOpen-Close Nguyên lý Nghịch đảo phụ thuộc Nguyên lý Thay Liskov Nguyên lý Phân tách Interface Thảo luận CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý Phân tách Interface Phát biểu: “Không nên buộc thực thể phần mềm phụ thuộc vào interface mà chúng không sử dụng đến.” CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý Phân tách Interface “Fat” interface “Polluted” interface Class A class should one thing and it well CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý Phân tách Interface Circuit add(Circuit) remove(Circuit) calcResistance() Resistor Lamp SeriesCircuit ParallelCircuit _resistance _resistance _children _children add(Circuit) remove(Circuit) calcResistance() add(Circuit) remove(Circuit) calcResistance() add(Circuit) remove(Circuit) calcResistance() add(Circuit) remove(Circuit) calcResistance() CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý Phân tách Interface Ghi chú: Có mối liên hệ với nguyên lý OpenOpen-Close Thiết kế lớp đối tượng đơn giản, gọn nhẹ CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên lý Phân tách Interface Áp dụng: Tăng mức độ trừu tượng kế thừa Circuit SingleCircuit Resistor CuuDuongThanCong.com Lamp ComplexCircuit SeriesCircuit ParallelCircuit https://fb.com/tailieudientucntt Nguyên lý Phân tách Interface Áp dụng: Sử dụng đa kế thừa hay composition cần thiết CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung Phần mềm hướng đối tượng Nguyên lý OpenOpen-Close Nguyên lý Nghịch đảo phụ thuộc Nguyên lý Thay Liskov Nguyên lý Phân tách Interface Thảo luận CuuDuongThanCong.com https://fb.com/tailieudientucntt Thảo luận Let’s discuss!!! CuuDuongThanCong.com https://fb.com/tailieudientucntt Thảo luận Hỗn độn đầy may rủi There is no Silver Bullet!! We are building hard software!! Đang đâu? Từ đâu đến? Ngành kỹ thuật non trẻ Đi đâu??? Mục tiêu Chất lượng Hiệu Phụ thuộc vào bạn! High Level Language CuuDuongThanCong.com https://fb.com/tailieudientucntt ... https://fb.com/tailieudientucntt Phần mềm hướng đối tượng Thế phần mềm hướng đối tượng? Có khai báo sử dụng đối tượng? Chưa đủ!! Tuân thủ nguyên lý lập trình hướng đối đối tượng thông Sử dụng tượng thếqua đây?? việc... vận dụng tính chất lập trình hướng đối tượng CuuDuongThanCong.com https://fb.com/tailieudientucntt Phần mềm hướng đối tượng Ba tính chất lập trình hướng đối tượng: Ngun lý Open-Close (The Principle)... mềm hướng đối tượng Nguyên lý OpenOpen-Close Nguyên lý Nghịch đảo phụ thuộc Nguyên lý Thay Liskov Nguyên lý Phân tách Interface Thảo luận CuuDuongThanCong.com https://fb.com/tailieudientucntt Nguyên

Ngày đăng: 11/01/2020, 19:14

Tài liệu cùng người dùng

Tài liệu liên quan