Anno accademico 2022-2023

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI

Docenti

Giorgio Brajnik
Mihai Horia Popescu
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. Gli esempi forniti faranno riferimento a un sistema Ubuntu.
Metodi didattici. Lezioni frontali, con slide. Esercitazioni interattive in aula. Demo pratiche.
Modalità di verifica. L’esame sarà basato su un questionario a domande chiuse, una prova scritta e un eventuale esame orale.
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.

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.

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

0134685991.

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