Seleziona l'Anno Accademico:     2017/2018 2018/2019 2019/2020 2020/2021 2021/2022 2022/2023
Docente
GIULIANO ARMANO (Tit.)
Periodo
Secondo Semestre 
Modalità d'Erogazione
Convenzionale 
Lingua Insegnamento
ITALIANO 



Informazioni aggiuntive

Corso Percorso CFU Durata(h)
[70/89]  INGEGNERIA ELETTRICA, ELETTRONICA E INFORMATICA [89/30 - Ord. 2016]  INFORMATICA 5 50
[70/89]  INGEGNERIA ELETTRICA, ELETTRONICA E INFORMATICA [89/60 - Ord. 2016]  INFORMATICA ON LINE 5 50

Obiettivi

Indicatore conoscenza e capacità di comprensione
Il docente con regolarità coinvolge gli studenti nel riepilogo degli argomenti svolti. La capacità di risolvere i problemi posti durante le esercitazioni è un'altra attività utile allo scopo.

Indicatore capacità di applicare la conoscenza e capacità di comprensione
Il docente con regolarità pone agli studenti semplici problemi finalizzati verificare la comprensione degli argomenti svolti. Anche le esercitazioni svolte durante il corso sono utili per avere un riscontro relativo alla capacità di comprensione degli studenti.

Indicatore autonomia di giudizio
L'impostazione delle esercitazioni è tale da permettere allo studente di avere un riscontro pratico delle nozioni teoriche e nel contempo di verificare l'autonomia di giudizio dello studente.

Indicatore abilità comunicative
Durante le esercitazioni lo studente si trova spesso nella condizione di dover comunicare con i suoi colleghi e/o con il tutore, permettendo così al tutore di valutare l'efficacia e la proprietà delle interazioni.

Indicatore capacità di apprendere autonomamente
Nessuno.

Prerequisiti

Anche se non obbligatorio, è opportuno aver sostenuto un esame di fondamenti dell'informatica.

Contenuti

Il corso è suddiviso in quattro parti: 1. generalità sulla programmazione orientata agli oggetti, 2. linguaggio Java, 3. linguaggio Python, e 4. concetti avanzati di programmazione orientata agli oggetti. La prima parte introduce e illustra gli elementi caratterizzanti della visione a oggetti, mentre le parti sui linguaggi Java e Python sono finalizzate a verificare come i principali meccanismi dell'object-orientation siano implementati nei due linguaggi, evidenziando opportunamente le varie scelte di progetto. L'ultima parte rivede i concetti introdotti all'inizio del corso in una prospettiva semi-formale.

Generalità sulla programmazione orientata agli oggetti
Questa parte si concentra su i) tipi di dati astratti, ii) eredità, iii) polimorfismo, vi) binding e dispatching, v) principali modalità di derivazione di classe, nonché vi) sull'approccio object-oriented alla risoluzione dei problemi.

Linguaggio Java
Dopo aver visto brevemente le principali caratteristiche del linguaggio (strutture dati, strutture di controllo e funzioni), particolare attenzione viene rivolta ai modi in cui Java implementa l'eredità e il polimorfismo. Vengono illustrate con sufficiente dettaglio anche le modalità di implementazione dei concetti di binding e dispatching. Poiché in Java è importante distinguere tra overriding e overloading di metodi, vengono ben chiarite anche le differenze tra le due modalità di attivazione di metodi. Tutti gli aspetti visti nella teoria trovano una corrispondenza negli esercizi svolti a lezione o in laboratorio. Ovviamente gli esercizi sono impostati e risolti in accordo con la visione object-oriented.

Linguaggio Python
Dopo aver visto brevemente le principali caratteristiche del linguaggio (strutture dati, strutture di controllo e funzioni), particolare attenzione viene rivolta ai modi in cui Python implementa l'eredità e il polimorfismo. Vengono illustrati con sufficiente dettaglio anche le modalità di implementazione dei concetti di binding e dispatching. Tutti gli aspetti visti nella teoria trovano una corrispondenza negli esercizi svolti a lezione o in laboratorio. Ovviamente gli esercizi sono impostati e risolti in accordo con la visione object-oriented.

Concetti avanzati di programmazione orientata agli oggetti
Questa parte si concentra su i) interpretazione model-based delle relazioni tipo-sottotipo, ii) principio di sostituibilità di Liskov, iii) subtyping vs subclassing, nonché iv) sulla semantica delle modalità di derivazione di classe.

Principali argomenti trattati

Prima parte – Generalità sulla programmazione orientata agli oggetti

- Ripasso sui tipi di dati astratti: specifica sintattica, semantica e pragmatica
- Concetti di base della object-oriented technology: eredità e polimorfismo
- Aspetti caratterizzanti dei linguaggi object oriented: tipi/classi, operazioni/metodi, oggetti, dispatching, binding.

Seconda parte – Linguaggio Java

- Panoramica sul linguaggio
- Classi, oggetti e package
- Gestione delle eccezioni
- Eredità, polimorfismo, binding e dispatching in Java
- Input/Output
- Programmazione concorrente e programmazione basata su eventi in Java (cenni)

Terza parte – Linguaggio Python

- Panoramica sul linguaggio
- Classi, oggetti e package
- Gestione delle eccezioni
- Eredità, polimorfismo, binding e dispatching in Java
- Input/Output
- Programmazione funzionale, riflessione e calcolo scientifico in Python (cenni)

Quarta parte – Concetti avanzati di object-orientation

- Approfondimenti su eredità e polimorfismo
- Definizione informale di subtyping e subclassing
- Principio di sostituibilità di Liskov (LSP) e subtyping
- Caratterizzazione semantica delle principali varianti nella relazione classe-sottoclasse
- Confronto tra alcuni linguaggi object oriented (cenni)

Metodi Didattici

15 ore di lezione frontale, esercitazioni e laboratorio sulle basi di dati.
17 ore di lezione frontale, esercitazioni e laboratorio sul linguaggio Python.
18 ore di lezione frontale, esercitazioni e laboratorio sulla bioinformatica.

Verifica dell'apprendimento

La verifica di apprendimento viene effettuata tramite prova scritta, che verte su tutti gli argomenti del corso. I testi delle prove sono resi pubblici via web e, su richiesta, discussi con gli studenti. Durante l'anno accademico le soluzioni di alcuni compiti sono messe a disposizione degli studenti tramite web. Il voto finale è in trentesimi e dipende dalla qualità dell'elaborato prodotto dallo studente. Per consentire di ottenere la lode il punteggio complessivo è 32. Il conseguimento di un punteggio uguale o superiore a 31.5 tipicamente comporta il conseguimento della lode.

Testi

^^^ Testi di riferimento per la parte OOT ^^^

- T. Budd, An Introduction to Object-Oriented Programming, Pearson Addison-Wesley
- I. D. Craig, Object-Oriented Programming Languages: Interpretation, Springer

^^^ Testi di riferimento per la parte sul linguaggio Java ^^^

- H. Schildt, Java: The Complete Reference, Oracle Press
- K. Arnold, J. Gosling – Java, Didattica e Programmazione, Addison-Wesley

^^^ Testi di riferimento per la parte sul linguaggio Python ^^^

- O'Reilly, Alex Martelli, Python in a Nutshell, 2003
- Mark Pilgrim, Dive into Python [online]
- Allen B. Downey, Jeffrey Elkner e Chris Meyers, Pensare da informatico (versione Python) [online]

Altre Informazioni

Le slide delle lezioni sono messe a disposizione degli studenti, in formato pdf, sulle pagine web del docente su people.unica.it.

Questionario e social

Condividi su:
Impostazioni cookie