Nghiên cứu và áp dụng Design Pattern trong phát triển phần mềm

MỤC LỤC

Thành phần chính

Trong khi đó Object là 1 đối tượng cụ thể của 1 Class, được xây dựng dựa trên 1 Class và có các trạng thái và hành vi riêng. Đối tượng myComputer được tạo từ lớp Computer sẽ có các đặc điểm riêng như Brand=DELL hay Color=WHITE và cũng sở hữu các phương thức Start() và Shutdown().

Bốn tính chất của hướng đối tượng

Class được định nghĩa như một bản thiết kế để xây dựng đặc tính của một đối tượng cụ thể như đặc điểm và hành vi. Ví dụ: LớpComputer bao gồm các thuộc tính như Brand, Color và có các phương thức như Start() và Shutdown().

Nguyên tắc SOLID

● Liskov substitution principle: Nguyên tắc nói rằng các phương thức lớp cha có thể bị thay thế bởi các phương thức của lớp con mà không làm thay đổi tính đúng đắn của chương trình. ● Interface segregation principle: Nguyên tắc cho rằng các interface cần được phần chia thành nhiều Interface nhỏ với nhiều mục đích khác nhau, tránh việc implement thừa method.

Các Design Patterns phổ biến 1. Creational Patterns

Abstract Factory a. Định nghĩa

- Mẫu thiết kế Abstract Factory giải quyết vấn đề của việc tạo ra và kết nối nhiều loại đối tượng khác nhau trong hệ thống đồng thời đảm bảo chúng tương thích với nhau. - Prototype: Abstract Factory có thể được sử dụng cùng với mẫu thiết kế Prototype để tạo ra các đối tượng mới bằng cách sao chép các đối tượng hiện có, cho phép tạo ra các đối tượng với các biến thể khác nhau.

[Hình 1] Sơ đồ cấu trúc Abstract Factory
[Hình 1] Sơ đồ cấu trúc Abstract Factory

Factory Method a. Định nghĩa

Trong khi Factory Method tạo ra một sản phẩm duy nhất, Abstract Factory tạo ra nhóm các sản phẩm liên quan. - Singleton: Mẫu Singleton có thể được kết hợp với Factory Method để đảm bảo hệ thống chỉ có một đối tượng duy nhất của một tạo ra cụ thể, kiểm soát quyền truy cập vào việc khởi tạo các lớp tạo ra.

Builder a. Định nghĩa

- Abstract Factory: Trong khi Builder tập trung vào việc xây dựng một đối tượng phức tạp, Abstract Factory liên quan đến việc tạo ra nhóm các đối tượng liên quan hoặc phụ thuộc vào nhau. - Prototype: Builder có thể được sử dụng với Prototype để tạo ra các đối tượng mới bằng cách sao chép một đối tượng hiện có, cho phép xây dựng các đối tượng phức tạp với các biến thể khác nhau.

Prototype a. Định nghĩa

- Mẫu thiết kế này giúp tránh cần phải tạo ra các lớp con của một đối tượng cho mỗi biến thể có thể có, làm cho nó linh hoạt và hiệu quả hơn. Tuy nhiên, Prototype tập trung vào việc sao chép toàn bộ đối tượng, trong khi Memento tập trung vào việc lưu giữ và khôi phục trạng thái của nó.

[Hình 4] Sơ đồ cấu trúc Prototype
[Hình 4] Sơ đồ cấu trúc Prototype

Singleton a. Định nghĩa

- Prototype: Mẫu thiết kế Prototype liên quan đến việc tạo ra các đối tượng mới bằng cách sao chép một đối tượng đã tồn tại (nguyên mẫu). Ở một số ngữ cảnh cụ thể, nguyên mẫu có thể là một đối tượng duy nhất được chia sẻ trên toàn ứng dụng, tương tự như mẫu thiết kế Singleton.

Structural Patterns 1. Adapter

    - Trong khi mẫu thiết kế Bridge là về việc tách biệt trừu tượng khỏi việc triển khai, nó có sự tương đồng với mẫu thiết kế Adapter về mặt cung cấp cơ chế để làm việc với các giao diện không tương thích. - Sự khác biệt chính là mẫu thiết kế Adapter tập trung vào việc làm cho các lớp hiện tại làm việc cùng nhau, trong khi mẫu thiết kế Bridge quan tâm đến việc cung cấp các biến thể cho cả trừu tượng và triển khai. - Trong khi mẫu thiết kế Adapter tập trung hơn vào việc làm cho các lớp hiện tại làm việc cùng nhau bằng cách cung cấp một giao diện khác, nó có sự tương đồng với mẫu thiết kế Bridge về mặt cung cấp một cơ chế để làm việc với các giao diện khác nhau.

    - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Composite được thiết kế cho các cấu trúc cây đại diện cho các phân cấp toàn bộ, trong khi mẫu thiết kế Decorator tập trung vào việc đính kèm các trách nhiệm bổ sung cho các đối tượng. - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Proxy tập trung vào việc kiểm soát quyền truy cập đến một đối tượng duy nhất, trong khi mẫu thiết kế Facade cung cấp một giao diện đơn giản cho toàn bộ hệ thống con. - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Composite tập trung hơn vào việc tạo ra một cấu trúc cây của các đối tượng, trong khi mẫu thiết kế Flyweight nhấn mạnh vào việc chia sẻ trạng thái để giảm việc sử dụng bộ nhớ.

    - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Proxy tập trung hơn vào việc kiểm soát quyền truy cập đến một đối tượng duy nhất, trong khi mẫu thiết kế Decorator tập trung vào việc thêm các trách nhiệm một cách động.

    [Hình 6] Sơ đồ cấu trúc Adapter
    [Hình 6] Sơ đồ cấu trúc Adapter

    Behavioral Patterns

      - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Command đóng gói một yêu cầu như một đối tượng, cho phép hàng đợi, đăng nhập hoặc hỗ trợ các hoạt động có thể hoàn tác, trong khi mẫu thiết kế Chain of Responsibility tập trung vào việc truyền yêu cầu qua một chuỗi động của các xử lý viên. - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Command đóng gói một yêu cầu như một đối tượng, cho phép hàng đợi, đăng nhập hoặc hỗ trợ các hoạt động có thể hoàn tác, trong khi mẫu thiết kế Chain of Responsibility tập trung vào việc truyền yêu cầu qua một chuỗi động của các xử lý viên. - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Composite tập trung vào việc xử lý đối tượng cá nhân và sự kết hợp của chúng một cách đồng nhất, tạo thành một cấu trúc cây, trong khi mẫu thiết kế Iterator được thiết kế đặc biệt để truy cập tuần tự các phần tử trong một bộ sưu tập.

      - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Observer tập trung vào mối phụ thuộc một-đa, trong đú một đối tượng (đối tượng theo dừi) thụng bỏo cho các đối tượng phụ thuộc của nó (người quan sát) về các thay đổi trạng thái, trong khi mẫu thiết kế Mediator tập trung vào việc tập trung giao tiếp giữa các đối tượng mà không cần chúng biết trực tiếp về nhau. - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Command tập trung vào việc đóng gói yêu cầu dưới dạng đối tượng, cho phép hàng đợi, đăng nhập hoặc hỗ trợ các hoạt động có thể hoàn tác, trong khi mẫu thiết kế Memento được thiết kế đặc biệt để bắt giữ và khôi phục trạng thái nội tại của một đối tượng. - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Mediator tập trung vào việc tập trung giao tiếp giữa các đối tượng thông qua một trung gian (mediator), trong khi mẫu thiết kế Observer thiết lập một mối phụ thuộc một-đa, cho phép nhiều người quan sát nhận thông báo từ một đối tượng.

      - Tuy nhiên, sự khác biệt chính là mẫu thiết kế State tập trung vào việc biểu diễn và đóng gói hành vi liên quan đến các trạng thái khác nhau của một đối tượng, trong khi mẫu thiết kế Strategy tập trung vào việc định nghĩa một họ thuật toán và làm cho chúng có thể thay thế lẫn nhau. - Tuy nhiên, sự khác biệt chính là mẫu thiết kế Template Method tập trung vào việc cung cấp một cấu trúc thuật toán được định trước với một số bước có thể được ghi đè, trong khi mẫu thiết kế Strategy tập trung vào việc định nghĩa một họ thuật toán có thể thay thế được. - Tuy nhiên, sự khác biệt quan trọng là mẫu thiết kế Strategy tập trung vào việc định nghĩa một họ thuật toán và làm cho chúng có thể thay thế lẫn nhau, trong khi mẫu thiết kế Visitor tập trung vào việc đại diện cho các hoạt động cần được thực hiện trên các phần tử của một cấu trúc đối tượng.

      [Hình 13] Sơ đồ cấu trúc Chain of Responsibility
      [Hình 13] Sơ đồ cấu trúc Chain of Responsibility

      Number of Children - NOC

      - tên lớp cha (do java chỉ cho kế thừa từ 1 lớp cha) - danh sách tên các interface. - Sử dụng thuật toán học máy MLPClassifier - Multi-layer Perceptron classifier và bộ dữ liệu đã chuẩn bị trước để tiến hành huấn luyện mô hình.

      [Bảng 2] Bảng thống kê các giá trị trung bình của mẫu Prototype
      [Bảng 2] Bảng thống kê các giá trị trung bình của mẫu Prototype

      Chi tiết

        - Một đối tượng thuộc lớp Stat sẽ ứng với một đoạn code có nghĩa (được định nghĩa hợp lệ trong Parser). - Có thể chứa danh sách các tên biến hoặc giá trị cần so sánh - Bằng cách kiểm tra các node có trong cây để lấy ra các thông tin có trong. - Hệ thống nhiều lớp ẩn (hidden layer) được kết nối chằng chịt (fully connected) với nhau.

        - Cơ chế lan truyền xuôi (feedforward) để cho ra kết quả (output) từ thông tin đầu vào (input). - Cơ chế lan truyền ngược (backpropagation) dùng để chỉnh sửa trọng số (weight) ở mỗi đợt (epoch) nhằm giảm độ lỗi (reduce loss). Perceptron classifier, và bộ dữ liệu đã chuẩn bị trước để tiến hành huấn luyện mô hình.

        - Cần chuyển các dự án java thành data phù hợp với input của model có sẵn 1.

        [Hình 28] Sơ đồ mạng neural với 2 lớp ẩn
        [Hình 28] Sơ đồ mạng neural với 2 lớp ẩn

        Source Code Requirement: git, python 3.11

        Màn hình upload

        1 on_click Lấy đường dẫn dự án và truyền tham số vào mô hình máy học.