Seguici su
Cerca

PROGRAMMAZIONE I E LABORATORIO A - L

Anno accademico 2019/2020 - 1° anno - Curriculum Elaborazione Dati e Applicazioni e Curriculum Sistemi e Applicazioni
Docenti Crediti: 9
SSD: INF/01 - Informatica
Organizzazione didattica: 225 ore d'impegno totale, 153 di studio individuale, 36 di lezione frontale, 24 di esercitazione, 12 di laboratorio
Semestre:

Obiettivi formativi

  • PROGRAMMAZIONE I

    Descrizione generale sintetica

    Il corso presenta i fondamenti di programmazione degli elaboratori adottando C++ come linguaggio di riferimento. In particolare sono presentati i concetti base della programmazione strutturata e di quella OOP (Object- Oriented Programming) senza tralasciare la codifica di algoritmi notevoli ed alcune tecniche di progettazione di software OOP.

    Obiettivi formativi generali dell'insegnamento in termini di risultati di apprendimento attesi

    1. Conoscenza e capacità di comprensione (knowledge and understanding): l'obiettivo primario del corso è individuato nell’acquisizione da parte degli studenti della “filosofia” della programmazione strutturata e di quella OOP, oltre che nella conoscenza dettagliata della sintassi e della semantica del linguaggio di programmazione C++. Il corso rivolge una particolare attenzione allo sviluppo di codice ben scritto e ben strutturato utilizzando le tecniche di base per lo sviluppo di software nel paradigma Object-Oriented.

    2. Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): si intende fornire gli strumenti per conseguire le seguenti abilità pratiche e professionali:

      1. Tradurre in codice idee algoritmiche;

      2. Progettare, descrivere ed implementare programmi in C++;

      3. Saper usare gli strumenti professionali per debug di programmi C++;

      4. Analizzare e descrivere soluzioni Object-Oriented mediante diagrammi UML (Unified Language Modeling) delle classi;

      5. Progettare ed implementare gerarchie di classi polimorfe e codice generico;

      6. Comprendere ed analizzare codice C++ di terze parti anche in termini di efficienza;

      7. Orientarsi nella documentazione delle librerie.

    3. Autonomia di giudizio (making judgements): attraverso l'esame di numerosi esempi di codice Object-Oriented e una consistente componente pratica che prevede lo svolgimento di esercizi all'elaboratore, il discente sarà in grado, sia in forma autonoma che in forma cooperativa, di analizzare problemi e progettare ed implementare le relative soluzioni software.

    4. Abilità comunicative (communication skills): lo studente acquisirà le necessarie abilità comunicative e di appropriatezza espressiva nell'impiego del linguaggio verbale tecnico e del linguaggio visuale UML nell'ambito della programmazione degli elaboratori.

    5. Capacità di apprendimento (learning skills): il corso intende fornire al discente le necessarie metodologie teoriche e pratiche da mettere in campo in contesti professionali e, in particolare, la capacità di formulare algoritmi ad-hoc per la risoluzione di nuovi problemi e la possibilità di acquisire facilmente ed in breve tempo un altro linguaggio di programmazione Object-Oriented.

  • LABORATORIO

    Descrizione generale sintetica

    Il corso presenta i fondamenti di programmazione degli elaboratori adottando C++ come linguaggio di riferimento. In particolare sono presentati i concetti base della programmazione strutturata e di quella OOP (Object- Oriented Programming) senza tralasciare la codifica di algoritmi notevoli ed alcune tecniche di progettazione di software OOP.

    Obiettivi formativi generali dell'insegnamento in termini di risultati di apprendimento attesi

    1. Conoscenza e capacità di comprensione (knowledge and understanding): l'obiettivo primario del corso è individuato nell’acquisizione da parte degli studenti della “filosofia” della programmazione strutturata e di quella OOP, oltre che nella conoscenza dettagliata della sintassi e della semantica del linguaggio di programmazione C++. Il corso rivolge una particolare attenzione allo sviluppo di codice ben scritto e ben strutturato utilizzando le tecniche di base per lo sviluppo di software nel paradigma Object-Oriented.

    2. Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): si intende fornire gli strumenti per conseguire le seguenti abilità pratiche e professionali:

      1. Tradurre in codice idee algoritmiche;

      2. Progettare, descrivere ed implementare programmi in C++;

      3. Saper usare gli strumenti professionali per debug di programmi C++;

      4. Analizzare e descrivere soluzioni Object-Oriented mediante diagrammi UML (Unified Language Modeling) delle classi;

      5. Progettare ed implementare gerarchie di classi polimorfe e codice generico;

      6. Comprendere ed analizzare codice C++ di terze parti anche in termini di efficienza;

      7. Orientarsi nella documentazione delle librerie.

    3. Autonomia di giudizio (making judgements): attraverso l'esame di numerosi esempi di codice Object-Oriented e una consistente componente pratica che prevede lo svolgimento di esercizi all'elaboratore, il discente sarà in grado, sia in forma autonoma che in forma cooperativa, di analizzare problemi e progettare ed implementare le relative soluzioni software.

    4. Abilità comunicative (communication skills): lo studente acquisirà le necessarie abilità comunicative e di appropriatezza espressiva nell'impiego del linguaggio verbale tecnico e del linguaggio visuale UML nell'ambito della programmazione degli elaboratori.

    5. Capacità di apprendimento (learning skills): il corso intende fornire al discente le necessarie metodologie teoriche e pratiche da mettere in campo in contesti professionali e, in particolare, la capacità di formulare algoritmi ad-hoc per la risoluzione di nuovi problemi e la possibilità di acquisire facilmente ed in breve tempo un altro linguaggio di programmazione Object-Oriented.


Modalità di svolgimento dell'insegnamento

  • PROGRAMMAZIONE I

    Lezioni frontali mediante espozione di algoritmi alla lavagna e codifica di esempi al calcolatore.

  • LABORATORIO

    Esercitazioni frontali mediante esposizione di algoritmi in C++ alla lavagna, e codifica di esempi al calcolatore.


Prerequisiti richiesti

  • PROGRAMMAZIONE I

    Nessuno

  • LABORATORIO

    Nessuno


Frequenza lezioni

  • PROGRAMMAZIONE I

    La frequenza delle lezioni non e' obbligatoria ma e' fortemente consigliata.

  • LABORATORIO

    La frequenza delle lezioni non e' obbligatoria ma e' fortemente consigliata.


Contenuti del corso

  • PROGRAMMAZIONE I

    Modulo A − Elementi di Programmazione Imperativa ed Orientata agli Oggetti (3CFU)

    1. Introduzione alla programmazione

      1. Problemi; Algoritmi; Diagrammi di flusso.

      2. Variabili; Espressioni; Assegnazioni.

      3. Notazione lineare strutturata; Teorema di Böhm-Jacopini.

      4. Struttura dati array.

    2. Linguaggi di programmazione: C++.

      1. Linguaggi di programmazione: macchina, assembly e di alto livello.

      2. Problema della traduzione : compilazione ed interpretazione.

      3. Installazione del compilatore; Primo programma: Editing, Compiling, Running, Debugging.

    3. Costrutti del linguaggio.

      1. Tipi di dato; Operatori predefiniti; Conversioni di tipo; Gestione dell’I/O.

      2. Controllo del flusso: costrutti di selezione if-then-else e switch, ed iterativi while e do-while.

    4. Introduzione alla Programmazione Orientata agli Oggetti.

      1. Oggetti: stato e comportamento; Classi; Istanziazione di oggetti: costruttori.

      2. Messaggi: struttura, parametri, tipi di messaggi.

      3. Relazione di composizione/aggregazione per gli oggetti.

    5. Struttura dati array e stringhe di caratteri.

      1. Array di tipi predefiniti e di oggetti. Array bidimensionali.

      2. Costrutto iterativo for.

      3. Sequenze di caratteri: array di char ed oggetti stringa.

    Modulo B − Caratteristiche avanzate del linguaggio C++ (3 CFU)

    1. Dichiarazione di classi.

      1. Struttura della classe: attributi ed operazioni; Modificatori di accesso.

      2. Implementazione di metodi: valore di ritorno, passaggio di parametri per valore e per riferimento; Categorie di memorizzazione delle variabili; Regole di visibilità.

      3. Implementazione del costruttore.

    2. Puntatori ed Array.

      1. Puntatori. Operatori di indirizzo e di dereferenziazione.

      2. Aritmetica dei puntatori. Puntatori ed array; Puntatori come parametro; Allocazione dinamica della memoria.

      3. Puntatori a funzioni. Il puntatore this; Indirizzamento multilivello. Riferimenti; Enumerazioni; Unioni; Campi di bit.

      4. Array 2D. Array allocati dinamicamente, Array come parametri, Array frastagliati; Array multidimensionali;

    3. Elementi avanzati del linguaggio.

      1. Il modificatore const per i puntatori e per i metodi. Argomenti standard per i parametri di funzioni; Clausola Namespace; Dichiarazioni forward; Funzioni inline.

      2. Implementazione della relazione di composizione/aggregazione.

      3. Overloading di metodi. Costruttori e distruttori. Costruttore di copia.

      4. Funzioni e classi friend. Attributi e metodi statici.

      5. Gestione delle chiamate ai metodi mediante stack delle attivazioni.

    Modulo C − Progettazione di software orientato agli oggetti (3CFU)

    1. Ereditarietà

      1. Definizione; Relazione ISA; Derivazioni e modalità di accesso: protected.

      2. Gerarchie ereditarie di classi. Overriding di metodi. Operatore :: risolutore di scope.

      3. Lista di inizializzazione e modalità d’esecuzione di costruttori e distruttori ereditati.

      4. Ereditarietà multipla. Classi base virtuali.

    2. Polimorfismo e Classi astratte.

      1. Puntatori a classi derivate; Funzioni virtuali; Late-binding. Polimorfismo.

      2. Gerarchie ereditarie di classi polimorfe.

      3. Funzioni virtuali pure; Classi astratte; Interfacce.

      4. RTTI: typeid e dynamic_cast.

    3. Principi di progettazione orientata agli oggetti.

      1. Diagrammi UML per le classi.

      2. Progettazione ed analisi nel paradigma OOP.

    4. Overloading degli operatori.

      1. Tipo di overloading di operatori : non-membro, friend, membro.

      2. Operatori prefissi e postfissi “++” e “--”.

      3. Cenni ad operatori di assegnamento “=”, di indicizzazione “[ ]” e “( )” e di cast.

      4. Operatori di I/O.

    5. Programmazione generica.

      1. Funzioni generiche. Classi generiche.

  • LABORATORIO
    1. Concetti base di programmazione

    2. Il linguaggio C++

    3. Costrutti del linguaggio C++

    4. Costrutti per la Programmazione Orientata agli Oggetti in C++

    5. Struttura dati array e stringhe di caratteri in C++

    6. Dichiarazione di classi in C++

    7. Puntatori ed Array in C++

    8. Elementi avanzati del linguaggio C++

    9. Ereditarietà, Polimorfismo e Classi astratte in C++

    10. Overloading degli operatori in C++

    11. Classi Template e Funzioni Template in C++


Testi di riferimento

  • PROGRAMMAZIONE I
    1. H.M. Deitel, P. J. Deitel, C++ Fondamenti di programmazione – Maggioli Editore (2014).

    2. Eckel, Thinking in C++, Vol. I, 2°Ed. (disponibile gratuitamente online)

    3. Horstmann, C++ for everyone, 2°Ed. – Wiley

    4. Stroustrup, Programming: Principles and Practice Using C++. (Addison-Wesley ISBN 978-0321-992789, http://www.stroustrup.com/programming.html).

    5. Stroustrup, The C++ Programming Language - 4th Edition ( Addison-Wesley ISBN 978-0321563842, http://www.stroustrup.com/4th.html )

    NOTE:

    I testi (1), (2), (3) e (4) sono consigliati ai principianti. Il testo (1) e’ in lingua italiana (per chi la preferisce), tutti gli altri sono in Inglese (e se ne consiglia la fruizione in Inglese).

    Il libro (2) e’ un buon testo per principianti ma e’ aggiornato al 2000 (prima versione ANSI/C++), tuttavia rimane un buon testo per principianti.

    Il testo (3) e’ fortemente consigliato agli studenti che affrontano un corso di programmazione per la prima volta; il testo contiene una grande quantità di esercizi.

    Il testo (4) e’ stato scritto dallo stesso autore del testo (5), ovvero il creatore del linguaggio C++.

    Il testo (5) è di livello avanzato. Tuttavia e’ in assoluto il miglior testo in circolazione sul C++. Per chi volesse cimentarsi nell’acquisto, si consiglia di aggiungere un ulteriore supporto didattico, ovvero il testo (4), dello stesso autore, oppure uno tra i testi (1) e (3).

  • LABORATORIO
    1. H.M. Deitel, P. J. Deitel, C++ Fondamenti di programmazione – Maggioli Editore (2014).

    2. Eckel, Thinking in C++, Vol. I, 2°Ed. (disponibile gratuitamente online)

    3. Horstmann, C++ for everyone, 2°Ed. – Wiley

    4. Stroustrup, Programming: Principles and Practice Using C++. (Addison-Wesley ISBN 978-0321-992789, http://www.stroustrup.com/programming.html).

    5. Stroustrup, The C++ Programming Language - 4th Edition ( Addison-Wesley ISBN 978-0321563842, http://www.stroustrup.com/4th.html )

    NOTE:

    I testi (1), (2), (3) e (4) sono consigliati ai principianti. Il testo (1) e’ in lingua italiana (per chi la preferisce), tutti gli altri sono in Inglese (e se ne consiglia la fruizione in Inglese).

    Il libro (2) e’ un buon testo per principianti ma e’ aggiornato al 2000 (prima versione ANSI/C++), tuttavia rimane un buon testo per principianti.

    Il testo (3) e’ fortemente consigliato agli studenti che affrontano un corso di programmazione per la prima volta; il testo contiene una grande quantità di esercizi.

    Il testo (4) e’ stato scritto dallo stesso autore del testo (5), ovvero il creatore del linguaggio C++.

    Il testo (5) è di livello avanzato. Tuttavia e’ in assoluto il miglior testo in circolazione sul C++. Per chi volesse cimentarsi nell’acquisto, si consiglia di aggiungere un ulteriore supporto didattico, ovvero il testo (4), dello stesso autore, oppure uno tra i testi (1) e (3).

    PROGRAMMAZIONE I E LABORATORIO

    The course presents fundamentals of programming computers by adopting C ++ as the reference language. In particular, basic concepts of structured programming and the OOP (Object-Oriented Programming) are introduced. Furthermore, encoding of fundamental algorithms and some OOP software design techniques are discussed.

    Knowledge and understanding the primary objective of the course is the students' acquisition of the "philosophy" of the structured programming and of the OOP, as well as the detailed knowledge of the syntax and the semantics of the C++ programmig language.

    The course pays particular attention to the development of well-written and well-structured code using the basic techniques for software development in the Object-Oriented paradigm.

    Applying knowledge and understanding the goal of the course is to provide the tools to achieve the following skills: - Translate algorithmic ideas into code; - Design, describe and implement programs in C++; - Debug C++ programs with professional tools; - Understand simple recursive algorithms; - Analyze and describe Object-Oriented solutions using UML (Unified Language Modeling) class diagrams; - Design, implement and correctly use hierarchies of polymorphic classes and generic code; - Read, understand and analyze third-party C++ code also in terms of efficiency; - Orient yourself in the documentation of the libraries.

    Making judgments: through the examination of a large number of examples of Object-Oriented programs and various practical programming sessions, the student will be able, both independently and in a cooperative form, to analyze problems and design and implement related software solutions.

    Communication skills the student will acquire the necessary communication skills and expressive appropriateness in the use of technical verbal language and UML visual language in computer programming.

    Learning skills the course aims to provide to the student the theoretical and practical methodologies needed in professional contexts and, in particular, the ability to formulate ad-hoc algorithms for problem solving and the opportunity to learn quickly the C++ programming language.


Programmazione del corso

PROGRAMMAZIONE I
 ArgomentiRiferimenti testi
1Introduzione alla programmazione 1-4 
2Linguaggi di programmazione: C++ 1-4 
3Costrutti del linguaggio.1-4 
4Introduzione alla Programmazione Orientata agli Oggetti. 1-4 
5Struttura dati array e stringhe di caratteri. 1-5 
6Dichiarazione di classi. 1-5 
7Puntatori ed Array1-5 
8Elementi avanzati del linguaggio1-5 
9Ereditarietà1-5 
10Polimorfismo e Classi astratte1-5 
11Principi di progettazione orientata agli oggetti1-5 
12Overloading degli operatori1-5 
13Programmazione generica1-5 
LABORATORIO
 ArgomentiRiferimenti testi
1Concetti base di programmazione1-4 
2Il linguaggio C++1-4 
3Costrutti del linguaggio C++1-4 
4Costrutti per la Programmazione Orientata agli Oggetti in C++1-4 
5Struttura dati array e stringhe di caratteri in C++. 1-5 
6Dichiarazione di classi i C++. 1-5 
7Puntatori ed Array in C++. 1-5 
8Elementi avanzati del linguaggio C++. 1-5 
9Ereditarietà, plimorfismo e classoi astratte in C++. 1-5 
10Overloading degli operatori in C++. 1-5 
11Funzioni template e classi template in C++1-5 

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

  • PROGRAMMAZIONE I

    MODALITÀ D'ESAME

    L’esame consiste nella verifica degli obiettivi preposti per il corso e cioè:

    1. la capacità di descrivere ed implementare semplici procedimenti algoritmici.

    2. la conoscenza dettagliata del linguaggio di programmazione C++

    3. la capacità di applicare il paradigma orientato agli oggetti (OOP) allo sviluppo del software.

     

    A tal fine l’esame è composto da tre prove indipendenti atte a verificare i precedenti punti e si intenderà superato quando tutte e tre le prove saranno valutate sufficientemente:

    1. prova teorica (esame scritto) di programmazione imperativa (verifica gli obiettivi (a) e (b)),

    2. prova pratica di laboratorio (verifica gli obiettivi (b) e (c)),

    3. prova teorica (colloquio orale) di programmazione orientata agli oggetti (verifica gli obiettivi (b) e (c)).

     

    Le prove 1), 2) e 3) sono da considerarsi propedeutiche, pertanto, possono accedere alla prova 2) tutti coloro che abbiano superato la prova 1), e possono accedere alla prova 3) tutti coloro che abbiano superato la prova 2).

    Le varie prove possono essere superate in momenti differenti (appelli e/o sessioni differenti); la sufficienza conseguita in una certa prova sarà considerata valida per tutto l’A.A. (fino a Dicembre successivo al corso).

    Chi ha superato la prova 1) puo’ scegliere di ripeterla, ma l’esito della nuova prova sostituisce l’esito della precedente in ogni caso.

    Chi ha superato la prova di laboratorio non puo’ ripetere ne la prova scritta ne la prova di laboratorio, ma dovra’ sostenere la prova 3) in uno degli appelli rimanenti, entro la fine dello A.A.

    Ad ogni appello gli studenti potranno sostenere tutti e tre i tipi di prove, in particolare:

    • la prova 1) può essere sostenuta alla data ufficiale dell’appello;

    • la prova 2) può essere sostenuta alla data che sarà pubblicata nella homepage del docente e/o nei canali a disposizione dei docenti (tale data sarà tipicamente 7 gg. dopo la data dell’appello).

    • la prova 3) può essere sostenuta in una o piu’ date indicate dal docente, presso lo studio del docente o un’aula del dipartimento.

    DATE D'ESAME

    Tutte le date di esame sono pubblicate nel sito www.dmi.unict.it

    PROVE IN ITINERE

    E' prevista una prova in itinere nel mese di Dicembre. Il test consiste nella prova teorica (1) di programmazione imperativa (verifica gli obiettivi (a) e (b)). Il risultato conseguito ha la stessa valenza di quello di un appello ufficiale.

     

    PROVE DI FINE CORSO

    1. Prova teorica di programmazione imperativa. Si tratta di un compito scritto, valutato in trentesimi (V1), in cui è richiesta la scrittura di due metodi in C++. Gli studenti hanno facoltà di ripetere tale prova scritta al fine di migliorare la votazione conseguita; in tal caso la votazione precedente viene annullata d’ufficio al momento della consegna del nuovo compito svolto dallo studente. La votazione (V1) si intende accettata se lo studente partecipa ad una qualsiasi prova di laboratorio (2).

    2. Prova pratica di laboratorio. Si tratta di un esercizio di programmazione orientata agli oggetti da sviluppare in C++ all’elaboratore. La prova è giudicata sufficiente o insufficiente a seconda che l’output del codice prodotto sia esatto o non esatto; ad essa è associata una votazione (V2), nel seguente modo: a) in caso di voto 0, +1 oppure +2 la prova si considera superata; b) se la prova non viene superata il voto assegnato sara’ -1; c) infine il docente puo’ assegnare, a propria discrezione, il voto -2 pur ammettendo lo studente alla terza ed ultima prova. Il caso c) puo’ presentarsi nel caso in cui la valutazione dello elaborato sia ``bordeline’’, ovvero la prova non e’ del tutto sufficiente ma si ritiene che lo studente possa affrontare il colloquio orale; tuttavia nel caso c) lo studente puo’ scegliere di ripetere la prova di laboratorio in un prossimo appello (in questo caso il voto sara’ -1).

    Prova teorica di programmazione orientata agli oggetti. Si tratta di un colloquio, valutato in trentesimi (V3), che verte sui concetti tipici della OOP ed in cui è richiesta la modellazione di software tramite diagrammi UML delle classi. La votazione finale, espressa in trentesimi, è così calcolata (V1+V3)/2 + (V2- P) , dove P è il numero di prove di laboratorio (2) non superate.

  • LABORATORIO

    MODALITÀ D'ESAME

    L’esame consiste nella verifica degli obiettivi preposti per il corso e cioè:

    1. la capacità di descrivere ed implementare semplici procedimenti algoritmici.

    2. la conoscenza dettagliata del linguaggio di programmazione C++

    3. la capacità di applicare il paradigma orientato agli oggetti (OOP) allo sviluppo del software.

     

    A tal fine l’esame è composto da tre prove indipendenti atte a verificare i precedenti punti e si intenderà superato quando tutte e tre le prove saranno valutate sufficientemente:

    1. prova teorica (esame scritto) di programmazione imperativa (verifica gli obiettivi (a) e (b)),

    2. prova pratica di laboratorio (verifica gli obiettivi (b) e (c)),

    3. prova teorica (colloquio orale) di programmazione orientata agli oggetti (verifica gli obiettivi (b) e (c)).

     

    Le prove 1), 2) e 3) sono da considerarsi propedeutiche, pertanto, possono accedere alla prova 2) tutti coloro che abbiano superato la prova 1), e possono accedere alla prova 3) tutti coloro che abbiano superato la prova 2).

    Le varie prove possono essere superate in momenti differenti (appelli e/o sessioni differenti); la sufficienza conseguita in una certa prova sarà considerata valida per tutto l’A.A. (fino a Dicembre successivo al corso).

    Chi ha superato la prova 1) puo’ scegliere di ripeterla, ma l’esito della nuova prova sostituisce l’esito della precedente in ogni caso.

    Chi ha superato la prova di laboratorio non puo’ ripetere ne la prova scritta ne la prova di laboratorio, ma dovra’ sostenere la prova 3) in uno degli appelli rimanenti, entro la fine dello A.A.

    Ad ogni appello gli studenti potranno sostenere tutti e tre i tipi di prove, in particolare:

    • la prova 1) può essere sostenuta alla data ufficiale dell’appello;

    • la prova 2) può essere sostenuta alla data che sarà pubblicata nella homepage del docente e/o nei canali a disposizione dei docenti (tale data sarà tipicamente 7 gg. dopo la data dell’appello).

    • la prova 3) può essere sostenuta in una o piu’ date indicate dal docente, presso lo studio del docente o un’aula del dipartimento.

    DATE D'ESAME

    Tutte le date di esame sono pubblicate nel sito www.dmi.unict.it

    PROVE IN ITINERE

    E' prevista una prova in itinere nel mese di Dicembre. Il test consiste nella prova teorica (1) di programmazione imperativa (verifica gli obiettivi (a) e (b)). Il risultato conseguito ha la stessa valenza di quello di un appello ufficiale.

     

    PROVE DI FINE CORSO

    1. Prova teorica di programmazione imperativa. Si tratta di un compito scritto, valutato in trentesimi (V1), in cui è richiesta la scrittura di due metodi in C++. Gli studenti hanno facoltà di ripetere tale prova scritta al fine di migliorare la votazione conseguita; in tal caso la votazione precedente viene annullata d’ufficio al momento della consegna del nuovo compito svolto dallo studente. La votazione (V1) si intende accettata se lo studente partecipa ad una qualsiasi prova di laboratorio (2).

    2. Prova pratica di laboratorio. Si tratta di un esercizio di programmazione orientata agli oggetti da sviluppare in C++ all’elaboratore. La prova è giudicata sufficiente o insufficiente a seconda che l’output del codice prodotto sia esatto o non esatto; ad essa è associata una votazione (V2), nel seguente modo: a) in caso di voto 0, +1 oppure +2 la prova si considera superata; b) se la prova non viene superata il voto assegnato sara’ -1; c) infine il docente puo’ assegnare, a propria discrezione, il voto -2 pur ammettendo lo studente alla terza ed ultima prova. Il caso c) puo’ presentarsi nel caso in cui la valutazione dello elaborato sia ``bordeline’’, ovvero la prova non e’ del tutto sufficiente ma si ritiene che lo studente possa affrontare il colloquio orale; tuttavia nel caso c) lo studente puo’ scegliere di ripetere la prova di laboratorio in un prossimo appello (in questo caso il voto sara’ -1).

    Prova teorica di programmazione orientata agli oggetti. Si tratta di un colloquio, valutato in trentesimi (V3), che verte sui concetti tipici della OOP ed in cui è richiesta la modellazione di software tramite diagrammi UML delle classi. La votazione finale, espressa in trentesimi, è così calcolata (V1+V3)/2 + (V2- P) , dove P è il numero di prove di laboratorio (2) non superate.


Esempi di domande e/o esercizi frequenti

  • PROGRAMMAZIONE I

    Prove scritte AA 18/19 ed esercizi di preparazione alle prove scritte

    1. Raccolta di esercizi di preparazione alle prove scritte PDF
    2. Prova scritta 6 Dicembre 2018 (prova in itinere) PDF

    Prove di laboratorio AA 18/19 ed esercizi di preparazione alle prove di laboratorio

    • Prova di laboratorio assegnata il 14 Dicembre 2018 (classe template e overloading operatore []. PDF
    • Prove di laboratorio assegnate il 15 Febbraio 2019.
    • Prove di laboratorio assegnate il 28 Febbraio 2019.
    • Prove di laboratorio assegnate il 29 Aprile 2019.
    • Prove di laboratorio assegnate il 30 Aprile 2019.
    • Prova di laboratorio mai assegnata (esempio aggregazione/composizione e overloading operatore inserimento). PDF
    • Prova di laboratorio senza data (classi template e operatore unario postfisso). PDF NOTA: I costruttori vanno implementati con specificatore di accesso public
  • LABORATORIO

    Prove scritte AA 18/19 ed esercizi di preparazione alle prove scritte

    1. Raccolta di esercizi di preparazione alle prove scritte PDF
    2. Prova scritta 6 Dicembre 2018 (prova in itinere) PDF

    Prove di laboratorio AA 18/19 ed esercizi di preparazione alle prove di laboratorio

    • Prova di laboratorio assegnata il 14 Dicembre 2018 (classe template e overloading operatore []. PDF
    • Prove di laboratorio assegnate il 15 Febbraio 2019.
    • Prove di laboratorio assegnate il 28 Febbraio 2019.
    • Prove di laboratorio assegnate il 29 Aprile 2019.
    • Prove di laboratorio assegnate il 30 Aprile 2019.
    • Prova di laboratorio mai assegnata (esempio aggregazione/composizione e overloading operatore inserimento). PDF
    • Prova di laboratorio senza data (classi template e operatore unario postfisso). PDF NOTA: I costruttori vanno implementati con specificatore di accesso public