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.
Conoscenze e comprensione
- Conoscere il paridgma della programmazione ad oggetti
- Conoscere i meccanismi principali alla base dello sviluppo di applicazioni ad oggetti modulari
- Conoscere gli elementi fondamentali della libreria standard di Java

Capacità di applicare conoscenza e comprensione
- Capacita' di sviluppare classi con campi e metodi di tipo e visibilita' appropriati in Java
- Capacita' di sviluppare una gerarchia di classi e tipi appropriata in Java
- Capacita' di utilizzare in maniera appropriata la libreria standard di Java
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
L'esame (comprendente entrambi i moduli) consiste in una prova scritta da svolgere al termine del corso o in qualsiasi degli appelli successivi.
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 e aperta, e una parte pratica che valutera' la conoscenza specifica del linguaggio Java attraverso esercizi di programmazione in questo linguaggio.
Una prova orale 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.

Per quanto riguarda la gradazione del voto:
A. punteggi nella fascia 18-22 verranno attribuiti in presenza di:
- sufficiente conoscenza del paridgma di programmazione ad oggetti
- sufficienti abilità nello sviluppo di applicazioni Java
B. punteggi nella fascia 23-26 verranno attribuiti in presenza di:
- discreta o buona conoscenza del paridgma di programmazione ad oggetti
- discreta o buona abilità nello sviluppo di applicazioni Java
funzionamento economico dei servizi pubblici;
C. punteggi nella fascia 27-30 verranno attribuiti in presenza di:
- ottima conoscenza del paridgma di programmazione ad oggetti
- ottima abilità nello sviluppo di applicazioni Java
scritto
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
Programma definitivo.
Data ultima modifica programma: 24/01/2025