Ten projekt naprawdę nawiązuje do Smalltalk, co w dużej mierze uważałbym za próbę orientacji na obiekt kosztem niemal wszystkich innych problemów. Jako taki, moim zdaniem, ma tendencję do używania orientacji obiektowej, nawet jeśli inne techniki są prawdopodobnie (a nawet na pewno) lepsze.
Posiadanie jednej hierarchii z Object
(lub czymś podobnym) w katalogu głównym sprawia, że dość łatwe (na przykład) tworzenie klas kolekcji jako kolekcji jest Object
więc banalne, aby kolekcja zawierała dowolny rodzaj obiektu.
W zamian za tę raczej niewielką przewagę dostajesz wiele wad. Po pierwsze, z punktu widzenia projektu, masz naprawdę szalone pomysły. Co, zgodnie z poglądem Java na wszechświat, co łączy ateizm i las? Oboje mają kody skrótu! Czy mapa to kolekcja? Według Javy nie, nie jest!
W latach 70., kiedy projektowano Smalltalk, tego rodzaju bzdury zostały zaakceptowane, przede wszystkim dlatego, że nikt nie opracował rozsądnej alternatywy. Smalltalk został sfinalizowany w 1980 r., A do 1983 r. Opracowano Adę (która obejmuje generyczne). Chociaż Ada nigdy nie osiągnęła takiej popularności, jaką niektórzy przewidywali, jej ogólne cechy były wystarczające do obsługi zbiorów obiektów dowolnych typów - bez szaleństwa nieodłącznego od monolitycznych hierarchii.
Kiedy zaprojektowano Javę (i, w mniejszym stopniu, .NET), monolityczną hierarchię klas prawdopodobnie postrzegano jako „bezpieczny” wybór - z problemami, ale najczęściej znanymi problemami. Natomiast programowanie ogólne było takie, które prawie wszyscy (nawet wtedy) zdawało sobie sprawę, było przynajmniej teoretycznie znacznie lepsze podejście do problemu, ale takie, które wielu komercyjnych deweloperów uważało za raczej słabo zbadane i / lub ryzykowne (tj. W świecie komercyjnym , Ada została w dużej mierze odrzucona jako porażka).
Pozwólcie, że wyrażę się jasno: monolityczna hierarchia była błędem. Przyczyny tego błędu były co najmniej zrozumiałe, ale i tak był to błąd. To zły projekt, a jego problemy projektowe przenikają prawie cały kod, który go używa.
W przypadku nowego projektu nie ma jednak rozsądnego pytania: stosowanie monolitycznej hierarchii jest oczywistym błędem i złym pomysłem.
object
systemie .NET istnieje po części root, ponieważ zapewnia on pewne podstawowe możliwości dla wszystkich obiektów, takich jakToString()
iGetHashCode()