- Oggetto:
Principi di Programmazione Orientata agli Oggetti
- Oggetto:
Principles of Object-Oriented Programming
- Oggetto:
Anno accademico 2024/2025
- Codice attività didattica
- INF0332
- Docenti
- Liliana Ardissono (Corso A)
Viviana Bono (Corso B)
Jeremy James Sproston (Corso A Turno 1 + Corso A Turno 2)
Sara Capecchi (Corso B Turno 1)
Luigi Di Caro (Corso B Turno 2) - Corso di studio
- [008707] Laurea in Informatica
- Anno
- 2° anno
- Periodo
- Secondo semestre
- Tipologia
- Di base
- Crediti/Valenza
- 9 CFU - Numero di ore - Number of hours: 48 (lezioni/theory) + 30 (esercitazioni/practice)
- SSD attività didattica
- INF/01 - informatica
- Erogazione
- Tradizionale
- Lingua
- Italiano
- Frequenza
- Facoltativa
- Tipologia esame
- Scritto
- Tipologia unità didattica
- corso
- Prerequisiti
-
Alle studentesse e agli studenti è richiesta la conoscenza delle nozioni fondamentali di programmazione imperativa (comandi di assegnamento, condizionali e iterativi, tipi di dato semplici e array, nozioni di astrazione procedurale, ricorsione, strutture dati principali).
Insegnamenti propedeutici (forniscono le competenze attese in ingresso): Programmazione I e Programmazione II.
Students are expected to be knowledgeable about the fundamental notions of imperative programming (assignment, conditional and iterative constructs, simple data types and arrays, procedural abstraction, recursion, main data structures).
Preparatory Courses (providing the expected entry skills): Programmazione I and Programmazione II. - Oggetto:
Sommario insegnamento
- Oggetto:
Obiettivi formativi
L’insegnamento ha l'obiettivo di estendere i concetti e la capacità di programmazione acquisiti con Programmazione I e Programmazione II. In particolare, si vuole fornire una introduzione al paradigma di programmazione orientata agli oggetti tramite il linguaggio Java. L'obiettivo di insegnare la programmazione fa parte degli Obiettivi formativi specifici del CdS in Informatica (L31), infatti è tra quelli relativi all'area informatica di base. In particolare, l'insegnamento illustrerà le astrazioni fondamentali per la progettazione del software (classi e oggetti), la definizione di semplici strutture dati (liste, alberi, pile, code) e operazioni corrispondenti, i meccanismi di base per favorire riuso e modularità del software (ereditarietà, polimorfismo, tipi generici, wild card), la specifica degli invarianti di classe e gestione delle loro violazioni (asserzioni ed eccezioni). Si darà particolare enfasi agli aspetti di buona progettazione del software, utilizzando concetti presi a prestito dall'ingegneria del software e formalismi grafici quali UML.
The course aims to extend the programming concepts and skills acquired with Programmazione I and Programmazione II. In particular, we want to provide an introduction to the object-oriented programming paradigm by means of Java language. The objective of teaching programming is part of the specific ”Obiettivi formativi specifici del CdS in Informatica (L31)”, in particular it is among those relating to the “informatica di base” area. In particular, the course will illustrate the fundamental abstractions for software design (classes and objects), the definition of simple data structures (lists, trees, stacks, queues) and corresponding operations, the basic mechanisms to promote reuse and modularity of the software (inheritance, polymorphism, generic types, wild cards), the specification of class invariants and handling of their violations (assertions and exceptions). Particular emphasis will be given to aspects of good software design, using concepts borrowed from software engineering and graphical formalisms such as UML.
- Oggetto:
Risultati dell'apprendimento attesi
La studentessa/lo studente acquisirà la capacità di progettare e realizzare applicazioni di piccole e medie dimensioni in Java sfruttando gli strumenti di base della programmazione a oggetti, imparerà a utilizzare e a realizzare alcune strutture dati fondamentali e approfondirà la conoscenza della libreria standard di Java.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Acquisizione dei principi e degli strumenti linguistici dei linguaggi orientati agli oggetti. Acquisizione delle metodologie di progettazione e implementazione di applicazioni di piccole e medie dimensioni in Java.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Utilizzo dei principi, degli strumenti e delle metodologie acquisite per progettare e implementare applicazioni di piccole e medie dimensioni in Java secondo un approccio multiparadigma (orientato agli oggetti e imperativo).
AUTONOMIA DI GIUDIZIO. Acquisizione dei criteri di base per comprendere il codice sviluppato da altre persone e stabilire come impostare una corretta progettazione e una solida implementazione delle applicazioni.
ABILITÀ COMUNICATIVE. Acquisizione e sviluppo di elementi del lessico informatico finalizzati al lavoro di progettazione, implementazione e valutazione delle applicazioni tramite linguaggi multiparadigma.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, teorica e pratica. Alla fine dell’insegnamento, i discenti avranno le conoscenze necessarie per poter apprendere le funzioni avanzate della programmazione ad oggetti, altri linguaggi orientati agli oggetti e per mantenersi aggiornati sugli sviluppi del settore tecnologico.
The student will acquire some skills for designing and implementing small/medium Java applications by exploiting the basic concepts of object-oriented programming, will learn and build some fundamental data structures and will increase their knowledge of the Java standard library.
KNOWLEDGE AND UNDERSTANDING. Acquisition of the principles and of the linguistic instruments of object-oriented languages. Acquisition of the methodologies for the design and the implementation of small/medium Java applications.
APPLYING KNOWLEDGE AND UNDERSTANDING. Usage of the acquired principles, instruments and methodologies to design and implement small/medium Java applications according to a multiparadigm approach (object-oriented and imperative).
MAKING JUDGMENTS. Acquisition of the basic criteria for understanding code developed by other people and for establishing how to set up a correct design and a solid implementation of applications.
COMMUNICATION SKILLS. Acquisition and development of a Computer Science vocabulary finalised to the design and implementation of the applications via multi-paradigm languages.
LEARNING SKILLS. Acquisition of autonomous learning and auto-evaluation skills of their own competencies, theoretical and practical. At the end of the course, the students will have the knowledge needed to learn advanced object-oriented programming and to be up-to-date on the technological developments.
- Oggetto:
Programma
Il programma è basato sulle dispense rese disponibili sulla pagina I-learn dell’insegnamento, integrate con il testo di riferimento “Paul J. Deitel - Harvey M. Deitel, Programmare in Java - 11/Ed.” e/o altro eventuale materiale fornito dal/dalla docente. Segue un sommario degli argomenti trattati. Tale sommario non riflette necessariamente l’ordine di esposizione degli argomenti.
- Ripasso dei concetti di base della programmazione imperativa: principali differenze tra C e Java.
- Incapsulamento, definizione di una classe, creazione e uso di oggetti.
- Specializzazione di una classe, ereditarietà.
- Relazioni tra classi, polimorfismo, classi parzialmente definite, interfacce.
- Generalizzazione di una classe, classi parametriche, tipi generici, wild card.
- Invarianti di classe, asserzioni, eccezioni e loro gestione.
- Progettazione e implementazione di strutture dati (liste, alberi, pile, code).
- Collezioni e iteratori.
- Cenni su progettazione a oggetti e UML.
- Alcuni esempi di design pattern (Composite, Singleton, State).
The course program is based on the teachers’ lecture notes published on the I-learn page of the course, integrated with the reference textbook “Paul J. Deitel - Harvey M. Deitel, Programmare in Java - 11/Ed.” and possibly with supplementary material provided by the teacher. Below is a summary of the treated topics. Such a summary does not necessarily reflect the order in which these topics will be covered.
- Recap on the basic notions of imperative programming: main differences between C and Java.
- Encapsulation, class definitions, creation and use of objects.
- Class specialisation, inheritance.
- Relations among classes, polymorphism, partially defined classes, interfaces.
- Class generalisation, parametric classes, generic types, wild cards.
- Class invariants, assertions, exceptions and exception handling.
- Design and implementation of data structures (lists, trees, stacks, queues).
- Collections and iterators.
- Brief introduction to object-oriented design and UML.
- Some examples of design patterns (Composite, Singleton, State).
- Oggetto:
Modalità di insegnamento
L’insegnamento consta di una parte teorica (48 ore) e una pratica (30 ore), eventualmente completate da ore di esercitazione decise anno per anno. La parte teorica si svolge in aula, anche tramite lo sviluppo passo a passo dei programmi al calcolatore. La parte pratica si svolge nei laboratori didattici in cui il docente illustra esercizi di programmazione che le studentesse e gli studenti risolvono al calcolatore. La/il docente (ed eventualmente i tutor) supportano le studentesse e gli studenti nella risoluzione degli esercizi assegnati.
The course is organised in a theoretical part (48 hours) and a practical one (30 hours), possibly integrated with some extra exercise hours, depending on the year. The theoretical part is in the classroom and the teaching is supported with step-by-step development of programs at the computer. The practical part is in the labs: the teacher proposes exercises to the students, which, in turn, must solve them on the computer. The teachers (and, sometimes, the tutors) help the students in their task.
- Oggetto:
Modalità di verifica dell'apprendimento
L’esame sarà SCRITTO e inizierà nelle date e orari pubblicati sulla bacheca di MyUnito. Tuttavia, le studentesse e gli studenti potranno essere divisi in turni, per gli appelli con alta numerosità. I turni potranno essere distribuiti anche in giorni successivi alla data di inizio dell’appello. I turni, se istituiti, verranno comunicati nei giorni immediatamente precedenti il giorno ufficiale dell'esame.
- Non ci saranno differenze per le studentesse e per gli studenti dei canali A e B che effettueranno l’esame insieme.
- L’iscrizione all'esame su MyUnito è obbligatoria: le studentesse e gli studenti non iscritti NON potranno in alcun caso sostenere l’esame (attenzione: le iscrizioni chiudono approssimativamente una settimana prima dell’appello).
- La prova consisterà in una serie di esercizi e domande a risposta chiusa e/o aperta sul programma dell'insegnamento. La prova scritta ha una durata indicativamente di 120 minuti.
- Il voto è un numero intero compreso tra 0 e 31 (31 vale per la lode). Si considerano sufficienti i voti ≥18.
The exam is WRITTEN and will take place in the date/time slots published on the MyUnito website. However, depending on the number of students, there may be more than one shift, distributed also on days following the official date. The schedule of the shifts, if present, will be communicated some days before the official date.
- There will be no difference among the students of the A, B course, who will take the exam all together.
- The registration to the exam on MyUnito is mandatory and the non-registered students will NOT be admitted to the exam (be careful: the registrations close around one week before the exam).
- The exam comprises a series of exercises and open and/or closed questions on the course program. The exam is about 120 minutes-long.
- The mark is an integer number included between 0 and 31 (31 represents 30 cum laude). Only marks ≥ 18 are considered as a “pass”.
Testi consigliati e bibliografia
- Oggetto:
- Libro
- Titolo:
- Programmare in Java - 11/Ed.
- Anno pubblicazione:
- 2020
- Editore:
- MyLab
- Autore:
- Paul J. Deitel - Harvey M. Deitel
- Obbligatorio:
- No
- Oggetto:
- Libro
- Titolo:
- UML Distilled - 4/Ed.
- Anno pubblicazione:
- 2017
- Editore:
- Pearson
- Autore:
- M. Fowler
- Obbligatorio:
- No
- Oggetto:
- Libro
- Titolo:
- Java Generics and Collections
- Anno pubblicazione:
- 2006
- Editore:
- O'Reilly
- Autore:
- M. Naftalin, P. Wadler
- Obbligatorio:
- No
- Oggetto:
Dispense delle/dei docenti, disponibili sui siti I-learn di Principi della programmazione orientata agli oggetti (A, B). Si noti che questo è uno dei testi fondamentali per l’insegnamento. Per quanto riguarda gli altri testi consigliati:
- “Programmare in Java - 11/Ed.”: è un testo con un approccio molto pratico alla programmazione in Java.
- “UML Distilled - 4/Ed”: è una guida minimale al formalismo di progettazione UML, che verrà introdotto in questo corso e trattato anche in corsi successivi.
- “Java Generics and Collections”: è un testo che copre aspetti teorici e pratici dei generici e aiuta a usare al meglio questa caratteristica avanzata ma utilissima di Java.
Teachers' lecture notes, available on the I-learn sites of Principles of object-oriented programming (A, B). Note that this is one of the main texts for this course. As for the other recommended texts:
- “Programmare in Java - 11/Ed.”: is a text with a very practical approach to programming in Java.
- “UML Distilled - 4/Ed”: is a minimal guide to the UML design formalism, which will be introduced in this course and also covered in subsequent courses.
- “Java Generics and Collections”: is a text that covers theoretical and practical aspects of generics and helps to make the best use of this advanced but very useful feature of Java.
- Oggetto:
Insegnamenti che mutuano questo insegnamento
- Istituzioni di Principi di Programmazione Orientata agli Oggetti (inf0405)Corso di laurea magistrale in Informatica
- Istituzioni di Principi di Programmazione Orientata agli Oggetti (inf0405)
- Oggetto: