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, include "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.

 

Con la parola gerarchia si indica l'ordine esistente tra superclassi e sottoclassi. Il termine 'gerarchia' non indica nessun tipo di dipendenza e controllo 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, in aggiunta a 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 Insegnante, Allievo e Bidello ne hanno 10, 85 e 5 rispettivamente. In generale le sottoclassi hanno meno oggetti della classe in alto. 

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.

 

 

anno 2003

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 quale avviene perché la CPU blocca il programma in corso e passa ad eseguire un'altro programma.

L'interruzione è un meccanismo hardware e viene attivato da eventi prestabiliti dal costruttore del processore. Alcuni sono dovuti a guasti (vedi colore rosso) e sono facilmente comprensibili. Gli altri (in verde) non sono causati da guasti ma da rilevanti motivi di altra natura, che possiamo chiamare anche 'ragioni architetturali'. 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 e tre i casi la CPU interrompe il programma in esecuzione, manda un messaggio all'utente ed a seconda delle circostanze passa il controllo ad un programma apposito.

2 - Errori di programma - I difetti del programma causano necessariamente la sua sospensione perché la CPU non è in grado di proseguire. Intervengono errori di programma quando una istruzionetenta di accedere al di fuori della partizione di memoria assegnata, oppure cerca di dividere un numero per zero. 

3 - Eventi esterni - Sono dovuti all'operatore che in un momento qualsiasi vuole dare un comando oppure vuole inviare un messaggio. 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 - Quando un programma invoca l'intervento del kernel, si genera una interruzione. Cioè il passaggio da un programma normale al sistema operativo non è lineare come quando un programma normale ne chiama un'altro. Questo meccanismo speciale costituisce una riprova di come il sistema operativo abbia una rilevanza gerarchica.

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 la quale fa parte del sistema operativo. In linea di principio ce ne sono cinque una per ogni evento. Vengono seguiti percorsi assai diversi a seconda della situazione specifica che nasce dall'interruzione, ma in tutti i casi il sistema operativo prende il controllo dell'interrupt. Questo intervento è una ulteriore riprova della sua collocazione gerarchica sopra commentata e già introdotta nella risposta 46.  

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 va bene se venisse spiegato. Il guaio è che non viene illustrato agli studenti. Addirittura qualche insegnante non sa neppure che esiste. 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 risulta semplicemente indispensabile mentre la loro ignoranza produce difficoltà a catena.

 

anno 2003