Thiết kế này thực sự có dấu vết trở lại với Smalltalk, mà tôi sẽ xem phần lớn là một nỗ lực theo đuổi định hướng đối tượng với chi phí gần như bất kỳ và tất cả các mối quan tâm khác. Như vậy, theo tôi, nó có xu hướng sử dụng hướng đối tượng, ngay cả khi các kỹ thuật khác có thể (hoặc thậm chí chắc chắn) vượt trội.
Có một hệ thống phân cấp duy nhất với Object
(hoặc một cái gì đó tương tự) ở gốc giúp cho việc tạo các lớp bộ sưu tập của bạn thành các bộ sưu tập khá dễ dàng Object
, vì vậy, một bộ sưu tập có thể chứa bất kỳ loại đối tượng nào.
Đổi lại cho lợi thế khá nhỏ này, bạn nhận được một loạt các nhược điểm mặc dù. Đầu tiên, từ quan điểm thiết kế, bạn kết thúc với một số ý tưởng thực sự điên rồ. Ít nhất là theo quan điểm của Java về vũ trụ, chủ nghĩa vô thần và một khu rừng có điểm gì chung? Rằng cả hai đều có mã băm! Bản đồ có phải là một bộ sưu tập không? Theo Java, không, không phải vậy!
Vào những năm 70 khi Smalltalk được thiết kế, loại vô nghĩa này đã được chấp nhận, chủ yếu vì không ai thiết kế một giải pháp thay thế hợp lý. Tuy nhiên, Smalltalk đã được hoàn thiện vào năm 1980 và đến năm 1983 Ada (bao gồm cả thuốc generic) đã được thiết kế. Mặc dù Ada chưa bao giờ đạt được mức độ phổ biến như một số dự đoán, nhưng tổng quát của nó đủ để hỗ trợ các bộ sưu tập các đối tượng thuộc loại tùy ý - không có sự điên rồ vốn có trong hệ thống phân cấp nguyên khối.
Khi Java (và ở mức độ thấp hơn, .NET) được thiết kế, hệ thống phân cấp lớp nguyên khối có thể được xem là một lựa chọn "an toàn" - một vấn đề, nhưng chủ yếu là các vấn đề đã biết . Ngược lại, lập trình chung là một chương trình mà hầu hết mọi người (thậm chí sau đó) nhận ra ít nhất về mặt lý thuyết là cách tiếp cận tốt hơn cho vấn đề, nhưng một cách mà nhiều nhà phát triển định hướng thương mại coi là khám phá khá kém và / hoặc rủi ro (ví dụ, trong thế giới thương mại , Ada phần lớn bị coi là một thất bại).
Hãy để tôi rõ ràng mặc dù: hệ thống phân cấp nguyên khối là một sai lầm. Những lý do cho sai lầm đó ít nhất là dễ hiểu, nhưng dù sao đó cũng là một sai lầm. Đây là một thiết kế tồi và các vấn đề thiết kế của nó đã lan truyền gần như tất cả các mã sử dụng nó.
Tuy nhiên, đối với một thiết kế mới ngày nay, không có câu hỏi hợp lý nào: sử dụng hệ thống phân cấp nguyên khối là một sai lầm rõ ràng và một ý tưởng tồi.
object
trong .NET framework một phần vì nó cung cấp một số khả năng cơ bản trên tất cả các đối tượng, chẳng hạn nhưToString()
vàGetHashCode()