Programmazione Turno 2/2007-2008
AVVISI
- Diversamente da quanto scritto negli orari ufficiali, come potete vedere sotto l'ultima ora della lezione di laboratorio del venerdì sarà in aula 403
- Si prega di entrare entro e non oltre le x.45 dove x sta per l'ora di inizio della lezione, a meno di casi straordinari
- Si prega di spegnere i cellulari o tenerli silenziosi durante la lezione
- Si prega di iscriversi sia ai compitini che agli appelli
- Per iscriversi agli appelli bisogna registrarsi sul SIFA, per i compitni basta la FORM sul sito della professoressa
- È assolutamente vietato partecipare agli appelli di programmazione di due turni differenti. I docenti si riservano di prendere provvedimenti nel caso ciò accada.
- Se si supera la prova scritta in un appello si può decidere di preparare il progetto nell'appello successivo. Se l'esito del progetto fosse negativo, all'appello successivo va ridato anche lo scritto. La stessa regola è applicata anche al progetto: la prova positiva vale anche per l'appello successivo.
- L'esame orale può essere sostenuto solo quando le due prove, scritto e progetto, sono positive, non prima.
Informazioni
Orari
- Lezione
- Lunedì, 13:30-16:30, aula V3
- Mercoledì, 13:30-16:30, aula V3
- Laboratorio
- Martedì, 12:30-15:30, aula 309
- Martedì, 15:30-16:30, aula 403
Scaglione alfabetico
Il turno è riservato agli studenti presenti nello scaglione H-Z.
Docenti
Maria Alberta Alberti (teoria)
Lorenzo Capra (laboratorio)
Altre informazioni e links
Programma
- Introduzione
- Evoluzione del computer
- Evoluzione dei linguaggi di programmazione
- Algoritmi e analisi degli algoritmi
- Linguaggi ad alto livello e linguaggi macchina
- Sintassi e semantica dei linguaggi
- Compilatori e interpreti
- Tipi di errore
- Programmazione ad oggetti con Java
- Elementi base del linguaggio
- Classi, metodi ed oggetti
- Strutture di controllo
- Ricorsione
- Ereditarietà
- Introduzione alle strutture dati
- Liste, code, pile
- Alberi binari
- Alberi di ricerca
(tratto dal sito del corso)
Modalità d'esame
- L'esame consiste in una prova scritta, in una prova orale e in un progetto.
- È assolutamente vietato partecipare agli appelli di programmazione di due turni differenti. I docenti si riservano di prendere provvedimenti nel caso ciò accada.
(dal sito)
Date, compitini ed esami
- Primo compitino teoria: 1 novembre 2007
- Compitino laboratorio: 30 novembre 2007
- Secondo compitino teoria: 17 dicembre 2007
- Fine lezioni: 18 gennaio 2008
- PRIMO APPELLO
- prova scritta teoria: 28 gennaio 2008
- prova scritta laboratorio: 29 gennaio 2008
- SECONDO APPELLO
- prova scritta teoria: 28 febbraio 2008
- prova scritta laboratorio: 29 febbraio 2008
N.B. 1: l'appello di gennaio esclude quello di febbraio, chi fa il primo non può fare il secondo e dovrà aspettare l'appello successivo.
N.B. 2: Se si supera la prova scritta in un appello si può decidere di preparare il progetto nell'appello successivo. Se l'esito del progetto fosse negativo, all'appello successivo va ridato anche lo scritto. La stessa regola è applicata anche al progetto: la prova positiva vale anche per l'appello successivo.
N.B. 3: L'esame orale può essere sostenuto solo quando le due prove, scritto e progetto, sono positive, non prima.
(tratto dal sito)
Siti del corso
Materiale didattico
- Materiale sul sito del corso (lucidi, esercizi etc.)
- Bibliografia
- Dai fondamenti agli oggetti - Pighizzini Ferrari
- J. Gosling, B. Joy, G. Steele and G. Bracha. The Java Language Specification- 2nd edition (versione online).
- B. Eckel. Thinking in Java. Apogeo. (In formato pdf)
(bibliografia tratta dal sito)
Diario del corso
Lezione 01/10/2007
- Introduzione
- Definizione di informatica
- Cenni storici
Lezione 03/10/2007
- Definzione di algoritmo
- 5 caratteristiche dell'algoritmo
- deve terminare dopo un numero finito di passi
- ogni passo definito precisamente
- input precisamente definito
- output deve avere una relazione con i valori d'ingresso
- operazioni effettuate sono di base e in un tempo finito
- Definizione di programma
- Definizione di procedura
- Criteri di bontà degli algoritmi
- Tempo di esecuzione
- Occupazione spazio di memoria
- Adattabilità dell'algoritmo
- Semplicità
- Modularità
- Eleganza
- Teoria degli algoritmi
- correttezza
- complessità
- decidibilità
- I linguaggi di programmazione
- Il processore
Laboratorio 05/10/2007
- installazione java environment su diverse piattaforme
- compilatore (javac.exe)
- interprete (java.exe)
- modifiche alla variabili path e classpath
- problemi compilazione separata moduli
Lezione 08/10/2007
- Esempio algoritmo di Euclide in linguaggio macchina
- Problemi dei linguaggi macchina
- specifici della macchina
- non trasferibili
- codice poco leggibile
- Esigenza di una macchina astratta
- Compilatori ed interpreti:differenza
- Descrizione dei linguaggi
- Grammatiche
- Una grammatica G è ua quadrupla {T,N,P,S} dove
- T è l'insieme dei simboli terminali
- N è l'insieme dei simboli non terminali
- P è l'insieme delle regole di produzione
- S è il simbolo iniziale
- Una grammatica G è ua quadrupla {T,N,P,S} dove
- Tavole sintattiche
- Rettangoli = simboli non terminali
- Ovali = simboli terminali
- biforcazione = alternativa
- Backus-Naur Form (BNF)
- Grammatiche
- Storia dei linguaggi
- primi linguaggi (anni '50)
- FORTRAN: concetto di sottoprogramma
- ALGOL: concetto di ricorsività
- COBOL: concetto di file, descrizione dei dati
- anni '60 (linguaggi più funzionali)
- LISP: paradigma di programmazione basato sul concetto di funzione
- APL: molti operatori, matematico (gestione matrici, vettori...)
- SNOBOL: manipolazione sequenze di caratteri
- anni '70
- PASCAL: programmazione strutturata
- C: alto livello, concetto di visibilità, accesso alla macchina
- PROLOG: basato sulla logica, poi in disuso
- anni '80 (nasce la programmazione ad oggetti)
- Smalltalk
- C++
- primi linguaggi (anni '50)
- Paradigmi di programmazione
- Procedurale
- Funzionale
- Modulare
- Ad oggetti
(Nota: la professoressa non ha finito i lucidi ed ha invitato gli studenti a finirli autonomamente)
Lezione 10/10/2007
- Paradigma ad oggetti
- classi
- moduli
- ereditarietà
- concetti base
- astrazione
- incapsulamento dei dati
- ereditarietà
- polimorfismo
- Ciclo dal codice sorgente all'esecuzione (compilatore/interprete)
- Programma = classi + metodi
- commenti in Java
- tipi di errori
- di compilazione (sintattici)
- di esecuzione (semantici)
- logici (non si ottiene il risultato voluto)
- Riprendiamo il concetto di Astrazione
- Oggetti e classi come astrazioni
- Oggetti: limitano l'accesso al loro interno, hanno uno stato(descritto dai suoi campi) ed un comportamento(descritto dai suoi metodi)
- una classe genera oggettidetti anche istanze della classe
- Riprendiamo il concetto di Incapsulamento dei dati, realizzato attraverso
- Interfaccia
- Più livelli di accesso
- public
- private
- protected
- invocazione metodi
- costanti = variabili static
- costruttori
- variabili
- assegnamento
- espressioni
- tipi di dato
- garbage collection
- Alias
- Dichiarazione ed inizializzazione
- Overloading
Laboratorio 12/10/2007
- classe ConsoleInputManager
- importazione di classi
- esercizi
Lezione 15/10/2007
non ero presente, aggiungerò gli argomenti in seguito
Lezione 17/10/2007
- Tipi di dato
- Tipi di dato come astrazione
- dichiarazione ed inizializzazione: che differenza c'è a livello di memoria
- differenza fra campo e variabile
- ConsoleInputManager e ConsoleOutputManager
- esempio di campo privato ed effetti sull'accessibilità.
- esempio di sovrascrittura del metodo toString ed effetti
- concatenazione di stringhe
- sequenze di escape
- metodi per le stringhe
- toUpperCase
- charAt
- concat
- length
- substring
- compareTo
- replace
- startWith
Lezione 19/10/2007
Si è fatta lezione anzichè laboratorio (vedere avviso).
- Ripresi i metodi per le stringhe
- parametri espliciti e impliciti (es. nome.compareTo("Andrea"), nome è implicito e "Andrea" esplicito)
- Tipo Random-> funzione nextInt(int)
- Segnatura (o firma) di un metodo
- Prototipo
- Overloading di metodi: si può solo con una diversa segnatura (tipicamente stesso nome ma diverso tipo e/o numero e/o ordine dei parametri)
- analisi di Frazione.java