PROGRAMMAZIONE A OGGETTI

Anno accademico
2024/2025 Programmi anni precedenti
Titolo corso in inglese
OBJECT-ORIENTED PROGRAMMING
Codice insegnamento
CT0114 (AF:469152 AR:256619)
Modalità
In presenza
Crediti formativi universitari
9
Livello laurea
Laurea
Settore scientifico disciplinare
INF/01
Periodo
I Semestre
Anno corso
2
Sede
VENEZIA
Spazio Moodle
Link allo spazio del corso
L’insegnamento è una delle attività formative di base del corso di laurea in Informatica che consentono allo studente di acquisire la conoscenza e la comprensione dei principali paradigmi di programmazione e di acquisire la capacità di progettare e implementare software.
L'obiettivo dell’insegnamento è fornire conoscenze relative al paradigma di programmazione ad oggetti nonché la conoscenza specifica del linguaggio Java.
Il corso mira a sviluppare nello studente la necessaria familiarità con il paradigma della Programmazione ad Oggetti utilizzando e consolidando le basi di programmazione acquisite durante il primo anno.

Risulta fondamentale che il percorso formativo coniughi elementi metodologici e teorici a continui stimoli sperimentali, attraverso la risoluzione autonoma di esercizi e problemi applicativi.

Lo studente che frequenti con profitto il corso avrà acquisito una conoscenza approfondita del linguaggio Java e dei concetti fondamentali dei linguaggi di programmazione ad oggetti.
Per affrontare il corso è indispensabile avere una consolidata e profonda competenza di programmazione imperativa. Infatti la programmazione ad oggetti estende tale paradigma arricchendolo di meccanismi che permettono di ottenere proprietà desiderabili in termini di strutturazione, integrazione e compartimentazione del codice realizzato. Di conseguenza, e' essenziale che lo studente abbia compreso, acquisito, elaborato ed applicato i fondamenti della programmazione imperativa prima di poter affrontare questo corso con successo.
Mod. 1
---------
1) Encapsulation e abstraction
a. Classi e oggetti, campi e metodi
b. Static e final
c. Aliasing
d. Information hiding, attributi di visibilita'
e. Moduli
f. Documentazione del codice, Javadoc e file jar
g. Java Virtual Machine e Java bytecode
2) Polimorfismo
a. Estensione di classi, overriding e overloading
b. Abstract e final
c. Ereditarieta', subtyping, principio di sostituzione
d. Tipi statici e dinamici
e. Ereditarieta' singola e multipla
f. Classi astratte, interfacce
g. Dispatching statico e dinamico
h. Tipi generici
3) Java in action
a. Gerarchia delle classi Java, classe Object
b. Tipi native types, autoboxing, stringhe
c. Eccezioni
d. Annotazioni
e. Reflection
f. Gestione delle librerie, Gradle
g. Il pattern MVC (Model-View-Controller)
h. Spring


Mod. 2
---------
1) Elementi avanzati di Java
2) Programmazione ad eventi, callback, anonymous class
3) Eccezioni, error reporting, resource tracking
4) Polimorfismo parametrico: generics, constraints, polimorfismo first-class
5) Programmazione funzionale pura/impura codificata ad oggetti: lambda espressioni, function objects, closures
6) Design pattern: factory, singleton, command, listener-observer, consumer-producer
7) Tecniche di programmazione avanzata: type-driven programming ad oggetti
Mod.1
--------
Dispense del docente.

Materiale aggiuntivo:
Ken Arnold, James Gosling, David Holmes: The Java Programming Language, 4th Edition
Timothy Budd, An Introduction to Object-Oriented Programming, 3rd edition


Mod.2
--------
Testi e letture consigliate:

Joshua Bloch
"Effective Java Third Edition"
Addison-Wesley Professional, 2017

Kamalmeet Singh, Adrian Ianculescu, Lucian-Paul Torje
"Design Patterns and Best Practices in Java"
Packt Publishing Ltd, 2018

Scott Meyers
"Effective Modern C++"
O'Reilly Media Inc, 2015
La parte di esame relativa al Modulo 1 consiste in una prova scritta da svolgere al termine del corso o in qualsiasi degli appelli successivi. Per la registrazione del voto è necessario superare anche la parte inerente al Modulo 2, per la quale si rimanda al relativo Syllabus.
La valutazione sara' basata unicamente sulla prova scritta composta da una parte teorica che valutera' le conoscenze dello studente relative al paradigma di programmazione ad oggetti con domande a risposta chiusa o aperta, e una parte pratica che valutera' la conoscenza specifica del linguaggio Java attraverso esercizi di programmazione in questo linguaggio.

Per quanto riguarda il mod. 2, il corso prevede una prova d'esame scritta per ogni appello. Tale prova sarà tuttavia integrata con quella relativa al mod. 1.
Una prova orale relativa al solo mod. 2 sarà richiesta a discrezione del docente valutando caso per caso. Essa ha lo scopo di aggiustare il voto dello scritto qualora fosse sotto la soglia della sufficienza o qualora fosse esplicitamente richiesto dallo studente.
E' anche possibile consegnare al docente un progetto tra quelli proposti sulla pagina Moodle. Si tratta di una cosa del tutto opzionale, che ha valore innanzitutto come esercizio di coding con lo scopo di migliorare l'apprendimento dei concetti del corso; tuttavia, qualora il risultato dovesse rivelarsi di particolare qualità, il docente arrotonderà il voto dell'esame tenendone conto opportunamente.
Mod. 1
---------
Lezioni frontali alla lavagna.
Esercizi di programmazione, anche svolti in classe.


Mod. 2
---------
Corso frontale con schermo del computer sul megaschermo.
Tutto il codice prodotto a lezione viene regolarmente conservato su un repository Github ed è consultabile.
Italiano
scritto
Programma definitivo.
Data ultima modifica programma: 17/10/2024