Trong một trong nhiều lời tuyên bố chống OOP trên cat-v.org tôi đã tìm thấy một đoạn của Joe Armstrong đưa ra một số phản đối chống lại mô hình OOP, một trong số đó là:
Phản đối 4 - Đối tượng có trạng thái riêng tư
Nhà nước là gốc rễ của mọi tội lỗi. Trong các chức năng đặc biệt với tác dụng phụ nên tránh.
Trong khi trạng thái trong ngôn ngữ lập trình là không mong muốn, thì trong trạng thái thực tế có rất nhiều. Tôi rất quan tâm đến trạng thái tài khoản ngân hàng của mình và khi tôi gửi hoặc rút tiền từ ngân hàng của mình, tôi hy vọng trạng thái tài khoản ngân hàng của mình sẽ được cập nhật chính xác.
Cho rằng trạng thái tồn tại trong thế giới thực, ngôn ngữ lập trình nên cung cấp phương tiện gì để đối phó với trạng thái?
Các OOPL nói rằng, Che giấu trạng thái khỏi lập trình viên. Các trạng thái được ẩn và chỉ hiển thị thông qua các chức năng truy cập. Các ngôn ngữ lập trình thông thường (C, Pascal) nói rằng khả năng hiển thị của các biến trạng thái được kiểm soát bởi các quy tắc phạm vi của ngôn ngữ. Ngôn ngữ khai báo thuần túy nói rằng không có nhà nước. Trạng thái toàn cầu của hệ thống được đưa vào tất cả các chức năng và đi ra từ tất cả các chức năng. Các cơ chế như monad (cho FPL) và DCG (ngôn ngữ logic) được sử dụng để ẩn trạng thái khỏi lập trình viên để họ có thể lập trình, như thể trạng thái không quan trọng, nhưng điều này cần thiết để truy cập đầy đủ vào trạng thái của hệ thống.
Các ứng dụng ẩn giấu trạng thái khỏi tùy chọn lập trình viên do OOPLs chọn là lựa chọn tồi tệ nhất có thể. Thay vì tiết lộ trạng thái và cố gắng tìm cách giảm thiểu sự phiền toái của nhà nước, họ che giấu nó đi.
Chính xác thì điều này có nghĩa là gì? Tôi có rất ít kinh nghiệm về thủ tục hoặc cấp độ thấp, chủ yếu là OOP, vì vậy điều đó có thể giải thích tôi không quen thuộc với điều này. Và từ một quan điểm hiện đại hơn, bây giờ hầu hết sự cuồng loạn hướng đối tượng đã được thông qua (ít nhất là theo như tôi có thể nói), các bạn nghĩ chính xác / có liên quan như thế nào?
Cảm ơn bạn đã giúp đỡ.