Trong khi một số đối tượng tôi tạo đang mô hình hóa các đối tượng trong thế giới thực, thì mã OOP trước có làm như vậy không?
Sự khác biệt lớn nhất giữa mã OOP và mã trước OOP là các mô hình trước đây là một tình huống trong thế giới thực khi một nhóm các thực thể riêng biệt tương tác với nhau, mỗi "sức mạnh" hạn chế về những gì nó có thể làm và cũng có khả năng "phản ứng" với sự kiện bên ngoài với hành động của riêng mình. Cái sau mô hình mọi thứ như một khối dữ liệu lớn không tự làm được gì, trong khi tính toán đại diện cho "những điều xảy ra" và có thể ảnh hưởng đến bất kỳ hoặc tất cả chúng.
Cho dù nó có mô hình tốt hơn thế giới thực hay không, điều đó thực sự phụ thuộc vào khía cạnh nào của thế giới mà bạn đang tạo mô hình. Một mô phỏng vật lý, ví dụ, nơi bạn muốn mô tả các hiệu ứng mà nói, một ngọn lửa được thắp lên trong các vật thể bao trùm, sẽ được thể hiện tốt hơn bằng cách tiếp cận "truyền thống", vì cả ánh sáng và nhiệt đều tốt xác định các quá trình ảnh hưởng đến cả trạng thái bên ngoài và bên trong của các đối tượng khác và không thay đổi theo hành vi của từng đối tượng cụ thể, chỉ bị ảnh hưởng bởi các thuộc tính của chúng.
Mặt khác, nếu bạn mô hình hóa các thành phần khác nhau tương tác để tạo ra hành vi mong muốn, coi chúng là tác nhân thay vì những thứ thụ động có thể giúp bạn thực hiện chính xác dễ dàng hơn mà không bỏ sót điều gì. Nếu tôi muốn bật TV, tôi chỉ cần nhấn nút, nếu rút dây nguồn, nó TV.turnOn
sẽ kiểm tra xem có giúp tôi không. Vì vậy, không có nguy cơ biến một cái răng cưa và quên biến cái khác chạm vào nó, vì bản thân cái răng cưa (nếu được lập trình chính xác) sẽ quan tâm đến các tương tác thứ cấp do hậu quả của cái tương tác chính.
Nhưng OO thực sự là về cách mô hình hóa mọi thứ và phương pháp mô hình hóa đó dường như không được truyền cảm hứng từ thế giới thực đối với tôi.
Tôi tin rằng nó có liên quan nhiều đến cách chúng ta nhìn nhận thế giới hơn là thế giới thực sự như thế nào. Người ta có thể lập luận rằng mọi thứ chỉ là một loạt các nguyên tử (hoặc năng lượng, hoặc sóng, bất cứ thứ gì), nhưng điều đó không giúp chúng ta xử lý nhiệm vụ xử lý các vấn đề chúng ta gặp phải, với việc hiểu môi trường xung quanh chúng ta và dự đoán các sự kiện trong tương lai ( hoặc mô tả quá khứ). Vì vậy, chúng tôi tạo ra "mô hình tinh thần" của thế giới và thường những mô hình tinh thần đó tìm thấy sự tương ứng tốt hơn với OO so với dữ liệu + xử lý một mô hình - được cho là mô hình "tốt hơn" cách thế giới thực thực sự vận hành.
Một điều thú vị nữa là hầu hết mọi người đều nghĩ OOP là từ đồng nghĩa với "OOP cổ điển", nơi chúng ta tạo ra các tập hợp và tập hợp con của sự vật, và đặt các đối tượng một cách rõ ràng vào một bộ rất cụ thể. Điều đó rất hữu ích để tạo các loại mới có thể tái sử dụng , nhưng không tuyệt vời lắm khi thực thể mà bạn tạo mô hình khá khép kín và trong khi nó bắt đầu tương tác với các đối tượng khác, thì hiếm khi, nó là mục tiêu của sự tương tác. Hoặc tệ hơn, khi có một vài (có thể chỉ một) trường hợp của entiy đó, hoặc các trường hợp khác nhau rất nhiều về thành phần, hành vi hoặc cả hai.
Tuy nhiên, cũng có "OOP nguyên mẫu", trong đó một đối tượng được mô tả bằng cách chọn một đối tượng tương tự và liệt kê các khía cạnh mà chúng khác nhau. Tôi muốn đề xuất bài luận này cho một lời giải thích tốt và không quá kỹ thuật về quá trình suy nghĩ (toàn bộ bài viết quá lớn, ngay cả đối với các tiêu chuẩn của Steve Yegge, vì vậy tôi chỉ vào phần có liên quan: P). Một lần nữa, đây là một kết hợp tốt cho các mô hình tinh thần của chúng ta khi tưởng tượng các trường hợp chưa biết bằng cách so sánh với một mô hình đã biết, nhưng không nhất thiết là cách thế giới thực "hoạt động" ... (hai con bò thực sự hoàn toàn phân biệt các thực thể, ngay cả khi chúng ta cảm nhận được chúng như "giống nhau" theo nhiều cách)