TecnoMan
TecnoMan Blog
cast() è basata su isOf() che chiama classOf e possibilmente super(). Entrambi i metodi seguono la nostra codifica standard e importano i loro parametri con %casts, che a turno chiama cast() per verificare se gli argomenti siano Oggetto o Classi …
Quindi, lasciamo che sia il selettore a controllare gli oggetti che non si trovano nella classe corrente e lasciamo che i metodi linkati dinamicamente controllino a loro volta gli oggetti nella loro propria classe.
L'idea base è chiamare cast() tutte le volte che è necessario. Quando un metodo staticamente linkato dereferenzia gli oggetti nella sua stessa classe, dovrebbe fare proprio questo;
Con gli assiomi di cui sopra, i metodi isA() e isOf() sono abbastanza semplici da implementare:
Come esempio di quanto possiamo fare con isOf() e come cast() può rendere più sicuro il codice, consideriamo le modifiche seguenti in relazione al programma di test.
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.
L'NTST30100SG è un nuovo diodo raddrizzatore Schottky da 30 Ampere e 100 Volt; questa nuova tecnologia si basa su Trench e permette tagli di tensioni più basse senza avere le perdite che caratterizzano i normali diodi raddrizzatori Schottky.
Il circuito integrato DS1642 è un interessante circuito che ha al suo interno una RAM statica non voltatile da 2k x 8 bit ed un real-time clock. Questo circuito conserva le funzionalità e il pin-out di qualunque RAM che supporta …
Il microcontroller MAXQ160 non include un clock real-time mantenuto da una batteria tampone, ma la flessibilità della rete 1-Wire mette a disposizione la possibilità di collegare un clock real-time esterno ad ogni circuito che si basa su un microcontrollore MAXQ160.
L'LM27402S è un regolatore buck PWM DC/DC che questa Application Note sfrutta come scheda di prova.