Chi ha deciso la terminologia downcasting e upcasting?

8

Per quanto ne so, la terminologia deriva dal modo in cui la gerarchia di ereditarietà viene tradizionalmente visualizzata, con i tipi di estensione nella parte inferiore e i tipi principali nella parte superiore.

Questo è un po 'inutile, a meno che tu non voglia chiamare il seguente leftcasting e rightcasting .

Sono non in cerca di opinioni perché la terminologia è così com'è, ma sono più che benvenuti come commenti. Sto cercando riferimenti su che hanno introdotto per la prima volta e downcasting, e perché hanno deciso su quel nome .

    
posta Steven Jeuris 22.12.2011 - 15:31
fonte

2 risposte

3

Fondamentalmente down- e up-cast è la continuazione logica del subtype ( subclass in OOP) e supertype ( superclass rispettivamente), ad es. la rappresentazione classica del tipo derivato da localizzare sotto il tipo originale - sub type.

Se cerchiamo il termine subtyping troviamo il seguente ( Wikipedia ):

The notion of subtyping in programming languages dates back to the 1960s; it was introduced in Simula derivatives. The first formal treatments of subtyping were given by John C. Reynolds in 1980 who used category theory to formalize implicit conversions, and Luca Cardelli (1985).

Quindi, come molte altre cose, ha avuto origine in qualcosa di vagamente chiamato qui come "derivati di Simula" (probabilmente le prime lingue OOP). Simula, tuttavia, ha già la nozione di sottoclasse , ma non presenta tutte le proprietà di OOP.

    
risposta data 22.12.2011 - 16:40
fonte
2

Il riferimento più antico che ho trovato è del settembre 1990, in a Post Usenet .

La libreria a cui fa riferimento è il NIHCL ( disponibile dal Software Preservation Group ) , che contiene questo codice ( MI è "ereditarietà multipla"):

#ifdef MI

#define DECLARE_CASTDOWN(classname) \
    static classname& castdown(Object& p) \
        { return *(classname*)(&p ? p._safe_castdown(*desc()) : 0); } \
    static const classname& castdown(const Object& p) \
        { return *(const classname*)(&p ? p._safe_castdown(*desc()) : 0); } \
    static classname* castdown(Object* p) \
        { return (classname*)(p ? p->_safe_castdown(*desc()) : 0); } \
    static const classname* castdown(const Object* p) \
        { return (const classname*)(p ? p->_safe_castdown(*desc()) : 0); } \

#else

#define DECLARE_CASTDOWN(classname) \
    static classname& castdown(Object& p)           { return (classname&)p; } \
    static const classname& castdown(const Object& p)   { return (const classname&)p; } \
    static classname* castdown(Object* p)           { return (classname*)p; } \
    static const classname* castdown(const Object* p)   { return (const classname*)p; } \

#endif

Il libro con cui questo codice è stato incluso ( Astrazione dati e programmazione orientata agli oggetti in C ++ ) usa anche il termine "castdown".

Il termine "castdown" anche sembra predare" downcast ", almeno su Usenet.

    
risposta data 17.01.2012 - 05:38
fonte

Leggi altre domande sui tag