Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Abbiamo visto nella lezione precedente il funzionamento di base della nostra semplicissima interfaccia utente. Proveremo inizialmente ad implementare i tre comandi di inserimento, eliminazione e modifica dei brani. Abbiamo deciso di utilizzare un file binario con record a lunghezza fissa ma analizzando meglio il problema scopriamo che arrivano già le prime complicazioni: non è sufficiente archiviare le sole informazioni sul titolo del brano, autore, titolo CD, etc... Non sarebbe infatti agevole effettuare il ritrovamento di un brano precedentemente archiviato oppure la semplice consultazione del terzo brano senza eseguire una scansione dell'intero archivio per ritrovare il brano corrispondente. Utilizzeremo pertanto anche un numero indice per recuperare più velocemente i dati.
Proseguendo più a fondo nell'analisi - e questo è il compito dell'analista - cosa accade all'inserimento di un nuovo brano? I dati inseriti verranno semplicemente accodati ai dati preesistenti, quindi sembra che non ci siano problemi nell'inserimento. Cosa accade invece dopo la modifica di un record esistente? Se la lunghezza del singolo record fosse variabile l'operazione di aggiornamento di un brano potrebbe andare a sovrascrivere i dati del record successivo oppure lasciare dei "buchi" tra un record ed il successivo generando possibili errori durante la lettura del record successivo a quello modificato. Fortunatamente abbiamo scelto di usare un record a dimensione fissa e pertanto tali problemi non si pongono durante la modifica. Durante lo sviluppo di un progetto che utilizza degli archivi a record variabile è importante anche tener conto di questi fattori al fine di trattare correttamente i dati e concedere una certa robustezza ad un codice a rischio. Lo stesso problema dei buchi si genera anche tramite l'operazione di cancellazione di un record esistente (l'eliminazione di un brano) indipendentemente dalla lunghezza del record (fissa o variabile). Per evitare possibili situazioni a rischio effettueremo un'operazione molto semplice: la cancellazione vera e propria non effettuerà l'eliminazione fisica del brano (almeno non subito) ma lo renderà semplicemente nascosto all'utente. Una successiva operazione di compattazione effettuerà la cancellazione dei record segnati come eliminati. L'uso di tale tecnica consentirà anche il ripristino di record eliminati accidentalmente ed una gestione dello spazio più semplice, anche se meno efficiente. Alla luce di queste considerazioni verrà aggiunto anche un valore indicativo dello stato di cancellazione del brano. Definiamo pertanto la struttura della nostra base dati ovvero la struttura del record a lunghezza fissa per la nostra base dati. Esso conterrà le seguenti informazioni:
Il tutto si traduce in Visual Basic con:
Affinché il tipo di dati definiti dall'utente, definito d'ora in poi come UDT ovvero User Defined Type, possa essere definito Public ovvero utilizzabile all'interno di più parti del progetto è necessario inserirlo all'interno di un modulo standard. Non è infatti possibile dichiarare Public UDT, stringhe a lunghezza fissa e matrici all'interno di un form ma soltanti dichiararli Private ovvero inaccessibili alle altre parti del progetto.
Le istruzioni Private e Public sono anche dette attributi o modificatori di accesso e non sono le uniche; sono riportati di seguito tutti i modificatori di accesso con le loro caratteristiche di limitazione:
Allora perché non dichiarare tutti i dati tramite Public e renderli accessibili al resto del codice? Semplicemente perché la buona programmazione si fonda sulla robustezza di ogni modulo componente e sulla sua autonomia dal resto del progetto. Rendere tutti i dati accessibili alle altre parti del progetto ha parecchi svantaggi: innanzitutto un rischio maggiore di confusione durante la scrittura del codice; a questo si aggiunge anche la cattiva gestione di quei dati particolari la cui modifica dovrebbe implicare la successione di altre strade. Ad esempio non c'è verso di modificare la velocità di una moto in corsa da 100 Km/h a 30 Km/h senza l'utilizzo del freno e quindi del richiamo del metodo Freno della classe Moto. Altresì in caso di più progetti componenti potrebbe essere fondamentale nascondere certe informazioni agli utilizzatori del componente oppure modificare il funzionamento interno di una classe senza tuttavia influenzare i progetti utilizzatori dei suoi dati.
Le classi, soprattutto, devono essere pensate come delle scatole nere
il cui contenuto è sconosciuto. Quello che il programmatore deve
conoscere è la loro utilità ed ignorare, anche volontariamente,
le modalità con cui tale utilità viene eseguita. |
Inizieremo l'implementazione del nostro
progetto nella prossima lezione.
Fibia
FBI
|
Torna alla seconda lezione | Vai alla quarta lezione |