Tôi nghĩ rằng có một vài yếu tố chưa được đề cập.
Trước hết, ít nhất là trong "OOP thuần túy" (ví dụ, Smalltalk) trong đó mọi thứ đều là một đối tượng, bạn phải xoay chuyển tâm trí của mình thành một cấu hình khá không tự nhiên để nghĩ về một số (chỉ một ví dụ) như một đối tượng thông minh thay vì chỉ là một giá trị - vì trong thực tế, 21
(ví dụ) thực sự là chỉ là một giá trị. Điều này trở nên đặc biệt khó khăn khi một mặt bạn nói rằng một lợi thế lớn của OOP là mô hình hóa thực tế chặt chẽ hơn, nhưng bạn bắt đầu bằng cách nhìn những gì trông rất khủng khiếp như một quan điểm lấy cảm hứng từ LSD về những phần cơ bản và rõ ràng nhất của thực tế.
Thứ hai, thừa kế trong OOP cũng không theo sát hầu hết các mô hình tinh thần của mọi người. Đối với hầu hết mọi người, việc phân loại những thứ cụ thể nhất không có bất kỳ nơi nào gần với các quy tắc tuyệt đối cần thiết để tạo một hệ thống phân cấp lớp hoạt động. Cụ thể, tạo ra một class D
kế thừa từ một class B
phương tiện khác có nghĩa là các đối tượng class D
chia sẻ hoàn toàn, tích cực tất cả các đặc điểm của class B
. class D
có thể thêm các đặc điểm mới và khác nhau của riêng nó, nhưng tất cả các đặc điểm class B
phải còn nguyên vẹn.
Ngược lại, khi mọi người phân loại mọi thứ về mặt tinh thần, họ thường theo mô hình lỏng lẻo hơn nhiều. Ví dụ, nếu một người đưa ra một số quy tắc về những gì cấu thành một lớp đối tượng, thì khá điển hình là hầu như bất kỳ quy tắc nào cũng có thể bị phá vỡ miễn là tuân theo đủ các quy tắc khác. Ngay cả một vài quy tắc không thể thực sự bị phá vỡ hầu như luôn có thể được "kéo dài" một chút.
Ví dụ, coi "xe hơi" là một lớp học. Đó là khá dễ dàng để thấy rằng rộng lớn đa số những gì hầu hết mọi người nghĩ là "xe hơi" có bốn bánh xe. Tuy nhiên, hầu hết mọi người đã nhìn thấy (ít nhất là một hình ảnh) một chiếc xe chỉ có ba bánh. Một số người trong chúng ta ở độ tuổi phù hợp cũng nhớ một hoặc hai chiếc xe đua từ đầu thập niên 80 (hoặc hơn) có sáu bánh xe - vân vân. Điều này cho chúng ta cơ bản ba lựa chọn:
- Đừng khẳng định bất cứ điều gì về việc một chiếc xe có bao nhiêu bánh xe - nhưng điều này có xu hướng dẫn đến giả định ngầm định rằng nó sẽ luôn là 4 và mã có khả năng bị phá vỡ cho một số khác.
- Khẳng định rằng tất cả các xe đều có bốn bánh và chỉ phân loại những xe khác là "không phải xe" mặc dù chúng tôi biết chúng thực sự là như vậy.
- Thiết kế lớp để cho phép thay đổi số lượng bánh xe, chỉ trong trường hợp, mặc dù rất có khả năng khả năng này sẽ không bao giờ cần thiết, được sử dụng hoặc được kiểm tra đúng cách.
Dạy về OOP thường tập trung vào việc xây dựng các nguyên tắc phân loại khổng lồ - ví dụ, các mẩu và phần của thứ sẽ là một hệ thống phân cấp khổng lồ của tất cả sự sống đã biết trên trái đất, hoặc một cái gì đó theo thứ tự đó. Điều này đặt ra hai vấn đề: đầu tiên và quan trọng nhất, nó có xu hướng khiến nhiều người hướng tới việc tập trung vào một lượng lớn thông tin hoàn toàn không liên quan đến câu hỏi trong tay. Tại một thời điểm, tôi đã thấy một cuộc thảo luận khá dài về cách mô hình các giống chó, và liệu (ví dụ) "poodle thu nhỏ" có nên thừa hưởng từ "poodle kích thước đầy đủ" hay ngược lại, hoặc liệu có nên có một cơ sở trừu tượng "Poodle không "đẳng cấp, với" poodle kích thước đầy đủ "và" poodle thu nhỏ "đều được thừa hưởng từ nó. Điều mà tất cả họ dường như bỏ qua là ứng dụng này được cho là để đối phó với việc theo dõi giấy phép cho chó,
Thứ hai, và gần như quan trọng, nó dẫn đến việc tập trung vào các đặc điểm của các vật phẩm, thay vì tập trung vào các đặc điểm quan trọng cho nhiệm vụ trong tay. Nó dẫn đến việc mô hình hóa mọi thứ như hiện tại, trong đó (hầu hết thời gian) những gì thực sự cần thiết là xây dựng mô hình đơn giản nhất sẽ đáp ứng nhu cầu của chúng ta và sử dụng sự trừu tượng để phù hợp với các lớp con cần thiết để phù hợp với sự trừu tượng mà chúng ta đã xây dựng.
Cuối cùng, tôi sẽ nói một lần nữa: chúng ta đang dần đi theo cùng một con đường được cơ sở dữ liệu thực hiện trong nhiều năm. Cơ sở dữ liệu ban đầu theo mô hình phân cấp. Khác với việc tập trung hoàn toàn vào dữ liệu, đây là sự kế thừa duy nhất. Trong một thời gian ngắn, một vài cơ sở dữ liệu theo mô hình mạng - về cơ bản giống với nhiều kế thừa (và nhìn từ góc độ này, nhiều giao diện không đủ khác biệt so với nhiều lớp cơ sở để chú ý hoặc quan tâm).
Tuy nhiên, từ lâu, các cơ sở dữ liệu chủ yếu tập trung vào mô hình quan hệ (và mặc dù chúng không phải là SQL, nhưng ở mức độ trừu tượng này, cơ sở dữ liệu "NoQuery" hiện tại cũng có quan hệ). Những lợi thế của mô hình quan hệ đã được biết rõ rằng tôi sẽ không lặp lại chúng ở đây. Tôi sẽ chỉ lưu ý rằng sự tương tự gần nhất của mô hình quan hệ mà chúng ta có trong lập trình là lập trình chung (và xin lỗi, nhưng mặc dù tên, chung chung Java, chẳng hạn, không thực sự đủ điều kiện, mặc dù chúng là một bước nhỏ trong đúng hướng).