Keras được sử dụng bởi CERN, NASA, NIH và nhiều tổ chức khoa học khác trên thế giới [và vâng, Keras được sử dụng tại LHC]. Keras có tính linh hoạt cấp thấp để thực hiện các ý tưởng nghiên cứu tùy ý trong khi cung cấp các tính năng tiện lợi cấp cao tùy chọn để tăng tốc chu kỳ thử nghiệm
Michele Bertoli là kỹ sư giao diện người dùng có niềm đam mê với giao diện người dùng đẹp. Sinh ra ở Ý, anh chuyển đến London cùng gia đình để tìm kiếm những cơ hội việc làm mới và thú vị. Anh ấy có bằng về khoa học máy tính và yêu thích mã sạch và được kiểm tra kỹ lưỡng. Hiện tại, anh ấy đang làm việc với React. js, tạo các ứng dụng JavaScript hiện đại. Anh ấy là một fan hâm mộ lớn của mã nguồn mở và luôn cố gắng học hỏi những điều mới mẻTải Ebook Head First Design Patterns Python. PDF ✓ Toàn bộ sách Các mẫu thiết kế Python thực tế - Wessel Badenhorst ✓ Sách học lập trình Python ✓ File PDF Bản tiếng Anh ✓ Tải miễn phí sách liên kết Google Drive
Tải Ebook Các mẫu thiết kế Python thực hành PDF
XEM TRƯỚC 10 TRANG
SÁCH FULL SÁCH
Download ngay
GIỚI THIỆU TÀI KHOẢN
NHÂN ĐỀ TÀI THỰC TIỄN MẪU THIẾT KẾ PYTHONSTác giảWessel BadenhorstNăm xuất bản2017Nhà xuất bảnApressTóm tắtCuốn sách trình bày tổng hợp nhiều Pattern hữu ích trong lập trình Python. Bạn có thể tiếp tục thực hiện các kiến thức được cung cấp trong sách và trở thành một học viên xuất sắc hơn mỗi ngày. lục mục- Chương 1. Trước khi chúng ta bắt đầu
- Chương 2. Mô hình Singleton
- Chương 3. mẫu nguyên mẫu
- Chương 4. Mô hình nhà máy
- Chương 5. Mẫu xây dựng
- Chương 6. Mẫu bộ điều hợp
- Chương 7. Hoa văn trang trí
- Chương 8. hoa văn mặt tiền
- Chương 9. Mẫu ủy quyền
- Chương 10. Mẫu Chuỗi Trách nhiệm
- Chương 11. Mẫu lệnh
- Chương 12. Mô hình thông dịch viên
- Chương 13. Mẫu lặp
- Chương 14. Mẫu quan sát
- Chương 15. Mô hình trạng thái
- Chương 16. Mô hình chiến lược
- Chương 17. Mẫu Phương thức Mẫu
- Chương 18. Mô hình khách truy cập
- Chương 19. Model-View-Controller Pattern
- Chương 20. Xuất bản mẫu đăng ký của Vietnam
➤➤➤ Xem thêm các bài viết khác về Python
Trên đây là full Ebook Head First Design Patterns Python PDF bản tiếng Anh, ViecLamVui - chuyên trang tìm việc nhanh miễn phí - gửi cho bạn. Hy vọng tài liệu có thể hỗ trợ nghiên cứu học tập và nghiên cứu của các bạn thực sự hiệu quả
Trong chương này, chúng ta sẽ tìm hiểu những kiến thức cơ bản về lập trình hướng đối tượng và thảo luận chi tiết về các nguyên tắc thiết kế hướng đối tượng. Điều này sẽ giúp chúng ta chuẩn bị cho các chủ đề nâng cao được đề cập ở phần sau của cuốn sách. Chương này cũng sẽ giới thiệu ngắn gọn về khái niệm mẫu thiết kế để bạn có thể đánh giá được bối cảnh và ứng dụng của mẫu thiết kế trong phát triển phần mềm. Ở đây chúng tôi cũng phân loại các mẫu thiết kế theo ba khía cạnh chính—mẫu sáng tạo, cấu trúc và Hành vi. Vì vậy, về cơ bản, chúng ta sẽ đề cập đến các chủ đề sau trong chương này
Tìm hiểu về lập trình hướng đối tượng
Thảo luận về các nguyên tắc thiết kế hướng đối tượng
Hiểu khái niệm về các mẫu thiết kế và phân loại và ngữ cảnh của chúng
Thảo luận về các mẫu cho ngôn ngữ động
Các mẫu phân loại—mẫu sáng tạo, mẫu cấu trúc và mẫu hành vi
Tìm hiểu về lập trình hướng đối tượng
Trước khi bạn bắt đầu tìm hiểu về các mẫu thiết kế, bạn nên tìm hiểu những kiến thức cơ bản và xem qua các mô hình hướng đối tượng trong Python. Thế giới hướng đối tượng đưa ra khái niệm về đối tượng có thuộc tính [thành viên dữ liệu] và thủ tục [hàm thành viên]. Các chức năng này chịu trách nhiệm thao tác các thuộc tính. Chẳng hạn, lấy một ví dụ về đối tượng
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]5. Đối tượng
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]5 sẽ có các thuộc tính như
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]7,
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]8,
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]9, và
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]0 và
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]1, và các phương pháp sẽ là
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]2 để tăng tốc độ và
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]3 để làm cho xe rẽ trái. Python đã là một ngôn ngữ hướng đối tượng kể từ khi nó được phát hành lần đầu tiên. Như họ nói, mọi thứ trong Python đều là đối tượng . Mỗi thể hiện hoặc biến của lớp có địa chỉ bộ nhớ hoặc danh tính riêng. Các đối tượng, là thể hiện của các lớp, tương tác với nhau để phục vụ mục đích của một ứng dụng đang được phát triển. Hiểu các khái niệm cốt lõi của lập trình hướng đối tượng liên quan đến việc hiểu các khái niệm về đối tượng, lớp và phương thức.
Các đối tượng
Các điểm sau đây mô tả các đối tượng
Chúng đại diện cho các thực thể trong ứng dụng của bạn đang được phát triển
Các thực thể tương tác với nhau để giải quyết các vấn đề trong thế giới thực
Ví dụ: Người là một thực thể và Xe hơi là một thực thể. Người điều khiển Ô tô di chuyển từ địa điểm này sang địa điểm khác
Các lớp học
Các lớp giúp các nhà phát triển đại diện cho các thực thể trong thế giới thực
Các lớp định nghĩa các đối tượng trong các thuộc tính và hành vi. Các thuộc tính là các thành viên dữ liệu và các hành vi được thể hiện bởi các hàm thành viên
Các lớp bao gồm các hàm tạo cung cấp trạng thái ban đầu cho các đối tượng này
Các lớp giống như các mẫu và do đó có thể dễ dàng sử dụng lại
Ví dụ: lớp
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]4 sẽ có các thuộc tính
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]5 và
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]6 và hàm thành viên
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]7 xác định hành vi của anh ta khi đi công tác
phương pháp
Các điểm sau đây nói về những gì các phương pháp làm trong thế giới hướng đối tượng
Chúng đại diện cho hành vi của đối tượng
Các phương thức hoạt động trên các thuộc tính và cũng thực hiện các chức năng mong muốn
Một ví dụ điển hình về lớp và đối tượng được tạo trong Python v3. 5 được đưa ra ở đây
________số 8
Đầu ra của đoạn mã trước sẽ trông như sau
Các khía cạnh chính của lập trình hướng đối tượng
Bây giờ chúng ta đã hiểu những kiến thức cơ bản về lập trình hướng đối tượng, hãy đi sâu vào các khía cạnh chính của OOP
đóng gói
Các tính năng chính của đóng gói như sau
Hành vi của một đối tượng được ẩn khỏi thế giới bên ngoài hoặc các đối tượng giữ thông tin trạng thái của chúng ở chế độ riêng tư
Máy khách không thể thay đổi trạng thái bên trong của đối tượng bằng cách tác động trực tiếp lên chúng; . Dựa trên loại yêu cầu, các đối tượng có thể phản hồi bằng cách thay đổi trạng thái bên trong của chúng bằng cách sử dụng các hàm thành viên đặc biệt như
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
8 vàa = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
9Trong Python, khái niệm đóng gói [ẩn dữ liệu và phương thức] không ẩn vì nó không có các từ khóa như public . Tất nhiên, khả năng truy cập có thể được đặt ở chế độ riêng tư bằng cách thêm tiền tố
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
10 vào tên biến hoặc hàm. private, and protected [in languages such as C++ or Java] that are required to support encapsulation. Of course, accessibility can be made private by prefixinga = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
10 in the variable or function name.
đa hình
Các tính năng chính của đa hình như sau
Đa hình có thể có hai loại
Một đối tượng cung cấp các triển khai khác nhau của phương thức dựa trên các tham số đầu vào
Các đối tượng thuộc các loại khác nhau có thể sử dụng cùng một giao diện
Trong Python, tính đa hình là một tính năng được tích hợp sẵn cho ngôn ngữ. Ví dụ: toán tử
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
11 có thể thao tác trên hai số nguyên để cộng chúng hoặc có thể thao tác với các chuỗi để nối chúng
Trong ví dụ sau, tất cả các chuỗi, bộ dữ liệu hoặc danh sách đều có thể được truy cập bằng chỉ mục số nguyên. Điều này cho thấy cách Python thể hiện tính đa hình trong các kiểu dựng sẵn
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
Di sản
Những điểm sau đây giúp chúng ta hiểu rõ hơn về quy trình thừa kế
Tính kế thừa chỉ ra rằng một lớp kế thừa [hầu hết chức năng của nó] từ lớp cha
Kế thừa được mô tả như một tùy chọn để sử dụng lại chức năng được xác định trong lớp cơ sở và cho phép các phần mở rộng độc lập của việc triển khai phần mềm ban đầu
Kế thừa tạo ra hệ thống phân cấp thông qua các mối quan hệ giữa các đối tượng của các lớp khác nhau. Python, không giống như Java, hỗ trợ đa kế thừa [kế thừa từ nhiều lớp cơ sở]
Trong ví dụ mã sau,
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]12 là lớp cơ sở và
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]13 lấy các tính năng của nó từ
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]12. Vì vậy, các phương thức của
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]12 có thể được truy cập bởi đối tượng của
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]13
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]1
trừu tượng
Các tính năng chính của trừu tượng như sau
Nó cung cấp cho bạn một giao diện đơn giản cho các máy khách, nơi các máy khách có thể tương tác với các đối tượng lớp và gọi các phương thức được định nghĩa trong giao diện
Nó trừu tượng hóa sự phức tạp của các lớp bên trong bằng một giao diện để máy khách không cần biết về các triển khai bên trong
Trong ví dụ sau, các chi tiết bên trong của lớp
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]17 được trừu tượng hóa bằng phương thức
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]18
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]2
Thành phần
Thành phần đề cập đến các điểm sau
Đó là một cách để kết hợp các đối tượng hoặc lớp thành cấu trúc dữ liệu phức tạp hơn hoặc triển khai phần mềm
Trong thành phần, một đối tượng được sử dụng để gọi các chức năng thành viên trong các mô-đun khác, do đó làm cho chức năng cơ sở có sẵn trên các mô-đun mà không cần kế thừa
Trong ví dụ sau, đối tượng của
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]12 được tổng hợp theo
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]13
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]5
Nguyên tắc thiết kế hướng đối tượng
Bây giờ, hãy nói về một tập hợp các khái niệm khác sẽ rất quan trọng đối với chúng ta. Đây không là gì ngoài các nguyên tắc thiết kế hướng đối tượng sẽ hoạt động như một hộp công cụ cho chúng ta khi tìm hiểu các mẫu thiết kế một cách chi tiết
Nguyên tắc mở/đóng
Nguyên tắc mở/đóng nêu rõ rằng các lớp hoặc đối tượng và phương thức phải mở để mở rộng nhưng đóng để sửa đổi .
Điều này có nghĩa là trong ngôn ngữ đơn giản, khi bạn phát triển ứng dụng phần mềm của mình, hãy đảm bảo rằng bạn viết các lớp hoặc mô-đun của mình theo cách chung để bất cứ khi nào bạn cảm thấy cần mở rộng hành vi của lớp hoặc đối tượng, thì bạn không nên . Thay vào đó, một phần mở rộng đơn giản của lớp sẽ giúp bạn xây dựng hành vi mới
Ví dụ, nguyên tắc mở/đóng được thể hiện trong trường hợp người dùng phải tạo triển khai lớp bằng cách mở rộng lớp cơ sở trừu tượng để triển khai hành vi được yêu cầu thay vì thay đổi lớp trừu tượng
Ưu điểm của nguyên tắc thiết kế này như sau
Các lớp hiện tại không bị thay đổi và do đó cơ hội hồi quy ít hơn
Nó cũng giúp duy trì khả năng tương thích ngược cho mã trước đó
Đảo ngược nguyên lý điều khiển
Nguyên tắc điều khiển đảo ngược nói rằng các mô-đun cấp cao không nên phụ thuộc vào các mô-đun cấp thấp; . Thông tin chi tiết phải phụ thuộc vào sự trừu tượng chứ không phải ngược lại .
Nguyên tắc này gợi ý rằng hai mô-đun bất kỳ không nên phụ thuộc chặt chẽ vào nhau. Trên thực tế, mô-đun cơ sở và mô-đun phụ thuộc phải được tách rời bằng một lớp trừu tượng ở giữa
Nguyên tắc này cũng gợi ý rằng các chi tiết của lớp của bạn nên đại diện cho các trừu tượng. Trong một số trường hợp, triết lý bị đảo ngược và chính các chi tiết triển khai quyết định tính trừu tượng, điều này nên tránh
Ưu điểm của đảo ngược nguyên tắc điều khiển như sau
Sự kết hợp chặt chẽ của các mô-đun không còn phổ biến và do đó không còn độ phức tạp/độ cứng nhắc trong hệ thống
Vì có một lớp trừu tượng rõ ràng giữa các mô-đun phụ thuộc [được cung cấp bởi hook hoặc tham số], thật dễ dàng để xử lý các phụ thuộc giữa các mô-đun theo cách tốt hơn
Nguyên tắc phân biệt giao diện
Như nguyên tắc phân tách giao diện nêu rõ, không nên buộc khách hàng phụ thuộc vào giao diện mà họ không sử dụng .
Nguyên tắc này nói về việc các nhà phát triển phần mềm viết giao diện của họ tốt. Chẳng hạn, nó nhắc nhở các nhà phát triển/kiến trúc sư phát triển các phương pháp liên quan đến chức năng. Nếu có bất kỳ phương thức nào không liên quan đến giao diện, lớp phụ thuộc vào giao diện phải triển khai nó một cách không cần thiết
Ví dụ: giao diện
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]21 không nên có phương thức gọi là
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]22. Lớp
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]23 dựa trên giao diện
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]21 không nên bắt buộc phải triển khai phương thức này
Ưu điểm của nguyên tắc thiết kế này như sau
Nó buộc các nhà phát triển phải viết các giao diện mỏng và có các phương thức dành riêng cho giao diện
Nó giúp bạn không điền vào các giao diện bằng cách thêm các phương thức không chủ ý
Nguyên tắc trách nhiệm duy nhất
Như nguyên tắc trách nhiệm duy nhất nêu rõ, một lớp chỉ nên có một lý do để thay đổi .
Nguyên tắc này nói rằng khi chúng ta phát triển các lớp, nó sẽ đáp ứng tốt chức năng đã cho. Nếu một lớp đảm nhận hai chức năng, tốt hơn là nên tách chúng ra. Nó đề cập đến chức năng như một lý do để thay đổi. Ví dụ: một lớp có thể trải qua các thay đổi do sự khác biệt trong hành vi được mong đợi từ nó, nhưng nếu một lớp đang bị thay đổi vì hai lý do [về cơ bản là thay đổi ở hai chức năng], thì lớp đó chắc chắn phải được tách ra
Ưu điểm của nguyên tắc thiết kế này như sau
Bất cứ khi nào có sự thay đổi trong một chức năng, lớp cụ thể này cần phải thay đổi và không có gì khác
Ngoài ra, nếu một lớp có nhiều chức năng, các lớp phụ thuộc sẽ phải trải qua các thay đổi vì nhiều lý do, điều này sẽ tránh được
nguyên tắc thay thế
Nguyên tắc thay thế phát biểu rằng các lớp dẫn xuất phải có khả năng thay thế hoàn toàn các lớp cơ sở .
Nguyên tắc này khá đơn giản theo nghĩa là khi các nhà phát triển ứng dụng viết các lớp dẫn xuất, họ nên mở rộng các lớp cơ sở. Nó cũng gợi ý rằng lớp dẫn xuất nên càng gần lớp cơ sở càng tốt để lớp dẫn xuất tự thay thế lớp cơ sở mà không có bất kỳ thay đổi mã nào
Khái niệm về mẫu thiết kế
Cuối cùng, bây giờ là lúc chúng ta bắt đầu nói về các mẫu thiết kế. Các mẫu thiết kế là gì?
Các mẫu thiết kế lần đầu tiên được giới thiệu bởi GoF [ Gang of Four], where they mentioned them as being solutions to given problems. If you would like to know more, GoF refers to the four authors of the book, Mẫu thiết kế. Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng . Tác giả của cuốn sách là Erich Gamma , Richard Helm , Ralph Johnson, and John Vlissides, with a foreword by Grady Booch. This book covers software engineering solutions to the commonly occurring problems in software design. There were 23 design patterns first identified, and the first implementation was done with respect to the Java program language. Design patterns are discoveries and not an invention in themselves.
Các tính năng chính của các mẫu thiết kế như sau
Chúng trung lập về ngôn ngữ và có thể được triển khai trên nhiều ngôn ngữ
Chúng năng động, vì các mẫu mới thỉnh thoảng được giới thiệu
Chúng được mở để tùy chỉnh và do đó hữu ích cho các nhà phát triển
Ban đầu, khi bạn nghe về các mẫu thiết kế, bạn có thể cảm thấy như sau
Đó là thuốc chữa bách bệnh cho tất cả các vấn đề thiết kế mà bạn gặp phải cho đến nay
Đó là một cách giải quyết vấn đề phi thường, đặc biệt thông minh
Nhiều chuyên gia trong thế giới phát triển phần mềm đồng ý với các giải pháp này
Có điều gì đó có thể lặp lại về thiết kế, do đó có từ mẫu
Chắc hẳn bạn cũng đã cố gắng giải quyết các vấn đề mà một mẫu thiết kế hướng tới, nhưng có thể giải pháp của bạn chưa hoàn thiện và tính hoàn thiện mà chúng tôi đang tìm kiếm là vốn có hoặc tiềm ẩn trong mẫu thiết kế. Khi chúng tôi nói tính đầy đủ, nó có thể đề cập đến nhiều yếu tố như thiết kế, khả năng mở rộng, tái sử dụng, sử dụng bộ nhớ và các yếu tố khác. Về cơ bản, một mẫu thiết kế là học hỏi từ thành công của người khác hơn là thất bại của chính bạn
Thật thú vị, các mẫu thiết kế là giải pháp cho các vấn đề đã biết. Vì vậy, chúng có thể được sử dụng rất nhiều trong phân tích hoặc thiết kế, và như mong đợi, trong giai đoạn phát triển do mối quan hệ trực tiếp trong mã ứng dụng
Ưu điểm của các mẫu thiết kế
Ưu điểm của các mẫu thiết kế như sau
Chúng có thể tái sử dụng trên nhiều dự án
Mức độ kiến trúc của các vấn đề có thể được giải quyết
Chúng đã được thời gian thử nghiệm và chứng minh rõ ràng, đó là kinh nghiệm của các nhà phát triển và kiến trúc sư
Họ có độ tin cậy và sự phụ thuộc
Phân loại các mẫu thiết kế
Không phải mọi đoạn mã hoặc thiết kế đều có thể được gọi là mẫu thiết kế. Ví dụ: cấu trúc lập trình hoặc cấu trúc dữ liệu giải quyết một vấn đề không thể được gọi là mẫu. Hãy hiểu các thuật ngữ một cách rất đơn giản dưới đây
Đoạn trích . Đây là mã trong một số ngôn ngữ cho một mục đích nhất định, ví dụ: kết nối cơ sở dữ liệu trong Python có thể là một đoạn mã
Thiết kế . Một giải pháp tốt hơn để giải quyết vấn đề cụ thể này
Chuẩn . Đây là một cách để giải quyết một số loại vấn đề và có thể rất chung chung và có thể áp dụng cho một tình huống hiện tại
Mẫu . Đây là một giải pháp đã được thử nghiệm theo thời gian, hiệu quả và có thể mở rộng sẽ giải quyết toàn bộ nhóm sự cố đã biết
Bối cảnh – khả năng ứng dụng của các mẫu thiết kế
Để sử dụng các mẫu thiết kế một cách hiệu quả, các nhà phát triển ứng dụng phải nhận thức được bối cảnh áp dụng các mẫu thiết kế. Chúng ta có thể phân loại ngữ cảnh thành các loại chính sau
Người tham gia . Chúng là các lớp được sử dụng trong các mẫu thiết kế. Các lớp đóng các vai trò khác nhau để hoàn thành nhiều mục tiêu trong mẫu.
Yêu cầu phi chức năng . Các yêu cầu như tối ưu hóa bộ nhớ, khả năng sử dụng và hiệu suất thuộc danh mục này. Những yếu tố này ảnh hưởng đến giải pháp phần mềm hoàn chỉnh và do đó rất quan trọng.
Sự đánh đổi . Không phải tất cả các mẫu thiết kế đều phù hợp với phát triển ứng dụng và cần phải đánh đổi. Đây là những quyết định mà bạn đưa ra khi sử dụng mẫu thiết kế trong ứng dụng.
Kết quả . Các mẫu thiết kế có thể có tác động tiêu cực đến các phần khác của mã nếu ngữ cảnh không phù hợp. Các nhà phát triển nên hiểu hậu quả và việc sử dụng các mẫu thiết kế.
Các mẫu cho ngôn ngữ động
Python là một ngôn ngữ động như Lisp. Bản chất động của Python có thể được biểu diễn như sau
Các loại hoặc lớp là các đối tượng trong thời gian chạy
Các biến có thể có loại như một giá trị và có thể được sửa đổi trong thời gian chạy. Ví dụ:
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
25 vàa = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
26, biếna = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
27 được gán trong thời gian chạy và loại cũng được thay đổiCác ngôn ngữ động linh hoạt hơn về các hạn chế của lớp
Ví dụ: trong Python, tính đa hình được tích hợp sẵn trong ngôn ngữ, không có các từ khóa như
a = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
28 vàa = "John" b = [1,2,3] c = [3,4,6,8,9] print[a[1], b[0], c[2]]
29 và mọi thứ đều được công khai theo mặc địnhĐại diện cho một trường hợp mà các mẫu thiết kế có thể được triển khai dễ dàng bằng các ngôn ngữ động
phân loại mẫu
Cuốn sách của GoF về các mẫu thiết kế đã nói về 23 mẫu thiết kế và phân loại chúng theo ba loại chính
mô hình sáng tạo
mô hình cấu trúc
Mẫu hành vi
Việc phân loại các mẫu được thực hiện chủ yếu dựa trên cách các đối tượng được tạo, cách các lớp và đối tượng được cấu trúc trong một ứng dụng phần mềm và cũng bao gồm cách các đối tượng tương tác với nhau. Hãy nói chi tiết về từng loại trong phần này
mô hình sáng tạo
Sau đây là các thuộc tính của mẫu Creational
Chúng hoạt động trên cơ sở cách các đối tượng có thể được tạo
Họ cô lập các chi tiết của việc tạo đối tượng
Mã độc lập với loại đối tượng được tạo
Một ví dụ về mẫu sáng tạo là mẫu Singleton
mô hình cấu trúc
Sau đây là các thuộc tính của các mẫu cấu trúc
Họ thiết kế cấu trúc của các đối tượng và lớp để họ có thể sáng tác nhằm đạt được kết quả lớn hơn
Trọng tâm là đơn giản hóa cấu trúc và xác định mối quan hệ giữa các lớp và đối tượng
Họ tập trung vào sự kế thừa và thành phần của lớp
Một ví dụ về mẫu hành vi là mẫu Bộ điều hợp
Mẫu hành vi
Sau đây là các thuộc tính của các mẫu hành vi
Họ quan tâm đến sự tương tác giữa các đối tượng và trách nhiệm của các đối tượng
Các đối tượng sẽ có thể tương tác và vẫn được ghép nối lỏng lẻo
Một ví dụ về mẫu hành vi là mẫu Người quan sát
Tóm lược
Trong chương này, bạn đã học về các khái niệm cơ bản của lập trình hướng đối tượng, chẳng hạn như đối tượng, lớp, biến và các tính năng như đa hình, kế thừa và trừu tượng hóa với các ví dụ mã
Bây giờ chúng ta cũng biết về các nguyên tắc thiết kế hướng đối tượng mà chúng ta, với tư cách là nhà phát triển/kiến trúc sư, nên xem xét khi thiết kế một ứng dụng
Cuối cùng, chúng tôi tiếp tục khám phá thêm về các mẫu thiết kế và các ứng dụng cũng như bối cảnh mà chúng có thể được áp dụng và cũng thảo luận về phân loại của chúng
Ở cuối chương này, chúng ta đã sẵn sàng để thực hiện bước tiếp theo và nghiên cứu chi tiết về các mẫu thiết kế