Roberto, Margherita and Beatrice

Home

Personal Info

Papers

Teaching

Interests

People

Links

About

Programmazione (Metodi Avanzati)

Docente: Roberto Bagnara
Collaboratore didattico: Enea Zaffanella
Collocazione: IV anno del Corso di Laurea in Matematica. I modulo: I semestre; II modulo: II semestre.

Da questo corso ha avuto origine la Parma Polyhedra Library

Descrizione e finalità del corso

Il corso si propone di iniziare lo studente alle tecniche programmazione avanzata. L'obiettivo è quello di realizzare un salto di qualità nella comprensione dei problemi di programmazione e nella capacità dello studente di risolverli. Dai piccoli esercizi di programmazione a progetti quasi professionali (nella qualità se non nell'estensione).

Sebbene il linguaggio di programmazione utilizzato nel corso sia il C++, molte delle tecniche introdotte nel corso sono applicabili anche in ambienti differenti. Gli studenti apprenderanno diverse tecniche raffinate di programmazione mentre imparano le caratteristiche avanzate di C++. Per mezzo delle lezioni e delle sessioni di laboratorio, si cercherà di fornire un'esperienza profonda e duratura delle metodologie di programmazione e della potenza espressiva di C++. Nelle sessioni di laboratorio, gli studenti lavoreranno su esercizi e su piccoli progetti di gruppo con l'obiettivo di rafforzare la comprensione delle tecniche discusse. Gli esercizi includeranno la pratica di nuove tecniche di programmazione, la lettura critica e la correzione di codice esistente, la scrittura di nuovo codice, la modifica di codice esistente per venire incontro a nuovi requisiti, e il riutilizzo di codice in nuovi ambienti.

I due moduli sono seriali. In altre parole, il II modulo è pensato per gli studenti che abbiano già seguito il I modulo. Nel I modulo saranno illustrate e sperimentate in laboratorio gran parte delle caratteristiche (avanzate e non) del linguaggio. Nel II modulo si completerà lo studio del linguaggio e, soprattutto, si passerà alla fase di approfondimento delle capacità progettuali e realizzative degli studenti.

Per entrambi i moduli, il lavoro di laboratorio prevede l'utilizzo di sofisticati strumenti di sviluppo in ambiente Linux e il lavoro di gruppo. Nel II modulo, una volta che si sia determinato il numero di partecipanti, verrà scelto un progetto di programmazione realistico cui lavoreranno tutti gli studenti. In questo modo si intende iniziare gli studenti alla programmazione professionale, al lavoro di gruppo e al coordinamento tra sviluppatori software.

La parte fondamentale dell'esame viene svolta nelle sessioni di laboratorio svolte durante l'anno, con l'unica integrazione di un breve colloquio finale. Ne consegue che la frequenza è strettamente obbligatoria e che tutto il lavoro (agli studenti viene richiesto un serio impegno di studio individuale) viene svolto durante il corso. La (triste) pratica di ``seguire'' il corso per prendere appunti da studiare poi chissà quando, nel caso di questo corso, non ha alcuna speranza di riuscita.

Gli studenti lavoratori o che comunque fossero impossibilitati a frequentare le lezioni e/o le sessioni di laboratorio, sono invitati a prendere contatto con il docente per l'individuazione di modalità alternative per lo svolgimento del programma del corso.

Propedeuticità

Il corso segue logicamente i corsi di ``Fondamenti di Informatica'' e ``Linguaggi di Programmazione''. In particolare, si suppone che gli studenti conoscano il frammento imperativo del linguaggio C++ (già studiato nel corso di Linguaggi di Programmazione). Quando questo non fosse il caso, gli studenti sono invitati, entro le prime due settimane di corso, a far sí che detti presupposti si avverino. La lista dei collegamenti utili contiene alcuni riferimenti che potrebbero agevolare questo lavoro di ripasso.

I modulo

Programma del corso

  • Tipi di dato.
  • Espressioni.
  • Istruzioni.
  • Tipi contenitori astratti.
  • Funzioni.
  • Campo d'azione e ciclo di vita.
  • Funzioni sovraccaricate.
  • Classi.
  • Inizializzazione, assegnamento e distruzione.
  • Operatori sovraccaricati e conversioni definite dall'utente.
  • Ambiente di sviluppo:
    • Il compilatore g++.
    • Il debugger gdb.
    • Automazione del processo di compilazione: make.
    • Source Navigator.

Testi consigliati

  • S. Lippman, J. Lajoie, ``C++: Corso di programmazione'', terza edizione, Addison-Wesley, 2000.
    ISBN 88-7192-071-6.

    Fondamentale.

  • B. Stroustrup, ``C++: Linguaggio, libreria standard, principi di programmazione'', terza edizione, Addison-Wesley, 2000.
    ISBN 88-7192-078-3.

    Per chi desideri approfondire ulteriormente la conoscenza del linguaggio C++. Può essere utile come strumento di consultazione.


II modulo

Programma del corso

  • Template di funzione.
  • Gestione delle eccezioni.
  • Algoritmi generici.
  • Template di classe.
  • Ereditarietà semplice.
  • Ereditarietà multipla e virtuale.
  • La libreria standard.
  • Tecniche per la gestione dinamica della memoria.
  • Ambiente di sviluppo:
    • Version control: cvs.
    • Rudimenti di programmazione shell.

Testi consigliati

  • S. Lippman, J. Lajoie, ``C++: Corso di programmazione'', terza edizione, Addison-Wesley, 2000.
    ISBN 88-7192-071-6.

    Fondamentale.

  • B. Stroustrup, ``C++: Linguaggio, libreria standard, principi di programmazione'', terza edizione, Addison-Wesley, 2000.
    ISBN 88-7192-078-3.

    Per chi desideri approfondire ulteriormente la conoscenza del linguaggio C++. Può essere utile come strumento di consultazione.


Collegamenti Utili

Poliedri

C++

[Page last updated on September 26, 2011, 07:58:37.]

© Roberto Bagnara
bagnara@cs.unipr.it

Home | Personal | Papers | Teaching | Interests | People | Links | About