I.T.I.S. Minerario “G. Asproni” PROGRAMMA di INFORMATICA GENERALE Classe IV A A.S. 2015/16 TEORIA METODOLOGIE DI PROGETTAZIONE - Superamento della separazione tra Dati e Operazioni - Dagli UDT del C agli ADT (Tipi di Dato Astratti) - Incapsulamento e Information Hiding - Nozione di Classe e di Oggetto nei linguaggi OO (Orientati agli oggetti) - Ereditarietà tra classi - Polimorfismo - Notazioni diagrammatiche che per progettazione a oggetti RICORSIONE - Generalità sui metodi di risoluzione basati sulla ricorsione - Strumenti per rappresentare la ricorsione - Definizione funzionale - Ricorsione sui dati - Numeri naturali - Esempi notevoli di strutture dati ricorsive: liste e alberi - Ricorsione sulle operazioni - Algoritmi ricorsivi - Funzioni Tipate - Funzioni Non Tipate - Esempi notevoli di algoritmi ricorsivi - Operazioni aritmetiche e funzioni matematiche - La torre di Hanoi - Operazioni di ricerca e di ordinamento - Algoritmi per curve frattali - Considerazioni sull’efficienza - Raffronto tra iterazione e ricorsione - Cattivi esempi di programmazione ricorsiva: la serie di Fibonacci -DIMOSTRAZIONI PER INDUZIONE - Asserti arimetici sull’insieme dei numeri Naturali - La logica induttiva - Dimostrazioni - Formula di Gauss - Somma dei primi N dispari - Numero delle connessioni di un grafo completo - Numero dei nodi di un albero binario completo di livello N - Numero delle mosse della Torre di Hanoi (strategia ricorsiva) - ORDINAMENTO e RICERCA - Caratterizzazione generale del problema - Algoritmi di ordinamento e ricerca su dizionari statici - La nozione di chiave - Ordinamento lessicografico ed ordinamenti combinati su più campi - Ordinamento - Generalità - Chiavi semplici e chiavi composte - Classificazione degli algoritmi - Metodi ingenui (implementazione completa) - Inserzione - Selezione - Scambio (Bubbe-Sort di base, migliorato e shakesort) - Metodi non ingenui - Merge-Sort (implementazione completa) - Heap Sort (implementazione completa) - Shell-Sort - Quick-Sort (implementazione completa) - Ricerca - Sequenziale - Binaria (con ricorsione) - Su Liste Semplici Concatenate - Su Alberi Binari e Alberi Binari di Ricerca - Su Dizionari di Ricerca (Tabelle Hash) - STRUTTURE DATI NOTEVOLI - Dizionari di Ricerca - Generalità e terminologia di base (spazio delle chiavi, spazio degli indirizzi, slot, bucket, fattore di carico,…) - Funzioni di randomizzazione (hash) - Proprietà matematiche (iniettività, uniformità, casualità) - Algoritmi e tecniche di randomizzazione della chiave - Implementazione di tabelle hash - Il problema delle collisioni - La risoluzione delle collisioni - Metodi di Indirizzamento Aperto - La legge di scansione - Strategie di scansione - Clustering - Metodi di concatenazione - Catene distinte (base) - Catene distinte (ottimizzato con cellar) - Raffronto tra le tecniche di gestione delle collisioni - Pila - Caratterizzazione astratta - Caratterizzazione concreta (statica e dinamica) - Coda - Caratterizzazione astratta - Caratterizzazione concreta (statica e dinamica) - Coda con Priorità - Inserzione - Estrazione - Lista (Semplice Concatenata) - Generalità e definizioni - Caratterizzazione astratta vs. concreta - Implementazione Statica - Rappresentazione grafica - Operazioni di base: creazione, inserzione, estrazione, cancellazione, aggiornamento - Implementazione Dinamica - Rappresentazione grafica - Operazioni di base: creazione, inserzione, estrazione, cancellazione, aggiornamento - Albero Radicato - Gli “alberi” nella rappresentazione della conoscenza - Modelli grafici generici - L'albero come struttura dati informativa - Terminologia - Definizione ricorsiva - Rappresentazioni concrete - Attraversamento - Anticipato, differito, per livelli; - Costruzione e manipolazione - Albero Binario (AB) - Terminologia - Definizione ricorsiva - Rappresentazione astratta e concreta - Costruzione: interattiva, da array, da lista - Operazioni di base: visita (simmetrica,anticipata, differita), ricerca, eliminazione, altezza, confronto, conteggi - Attrvaersamento di alberi binari per livelli - Implemetazione con coda; - Alberi binari tramati - Albero Binario di Ricerca (ABR): - Definizione - Operazioni di base: costruzione, ricerca, inserimento, cancellazione - Attraversamento di alberi binari senza ricorsione - Con stack - Con puntatori ausiliari (Alberi binari tramati) - Alberi parzialmente ordinati (array/file) - Considerazioni sull’efficienza: raffronto tra AB e ABR - Grafo - Terminologia, definizione e proprietà di base (diretto/indiretto, ciclico/aciclico, connesso, fortemente connesso, pesato, …) - Implementazione - Statica (Matrice di Adiacenza) - Cammini sulla matrice di adiacenza - Tabella di raggiungibilità (per percorsi di lunghezza L) - Dinamica (vettore di liste di adicenza) - Algoritmi di visita (in profondità e in ampiezza) - Algoritmo di Dijkstra (tutti i cammini di lunghezza minima da un nodo) - Algoritmo di Floyd (tutti i cammini di lunghezza minima) - Algoritmo di Warshall (esistenza di una qualsiasi cammino) - Determinazione di tutte le componenti connesse di un grafo TECNOLOGIE DI PROGRAMMAZIONE - PROGRAMMAZIONE A OGGETTI - Generalità sulla programmazione a oggetti - Nozione di classe come tipo di dato astratto - Oggetti - Proprietà e operazioni - Limitazione della visibilità: pubblico/privato - Information Hiding e incapsulamento - Polimorfismo - Sovraccarico delle funzioni - Ereditarietà - PROGRAMMAZIONE JAVA (LIVELLO BASE) - Java e la programmazione a oggetti - Java dal punto di vista del programmatore C - Caratteristiche native di Java: portabilità, sicurezza, manutenibilità, versatilità, eleganza - Memoria dinamica e garbage collector - Un unico meccanismo per la tipizzazione d'utente: la classe - Attributi e metodi di classe - Oggetti come variabili di “tipo” classe - Attributi e metodi degli oggetti - Metodi costruttori - Costruttori speciali: di default, di copia - Metodi setter/getter - Creazione e uso di oggetti - Riferimenti agli oggetti - Riferimenti validi e riferimenti nulli - Riferimenti autoreferenziali: this - Confronto tra oggetti - Struttura di un programma Java e fondamenti del linguaggio - Il metodo main() e la struttura base di una classe - Tipi di Dato Primitivi e Classi Wrapper - Operazioni Output - Oggetti e array di oggetti - Package e Classi di utilità - I tipi di dati del linguaggio - Tipi numerici - Il tipo boolean - Le stringhe come oggetti - Immutabili: classe String e operazioni su stringhe - Mutabili: classi StringBuffer/StringBuilder e operazioni di base - Le conversioni di tipo - Da stringa a numero - Da numero a stringa - Array - A 1 dimensione - A più dimensioni - Array di valori predefiniti - La ricorsione in Java - La programmazione funzionale - Metodi tipati - Metodi non tipati - Strutture dati Ricorsive in Java - Liste semplici concatenate - Alberi Radicati - Alberi Binari - Pile - Code - Alberi binari di Ricerca - Dizionari di Ricerca - Generalità - Implementazione - Tabelle hash (statiche) - Funzioni di randomizzazione - Hashing perfetto - Proprietà desiderabili delle funzioni di hashing - Univocità, uniformità, casualità, velocità - Il fenomeno delle collisioni - Hashing imperfetto - Significato matematico delle collisioni - Tecniche per la riduzione delle collisioni - Metodi di indirizzamento aperto - Sondaggio lineare, quadratico, con doppia randomizzazione - Clustering - Metodi di concatenazione - Operazioni su tabelle hash - Ricerca, inserimento, cancellazione, aggiornamento - Efficienza dei dizionari implementati via hashing - PROGRAMMAZIONE JAVA (LIVELLO INTERMEDIO) - Organizzazione di applicazioni “non elementari “ - Definizione ed importazione di package e classi - Classi nidificate - Ereditarietà tra classi - Input da tastiera - Grafica bidimensionale in Java - Gli elementi dell'interfaccia grafica - Gli elementi come oggetti della OOP - Programmazione guidata dagli eventi (cenni) La libreria AWT - Contenitori e Componenti - Finestre e Pannelli - Etichette, caselle di testo, aree di testo, - Area di Disegno - Layout degli elementi grafici - Posizionamento degli elementi grafici - La gestione degli eventi secondo il modello a delegazione (cenni) - Gli ascoltatori - La registrazione - Modalità di interazione utente-applicazione - Tracciamento di curve, angoli, poligoni e cerchi - Composizione di figure - Realizzazione di GUI con widgets. LABORATORIO Esercitazioni guidate di programmazione e metodologie di programmazione, su tutti gli argomenti trattati nelle lezioni teoriche, con particolare riferimento a: Programmazione ricorsiva; Modellizzazione delle classi; Applicazioni in Java per l'elaborazione di strutture dati notevoli: pile, code, liste, alberi binari, alberi con radice, dizionari di ricerca, grafi; Applicazioni in Java basate su algoritmi di ricerca e di ordinamento; Applicazioni in Java basate sui package grafici AWT e SWING Elaborazione di file in C. PROGRAMMA di INFORMATICA GENERALE Classe IV A A.S. 2015/16 Gli Allievi ________________ ________________ ________________ ________________ Iglesias, 10 Giugno 2016 Il Docente di Teoria e Lab. Il Docente di Laboratorio Pierpaolo Damele Arnaldo Scarpa ________________ ________________