Nella risposta 20 abbiamo introdotto la programmazione ad oggetti cioè abbiamo illustrato il suo significato generale. Si è portato come esempio l'oggetto Cliente il quale, supponiamo, riporta "Rossi Arturo" come nome e "via dei Giardini 34" come indirizzo del cliente. Questo è un oggetto singolo, altrimenti chiamato istanza. Nella pratica il cliente Rossi viene elaborato insieme a Verdi, Bianchi e tutti gli altri clienti dell'azienda, dunque la programmazione ad oggetti non tratta un oggetto solo ma molti oggetti insieme ed il programmatore riunisce oggetti simili in una classe. Il singolo oggetto, disegnato come una specie di ciambella, confluisce nella classe. Questa viene raffigurata mediante un rettangolo il quale simboleggia la raccolta di elementi uguali come se formasse un mazzo di carte. 

 

Una classe può essere più o meno ampia dal punto di vista logico. Ad esempio Persona è la classe che raccoglie tutti coloro che operano in una scuola, mentre le classi Insegnante e Studente riguardano due gruppi più piccoli. Sussiste dunque un ordine tra la "superclasse" Persona e le "sottoclassi" Insegnante, Studente e Bidello.

Questo ordine determina una gerarchia. Di fatto non esiste nessun tipo di dipendenza tra sopra e sotto, semplicemente l'albero raffigura insiemi e sottinsiemi. L'insiemistica produce due tipi di conseguenze sul piano tecnico. 

A) La classe Persona contiene il nome e l'indirizzo poiché questi due dati riguardano tutte le persone indistintamente. Facciamo l'esempio che Insegnante, oltre al nome ed all'indirizzo, contenga le materie insegnate ed un metodo per registrare tali materie. Studente contiene, sempre in aggiunta al nome e cognome, l'anno e la sezione frequentata. Dunque le sottoclassi hanno più dati e più metodi rispetto alla superclasse in conseguenza del fatto che hanno significati specifici.

B) La superclasse Persona ha, supponiamo, 100 istanze mentre le sottoclassi ne hanno 10, 85 e 5 rispettivamente. Dunque le sottoclassi hanno meno oggetti. 

Le caratteristiche A) e B) si compensano nel senso che le superclassi hanno molti oggetti con pochi attributi e servizi; le sottoclassi hanno pochi oggetti con molti contenuti. 

La gerarchia vuole che gli attributi ed i metodi comuni tra sopra e sotto siano identici. Ad esempio il dato indirizzo ed il metodo "cambia indirizzo" sono assolutamente uguali sopra e sotto. Invece il polimorfismo presenta una asimmetria rispetto a questa rigida regola. Ulteriori dettagli si trovano nella risposta 77.

 

Indietro

79. Potrebbe inquadrare il tema del polimorfismo in termini didattici ...

80. Cos'è un interrupt ?

 

L'interruzione o interrupt è una brusca sospensione dell'esecuzione di un programma. La CPU blocca il lavoro in corso e passa ad un'altro.

L'interruzione è un meccanismo hardware e viene attivato da eventi prestabiliti dal costruttore del processore. Alcuni sono dovuti a guasti (in rosso) e sono facilmente comprensibili. Gli altri (in verde) non sono causati da difetti ma da ragioni architetturali cioè da motivi tecnici assai rilevanti. In tutto gli eventi formano cinque classi principali:

1 - Errori di macchina - Sono guasti hardware lievi o gravi. Ad esempio la carta si inceppa nella stampante, il minidisco non è leggibile e va sostituito, si guasta un circuito. In tutti i tre casi la CPU interrompe il programma in esecuzione e manda un messaggio all'utente.

2 - Errori di programma - I difetti del programma causano necessariamente la sua sospensione perché la CPU non è in grado di proseguire. Ci sono interruzioni, ad esempio, se il programma tenta di accedere al di fuori della partizione di memoria assegnata, oppure cerca di dividere un numero per zero. 

3 - Eventi esterni - Sono dovuti all'uomo che in un momento qualsiasi dà un comando oppure invia un messaggio, e necessariamente egli determina l'interruzione del programma in corso.

4 - Eventi di input/output - Le operazioni di lettura/scrittura sono svolte dalle periferiche, seguono ritmi propri ed al termine generano una interruzione. Ad esempio quando finisce la lettura di un file sequenziale si genera una interruzione della CPU.

5 - Chiamata del supervisore - Il supervisore (o kernel) è il programma che controlla l'intero sistema. A causa della sua rilevanza gerarchica, quando ne viene invocato l'intervento, qualsiasi programma in corso di svolgimento viene interrotto.

Tutte le interruzioni seguono grosso modo questa procedura:

1°) La CPU memorizza i dati del programma in corso per poterlo eventualmente riprendere. 

II°) La CPU esegue la routine software scritta per gestire l'interruzione. In linea di principio ce ne sono cinque che percorrono criteri assai diversi a seconda dell'evento che ha scatenato l'interruzione.  

III°) Se previsto, la CPU riprende l'esecuzione del programma sospeso.

Chiudiamo con una curiosità. La conclusione di un archivio sequenziale è imprevedibile perché contiene una quantità di dati imprevedibile a priori. Il "fine file" genera un interrupt di tipo 4 cioè la sospensione del programma e l'avvio di una procedura speciale quale è appunto la routine di fine file. Nel diagrammi a blocchi questa interruzione viene mascherata come in a), mentre la figura del tutto fedele alla realtà è b). 

 

 

Il mascheramento non sarebbe un errore se venisse spiegato. Il guaio è che non viene illustrato agli studenti. Addirittura qualche insegnante non sa che c'è. Moltissimi libri di testo non si preoccupano di farne il minimo cenno. Non fa meraviglia che molti cominciano il mestiere di programmatore con una preparazione discutibile. 

Tale ignoranza pecoreccia produce una serie di difficoltà. Ad esempio quando si hanno due o più file in input, il metodo a) diventa impraticabile. Comunque si voglia mascherarli, due eventi asincroni non si possono metter in sequenza. Poi ci sono i linguaggi di programmazione alcuni dei quali adottano il mascheramento ed altri no ed il professionista impreprato non ci si raccapezza. In conclusione lo studio delle interruzioni non soltanto va incoraggiato ma risulta semplicemente indispensabile mentre la loro ignoranza produce problemi interminabili.

 

Indietro