Complementi di Informatica Introduzione al Corso Leonardo Vanneschi 1 1. Il corso di Complementi di Informatica Il corso ha una serie di obiettivi, per così dire, "particolari" più un solo obiettivo "generale", forse più ambizioso dei precedenti. Gli obiettivi particolari sono: • Apprendimento di alcuni concetti fondamentali dell'Informatica, come quelli di algoritmo, problema, programma e sistema operativo. • Apprendimento di alcuni concetti fondamentali di programmazione e loro applicazione al linguaggio Java. • Apprendimento di alcuni concetti fondamentali di basi di dati e loro applicazione a MSAccess. L'obiettivo generale è quello, mediante i precedenti tre punti, di conferire allo studente con formazione differente da quella informatica la mentalità tipica di un informatico o, con termini diversi, l'approccio con il quale un informatico risolve i problemi. 2 2. Algoritmo, Problema, Programma Lo scopo fondamentale della programmazione è quello di risolvere tramite un computer problemi che un essere umano non riuscirebbe a trattare (in tempi ragionevoli) "a mano". Esempio: ricerca di un elemento all'interno di una sequenza non ordinata. Si pensi al problema di cercare il nome di una persona all'interno di un elenco non ordinato alfabeticamente. Si supponga che l'elenco sia composto da diversi milioni di persone. Tramite un semplice programma, il problema può essere risolto in un tempo molto ridotto! Prima di poter scrivere un programma che risolve un problema, però, un informatico deve avere ben chiaro nella propria testa il procedimento (o il modo) con cui il problema deve essere risolto. Nella maggior parte dei casi, infatti, uno stesso problema può essere risolto in molti modi diversi, alcuni più semplici, altri più complessi. Esempio: Si consideri il problema di dover cercare una persona che risponde a determinate caratteristiche all'interno di una sequenza non ordinata alfabeticamente. Supponiamo che queste caratteristiche siano le seguenti: la persona deve essere di sesso femminile, essere nata in Lombardia, avere una Laurea in una disciplina scientifica e conoscere la lingua inglese. Esistono (almeno!) i seguenti procedimenti per risolvere questo problema: Procedimento 1: • Scandire tutta la sequenza persona per persona e, per ognuna delle persone, verificare se le caratteristiche corrispondono con quelle richieste. • Scegliere la prima persona trovata con caratteristiche corrispondenti a quelle richieste. Procedimento 2: • A partire dalla sequenza data, creare una nuova sotto-sequenza composta solo da persone di sesso femminile. • A partire da questa nuova sequenza (ove essa non sia vuota), creare una ulteriore sottosequenza composta da tutte le persone residenti in Lombardia. • A partire da questa nuova sequenza (ove essa non sia vuota), creare una ulteriore sottosequenza composta da tutte le persone con una Laurea in una disciplina scientifica. • A partire da questa nuova sequenza (ove essa non sia vuota), creare una ulteriore sottosequenza composta da tutte le persone che conoscono l'inglese. • Scegliere una qualsiasi persona appartenente alla sequenza risultante. 3 Come abbiamo visto dal precedente esempio, esistono più procedimenti per risolvere lo stesso problema. Nel gergo informatico, spesso si usa dire che uno stesso problema può essere risolto tramite diversi algoritmi. Intuitivamente, un algoritmo si può definire come un procedimento che consente di ottenere un risultato atteso eseguendo, in un determinato ordine ed in modo non ambiguo, un insieme di passi semplici corrispondenti ad azioni scelte solitamente da un insieme finito. In termini leggermente più formali, un algoritmo è (definizione) un insieme di azioni o istruzioni elementari (univocamente interpretabili) che, eseguite in un ordine stabilito, permettono la soluzione di un problema in un numero finito di passi. In base alla precedente definizione, evinciamo le quattro proprietà fondamentali di un algoritmo: • • • • La sequenza di istruzioni deve essere finita. Essa deve portare ad un risultato. Le istruzioni devono essere eseguibili materialmente. Le istruzioni non devono essere ambigue. Affermando che i passi costituenti di un algoritmo debbano essere "semplici", si intende soprattutto che essi siano specificati in modo non ambiguo, ovvero immediatamente evidenti a chi sarà chiamato ad applicare l'algoritmo, cioè il suo esecutore. Una volta stabilito un algoritmo, esso deve essere tradotto in un linguaggio di programmazione, in modo da poter essere eseguito su un calcolatore. In altri termini: un programma è la traduzione in un linguaggio di programmazione di un algoritmo In gergo si dice che un programma implementa un algoritmo o ne costituisce la sua implementazione. Il concetto di algoritmo ha una grande rilevanza in matematica e in informatica, in cui esso viene generalmente descritto come "procedimento di risoluzione di un problema". In questo contesto, i "problemi" che si considerano sono quasi sempre caratterizzati da dati di ingresso variabili. Per esempio, il calcolo del massimo comun divisore fra due numeri è un esempio di "problema", e i suoi dati di ingresso, variabili di volta in volta, sono i due numeri in questione. A un non matematico questa potrebbe apparire come una "famiglia di problemi" (il problema di calcolare il massimo comun divisore fra 10 e 15, il problema di calcolarlo fra 40 e 60, fra 35 e 95, e così via). Il matematico e l'informatico identificano con la parola "problema" l'intera famiglia e con "istanza" o "caso particolare" ciascuno dei quesiti specifici ottenuti fissando due particolari valori. Data questa premessa, un algoritmo risolve un problema se è costituito da una sequenza di passi che, applicata indifferentemente a qualunque istanza del problema, produce in un tempo finito la soluzione desiderata. Se questa idea aveva una certa importanza per il calcolo matematico, l'avvento dell'informatica l'ha arricchita di una nuova importanza (ed è infatti con l'informatica che il termine "algoritmo" ha iniziato a diffondersi). Infatti, se per ottenere un certo risultato (risolvere un certo problema) esiste un procedimento infallibile, che può essere descritto in modo non ambiguo fino ai dettagli, e 4 conduce sempre all'obiettivo desiderato in un tempo finito, allora esistono le condizioni per affidare questo compito a un computer, semplicemente descrivendo l'algoritmo in questione in un programma scritto in un opportuno linguaggio comprensibile alla macchina. 3. Hardware e Software Hardware è un termine creato da due termini dalla lingua inglese,hard=duro,ware=merce,e significa attrezzo o ferramenta. In particolare è la parte fisica di un personal computer, ovvero tutte quelle parti magnetiche, ottiche, meccaniche ed elettroniche che gli consentono di funzionare (nel qual caso è anche detto strumentario). Generalmente è anche riferito a qualsiasi componente fisico di una periferica o di una apparecchiatura elettronica. Tipici componenti Hardware sono: Mouse, Hard disk, Scheda madre, Monitor, Scheda video, Scheda audio, Scheda audio professionale, Scheda di rete, CPU, Tastiera, Lettore CD, Masterizzatore, Modem, Scanner, Stampante. Il termine software indica un programma o l'insieme di essi in grado di funzionare su un elaboratore. All'interno del software si possono distinguere tre grandi categorie: • • • i sistemi operativi i driver i programmi applicativi (cioè tutti quei software che vengono utilizzati per il lavoro quotidiano: dai programmi per l'ufficio, ai videogiochi). Un software viene normalmente realizzato utilizzando uno o più linguaggi di programmazione. 4. Sistema Operativo Un sistema operativo (SO) è un insieme di programmi che agisce come intermediario tra l’utente e l’hardware di un computer. Gli scopi di un SO sono: (1) fornire un ambiente nel quale un utente sia in grado di eseguire i programmi rendendo conveniente l’utilizzo di un computer; (2) permettere di utilizzare l’hardware del computer in maniera efficiente. Un sistema operativo è un elemento importante di quasi tutti i sistemi di calcolo. Un sistema di calcolo può essere suddiviso in quattro componenti: l’hardware, il sistema operativo, i programmi applicativi e gli utenti. Da un punto di vista funzionale lo schema che riassume l’interazione fra utente e PC è il seguente: 5 L’hardware, composto dall’unità centrale di elaborazione (CPU), dalla memoria e dai dispositivi di input/output (I/O), fornisce le risorse fondamentali di calcolo. I programmi applicativi (compilatori, sistemi di database, programmi commerciali e giochi) definiscono il modo in cui queste risorse vengono utilizzate per risolvere i problemi computazionali degli utenti. Esistono svariate categorie di utenti (persone, macchine, altri computer) che necessitano di risolvere problemi di diversa natura; di conseguenza, possono esserci molti programmi applicativi diversi. Il SO controlla e coordina l’utilizzo dell’hardware da parte dei programmi applicativi per utenti. Oltre all’hardware risorse non meno importanti sono il software e i dati, organizzati sotto forma di file. Il sistema operativo offre gli strumenti per utilizzare e organizzare in modo corretto queste risorse; esso non compie alcuna operazione utile di per sé, ma offre semplicemente un ambiente nel quale altri programmi possono lavorare in modo utile. È quindi possibile considerare un SO come un allocatore di risorse: tempo di CPU, spazio di memoria, spazio di memorizzazione file, utilizzo dei dispositivi di I/O e così via. Il SO gestisce tali risorse allocandole, in base alle necessità definite dai loro compiti, a programmi e utenti specifici. Poiché possono esserci molte richieste, anche conflittuali, delle varie risorse, il sistema operativo deve decidere quali richieste soddisfare affinché il computer operi in modo equo ed efficiente. Una visione leggermente diversa di un sistema operativo è quella incentrata sulla necessità di controllare i dispositivi di I/O e i programmi utente. Un SO è in effetti anche un programma di controllo che sorveglia, appunto, l’esecuzione di programmi utente in modo da impedire che vengano commessi errori o che il computer venga utilizzato in modo non corretto, soprattutto per quel che riguarda il funzionamento e la gestione dei dispositivi di I/O. In conclusione il SO serve a: 1. Definire l’interazione con l’utente - dobbiamo avere una interfaccia di comandi che ci permetta di specificare le azioni che, su nostra richiesta, vogliamo che il computer esegua. 2. Interpretare ed eseguire i comandi dell’utente - possono essere impartiti solo i comandi esistenti e questi devono avere una ben specifica sintassi, il sistema si deve occupare dei messaggi di errore e di informazione. 3. Controllare direttamente l’hardware - A noi interessano più che altro le funzioni del calcolatore e non come vengono eseguite a livello di linguaggio macchina. Ciò da il vantaggio che il calcolatore può essere usato da chiunque, basta avere un manuale dei comandi disponibili, e che la programmazione è molto più veloce. 4. Gestire e coordinare le risorse del sistema - Il sistema operativo mentre esegue i comandi da noi impartiti si occupa anche di gestire al meglio le risorse, soprattutto quelle preziose come la memoria, i dischi, il video. 5. Semplificare la gestione del sistema hardware agli altri programmi - Quasi tutti i programmi possiedono chiamate al sistema operativo che svincolano i primi da funzioni di base rendendoli più efficienti e robusti ossia adattabili. 4.1 MS-DOS L’MS-DOS è un sistema operativo nato nel 1981 per il PC IBM e adottato in seguito dai suoi successori più evoluti nonché dai numerosissimi compatibili delle più diverse marche. Mentre “MS” indica MicroSoft, “DOS” sta per Disk Operative System ossia sistema operativo a dischetti (il nome deriva dal fatto che può essere contenuto in un numero esiguo di dischetti). L’MS-DOS è stato lo standard di fatto dei sistemi operativi per microcomputer per più di quasi un ventennio. 6 Oggi ci troviamo in una situazione di transizione dato l’avvento di Windows ‘95 e successive versioni, sempre della MicroSoft. In tali nuovi sistemi operativi viene mantenuto un ambiente MSDOS per consentire l’utilizzo di applicativi e comandi usuali del DOS. L'utente interagisce con il sistema operativo MS-DOS tramite un terminale, che è un interfaccia testuale che permette al sistema operativo di leggere i comandi inseriti da tastiera e interpretarli ed eseguirli, provvedendo a soddisfare le richieste dell’utente. Quando il terminale è pronto per la digitazione di comandi, viene visualizzato un prompt. Il prompt è la riga su cui lampeggia il cursore. Tale riga è evidenziata da alcuni simboli, solitamente C:\>. Il sistema ci ricorda su che unità disco ci troviamo (C:) oltre che sulla posizione all’interno di questa unità (\). Il > ha soltanto lo scopo di separare la parte visibile del prompt dal cursore lampeggiante. Tutti i comandi DOS e i programmi applicativi devono essere digitati sul terminale per essere eseguiti dal sistema operativo. Ma come si accede ai programmi e ai dati? I dati e i programmi contenuti in un disco sono organizzati in file, ognuno dei quali viene identificato con un nome. Il nome di un file è composto da due parti chiamate rispettivamente nome di file ed estensione. È necessario trovare un criterio logico per raggruppare i file. Il SO DOS ha realizzato ciò mediante il concetto di directory: • Una directory contiene un insieme di file. • Ogni unità fisica è organizzata in directory. • Una directory può contenere altre directory che si chiamano sottodirectory. • Le directory sono strutturate ad albero. Il disco, da un punto di vista gerarchico è organizzato in direttori e sottodirettori. La directory principale di una unità a disco, ossia quella che contiene tutti gli altri direttori, è la directory radice o root. La root è rappresentata con un nome simbolico ossia “\” anche detto barra rovescia o backslash, proprio quel simbolo che abbiamo visto prima relativamente al prompt; ciò vuol dire che quando il sistema si avvia si attiva sulla radice dell’unità a disco fisso C:. Un file, in generale, viene identificato non solo dal suo nome ma anche dal suo percorso o pathname. Un pathname è la sequenza di directory che permette di raggiungere un file. Ad esempio: C:\LINGUAGGI\PASCAL. 4.2. Principali comandi di MS-DOS • DIR: Visualizza l'elenco dei file e delle sottodirectory in una directory. • CD: Visualizza il nome della directory corrente (se usato senza argomenti), oppure cambia la directory corrente, trasformandola nel suo argomento (se viene passato un argomento). • MD dir: Crea la directory dir (che diventa una sottodirectory della directory corrente). • RD dir: Rimuove (elimina) la directory dir. • COPY fileA fileB: Copia il contenuto di fileA in fileB. Se vengono copiati più file (tramite l'uso del carattere *), MS-DOS visualizza il nome di ciascun file man mano che viene copiato. • XCOPY A: B: : Copia tutti i file contenuti nell'unità disco A: all'interno dell'unità disco B:. Copia file (ad eccezione dei file di sistema e nascosti) e directory, incluse le sottodirectory. Con questo comando è possibile copiare tutti i file di una directory, compresi i file nelle relative sottodirectory. 7 • DEL nomefile: Elimina il file nomefile. • DELTREE dir: Elimina la directory dir con tutti i file e sottodirectory relative. • REN nomefile1 nomefile2: Cambia il nome del file nomefile1, trasformadolo in nomefile2. E’ possibile assegnare un nuovo nome a tutti i file che corrispondono al nome specificato. Non è possibile utilizzare questo comando per assegnare un nuovo nome a file di unità diverse o per spostarli in nuove directory. • MOVE origine destinazione: Sposta il file origine nella directory destinazione oppure rinomina il file o la directory origine, trasformando il nome in destinazione. • TYPE nomefile: Visualizza il contenuto del file di testo nomefile. • MORE: Visualizza le informazioni una schermata alla volta. • FORMAT unità: Formatta il disco nell’unità specificata. Tutti i file contenuti in quella unità vengono rimossi permanentemente. Non usatelo mai se non siete assolutamente sicuri di ciò che state facendo! • DISKCOPY unità1 unità2: Copia il contenuto del disco unità1 sul disco unità2. Effettua una copia fisica, copiando byte per byte il primo disco sul secondo. • MEM: Visualizza la quantità di memoria utilizzata e la quantità di memoria libera nel sistema. E’ possibile utilizzare il comando MEM per visualizzare le informazioni relative alle aree di memoria utilizzate, alle aree di memoria libere ed ai programmi caricati in memoria. • DATE: Visualizza la data o consente di reimpostarla se necessario. • TIME: Visualizza l’ora di sistema oppure imposta l’orologio interno del computer. • PATH: Visualizza (se usato senza parametri) o imposta (se usato con parametri) il percorso di ricerca per i file eseguibili. • CLS: Cancella lo schermo. • EXIT: Chiude il terminale. • HELP comando: Visualizza il manuale in linea del comando comando. 8