0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Tài Liệu CLPROLF (1/6) – Giải Thích Về Các Khả Năng

Đăng vào 7 tháng trước

• 5 phút đọc

CLPROLF – Giải Thích Về Các Khả Năng

Clprolf là một ngôn ngữ và framework giúp bạn thiết kế các đối tượng với trách nhiệm rõ ràng.
Bằng cách gán cho mỗi lớp một vai trò (còn gọi là khả năng), bạn đảm bảo tuân thủ Nguyên Tắc Trách Nhiệm Đơn (SRP).
Các đối tượng trở thành thành phần, và sự rõ ràng này duy trì ngay cả với kế thừa.


Khả Năng Là Gì?

Khả năng diễn tả bản chất của một lớp — vai trò cơ bản của nó trong hệ thống.
Clprolf định nghĩa chỉ một vài vai trò cơ bản, giúp thiết kế trở nên không mơ hồ và trực quan.

Năm khả năng có sẵn là:

  1. agent
    Cụm từ đồng nghĩa: simu_agent, simu_real_world_obj, simu_real_obj, abstraction.

  2. worker_agent
    Cụm từ đồng nghĩa: simu_comp_as_worker, comp_as_worker.

  3. model
    Cụm từ đồng nghĩa: model_real_world_obj, model_real_obj.

  4. information
    (không có cụm từ đồng nghĩa).

  5. indef_obj
    Một đối tượng linh hoạt không có vai trò rõ ràng, hoạt động như một lớp OO truyền thống.


Đối Tượng Giống Như Trong Kinh Doanh

Những đối tượng này đại diện cho trừu tượng thế giới thực hoặc các khái niệm miền.

  • agent: diễn viên tích cực.

    • agent nhấn mạnh hành động.
    • simu_real_obj nhấn mạnh mô phỏng.
    • abstraction nhấn mạnh sự đóng gói khái niệm (ví dụ: một Connection, một Socket).
    • simu_agent làm nổi bật mô phỏng một đại lý trong thế giới thực (ví dụ: một nhân viên).
  • simu_real_obj: một mô phỏng nhỏ về một thực thể trong thế giới thực.
    Ví dụ: một lớp Giraffe với trạng thái và hành vi mô phỏng cách một con hươu cao cổ hành động.

  • abstraction: cho các khái niệm và phần tử hệ thống trừu tượng (kết nối, socket, tiện ích hệ thống).

  • model: một thực thể thụ động không có hành vi — chỉ có các thuộc tính.
    Ví dụ: một Customer với các trường nhưng không có phương thức.


Đối Tượng Kỹ Thuật

Những đối tượng này xử lý các nhiệm vụ tính toán hoặc hỗ trợ thuần túy.
Tại đây, máy tính được xem như là diễn viên.

  • worker_agent: máy tính như một người lao động thực hiện các thuật toán.
    Cụm từ đồng nghĩa: comp_as_worker, simu_comp_as_worker.

  • information: một container dữ liệu hợp lý, được sử dụng bởi các nhân viên trong các thuật toán.
    ⚠️ Khác với model, nó không đại diện cho một thực thể trong thế giới thực, chỉ là dữ liệu kỹ thuật.

Ví dụ: tiện ích hệ thống, DAO, kho lưu trữ, dịch vụ cấp thấp, hoặc các thành phần view trong MVC.


Khả Năng và Giới Tính

Các khả năng có thể được tinh chỉnh với giới tính (vai trò phụ tùy chọn).
Chúng cũng có thể có các cụm từ đồng nghĩa:

  • @Expert_component = @Human_expert = @Design_role
  • @GUI_role = @Machine_tool
  • @Active_agent (không có cụm từ đồng nghĩa)
  • @Static = @Expert_component_static = @Human_expert_static
  • @Static cho worker_agent (không có cụm từ đồng nghĩa)

⚠️ Giới tính chỉ áp dụng cho đại lý, ngoại trừ @Static, có thể cũng áp dụng cho worker_agent.


Mối Quan Hệ Giữa Các Khả Năng

  • Đại lý và Công nhân
    Mỗi đại lý cũng có thể hoạt động như một công nhân (máy tính thực hiện các đại lý như những công nhân).
    Nhưng các công nhân rõ ràng nên được giảm thiểu để đảm bảo sự rõ ràng.

  • Mô hình và Thông tin
    Một mô hình có thể được biểu diễn dưới dạng thông tin (lưu trữ dưới dạng dữ liệu),
    n nhưng thông tin không nên thay thế một mô hình.

  • Thay Thế Một Chiều

    • Đại lý → Công nhân ✅
    • Công nhân → Đại lý ❌
    • Mô hình → Thông tin ✅
    • Thông tin → Mô hình ❌

Những sự đảo ngược này thường tiết lộ một lỗi thiết kế hoặc một sự diễn giải có chủ đích.


Giao Diện và Khả Năng

Giao diện cũng có các khả năng:

  • compat_interf_version = version_inh
  • compat_interf_capacity = capacity_inh
  • compat_interf (không có cụm từ đồng nghĩa)

Các khả năng trên giao diện xác định các lớp nào được phép triển khai chúng.

Các giao diện khả năng cũng có thể có một giới tính gọi là Advice:

  • @For_agent_like
  • @For_worker_like

Tính Nhất Quán Trong Kế Thừa

Clprolf đảm bảo rằng kế thừa giữ tính nhất quán về vai trò:

  • Đối tượng kinh doanh và kỹ thuật không thể được trộn lẫn trong cùng một phân cấp.
  • Các cụm từ đồng nghĩa của một khả năng được chấp nhận.
  • Các ngoại lệ có thể được ép buộc với @Forced_inh.

Sử Dụng Các Khả Năng

Trong Clprolf thuần khiết, khả năng thay thế từ khóa class.
Trong framework, nó xuất hiện dưới dạng một chú thích phía trên lớp.

Ví dụ:

Copy
@Agent
public class Animal { ... }

Thuật Toán Để Chọn Một Khả Năng

Mỗi lớp phải khai báo một vai trò.

Bước 1 – Lớp có phương thức không?

  • Có → nó là tích cực → chọn @Agent hoặc @Worker_agent.
  • Không → nó là thụ động → sử dụng @Model (thực thể) hoặc @Information (container kỹ thuật).

Bước 2 – Trách nhiệm liên quan đến kinh doanh hay kỹ thuật?

  • Logic kinh doanh hoặc kiến thức chuyên gia → @Agent.
  • Lớp kỹ thuật hoặc hỗ trợ → @Worker_agent.

Ví Dụ: Lớp Hệ Thống Trong Java

Nhìn thoáng qua: @Worker_agent (cấp thấp, kỹ thuật).

Nhưng Clprolf ưu tiên @Agent bất cứ khi nào có thể.
Hệ thống cũng có thể được coi là:

  • @Abstraction — vì “hệ thống” là một thực thể khái niệm.
  • @Agent(Role.EXPERT_COMPONENT) — như một thành phần chuyên gia đại diện cho môi trường.

Tóm Tắt

  • Các khả năng làm cho các đối tượng trở thành thành phần với các vai trò rõ ràng.
  • Các vai trò làm rõ trách nhiệm, cải thiện khả năng đọc và đảm bảo tính nhất quán trong kế thừa.
  • Các cụm từ đồng nghĩa giữ cho sự linh hoạt trong khi vẫn bảo tồn tính nhất quán.

Kết quả: một hệ thống đơn giản hơn, dễ bảo trì hơn, nơi mỗi đối tượng được định vị rõ ràng.


Lưu Ý

Nếu lớp đã phù hợp với một trong những danh mục kiến trúc nổi tiếng, bạn có thể trực tiếp gán một vai trò tương ứng:

  • Một dịch vụ → @Agent
  • Một trợ lý → @Agent hoặc @Worker_agent (thường với Role.STATIC)
  • Một DAO hoặc kho lưu trữ → @Worker_agent
  • Một bộ điều khiển → @Agent

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào