Anno accademico 2023-2024

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI

Docenti

Giorgio Brajnik
Alessandro Locaputo
Anno di corso
2
Totale crediti
9
Periodo didattico
Primo Periodo
Tipologia
Caratterizzante
Prerequisiti. Esperienza nella programmazione in Java, capacità di installare e configurare applicazioni nel proprio sistema operativo, concetti di base di un sistema operativo.
Metodi didattici. Lezioni frontali, con slide. Esercitazioni interattive in aula. Demo pratiche.

Le attività pratiche (esercitazioni e demo) vengono svolte immerse nelle lezioni frontali e per questa ragione ciascun CFU di laboratorio viene considerato equivalente a 8 ore di lezione.

Modalità di verifica. L’esame sarà basato su un questionario a domande chiuse e una prova scritta centrata sullo sviluppo (parziale) di un programma Java.
Altre informazioni. nessuna
Obiettivi formativi
Lo scopo del corso è di sviluppare la competenza di “pensare ad oggetti” quando si programma un sistema relativamente complesso (non una singola unità, ma migliaia di unità sviluppate insieme ad altre decine di programmatori). Al termine del corso uno studente dovrebbe:aver capito come assegnare le responsabilità a un insieme di classiaver capito come definire interfacce dei vari componentiaver capito come creare astrazioni e come specificarleInoltre, lo studente avrà sviluppato esperienza nella programmazione in Java e nell’uso di strumenti tipici della

programmazione in Java quali: eclipse, intellij, git, maven.

Contenuti
Tipi di astrazioni: parametrizzazione, specifica procedurale, astrazione sui dati, sui tipi, sulle iterazioni.

Concetti di base di Java: package, classe, oggetti, variabili, allocazione in memoria; mutabilità; chiamate dei metodi; type checking; overloading; dispatching dei metodi; tipi di base (vettori, array, collections, mappe, stringhe); tipi parametrici.

Clean coding.

Astrazione procedurale: la specifica, contratti, pre e post-condizioni, le asserzioni, le eccezioni: checked, unchecked; definizione di nuove eccezioni; gestire le eccezioni con reflection e masking; buone pratiche; overloading dei metodi.

Astrazione sui dati: tipi di dati astratti, la loro specifica astratta e concreta; gli invarianti.

Astrazione sull’iterazione: uso e specifica di iteratori; invarianti.

Design con Card-Responsibility-Collaboration; stato e comportamento e protocollo; single responsibility principle.

Astrazione sui tipi: classi astratte; interfacce; tipi reali e apparenti; substitution principle; uguaglianza; polimorfismo; ereditarietà. Tipi parametrici. Classi interne, classi anonime. Dependency inversion.

Programmazione funzionale in Java.

Design pattern: factory, builder, decorator, observer.

Testi di riferimento
Testi di base: B Liskov e J Guttag. Program Development in Java:Abstraction, Specification and Object Oriented Design, 2001. ISBN: 0201657686. Addison-Wesley Professional.

Altri testi suggeriti a complemento: J. Bloch. Effective Java, Addison-Wesley Professional; 3 edition (January 6, 2018), ISBN-13: 978-

0134685991.

R. Martin. Clean Code: A Handbook of Agile Software Craftsmanship. ISBN-13: 978-0132350884, Prentice Hall; 1 edition (August 11, 2008).