Tôi đã đọc cuốn Lịch sử ban đầu của Smalltalk và có một vài đề cập đến "sự phân công" khiến tôi đặt câu hỏi về sự hiểu biết của tôi về ý nghĩa của nó:
Mặc dù OOP đến từ nhiều động lực, hai là trung tâm. Quy mô lớn là tìm ra sơ đồ mô-đun tốt hơn cho các hệ thống phức tạp liên quan đến việc ẩn chi tiết, và quy mô nhỏ là tìm phiên bản phân công linh hoạt hơn, và sau đó cố gắng loại bỏ hoàn toàn.
(từ 1960-66 - OOP sớm và các ý tưởng hình thành khác của những năm sáu mươi , Phần I)
Những gì tôi nhận được từ Simula là bây giờ bạn có thể thay thế các ràng buộc và chuyển nhượng bằng các mục tiêu . Điều cuối cùng bạn muốn bất kỳ lập trình viên nào làm là gây rối với trạng thái bên trong ngay cả khi được trình bày theo nghĩa bóng. Thay vào đó, các đối tượng nên được trình bày dưới dạng trang web của các hành vi cấp cao hơn phù hợp hơn để sử dụng làm thành phần động . (...) Thật không may là phần lớn những gì được gọi là "lập trình hướng đối tượng" ngày nay chỉ đơn giản là lập trình kiểu cũ với các cấu trúc fancier. Nhiều chương trình được tải với các hoạt động "kiểu gán" hiện được thực hiện bằng các thủ tục đính kèm đắt tiền hơn.
(từ Phong cách "Hướng đối tượng" , Phần IV)
Tôi có đúng không khi diễn giải ý định rằng các đối tượng có nghĩa là mặt tiền và bất kỳ phương thức nào (hoặc "thông điệp") có mục đích là đặt một biến đối tượng trên một đối tượng (tức là "gán") đang đánh bại mục đích? Giải thích này dường như được hỗ trợ bởi hai tuyên bố sau trong Phần IV:
Bốn kỹ thuật được sử dụng cùng nhau - trạng thái bền bỉ, đa hình, khởi tạo và phương pháp theo mục tiêu cho đối tượng - chiếm phần lớn sức mạnh. Không ai trong số này yêu cầu "ngôn ngữ hướng đối tượng" được sử dụng - ALGOL 68 gần như có thể được chuyển sang phong cách này - và OOPL chỉ tập trung tâm trí của người thiết kế theo một hướng hiệu quả cụ thể. Tuy nhiên, thực hiện quyền đóng gói là một cam kết không chỉ trừu tượng hóa trạng thái, mà còn loại bỏ các ẩn dụ định hướng nhà nước khỏi lập trình.
... và:
Các câu lệnh chuyển nhượng - ngay cả những câu trừu tượng - thể hiện các mục tiêu ở mức độ rất thấp và sẽ cần nhiều hơn nữa để hoàn thành mọi việc. Nói chung, chúng tôi không muốn lập trình viên bị rối tung với trạng thái, cho dù có mô phỏng hay không.
Sẽ công bằng khi nói rằng những trường hợp mờ đục, bất biến đang được khuyến khích ở đây? Hay chỉ đơn giản là những thay đổi trạng thái trực tiếp được khuyến khích? Ví dụ, nếu tôi có một BankAccount
lớp, nó OK để có GetBalance
, Deposit
và Withdraw
phương pháp dụ / tin nhắn; chỉ cần chắc chắn rằng không có một SetBalance
phương thức / thông báo cá thể?