ansi-c:
Ogni oggetto viene manipolato tramite void *. Se da un lato ciò semplifica la scrittura del codice, non evita disastri: manipolare un non oggetto o un oggetto sbagliato in un metodo o peggio, selezionare un metodo da una descrizione di …
E' un esercizio interessante cominare Queue con Point e Circle per lo skeleton di un programma di grafica con capacità di ridisegno.
Permetteteci di dare un'occhiata a poche classi implementate da zero utilizzando ooc così che possiate apprezzare gli sforzi che abbiamo fatto nei paragrafi precedenti. Inizieremo con una implementazione di List, un buffer ad anello double-ended che ha la funzione di …
Object rappresenta qualcosa che è sia la forza che la debolezza della nostra tecnica. Il codice può essere posizionato in una descrizione di classe o implementazione, può essere trasformato o tradotto in un report o può essere nascosto da qualche …
Nella sezione 7.1 abbiamo visto che per lavorare su Point abbiamo bisogno di raccogliere le informazioni dalle sue superclassi, fino ad arrivare alla classe radice della gerarchia.
Sappiamo cosa deve fare ooc. Come scriviamo però il preprocessore? Per ragioni di efficienza, dovremmo basarci su piattaforme come lex o yacc, ma una prima implementazione è molto meno costosa se ci basiamo su un linguaggio di programmazione come awk …
Quali istruzioni per il preprocessing dovrebbe fornire ooc? Osservando quanto indicato nella sezione 7.1 ci sono tre aspetti in cui ooc potrebbe aiutare: dato un nome di un metodo, conoscere l'header del metodo; dato un metodo, controllare e importare i …
Lasciateci trarre qualche conclusione dall'esperimento nel preprocessing di Point. Abbiamo iniziato con una descrizione line-oriented molto ma molto semplice che possiamo riassumerer così come segue:
Un altro problema riguarda il fatto che Point_ctor() chiama il selettore della superclasse e di conseguenza non necessita di importare gli oggetti parametri come faceva Point_draw().
Vogliamo ingegnerizzare un preprocessore ooc che ci aiuti nel mantenere coerenti le nostre classi con la codifica standard che ci siamo imposti come convenzione. Il miglior modo per progettare un preprocessore è quello di partire prendendo un esempio reale di …
Ripassando il capitolo precedente, sembra che siano stati risolti i grossi problemi di manutenzione della gerarchia delle classi introducendo di fatto un altro grosso problema: abbiamo un numero ampio di convenzioni su come si devono scrivere certe funzioni (con particolare …
Gli oggetti puntano alle loro descrizioni di classe che, per la maggior parte, contengono puntatori a metodi linkati dinamicamente. Le descrizioni di classe con lo stesso insieme di puntatori a metodi costituisce una metaclasse – le descrizioni di classe sono …
Object e Class sono le radici della gerarchia delle classi. Ogni classe è una sottoclasse di Object e eredita i suoi metodi, ogni metaclasse è una sottoclasse di Calss e coopera con i suoi costruttori.
Prima che un costruttore di una sottoclasse esegua la propria inizializzazione, è necessario che venga chiamato il costruttore della superclasse. Analogamente, il distruttore della sottoclasse deve chiamare il distruttore della sua superclasse dopo che è stato completato il processo di …
Tipicamente, otteniamo una descrizione di classe spedendo new() ad una descrizione di metaclasse. Nel caso di Class e Object vediamo le seguenti chiamate:
Il lavoro di una funzione selettore non è cambiato da quanto illustrato nel capitolo 2. Un argomento _self è l'oggetto del linking dinamico. Verifichiamo che esso esista e che il metodo richiesto esista per l'oggetto.
Implementare la classe Object è di immediata realizzazione: il costruttore e il distruttore ritornano self e differ() controlla che i suoi puntatori che fungono da argomenti siano uguali.
Data la descrizione di Class e Object, possiamo già creare nuovi oggetti e anche una nuova sottoclasse. Come esempio, consideriamo una sottoclasse Any che dichiara che tutti i suoi oggetti sono uguali a un qualsiasi altro oggetto, in altre parole …
Le descrizioni delle classi con gli stessi insiemi di metodi sono oggetti di una metaclasse. Una metaclasse è essa stessa una classe e di conseguenza ha una descrizione di classe. Dobbiamo ipotizzare che le descrizioni di classe per le metaclassi …
Il requisito n. 5 non è un vero e proprio problema, più che altro rappresenta un modo per risolvere gli altri. Proprio come un cerchio aggiunge informazioni ad un punto, così le descrizioni di classe per punti e cerchi assieme …