PROGRAMMAZIONE AD OGGETTI E BIG DATA

Anno accademico 2022/2023 - Docente: Marco RUSSO

Risultati di apprendimento attesi

Lo studente acquisirà:

  • capacità di sviluppo di programmi software ad oggetti;
  • una certa conoscenza degli strumenti informatici avanzati di uso corrente nei settori della ricerca di base e applicata; 
  • capacità di utilizzare lo strumento della analogia per applicare soluzioni conosciute a problemi nuovi (problem solving);
  • capacità di progettare e di mettere in atto procedure sperimentali e teoriche per risolvere problemi della ricerca accademica e industriale o per il miglioramento dei risultati esistenti;
  • capacità di lavorare con crescenti gradi di autonomia, anche assumendo responsabilità nella programmazione e nella gestione di progetti;
  • competenze nella comunicazione in lingua italiana e in lingua inglese nei settori della programmazione ad oggetti;
  • capacità di presentare una propria attività di ricerca o di rassegna ad un pubblico di specialisti o di profani. 

Inoltre, in riferimento ai cosiddetti Descrittori di Dublino, questo corso contribuisce a acquisire le
seguenti competenze trasversali:

Conoscenza e capacità di comprensione (knowledge and understanding):

L'obiettivo primario del corso è individuato nell’acquisizione da parte degli studenti della “filosofia” della programmazione ad oggetti a prescindere dal linguaggio di programmazione. Altro obiettivo è quello di comprendere i colli di bottiglia del software da realizzare al fine di ottimizzare in termini di velocità/memoria. Ulteriore obiettivo e quello di sapere divulgare in forma scritta la conoscenza acquisita e/o sviluppata attraverso i propri software. In ultimo si intende, in maniera facoltativa, fornire i rudimenti dell'intelligenza artificiale.

Capacità di applicare conoscenza e comprensione (applying knowledge and understanding),

Si intende fornire agli studenti le seguenti abilità:

  1. Tradurre in codice ad oggetti i problemi da risolvere o i fenomeni da simulare;

  2. Progettare, descrivere ed implementare programmi e librerie ad oggetti;

  3. Saper usare gli strumenti di base per la programmazione ad oggetti;

  4. Comprendere ed analizzare codice ad oggetti anche in termini di efficienza;

Autonomia di giudizio (making judgements).

Attraverso l'esame di numerosi esempi di codice 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 ad oggetti ed ottimizzate in velocità e/o memoria.

Abilità comunicative (communication skills).

lo studente acquisirà le necessarie abilità comunicative e di appropriatezza espressiva nell'impiego del linguaggio verbale tecnico nell'ambito della programmazione ad oggetti degli elaboratori. In maniera facoltativa acquisirà competenze comunicative acne nel campo dell'intelligenza artificiale.

Capacità di apprendimento (learning skills).

Il corso intende fornire al discente le necessarie metodologie teoriche e pratiche da mettere in campo in contesti di ricerca e professionali con particolare attenzione all'ambito fisico.

Modalità di svolgimento dell'insegnamento

Lezioni frontali ed esercitazioni pratiche

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato, al fine di rispettare il programma previsto e riportato nel syllabus.

Prerequisiti richiesti

Conoscenza molto approfondita del linguaggio C con particolare riguardo ai puntatori.

Frequenza lezioni

Obbligatoria

Contenuti del corso

* Definizione di Big Data
  * Aspetti del Big Data affrontati in questo corso:
    o Attraverso l'ottimizzazione dei programmi in velocità e/o memoria
      si possono ottenere enormi guadagni!
      = Ottimizzazione di codice già scritto.
      = Ottimizzazione del codice già in fase di progettazione dello stesso.
    o Gerarchia di memorie.
     > Accesso ottimizzato alla RAM
     > Programmare per sfruttare la CACHE.
     > Lookup tables
    o Come sfruttare bene o male i processori SIMD e/o le GPU.
    o Calcolo parallelo: quando si e quando no.

- La programmazione ad oggetti: una stile di programmazione indipendente dal linguaggio
  * Dal C strutturato al C ad oggetti.
    > Rivisitazione di variabili,indirizzi, array e puntatori in C.
    > Il passaggio dei valori alle funzioni e discussione sui riferimenti
    > Puntatori a funzioni
    > Allocazione dinamica della memoria
    > La creazione delle librerie, headers, object files e linking.
    > Cosa significa programmare ad oggetti
    > Il concetto di riusabilità del codice e di modificabilità dello stesso
    > Classi, data hiding e tipi di dato astratto
    > Membri a livello di classe
    > Costruttori e distruttori degli oggetti
    > Ereditarietà
    > Polimorfismo
    > Esempi di programmazione di oggetti di tipo: pila, coda ed albero  
    > Esempi in cui si implementano le classi con trade-off differenti
      memoria/velocità e confronto con il C++.      
  * Una volta appresi a fondo i concetti basilari della programmazione ad
    oggetti e' facile passare a qualsiasi linguaggio nativo ad oggetti.
    Un esempio il C++
    > Pro e contro di un linguaggio nativo ad oggetti
    > Veloce carrellata dei concetti precedentemente illustrati
      tutti implementati in C++
    > Ulteriori aspetti del C++: overloading operatori, template, etc.

Testi di riferimento

Appunti forniti a lezione. Tali appunti, il codice sviluppato a lezione e qualunque altro materiale utile per il corso sarà disponibile sul sito del docente: superpippo.ct.infn.it/~marco/didattica.

Programmazione del corso

 ArgomentiRiferimenti testi
1TuttiAppunti e dispense forniti dal docente

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Tesina pratica svolta in accordo col docente. Concordato l'argomento, in totale liberta' temporale da parte dello studente, si procede alla realizzazione di un opportuno codice ad oggetti in C. Assieme al codice si prevede la consegna di una relazione scritta preferibilmente in latex. Nella valutazione finale dello studente si terranno in considerazione sia il codice che la relazione.

Esempi di domande e/o esercizi frequenti

Vedere su superpippo.ct.infn.it/~marco o sul gruppo fb che di anno in anno viene creato