Programmazione Turno 2/2007-2008

Da WikiDsy.


AVVISI

  • Si prega di iscriversi al compitino dal sito del corso
  • 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

  1. 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
  2. Programmazione ad oggetti con Java
    • Elementi base del linguaggio
    • Classi, metodi ed oggetti
    • Strutture di controllo
    • Ricorsione
    • Ereditarietà
  3. 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

  1. Primo compitino teoria: 5 novembre 2007
  2. Compitino laboratorio: 30 novembre 2007
  3. Secondo compitino teoria: 17 dicembre 2007
  4. Fine lezioni: 18 gennaio 2008
  5. PRIMO APPELLO
    • prova scritta teoria: 28 gennaio 2008
    • prova scritta laboratorio: 29 gennaio 2008
  6. 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.


calendario scaricabile (pdf)

(tratto dal sito)

Siti del corso

Sito del corso

Materiale didattico

(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
    1. deve terminare dopo un numero finito di passi
    2. ogni passo definito precisamente
    3. input precisamente definito
    4. output deve avere una relazione con i valori d'ingresso
    5. operazioni effettuate sono di base e in un tempo finito
  • Definizione di programma
  • Definizione di procedura
  • Criteri di bontà degli algoritmi
    1. Tempo di esecuzione
    2. Occupazione spazio di memoria
    3. Adattabilità dell'algoritmo
    4. Semplicità
    5. Modularità
    6. 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
    1. 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
    2. Tavole sintattiche
      • Rettangoli = simboli non terminali
      • Ovali = simboli terminali
      • biforcazione = alternativa
    3. Backus-Naur Form (BNF)
  • 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++
  • 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
    1. di compilazione (sintattici)
    2. di esecuzione (semantici)
    3. 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
    1. Interfaccia
    2. 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

Lezione 22/10/2007

  • Tipi di dato
  • tipo = nome + valori + operazoni lecite
  • tipi primitivi
  • espressioni ed operatori
  • Conversioni implicite ed esplicite (casting)
  • Precisionedei tipi e perdita di precisione
  • esempi

Lezione 24/10/2007

  • boolean
  • operatori logici
  • legge di De Morgan
  • metodi predicativi
  • Lazy evaluation
  • operatori
    • incremento e decremento: a++, ++a, a--, --a
    • assegnamento: a += b
    • condizionale: condizione ? espr1 : espr2
  • precedenze fra operatori
  • conversioni
  • modi di conversione:
    • casting
    • durante assegnamento
    • promozione in una espressione
  • librerie, packages, import
  • metodi statici di classe
  • numeri pseudo-casuali

Laboratorio 26/10/2007

  • esercizi sui tipi di dato e conversioni

Lezione 29/10/2007

  • ripasso numeri pseudo-casuali, esempi
  • campi di istanza e campi di classe
  • Istruzioni di selezione
    • if
    • if/else
  • confronti fra caratteri (basati su valore ASCII)
  • confronti fra oggetti: serve il metodo equals, attenzione all'operatore ==
  • String è un oggetto, quindi anche per esso vale il punto precedente
  • confronto fra float/ double: come per gli oggetti, meglio usare compareTo per motivi di compatibilità di precisione
  • switch

Lezione 31/10/2007

da svolgersi

Lezione 02/11/2007

vacanza

05/11/2007

COMPITINO

Lezione 07/11/2007

non ci sono andato

Laboratorio 09/11/2007

  • esercizi vari

Settimana 12/11/2007->16/11/2007

non ero a Milano

Lezione 19/11/2007

  • array (dichiarazione, inizializzazione)
  • array di array
  • ripasso classe tokenizer e suoi metodi
  • Stringbuffer
  • Costruttori (approfondimento)
  • this (approfondmento)
    • utilizzo per chiamare costruttori dentro costruttori

Lezione 21/11/2007

non c'ero

Laboratorio 23/11/2007

  • Prova di esercizio compitino

Lezione 26/11/2007

non c'ero

Lezione 28/11/2007

da svolgersi