Hệ thống hướng đối tượng, mô hình lập trình và triết học
(black7375.tistory.com)-
Khác biệt lớn nhất giữa class và prototype là cách tạo đối tượng [class -> instance vs object -> object được sao chép].
-
Điểm chung lớn nhất là cùng hướng đối tượng, tức chia chương trình thành các đơn vị gọi là đối tượng và để chúng tương tác với nhau.
-
Cách đơn giản nhất để làm tốt việc đóng gói, cốt lõi của hướng đối tượng, là làm tốt việc trừu tượng hóa.
-
Có thể chia trừu tượng hóa để suy nghĩ theo các khía cạnh như tính chất thiên về dữ liệu (OOP cổ điển), hình thức (type), trạng thái (thiết kế hướng dữ liệu), và các yếu tố lấy quan hệ làm trung tâm như thời gian (hướng thủ tục), hành vi (hàm thuần), định nghĩa (logic), bối cảnh (thiết kế hướng miền, AOP), v.v.
-
Để phân loại và thiết kế tốt, sẽ rất hữu ích nếu có sự hiểu biết về nhiều phạm trù khác nhau giúp ta nhận ra hình thức của tư duy [ví dụ: 4 nhóm 12 phạm trù của Kant].
-
-
Triết học và mô hình lập trình
-
Hướng thủ tục: thời gian ảnh hưởng đến phần lớn các phép trừu tượng hóa, và những cú pháp như Goto khiến ngữ cảnh bị trộn lẫn là không tốt.
-
Hướng hàm: vì cố gắng biểu hiện dưới dạng hành vi nên có quan hệ rất sâu với type (hình thức).
-
Hướng logic: cấu thành logic bằng sự kiện và quy tắc, rồi thông qua truy vấn có thể thu được kết quả của logic vị từ.
-
OOP truyền thống: trực quan. Tuy nhiên không thể xác định được các thuộc tính một cách hoàn hảo.
-
Thiết kế hướng dữ liệu: khác với hướng hàm vốn cố xử lý trạng thái của logic, cách này cố giảm trạng thái ngay trong bản thân máy tính. Nhờ tăng cache hit mà mang lại cải thiện hiệu năng.
-
Thiết kế hướng miền: khác với OOP truyền thống, nó thiết kế khác nhau tùy theo domain và ngữ cảnh (tương tự picture theory - use theory of meaning); nếu dùng AOP để tiêm phụ thuộc cho các subdomain thì việc triển khai sẽ thuận tiện hơn.
-
-
MVP
-
Làm prototype: phải bao gồm các chức năng quan trọng, và điều này có thể khác nhau tùy góc nhìn của nhà thiết kế, lập trình viên, tài chính, v.v. Đây là yêu cầu điển hình dựa trên mức độ tương đồng với sản phẩm mà nhiều người cho là quan trọng.
-
MVP: phải đảm bảo mức độ hoàn thiện tối thiểu để có thể sử dụng được, và cần được thiết kế tương tự với sản phẩm được xem là giai đoạn cuối cùng.
-
-
Hướng đối tượng và sự tồn tại
-
Plato: cho rằng những tính chất phổ quát là bất biến và có thực, còn các tồn tại cá biệt thì hiện hữu trong trạng thái thiếu vắng các đặc tính phổ quát.
-
Aristotle: cho rằng chỉ các cá thể riêng biệt mới là thực thể nền tảng, còn cái phổ quát là biểu tượng xuất hiện trong quan hệ trên-dưới/bao hàm.
-
class-instance tương tự thuyết ý niệm của Plato, còn prototype-object sao chép tương tự thực thể luận của Aristotle.
-
Mục tiêu ban đầu tôi định viết là
-
OOP truyền thống tương tự picture theory, còn thiết kế hướng miền tương tự use theory of meaning.
-
class-instance tương tự thuyết ý niệm của Plato, còn prototype-object sao chép tương tự thực thể luận của Aristotle.
chỉ có hai ý đó thôi, nhưng hóa ra lại dài hơn tôi nghĩ.
Nếu hoàn toàn không có kiến thức nền thì có thể sẽ thấy hơi khó đọc.
6 bình luận
Tại sao JavaScript lại chọn prototype
https://vi.news.hada.io/topic?id=5532
Đây là bài viết tôi chợt nhớ ra và viết lại khi đang đọc bài đó.
Hãy thử đọc bài này theo cách so sánh như vậy nhé!
Cảm ơn!!
Ủa? Có vẻ là không thể chèn nhiều dấu cách liên tiếp nhỉ huhu
À, có một số trường hợp cố ý chiếm chỗ nên...
Tôi đã chỉnh để giảm bớt các dòng trống và nhiều khoảng trắng hu hu
Tôi hiểu rồi.
Từ lần sau khi đăng, tôi sẽ cần cân nhắc điều đó.