programmazione:
in questa categoria ci sono articoli ed applicazioni di informatica. Vengono trattati tutti i linguaggi di programmazione, come ad esempio il Python ed il linguaggio C, ma anche Assembler/Assembly.
Poichè stiamo pensando di usare l'ANSI-C non possiamo nascondere il fatto che ereditarietà significa includere una struttura all'inizio di un'altra. L'up-casting è la chiave per riutilizzare un metodo della superclasse sugli oggetti della sottoclasse.
La nostra rappresentazione di un cerchio contiene la rappresentazione di un punto come primo componente della struct Circle. D'altro canto, abbiamo volontariamente deciso di non accedere a questo componente direttamente. Quando vogliamo ereditare, effettueremo il cast-up da Circle a Point …
Gli oggetti di una superclasse e di una sottoclasse sono simili ma non identici nel comportamento. Gli oggetti della sottoclasse hanno generalmente uno stato la cui descrizione può essere più complessa e tipicamente dispongono di più metodi – in altre …
Siamo così pronti a completare l'implementazione del cerchio, e possiamo quindi scegliere una qualsiasi delle tecniche presentate nella sezione precedente, come meglio ci aggrada.
Si passa ora a cercare di implementare Circle_draw(). Il principio dell'information hiding impone di usare tre files per ogni classe in virtù della filosofia "need to know", che tradotto significa "ciò che abbiamo bisogno di sapere". Circle.h contiene …
Una sottoclasse eredita i metodi linkati staticamente della sua superclasse e può scegliere di ereditare, sovrascrivere i metodi linkati dinamicamente. Considerate per esempio le dichiarazioni di move() e draw()
Un cerchio non è altro che un grosso punto: oltre alle coordinate del centro c'è bisogno di un valore per il raggio. Disegnare un cerchio è un po' diverso rispetto a disegnare un punto, ma spostare un cerchio richiede semplicemente …
Possiamo riciclare i file di new.? Illustrati in un altro articolo con la differenza di eliminare molti metodi e di aggiungere draw() in new.h.
In questo capitolo inizieremo a descrivere un programma di disegno alquanto rudimentale. Ecco qui un piccolo test rapido per una delle classi che dovremo e vorremo avere:
Probabilmente l'analisi delle espressioni aritmetiche consiste nello stamparle con un numero minimo di parentesi. Di solito non è un'operazione univoca, dipende spesso da chi è responsabile dell'inserimento delle parentesi. Oltre al nome dell'operatore usato per l'output in notazione postfissa, dobbiamo …
Se vogliamo eseguire operazioni aritmetiche, dobbiamo fare in modo che la funzione che si occupa dell'esecuzione restituisca valori double da stampare nella funzione process().
Non abbiamo ancora deciso cosa process() deve fare. Se vogliamo trattare una versione postfissa dell'espressione, dobbiamo aggiungere una stringa carattere alla struct Type per mostrare l'operazione corrente e process() gestirà quindi una singola linea di output indentata da uno stop …
Applicando ciò che abbiamo imparato nei paragrafi precedenti, dobbiamo considerare che non renderemo nota all'esterno la struttura di un nodo. Al contrario, però, dobbiamo inserire alcune dichiarazioni nel file header value.h
Come si analizza un'espressione. Se vogliamo elaborare valori numerici e semplice aritmetica, possiamo estendere le funzioni di riconoscimento e calcolare i risultati non appena riconosciamo gli operatori e gli operandi: sum() si aspetterebbe un risultato di tipo double da ogni …
Ad un alto livello di analisi, le espressioni vengono riconosciute dalla funzione sum() che internamente chiama scan() e restituisce una rappresentazione che può essere analizzata da process() e da delete().
Nel ciclo principale, una volta che una linea di input è stata letta in bug[], viene passata a scan(), che per ogni chiamata inserisce il successivo simbolo di input all'interno della variabile token.
Il dynamic Linkage è di per sè una tecnica di programmazione veramente potente. Piuttosto che scrivere poche funzioni, ognuna con una lunga sequenza di istruzioni nel costrutto switch - cosa che sicuramente permette di gestire una varia casistica - potremmo …
Per illustrare cosa possiamo fare con il costruttore e l'interfaccia del distruttore implementeremo atomi. Un atomo è un unico oggetto striga. Se due atomi contengono le stesse stringhe sono identici.
Implementiamo le stringhe scrivendo i metodi che necessitano di essere inseriti nel descrittore di tipo String. Il dynamic linkage aiuta nell'identificare chiaramente quali funzioni devono essere "scritte" per implementare il nuovo tipo di dato.
Anche se non abbiamo ancora implementato le stringhe, siamo già capaci di leggere un semplice programma di test. String.h definisce il tipo di dato astratto: