COMPUTER SCIENCE FOR PHYSICS

Anno accademico 2020/2021 - 2° anno - Curriculum PHYSICS APPLIED TO CULTURAL HERITAGE, ENVIRONMENT AND MEDICINE
Docente: Marco RUSSO
Crediti: 6
SSD: INF/01 - INFORMATICA
Organizzazione didattica: 150 ore d'impegno totale, 100 di studio individuale, 35 di lezione frontale, 15 di laboratorio
Semestre:

Obiettivi formativi

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 e dell'intelligenza artificiale;
  • 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.

Should the circumstances require online or blended teaching, appropriate modifications to what is hereby stated may be introduced, in order to achieve the main objectives of the course.


Prerequisiti richiesti

Informatica e laboratorio


Frequenza lezioni

Obbligatoria


Contenuti del corso

Dalla programmazione strutturata agli oggetti

- Rivisitazione di variabili,indirizzi, array e puntatori in C.

- Puntatori a funzioni

- Il passaggio dei valori alle funzioni ed i riferimenti

- Allocazione dinamica della memoria

- La creazione delle librerie, headers, object files e linking.

- Il concetto di programmazione ad oggetti applicato a un qualsiasi linguaggio di programmazione

- Il concetto di riusabilità del codice e di modificabilità dello stesso

- Esempi pratici di oggetti in C.

- Classi, data hiding e tipi di dato astratto

- Membri a livello di classe

- Costruttori e distruttori degli oggetiti

- Ereditarietà

- Polimorfismo

- Esempi di programmazione di oggetti di tipo: pila, coda ed albero.

 

Cenni di tecniche di intelligenza artificiale

- Fuzzy Logic

- Reti Neurali

- Clustering

- Algoritmi genetici

- Programmazione genetica

- Applicazioni nel campo della Fisica


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
1La prima parte del corso e' obbligatoria. 
2La seconda e' facoltativa 

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