Appunti OOP Cpp Matlab v2009d

download Appunti OOP Cpp Matlab v2009d

of 97

  • date post

    06-Apr-2016
  • Category

    Documents

  • view

    13
  • download

    1

Embed Size (px)

description

Appunti per la programmazione a oggetti C++ e Matlab

Transcript of Appunti OOP Cpp Matlab v2009d

  • DRAFT

    ver.2009.d

    Cop

    yright

    A.D

    eMarco

    Agostino De Marco

    Appunti di programmazionea oggetti in C++ e Matlab

    Maggio 2009ver. 2009.d

  • DRAFT

    ver.2009.d

    Cop

    yright

    A.D

    eMarco

  • DRAFT

    ver.2009.d

    Cop

    yright

    A.D

    eMarco

    Indice

    Introduzione 5

    I Introduzione alla programmazione a oggetti 9

    1 Tecniche di programmazione supportate dal C++ 111.1 Paradigmi di programmazione . . . . . . . . . . . . . . . . . . . . . . . 111.2 Programmazione procedurale . . . . . . . . . . . . . . . . . . . . . . . . 12

    1.2.1 Procedure e funzioni . . . . . . . . . . . . . . . . . . . . . . . . 131.2.2 Parametri di scambio e campi di visibilit . . . . . . . . . . . . . 131.2.3 Hello world! . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.2.4 Un semplice programma C++ con procedure . . . . . . . . . . . 17

    1.3 Programmazione modulare . . . . . . . . . . . . . . . . . . . . . . . . . 181.3.1 Creare moduli attraverso gli spazi dei nomi . . . . . . . . . . . . 191.3.2 Lo spazio dei nomi della libreria standard . . . . . . . . . . . . . 201.3.3 Compilazione separata . . . . . . . . . . . . . . . . . . . . . . . 211.3.4 Gestione delle eccezioni . . . . . . . . . . . . . . . . . . . . . . 23

    1.4 Astrazione dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251.4.1 Tipi definiti dallutente . . . . . . . . . . . . . . . . . . . . . . . 251.4.2 Tipi concreti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311.4.3 Tipi astratti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.4.4 Funzioni virtuali . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    1.5 Programmazione orientata agli oggetti . . . . . . . . . . . . . . . . . . . 411.5.1 Un esempio: laerodinamica di un velivolo completo . . . . . . . 411.5.2 Dalle classi concrete alle gerarchie di classi . . . . . . . . . . . . 46

    1.6 Cosa non abbiamo detto? . . . . . . . . . . . . . . . . . . . . . . . . . . 49

    2 Ancora sulla programmazione in C++ 512.1 Elementi di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    2.1.1 Interfaccia dei programmi con il sistema operativo . . . . . . . . 522.1.2 Le funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542.1.3 Tipi nativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.1.4 Il preprocessore e le unit di traduzione dei programmi . . . . . . 55

    2.2 Il mondo delle classi e degli oggetti . . . . . . . . . . . . . . . . . . . . 592.2.1 Tipi definiti dallutente e terminologia . . . . . . . . . . . . . . . 592.2.2 Le strutture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602.2.3 Dalle strutture alle classi . . . . . . . . . . . . . . . . . . . . . . 62

  • DRAFT

    ver.2009.d

    Cop

    yright

    A.D

    eMarco

    4 Indice

    2.3 La libreria standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622.4 Le librerie Boost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622.5 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

    2.5.1 Una classe completa per la lettura dati da file . . . . . . . . . . . 632.6 Come imparare il C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

    3 Strumenti di sviluppo 693.1 Il Compilatore gcc in ambiente GNU/Linux o Cygwin . . . . . . . . . . 69

    3.1.1 Il progetto GNU . . . . . . . . . . . . . . . . . . . . . . . . . . 693.1.2 I passi della compilazione . . . . . . . . . . . . . . . . . . . . . 703.1.3 Lutilit make . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    3.2 Ambienti integrati di sviluppo (IDE) . . . . . . . . . . . . . . . . . . . . 713.2.1 Lambiente di sviluppo Microsoft Visual Studio . . . . . . . . . . 723.2.2 Lambiente di sviluppo Code::Blocks . . . . . . . . . . . . . . . 72

    II Programmazione a oggetti con Matlab 77

    4 Una panoramica su Matlab 794.1 Elementi di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794.2 Toolboxes e Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804.3 Sessioni di lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814.4 Usare lhelp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844.5 Nozioni e notazioni fondamentali . . . . . . . . . . . . . . . . . . . . . . 84

    4.5.1 Le variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844.5.2 Matrici e vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.5.3 Altri tipi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.5.4 Le funzioni in Matlab . . . . . . . . . . . . . . . . . . . . . . . . 88

    4.6 Operazioni di Input / Output . . . . . . . . . . . . . . . . . . . . . . . . 91

    5 Programmazione a oggetti in Matlab 935.1 Strutture dati di Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . 935.2 Classi e oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945.3 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

    A. De Marco

  • DRAFT

    ver.2009.d

    Cop

    yright

    A.D

    eMarco

    Introduzione

    Questo non un manuale di programmazione C++ o di Matlab, ci vorrebbe troppo tempoe impegno per scriverne uno vero. Ho solo raccolto alcune esperienze maturate nel corsodegli ultimi anni di lavoro con questi linguaggi. Alcuni esempi sono molto semplici, madovrebbero servire a mettere in luce alcuni degli aspetti pi importanti che riguardano laprogrammazione a oggetti.

    Di sicuro questi appunti non sono una guida per il principiante, anche se ci sono tuttele indicazioni fondamentali su come reperire informazioni sulluso corretto dei comandi;tuttavia anche chi agli inizi potrebbe trovare qualche spunto interessante per avvicinarsial mondo delle classi, degli oggetti, dei puntatori e della programmazione generica.

    La trattazione di alcune tecniche di programmazione orientata agli oggetti si serve deilinguaggi C++ e Matlab. Ovviamente, esistono gi numerosi manuali che si occupanodi C++, sia a livello introduttivo che a livello avanzato. Anche sullambiente Matlab esul suo linguaggio di programmazione esiste una vastissima possibilit di documentarsi,dal potente sistema di help online ai numerosi manuali e libri di testo. Va osservato perche i manuali di livello avanzato, in particolare per il C++, molto spesso sono destinati aprogrammatori professionisti o, in generale, alla platea degli utenti informatici di media edelevata esperienza. Il lettore trover una lista dei manuali pi importanti nella bibliografia,primo fra tutti il libro di Bjarne Stroustrup [1], il ricercatore di origine danese che haideato il linguaggio.

    pur vero, daltra parte, che per gli studenti di ingegneria dellarea industriale (mec-canica, aerospaziale, navale, chimica, gestionale, eccetera) non facile trovare manualiche trattino la programmazione in C++ in maniera adeguata al loro percorso formativo.Spesso i corsi di informatica impartiti ai primi anni delle facolt di ingegneria finisconoper utilizzare il linguaggio C++ come mero strumento di codifica, con il quale mostraregli aspetti di base del mondo della programmazione dei calcolatori elettronici. Ad esem-pio, quasi sempre si propone lesercizio di implementare algoritmi di ordinamento di unvettore o di manipolazione di matrici. Per la soluzione di simili problemi nei corsi diinformatica si propone spesso il C++ perch facile trovare strumenti di lavoro interattivigratuitamente scaricabili da internet come, ad esempio, Dev-C++ [29], Code::Blocks[28] o Microsoft Visual C++ (200X) Express [27] che permettono di imparare a com-pilare codice C++ in poco tempo e offrono la possibilit di mettere subito in pratica iconcetti generali della programmazione. Sia chiaro, ci cosa buona e giusta, anzi assolutamente necessario per i programmatori alle prime armi, e rientra negli scopi deicorsi sui fondamenti dellinformatica. Ci che gli studenti spesso non arrivano a com-prendere, per, la straordinaria potenza di un linguaggio come il C++, che supporta laprogrammazione a oggetti e permette di esplorare delle tecniche di programmazione al-lo stesso tempo avanzate ed eleganti. Non raro ascoltare uno studente del terzo anno

  • DRAFT

    ver.2009.d

    Cop

    yright

    A.D

    eMarco

    6 Introduzione

    di ingegneria aerospaziale che dichiara di aver studiato il C++ ma nega di conoscere ilconcetto di classe. Per chi conosce la programmazione a oggetti ci risulta quanto menosorprendente. Da questo punto di vista ho ritenuto necessario, dunque, proporre uno-perazione di ampliamento delle conoscenze informatiche del lettore meno esperto, macomunque in possesso delle nozioni di base sulla programmazione, introducendo con imodi dellingegnere la programmazione a oggetti, prima in C++ e successivamente nellinguaggio Matlab (che la maggioranza degli ingegneri conosce).

    Come poter fare esperienza al riguardo? Ponendosi, ad esempio, un problema concre-to e decidendo di risolverlo se il caso di farlo con una tecnica di programmazioneorientata agli oggetti, attraverso un programma di calcolo in C++ o in Matlab.

    La prima parte di questi appunti tratta della programmazione orientata agli oggetti(Object-Oriented Programming, OOP) e si serve del linguaggio C++ sia per spiegarne ivari aspetti sia per fornire direttamente degli esempi pratici.

    La seconda parte, dando per noti i principi di base della programmazione Matlab, nepresenta le caratteristiche (alquanto recenti) che permettono di costruire classi e svilup-pare programmi a oggetti.

    Ho cercato di essere il meno formale possibile e mi sono limitato a dare esempi con-creti, con qualche omissione di parti di codice troppo lunghe da riportare integralmente enon fondamentali