Possiamo dire che Java o C # hanno alberi ereditari unificati?

1

Possiamo dire che Java o C # sono lingue OO con un albero di ereditarietà unificata / un sistema di tipi unificato? Con un albero di ereditarietà unificato / un sistema di tipo unificato intendo che ogni classe deriva implicitamente o esplicitamente da un singolo tipo? Ci sono linguaggi object oriented che non seguono questo concetto?

    
posta Yoda 28.01.2014 - 19:19
fonte

1 risposta

6

Si potrebbe sostenere che le due lingue sono strettamente gerarchiche poiché richiedono entrambe l'ereditarietà da una classe Object di base. Ma non sono sicuro di quale affermazione ti avrebbe comprato. Sono linguaggi orientati agli oggetti e usano una base Object per facilitare alcune funzionalità linguistiche. Preoccuparsi di "strettamente gerarchico" non aiuta una conversazione sui linguaggi OO.

Are there any objective language that do not follow that concept?

Per quanto ne so, il C ++ non si basa su un albero ereditario unificato. Del resto, le lingue che non sono tipizzate in modo rigoroso o statico non hanno bisogno di un albero ereditario unificato, questo gruppo include SmallTalk, Perl, JavaScript e molti altri .

Poi c'è l'ereditarietà prototipo che è indiscutibilmente OO, ma tenta di raggiungere gli obiettivi generali di OO in un modo che rende irrilevante un sistema di tipo unificato, perché l'ereditarietà prototipale viene utilizzata per estendere le cose piuttosto che per distinguerle.

Alla fine della giornata vale la pena notare che i sistemi di tipo e il design del linguaggio sono due argomenti intrecciati che sono molto complessi laddove le soluzioni sono estremamente diverse. Data la diversità e il numero di lingue disponibili, è probabile che si trovino linguaggi che affrontano questi vari problemi in tutti i modi possibili.

Per aggravare ulteriormente la situazione, vale anche la pena notare che la definizione di "object oriented" o "obiettivo" non è solo sdolcinata ma estremamente controversa come puoi trovare in molti luoghi su Internet, ad esempio qui puoi trovare l'inventore del termine che difende il suo significato come qualcosa di molto diverso dal prototipo OO o C # / OO di Java, e fino ad oggi le persone non sono d'accordo sulla sua definizione.

Ecco alcuni link per supportare Java & Uso di C # di una classe base Object .

Excepting Object, which has no superclass, every class has one and only one direct superclass (single inheritance). In the absence of any other explicit superclass, every class is implicitly a subclass of Object.

Supports all classes in the .NET Framework class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all classes in the .NET Framework; it is the root of the type hierarchy.

risposta data 28.01.2014 - 19:36
fonte

Leggi altre domande sui tag