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.
Class è una sottoclasse di Object, così possiamo semplicemente ereditare il metodo per il confronto e mostrare il risultato. Il distruttore ritorna un puntatore nullo per evitare che venga elimanto lo spazio occupato dalla descrizione di classe tramite l'uso di …
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 …
L'ereditarietà ci permette di passare da tipi di dati generali a tipi di dati più specializzati e ci permette di incrementarne le funzionalità. Il linking dinamico (dynamic linkage) permette di far fronte a piccoli problemi che possono verificarsi quando si …
Le nuove keywords sono necessarie per implementare concetti come i cicli while e repeat, così come per implementare le istruzioni if. Il riconoscimento delle espressioni è affidato nella pratica a stmt() ma nella maggior parte dei casi non è un …
Basandoci sulla funzione binary() per cercare ed inserire elementi in un array ordinato, abbiamo implementato una tabella dei simboli contenente strutture con un name e un valore di token.
Il C Ansi definisce una serie di funzioni matematiche come ad esempio sin(), cos(), sqrt(), exp() eccetera. Come un bell'esempio per impratichirsi con il meccanismo dell'ereditarietà, in questo paragrafo estenderemo le funzioni di libreria aggiungendo un parametro double e un …
A chi piace digitare il valore di pi greco o di altre costanti matematiche? Ispirandoci alla soluzione proposta da Kernighan e Pike [K&P94] predefiniamo alcune costanti per il nostro calcolatore. La seguente funzione deve essere chiamata durante l'inizializzazione del riconoscitore.
L'assegnamento è una operazione binaria. Il riconoscitore garantisce che vi sia una variabile come operatore sinistro e una somma come operatore destro. Di conseguenza, quello che abbiamo necessità di implementare è di fatto l'operatore assegnazione, ossia la funzione dinamicamente linkata …
screen() chiama new() per creare un nuovo simbolo variabile e lo restituisce al riconoscitore che provvede ad inserirlo nell'albero delle espressioni.
Dato un metodo generale di ricerca e inserimento, possiamo facilmente gestire la nostra tabella dei simboli. Per prima cosa dobbiamo confrontare una chiave rispetto agli elementi della tabella.
Cercare i simboli tramite il loro nome è un problema classico. Sfortunatamente, lo standard ANSI non definisce una funzione di libreria per risolvere il problema.
LET è un esempio di keyword. Nel costruire lo screener possiamo ancora decidere quale identificatore rappresenterà LET: scan() estrae un identificatore dalla linea di input e lo passa a screen() che controlla nella tabella dei simboli e ritorna il valore …
Una variabile prende parte ad un'operazione in due modi: il suo valore viene usato come operando in un'espressione oppure il valore di un'espressione viene assegnato alla variabile stessa.
In un altro articolo è stata implementata la funzione scan() che accetta una linea di input dal programma principale e gestisce un singolo simbolo di input per ogni chiamata.
move() non è linkata dinamicamente e non usa un metodo linkato dinamicamente per compiere il suo lavoro. Mentre possiamo passare punti e cerchi indifferentemente a move(), non siamo di fronte ad una vera e propria funzione polimorfica. Move() non si …
La programmazione per la grafica offre molte possibilità di sviluppare e approfondire il concetto di ereditarietà: un punto e una lunghezza di lato definiscono un quadrato, un punto e un paio di coordinate di offeset definiscono un rettangolo, un punto …