Dipartimento di fisica “E



Scaricare 1.8 Mb.
Pagina1/24
12.12.2017
Dimensione del file1.8 Mb.
  1   2   3   4   5   6   7   8   9   ...   24




UNIVERSITA’ DEGLI STUDI ROMA TRE

DIPARTIMENTO DI FISICA “E. AMALDI”



Dispense del corso di

Laboratorio di Calcolo II



A cura di

Severino Bussino




Introduzione

Il presente corso si prefigge lo scopo di insegnare i concetti della programmazione Object Oriented attraverso l’introduzione del linguaggio C++. In questo è unico nel suo genere in quanto non si appoggia su concetti appartenenti a linguaggi non orientati agli oggetti come il C, ma introduce direttamente l’uso delle classi del C++: questa metodologia di studio e’ stata gia’ utilizzata nel modulo di calcolo del corso di Esperimentazioni di Fisica III.

Quasi tutti i manuali di C++ sono divisi in due parti: la prima parte introduce il linguaggio C, la seconda consiste in una sorta di estensione del linguaggio C per la programmazione Object Oriented, ovvero il C++. Queste dispense intendono rivedere questa impostazione facendo da traccia per una comprensione delle tecnologie di programmazione ad oggetti senza la necessità di passare attraverso un linguaggio procedurale.

Le dispense sono suddivise in tre parti:

i) Introduzione al linguaggio C++ e alla Programmazione ad Oggetti

Questa parte sara’ dedicata allo studio del linguaggio C++ attraverso le idee di fondo della programmazione ad Oggetti. Verranno introdotti i concetti fondamentali della programmazione ad oggetti, verranno discusse le loro applicazioni ed infine verra’ mostrato come implementare ciascun aspetto nel linguaggio C++.



  1. Elementi di linguaggio UML e di strutture riutilizzabili

In questa seconda parte verranno introdotti gli elementi base del linguaggio UML e saranno indicate alcune strutture riutilizzabili, mostrando anche la loro implementazione in linguaggio C++. Scopo di questa seconda parte e’ soprattutto quello di mostrare concretamente la flessibilita’ delle tecniche di programmazione ad oggetti ed i vantaggi che derivano da una attenta progettazione dell’insieme.

  1. Esercizi di Ricapitolazione

Nella terza parte sono raccolti alcuni esercizi di ricapitolazione, che consistono principalmente nelle prove di esame assegnate nelle sessioni precedenti.
Il corso comprende una parte di lezioni frontali ed una parte di Esercitazioni di Laboratorio: le Esercitazioni di Laboratorio seguono lo stesso percorso concettuale delle lezioni in aula, cercando di indicare le potenzialita’ dei vari strumenti presenti all’interno della programmazione ad oggetti ed indicandone le modalita’ di implementazione nel linguaggio C++. Le Esercitazioni di laboratorio potranno essere inserite in Appendice a complemento delle dispense.

Le dispense evidentemente non esauriscono l'insieme dei temi oggetto del corso, ma dovranno essere integrate con la discussione in aula, con le Esercitazioni di Laboratorio e con un manuale di C++ classico, da utilizzarsi quasi esclusivamente come riferimento per la sintassi del linguaggio. In particolare in queste dispense non verranno trattati argomenti riguardanti:



  1. La grafica

  2. Le applicazioni multimediali

  3. Le tecniche di dispaccio di messaggi tra applicazioni o all’interno di una applicazione

  4. Le tecnologie CORBA e le altre metodologie avanzate

Tali argomenti, infatti, esulano dagli scopi di questo corso e potranno essere studiati autonomamente dagli studenti particolarmente interessati: il materiale contenuto in questo corso è ritenuto sufficiente per permettere ad uno studente di affrontare in maniera autonoma temi piu' complessi.
Ciascun argomento verra' studiato presentando le problematiche di insieme, indicando gli obiettivi che si vogliono raggiungere e delineando la strategia utilizzata per arrivare ad essi. Successivamente si mostrera' l'implementazione nel linguaggio C++ del particolare tema oggetto di studio. Lo svolgimento e la successione dei temi affrontati verranno suggeriti anche dallo studio di una simulazione del moto dei pianeti nel Sistema Solare, che costituira’ un problema-esempio per tutta la prima parte del corso. Altri esempi, tratti dal corso di Fisica Generale, trattandosi di un corso destinato ai fisici, aiuteranno a comprendere meglio il significato dei diversi argomenti oggetto di studio. Anche la proposta di esercizi di livello crescenti di difficolta' permettera' di comprendere meglio ciascun argomento.
La sintassi del C++ non verra' mai trattata esplicitamente, ma sara' posta in appendice a ciascun capitolo, come un elenco di vocaboli al termine di una lezione di lingue. La sintassi del linguaggio non e' l'argomento principale del corso, indirizzato invece a fornire gli strumenti concettuali a chi utilizzera' il computer come strumento di calcolo scientifico o per applicazioni avanzate.
Ringrazio il Dr Giovanni Organtini, che mi ha permesso di attingere liberamente alle sue dispense del modulo di Calcolo del Corso di Esperimentazioni di Fisica III, dispense che sono state alla base dei primi corsi di C++ per gli studenti di Fisica a Roma Tre.


Parte Prima


Introduzione al linguaggio C++

e alla

Programmazione ad Oggetti

Le caratteristiche fondamentali delle moderne applicazioni di calcolo


Un esperimento di Alte Energie della prossima generazione, all’anello di accumulazione LHC del Cern, sara’ costituito da un rivelatore con circa 1.000.000 di canali di lettura, progettato per studiare eventi di interazione protone-antiprotone, con energia di 14 Tev nel c.m., con un incrocio dei fasci (bunch-crossing) ogni 25 nsec. Il flusso totale di dati e’ di circa 40 Tbyte/sec, e per ridurlo al un flusso compatibile con il sistema di memorizzazione degli eventi, selezionando gli eventi potenzialmente interessanti (trigger di III livello) e’ necessario un insieme di circa 1000 calcolatori (PC) dell’ultima generazione.

Un esperimento per lo studio delle sorgenti di raggi gamma e per lo studio dei raggi cosmici, in corso di installazione in Tibet, l’apparato ARGO-YBJ, avra’ un flusso di dati memorizzati, da utilizzare per l’analisi, di circa 1 Tbyte/mese. Questi dati, per essere memorizzati e gestiti, hanno bisogno non solo di uno spazio sufficiente (qualche Terabyte), ma anche di un certo numero di CPU che siano in grado di gestire l’accesso ad una cosi’ grande quantita’ di informazione.

Lo studio del genoma umano ha richiesto l’impegno di risorse di calcolo superiori a quelle impegnate in un tipico esperimento di Fisica, con la creazione di banche dati e la decodifica di milioni di sequenze di proteine, con una crescita esponenziale nel numero di sequenze decodificate.

Altri esempi di strutture di calcolo che richiedono una elevata organizzazione si ritrovano in altri campi non strettamente di tipo scientifico: l’utilizzo di telefonini cellulari richiede la gestione di milioni di clienti, ai quali devono essere associati codici di accesso e canali di trasmissione, le reti bancarie per l’accesso ai servizi Bancomat devono fornire in tempo reale a milioni di utenti la possibilita’ di effettuare operazioni sui conti correnti, ecc.



Quali requisiti devono soddisfare le architetture di programmazione per permettere di affrontare problemi di tale complessita’? Programmi di tale ampiezza richiedono poi il contributo di molte persone e, poiche’ lo sviluppo richiede tempo, la possibilita’ di utilizzare anche piattaforme diverse o versioni successive dello stesso sistema operativo. Possiamo sintetizzare alcune tra le richieste piu’ importanti:

  1. Robustezza

Il programma deve essere “protetto” per cio’ che riguarda l’accesso dell’utilizzatore all’insieme dei dati: l’utilizzatore deve poter accedere ai dati di cui ha bisogno, senza il rischio di danneggiare l’integrita’ dell’intero sistema (pensate all’esempio del bancomat, alla gestione di una rete ferroviaria oppure al fisico che sta analizzando i dati di un esperimento e che non deve avere alcuna possibilita’ di corrompere i dati sperimentali)

  1. Possibilita’ di ri-utilizzo del codice

La complessita’ del programma e l’impegno che ne consegue dal punto di vista delle risorse umane ed economiche, richiede che parti del codice molto simili tra loro possano essere facilmente adattate allo scopo finale. Questo non solo rende il lavoro piu’ semplice, ma anche ne aumenta l’affidabilita’, poiche’ vengono ri-utilizzate parti di codice che gia’ sono state valutate come funzionanti.

  1. Portabilita’

L’utilizzo di diverse piattaforme o di versioni successive di uno stesso sistema operativo richiede che con una sufficiente semplicita’ un programma possa essere facilmente trasportato da un sistema operativo ad un altro. L’utilizzo di tecnologie specifiche e la possibilita’ di accesso a server remoti tramite Web ha portato a sviluppare linguaggi in cui la portabilita' e’ la caratteristica principale.

  1. Flessibilita’ e Organizzazione del Codice (Semplicita’)

Un codice molto complesso deve essere “semplice” da gestire e da analizzare. Sembra un paradosso, ma non e’ cosi’: piu’ il codice e’ complesso, piu’ le tecniche di gestione e l’organizzazione interna devono permettere con una certa facilita’ l’evoluzione del codice, il suo controllo e nuove implementazioni “trasparenti” rispetto al codice dell’utilizzatore e alle versioni precedenti.
Dopo aver identificato gli obiettivi fondamentali di una moderna architettura di programmazione, vogliamo capire per quali motivi ed in quali modi la programmazione ad oggetti permette di raggiungere, in varia misura, gli obiettivi indicati.




Condividi con i tuoi amici:
  1   2   3   4   5   6   7   8   9   ...   24


©astratto.info 2019
invia messaggio

    Pagina principale