
Introduzione
È necessario un ciclo di operazioni da iterare più volte:
scrivere il codice;
compilare il programma;
verificare il corretto funzionamento.
Lalgoritmo è nel programma (dati + algoritmi, N. Wirth).
Il codice:
è difficile da scrivere, soprattutto per quanto riguarda linterfaccia;
è difficile da manutenere senza strumenti specifici;
è difficilmente riutilizzabile per altri progetti;
i tempi di sviluppo sono lunghi anche per piccole applicazioni.
Programmazione object-oriented
Introduzione
Gli obiettivi della OOP (Object Oriented Programming) sono:
riusare il codice senza neppure avere a disposizione il sorgente (si riducono i costi di produzione e manutenzione);
diminuire i tempi di sviluppo, si aggiungono nuove funzionalità al codice già realizzato;
diminuire il numero di errori, il codice che si riusa è corretto.
Lalgoritmo è nelloggetto, analogia con la cellula biologica: la cellula nasconde la propria complessità interna e dialoga con il mondo esterno attraverso messaggi.
La metodologia è la seguente:
incapsulamento in unità (oggetti) di funzioni (metodi) e dati in classi;
classificazione degli oggetti sulla base di criteri di ereditarietà;
creazione dinamica degli oggetti;
comunicazione tra oggetti tramite messaggi.
L a programmazione può essere:
pura: linguaggio SmallTalk, progettato negli anni 60-70 nei mitici laboratori di ricerca della RANK XEROX, il Parc (Palo Alto Research Center);
ibrida (C++, Turbo Pascal 5.5).
Pro:
sono fornite nei vari ambienti classi (librerie) di oggetti facilmente riutilizzabili;
gli ambienti sono spesso interattivi;
molte funzionalità di base sono contenute nella classe "Applicazione";
è possibile sviluppare secondo approssimazioni successive.
Contro:
il codice deve in ogni caso essere scritto;
gli oggetti dipendono dallambiente per cui sono progettati.
non esiste una specifica unica per definire i concetti di classe, oggetto, ereditarietà;
le metodologie di analisi OOA (Object Oriented Analisys) e di disegno OOD (Object Oriented Design) sono spesso incomplete;
lottimizzazione è scarsa.
La Programmazione Event-Driven
I programmi scritti per MS-DOS, nella programmazione tradizionale, sono strutturati in modo da prendere il controllo completo del sistema. Lesecuzione inizia con la prima riga del codice eseguibile e segue un percorso definito allinterno del programma.
Ad esempio, nel caso di un dato da acquisire in input, utilizzando la scanf() aspetta che lutente termini la fase di input prima di passare a gestire altre incombenze.
In unapplicazione Windows, al contrario, non è solo la tastiera che può fornire un input, ma anche il mouse, le barre di scorrimento, i pulsanti di controllo ed anche la porta seriale può inviare messaggi. Inoltre la finestra in cui è contenuta lapplicazione può essere spostata, ridimensionata, ridotta ad icona. Il kernel trasforma levento in input in un messaggio in coda ai messaggi di quell'applicazione invitandola, quindi, a prendere le relative decisioni.
Tutta la comunicazione è basata sullo scambio di messaggi tra gli oggetti che fanno parte dellapplicazione. Windows informa tutte le applicazioni attive, mentre i programmi MS-DOS devono loro stessi interrogare il sistema operativo per conoscere lo stato della tastiera, del mouse o della porta seriale.
Microsoft ha progettato Windows in modo che mandasse semplicemente un integer (word, quindi 65536 messaggi) ad unapplicazione quando si verifica un evento.
Nella programmazione orientata agli eventi questo si traduce in uno switch in cui si elencano le operazioni da svolgere per ognuno dei messaggi che possono giungere dallutente o dal sistema operativo. Lordine di esecuzione del codice dipende pertanto dallevento che si è verificato, che a sua volta dipende dallazione dellutente.
Per esempio, quando il mouse è messo su una voce di menu ed è premuto il pulsante sinistro, il sistema genererà un messaggio indicando che vi è stata unazione del mouse. Il kernel convertirà automaticamente questo messaggio nel corrispondente messaggio relativo alla voce di menu.
Lapplicazione che opera nel sistema operativo Windows possiede due anime:
una relativa alla funzionalità (codice di programmazione)
una relativa allestetica (finestre di dialogo, bitmap, menu, icone, cursori).
Le risorse di unapplicazione sono la parte estetica.
Possono essere create, testate e modificate, senza influenzare la parte funzionale, da un artista completamente alloscuro di programmazione, ma con un maggior gusto estetico di un abilissimo programmatore.
Per ottenere queste risorse occorre descriverle in un file (.RES), che dovrà poi essere compilato e legato al resto del codice. Queste due operazioni sono svolte dal compilatore di risorse (Resource Compiler), ma la scrittura di questo file è unoperazione molto noiosa, per cui sono stati creati degli strumenti per generarle in modo grafico e interattivo (Imagedit), perché la creazione, lintegrazione e la gestione di un solo file, piuttosto che di numerosi .BMP, .DLG, .CUR, .MNU, .ICO risulta essere una semplificazione, sia relativamente alla gestione del codice che per quanto riguarda lapporto di eventuali modifiche alle risorse stesse.
Le due componenti: funzionalità ed estetica, sono legate tra loro da messaggi e sono in ogni caso unite in un .EXE unico dal compilatore di risorse RC.EXE.
Introduzione
Immediatamente dipendente dalla programmazione basata sugli oggetti è la programmazione visual, in pratica permette di maneggiare gli oggetti che costituiscono lapplicazione come fossero oggetti grafici in unapplicazione per il disegno.
Le prime esperienze sono state eseguite nel 1985 con Prototyper, era in grado di:
disegnare graficamente schermate e menu;
collegare funzionalità standard quali stampa;
generare codice da completare in modo tradizionale.
Il salto di qualità avviene con lutilizzo delle GUI (Graphic User Interface).
Il primo ambiente è stato Hypercard (Macintosh), seguito da ToolBook (Asymmetrix).
Lapproccio visual è assolutamente necessario, il codice deve essere associato agli oggetti, linterfaccia è di fondamentale importanza per il successo dellapplicazione, il linguaggio è efficiente.
Il nuovo modello di programmazione è costituito dalle seguenti parti.
Una qualsiasi applicazione Windows è costituita da oggetti, un Oggetto è una combinazione di codice e dati che è possibile gestire come una singola unità.
Ogni oggetto appartiene ad una classe predefinita.
Gli oggetti inclusi in un insieme sono definiti Membri dellinsieme; per esempio, linsieme Forms contiene tutti i form del progetto, linsieme Controls contiene tutti i controlli di un form.
Ogni oggetto ha una serie di Proprietà (caratteristiche delloggetto) che definiscono come questo deve essere visto (aspetto: la posizione, la dimensione, il tipo di font, il colore di background e di foreground di una finestra) e come questo deve comportarsi nellapplicazione (funzionalità: la possibilità di spostare, ridimensionare, ridurre a icona o ingrandire la finestra). Queste proprietà possono essere statiche (compile-time) o dinamiche (run-time).
Ogni oggetto ha una serie di Metodi, per controllarne il funzionamento, che sono le routine eseguite sulloggetto.
Ogni oggetto può generare Eventi cui gli oggetti stessi sono in grado di rispondere; per esempio, la tastiera, lapertura di una finestra, il clic o il doppio clic del mouse.
Un evento può provocare la modifica di una o più proprietà degli oggetti dellapplicazione: programmazione orientata agli eventi. Il codice va collegato allevento. La programmazione non è costituita da una serie di istruzioni, ma è un insieme di routine, legate allevento sulloggetto. Occorre quindi sempre usare un linguaggio di programmazione.
Ogni oggetto ha un nome che lo identifica nellapplicazione e che occorre indicare quando in fase di esecuzione si voglia modificare una proprietà delloggetto stesso.
Gli ambienti visual sono:
Visual BASIC (Microsoft);
Visual C++ (Microsoft);
Delphi (Borland);
Visual Application Builder (Novell);
Visual Object COBOL (Micro Focus).
Le applicazioni che sono create con Visual BASIC sono orientate agli eventi, quando nell'applicazione si verifica un evento, Visual BASIC, riconosce automaticamente l'evento ed esegue il codice scritto per tale evento.
Questo codice è definito routine di eventi, il nome è composto dal nome dell'oggetto e dal nome dell'evento.
La sintassi generica è la seguente:
| Private Sub NomeOggetto_Evento () NomeOggetto.Proprietà = valore End Sub |
Per recuperare il valore di una proprietà, la sintassi è la seguente:
variabile = NomeOggetto.Proprietà |
In linea di massima, in una generica routine, sono coinvolti due oggetti, quello sul quale si genera levento e quello che subisce levento. Ogni oggetto ha decine di proprietà e può subire decine di eventi: compito del programmatore è quello di gestire solo le proprietà e gli eventi di suo interesse.