Corso di Programmazione ad oggetti

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Corso di Programmazione ad oggetti"

Transcript

1 Corso di Programmazione ad oggetti Ereditarietà e polimorfismo a.a. 2008/2009 Claudio De Stefano 1

2 Costruttori, distruttori ed ereditarietà Quando si usa l'ereditarietà bisogna tenere conto dei costruttori e distruttori. È infatti possibile che una classe base, una classe derivata o entrambe contengano una funzione costruttore e/o distruttore Vi sono due problemi principali derivanti dall'uso di costruttori e distruttori quando si usa l'ereditarietà. In quale momento vengono chiamate le funzioni costruttore e distruttore della classe base e di quella derivata? Come fare per passare per passare parametri alle funzioni costruttore della classe base? In generale quando si crea un oggetto di una classe derivata si chiama prima il costruttore della classe base e poi quello della classe derivata. Per quanto riguarda la distruzione. Accade l'inverso: viene prima chiamato il distruttore della classe derivata e poi quello della classe base. 2

3 Costruttori, distruttori ed ereditarietà: esempio class Base { Base(){cout<< costruzione di base ;<<endl ~Base(){cout<< distruzione di base ;<<endl class Derived { Derived(){cout<< costruzione di derived <<endl; ~Derived(){cout<< distruzione di derived <<endl; #include derived.h main() { Derived d; OUTPUT costruzione di base costruzione di derived distruzione di base distruzione di derived 3

4 Costruttori, distruttori ed ereditarietà Il risultato dell'esempio precedente può essere generalizzato dicendo che i costruttori sono eseguiti seguendo l'ordine di derivazione, mentre i distruttori sono eseguiti in ordine inverso rispetto a quello di derivazione. Se si riflette un attimo, questa scelta è praticamente obbligata. Infatti è possibile che il costruttore della classe derivata usi alcuni dei membri inizializzati dal costruttore della classe base. E si aspetta che tali valori siano stati precedentemente iniziliazzati come previsto dal costruttore della classe base. Per quanto riguarda i distruttori la motivazione è la stessa, il distruttore della classe derivata potrebbe tentare di accedere ad un'estensione della classe base che viene distrutta dal distruttore della classe base. 4

5 Passaggio di argomenti a costruttori di classe base La forma generale di dichiarazione estesa di un costruttore di una classe derivata è la seguente: costruttore_derivata(elenco-argomenti): base1(elencoargomenti), base2(elenco-argomenti),... basen(elenco-argomenti) { // Corpo del costruttore derivato... } 5

6 Gerarchie di classi Base Derived1 Derived2 Derived1 e Derived2 sono specificazioni diverse di Base (ad esempio Derived1 e Derived2 aggiungono servizi diversi). Diritti di accesso: Variabili membro: in Base sono protette, in Derived1 e Derived2 sono private; Funzioni membro: sono pubbliche; Modalità di derivazione: pubblica 6

7 Gerarchie di classi Base Derived1 Derived2 Derived1 e Derived2 sono successive specificazioni di Base (per raffinamento ). Diritti di accesso: Variabili membro: in A e in B sono protette, in C sono private Funzioni membro: sono pubbliche Modalità di derivazione: pubblica 7

8 I puntatori a tipi derivati In generale, un puntatore di un dato tipo non può puntare ad un oggetto di un tipo diverso. Vi è pero un'importante eccezione a questa regola che riguarda le classi derivate. Poniamo di avere le classi B e D, con D che deriva da B. In questa situazione, un putatore di tipo B* può anche puntare ad un oggetto di tipo D. Possiamo generalizzare la situazione precedente dicendo che: un puntatore ad una classe può anche essere utilizzato come puntatore ad un oggetto di una qualsiasi delle classi derivate da tale classe base. La regola inversa NON vale: un puntatore ad una classe derivata non può puntare ad oggetti della classe base. Inoltre, puntando ad un oggetto della classe derivata con un puntatore alla classe base è possibile accedere SOLO ai membri della classe base che sono stati importati dalla classe base. 8

9 Puntatori a tipi derivati: esempio class Base { protected: int i; void set_i(int a) {i=a;} int get_i() {return i; class Derived : public Base { int j; void set_j(int a) {i=a;} int get_j() {return i; Bp è dichiarato come puntatore alla classe Base, la quale non contiene le funzioni set_j e get_j. Pertanto il compilatore segnala un errore #include derived.h main() { Base *bp; Derived d; bp = &d; // OK bp->set_i(10); // OK cout<<endl<<bp->get_i(); // OK bp->set_j(1); // ERRORE! cout<<endl<<bp->get_j(); // ERRORE! 9

10 I puntatori a tipi derivati: accesso mediante casting Per risolvere la situazione vista alla slide precedente si può usare una conversione di tipo mediante casting: #include derived.h main() { Base *bp; Derived d; bp = &d;... ((derived *)bp)->set_j(1); // OK cout<<endl<<((derived *)bp)->get_j(); // OK 10

11 I puntatori a tipi derivati: aritmetica dei puntatori È importante ricordare che l'aritmetica dei puntatori fa riferimento al puntatore base. Per questo motivo, quando un puntatore base punta ad un oggetto derivato, l'incremento del puntatore non fa in modo che questo punti all'oggetto successivo, del tipo derivato. Al contrario esso punterà a quello che dovrebbe essere l'oggetto successivo del tipo base. Il seguente programma viene compilato, ma è semanticamente sbagliato #include derived.h main() { Base *bp; Derived d[2]; bp = d; d[0].set_i(1); d[1].set_i(2);. cout<<endl<<bp->get_i(); bp++; cout<<endl<<bp->get_i(); Equivale a bp = bp+ sizeof(base) Visualizza un valore casuale 11

12 Il Polimorfismo 12

13 Il polimorfismo POLIMORFISMO un interfaccia, più metodi 13

14 Il polimorfismo Il meccanismo del polimorfismo consente ad un'interfaccia di controllare l'accesso ad una classe generale di azioni. La specifica azione sarà selezionata in base alla particolare situazione in atto. L'utilizzazione di un'unica interfaccia aiuta a ridurre la complessità dei programmi. Sarà compito del compilatore automatizzare la selezione dell'azione specifica (ovvero il metodo), da applicare ad una specifica situazione. Il polimorfismo è supportato dal C++ sia al momento della compilazione (compiletime) che a tempo di esecuzione (run-time). 14

15 Il polimorfismo: esempio Un programma potrebbe definire tre tipi diversi di stack: uno per gli interi, uno per i caratteri e uno per i float. Grazie al polimorfismo sarà possibile usare un solo insieme di nomi (push, pop, ecc.) per accedere alle funzioni specifiche dei tre tipi di stack definiti. Ovviamente nel programma verranno implementate tre diverse funzioni per ogni specifica azione, ma il nome resterà lo stesso. Sarà poi il compilatore a selezionare automaticamente il tipo di funzione corretta sulla base del tipo di stack utilizzato. 15

16 Le funzioni virtuali Il polimorfismo viene realizzato in C++ per mezzo delle funzioni virtuali. Una funzione virtuale è una funzione membro dichiarata come virtual in una classe base e ridefinita in una classe derivata. Quando si eredita una classe contenente una funzione virtuale, la classe derivata ridefinisce la funzione virtuale secondo le proprie esigenze. Il compito principale della funzione virtuale definita nella classe base è quello di definire appunto al forma dell'interfaccia della funzione. Le ridefinizioni nelle classe derivate, invece, implementa le specifiche azioni relative alle situazioni gestite dalla classe derivata stessa. 16

17 Le funzioni virtuali Quando si accede alle funzioni virtuali, per mezzo dell'operatore. (punto), tali funzioni si comportano come qualsiasi altra funzione membro. La potenzialità delle funzioni virtuali, viene sfruttata quando si accede loro tramite puntatore(mediante l'operatore ->). Questo tipo di accesso consente di realizzare il polimorfismo run-time. In precedenza abbiamo visto che i puntatori alla classe base possono puntare a qualsiasi classe derivata dalla base. Quando un puntatore base punta ad un oggetto derivato che contiene una funzione virtuale, il C++ determina quale funzione chiamare sulla base del tipo di oggetto puntato. Questa determinazione viene eseguita run-time. Pertanto, al variare del tipo di oggetto derivato puntato, cambia anche la versione della funzione virtuale che verrà eseguita. 17

18 Le funzioni virtuali: esempio class Base { virtual void show() { cout<<endl<< oggetto della classe Base ; class Derived1 : public Base{ void show() { cout<<endl<< oggetto della classe Derived1 ; class Derived2 : public Base{ void show() { cout<<endl<< oggetto della classe Derived2 ; 18

19 Esempio di polimorfismo run-time #include derived.h main() { Base *bp, b; Derived1 d1; Derived1 d2; int choice; cout<<endl<< a quale oggetto vuoi visualizzare? cout<<endl<< 0: Base ; cout<<endl<< 1: Derived1 ; cout<<endl<< 2: Derived2 ; cin>>choice; switch (choice) { case (0): bp = &b; break; case (1): bp = &d1; break; case (2): bp = &d1; break; } bp->show(); 19

20 Esempio di polimorfismo compile-time #include derived.h main() { Base b; Derived1 d1; Derived1 d2; int choice; cout<<endl<< <quale oggetto vuoi visualizzare cout<<endl<< 0: Base ; cout<<endl<< 1: Derived1 ; cout<<endl<< 2: Derived2 ; cin>>choice; switch (choice) { case (0): b.show(); break; case (1): d1.show(); break; case (2): d2.show(); break; } 20

21 Differenze tra overloading di funzioni e funzioni virtuali A prima vista, il meccanismo delle funzioni virtuali sembra simile a quello dell'overloading, ma di fatto si tratta di meccansimi totalmente diversi. La principale differenza sta nel fatto che il prototipo di una funzione virtuale deve corrispondere esattamente a quello della classe base. Nel caso dell'overloading delle funzioni, invece, il numero e il tipo di parametri deve modificare. Infatti è proprio questa differenza nel numero e nel tipo di parametri a guidare il compilatore nella determinazione della funzione giusta. Un'altra importante differenza sta nel fatto che le funzioni costruttore, non possono essere virtuali. 21

22 Ereditarietà dell'attributo virtual Quando viene ereditata una funzione virtuale viene ereditata anche la sua natura virtuale. Questo significa che quando una classe derivata che abbia ereditato una funzione virtuale viene a sua volta utilizzata come classe base per un ulteriore classe derivatal funzione resta virtuale. class Base { virtual void show() { cout<<endl<< oggetto della classe Base ; class Derived1 : public Base{ void show() { cout<<endl<< oggetto della classe Derived1 ; class Derived2 : public Derived1{ void show() { cout<<endl<< oggetto della classe Derived2 ; 22

23 Le funzioni virtuali gerarchiche È importante osservare che non è obbligatorio ridefinire una funzione virtuale. Infatti, se una classe derivata non ridefinisce una funzione virtuale, quando un oggetto della classe derivata tenterà di accedere a tale funzione, verrà utilizzata la funzione definita nella classe base. La regola generale è che quando una classe derivata non ridefinisce una funzione virtuale, verrà utilizzata la prima ridefinizione presente in ordine inverso di derivazione. 23

24 Le funzioni virtuali gerarchiche: esempio 1 class Base { virtual void show() { cout<<endl<< oggetto della classe Base ; class Derived1 : public Base{ void show() { cout<<endl<< oggetto della classe Derived1 ; class Derived2 : public Base{ // Non viene sostituita show() della base Base *bp; Derived2 d2; bp = &d2; bp->show(); Viene chiamata la show definita in base 24

25 Le funzioni virtuali gerarchiche: esempio 2 class Base { virtual void show() { cout<<endl<< oggetto della classe Base ; class Derived1 : public Base{ virtual void show() { cout<<endl<< oggetto della classe Derived1 ; class Derived2 : public Derived1{ // Non viene sostituita show() della Derived2 Base *bp; Derived2 d2; bp = &d2; bp->show(); Viene chiamata la show ridefinita in Derived1 25

26 Le funzioni virtuali pure Negli esempi precedenti abbiamo visto che quando una funzione non viene ridefinta in una classe derivata, viene impiegata la versione definita nella classe che la precede nell'ordine di derivazione. Spesso però accade che non vi è una definizione appropriata di una funzione virtuale all'interno della classe base. Ad esempio, una classe base potrebbe non essere in grado di definire l'oggetto in maniera sufficiente a consentire la definizione di una funzione nella classe base. Inoltre, in alcuni casi è necessario assicurarsi che tutte le classi derivate ridefiniscano una funzione virtuale. Per gestire questi due casi, il C++ prevede l'uso di funzioni virtuali pure. 26

27 Le funzioni virtuali pure Una funzione virtuale pura è una funzione virtuale che non viene definita all'interno della classe base Per definire una funzione viruale pura bisogna usaer la seguente sintassi: virtual Tipo1 nome_funzione(tipo2, p1, Tipo2 p2,...) = 0; Quando una funzione virtuale viene resa pura, ogni classe derivata DEVE fornire una propria definizione. La mancata ridefinizione della funzione virtuale pura nella classe derivata provoca una un errore di compilazione. 27

28 Le funzioni virtuali pure: esempio class Number { protected: int val; void set_val(int a){val = a; virtual void show() = 0; class Hextype : public Number{ void show(){ cout<<hex<<val; } class Dectype : public Number{ void show(){ cout<<val; } class Octtype : public Number{ void show(){ cout<<oct<<val; } output #include derived.h main() { Dectype d; Hextype h; Octtype o; cout<<endl; d.setval(20); d.show(); cout<<endl; h.setval(20); h.show(); cout<<endl; o.setval(20); o.show(); 28

29 Le classi astratte Una classe che contiene almeno una funzione virtuale pura è chiamata astratta. Poiché una classe astratta contiene una o più funzioni per le quali non è presente alcuna definizione, non è possibile crare oggetti di quel tipo. In pratica un classe astratta non può essere usata direttamente, ma può essere usata solo come base per definire classi derivate, che hanno appunto l'obbligo di implementare le funzioni virtuali pure ereditate. Osserviamo che anche se non è possibile creare oggetti di classe astratte, è però possibile definire puntatori a classi astratte, al fine di consentire il polimorfismo a run-time. 29

30 Uso delle funzioni virtuali pure Abbiamo visto che il polimorfismo consente di definire una classe generale di azioni e in cui l'interfaccia rimane costante e ogni derivazione definisce operazioni specifiche. In pratica è possibile definire una classe base da utilizzare per definire la natura dell'interfaccia di una classe generale (astratta). Ogni classe derivata implementerà le specifiche operazioni in relazione al tipo di dati impiegato da l tipo derivato. Il modo più efficace per sfruttare al meglio le potenzialità del polimorfismo prevede l'uso di: Funzioni virtuali; Classi astratte; Polimorfismo run-time; 30

31 Uso delle funzioni virtuali Utilizzando queste funzionalità è possibile passare da una gerarchia di classi che passi dal caso generale a quello specifico (dalla classe base a quelle derivate). Secondo questa filosofia, si definiscono tutte le funzionalità e i metodi di interfacciamento comuni all'interno della classe base. Nei casi in cui determinate azioni possono essere implementate solo dalla classe derivatasi utilizza una funzione virtuale. In pratica nella classe base si crea e si definisce tutto ciò che fa riferimento alla classe generale. Mentre i dettagli vengono implementati dalle classi derivate. 31

32 Uso delle funzioni virtuali: esempio Classe astratta class convert { protected: double ini, con; convert(double val){ ini = val;} void set_ini(double val){ ini = val;} double get_ini(){return ini;} double get_con(){return ini;} virtual void compute() = 0; class lit2gal : public convert{ lit2gal(double val): convert(val){} void compute(){ con = ini /3.7854; } class fah2cel : public convert{ fah2cel(double val): convert(val){} void compute(){ con = (ini-32)/1.8; } 32

33 Uso delle funzioni virtuali: esempio #include convert.h main() { convert *cp; lit2gal l2g; fah2cel f2c; int choice; cout<<endl<< <quale conversione vuoi fare? cout<<endl<< 1: litri -> galloni ; cout<<endl<< 2: Fahrenheit -> Celsius Derived2 ; cin>>choice; switch (choice) { case (1): cp = & l2g; break; case (2): cp = & f2c; break; } comp_conv(cp); void comp_conv(convert *c_ptr) { double tmp; cout<<endl<< digita valore da convertire: ; cin>>tmp; c_ptr->set_ini(tmp) c_ptr->compute(); cout<<endl<< il valore convertito è: ; cout<<c_ptr->get_conv(); 33

34 Funzioni virtuali: gestione di nuovi casi L'uso del polimorfismo semplifica notevolmente l'estensione dei programmi a nuovi casi. Esempio class feet2met : public convert{ feet2met(double val): convert(val){} void compute(){ con = ini /3.28; } 34

35 Uso del polimorfismo Un utilizzo importante del polimorfismo avviene nelle librerie di classi. È infatti possibile creare una libreria di classi generiche ed estendibili, utilizzabili da altri programmatori. Un altro programmatore, eredita la classe generale, che definise l'interfaccia e tutti gli elementi comuni a tutte le classi da essa derivate, aggiungendo semplicemente le funzioni specifiche della classe derivata. La creazione di librerie di classi astratte consente di creare e controllare l'interfaccia di una classe generale lasciando agli altri programmatori l'adattamento a situazioni specifiche. 35

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami

Dettagli

Programmazione Orientata agli Oggetti

Programmazione Orientata agli Oggetti Programmazione Orientata agli Oggetti Lezione 13 La programmazione ad oggetti si basa su due principi fondamentali ereditarietà polimorfismo Queste due proprietà consentono di definire nuovi tipi di dato

Dettagli

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione Lezione VIII Tatiana Zolo tatiana.zolo@libero.it 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono

Dettagli

Ereditarietà e polimorfismo

Ereditarietà e polimorfismo Università della Calabria Corso di Laurea in Ingegneria Elettronica Programmazione Orientata agli Oggetti A.A. 2006/2007 Ereditarietà e polimorfismo Paolo Trunfio * * DEIS, Università della Calabria http://si.deis.unical.it/~trunfio

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

La programmazione ad oggetti (OOP)

La programmazione ad oggetti (OOP) Oggetti e Classi (CAP 10) Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Novembre 2011 La programmazione ad oggetti (OOP) È un approccio concettuale alla programmazione (indipendente

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

Dettagli

Implementazione dell albero binario in linguaggio C++

Implementazione dell albero binario in linguaggio C++ Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve

Dettagli

Esempio Principio di sostituibilità

Esempio Principio di sostituibilità Ereditarietà E uno dei concetti chiave delle tecniche orientate agli oggetti Esprime le somiglianze tra le classi, semplificando la definizione di una classe e riducendola a una o più classi simili Rappresenta

Dettagli

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Programmazione Java Avanzata Programmazione Object- Oriented in Java Programmazione Java Avanzata Programmazione Object- Oriented in Java Ing. Gianluca Caminiti Testi di Riferimento (Java) Cay Horstmann Concetti di informatica e fondamenti di Java Apogeo, 2007 (Versione

Dettagli

Esempio 2: Subtyping

Esempio 2: Subtyping Esempio 2: Subtyping 22 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti mediante l aggiunta o la ridefinizione

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi: Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

Corso di Programmazione a oggetti

Corso di Programmazione a oggetti Corso di Programmazione a oggetti Overloading delle funzioni e parametri di default a.a. 2014/2015 Francesco Fontanella Overloading delle funzioni In C++, è possibile dare a funzioni diverse lo stesso

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Costruttori di copia, funzioni di accesso e variabili static aa 2008/2009 Claudio De Stefano Claudio De Stefano - Corso di Programmazione ad Oggetti - aa 2008/2009 1

Dettagli

Ereditarietà e Polimorfismo

Ereditarietà e Polimorfismo Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le

Dettagli

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Puntatori a funzioni 1 Funzioni che restituiscono puntatori Il valore di ritorno restituito da una funzione può essere di qualsiasi tipo, compreso il tipo puntatore.

Dettagli

Introduzione al C++ (continua)

Introduzione al C++ (continua) Introduzione al C++ (continua) I puntatori Un puntatore è una variabile che contiene un indirizzo di memoria pi_greco 3.141592 pi_greco_ptr indirizzo di 3.141592 & DEREFERENZIAZIONE RIFERIMENTO * se x

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Ereditarietà E' un meccanismo per estendere le funzionalità di una classe con nuovi campi e nuovi metodi Chiamiamo superclasse:

Dettagli

Informatica 3. Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Lezione 8 - Modulo 1

Informatica 3. Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Lezione 8 - Modulo 1 Informatica 3 Informatica 3 LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Modulo 1: Ereditarietà Modulo 2: Polimorfismo e classi astratte Modulo 3: Visibilità delle proprietà di una

Dettagli

Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2)

Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Informatica 3 LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Modulo 1: Ereditarietà Modulo 2: Polimorfismo e classi astratte Modulo 3: Visibilità delle proprietà di una classe Modulo

Dettagli

Object-Oriented Technology. Giuliano Armano 1

Object-Oriented Technology. Giuliano Armano 1 Object-Oriented Technology Giuliano Armano 1 Object Oriented Technology ADT + Eredità + Polimorfismo Object-Orientation Giuliano Armano 2 Terminologia Tipica Classica... Tipo di dato (astratto) = ADT Operazione

Dettagli

Associazione Variabile-Indirizzo

Associazione Variabile-Indirizzo I puntatori Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include

Dettagli

Programmazione orientata agli oggetti. Ivan Lanese

Programmazione orientata agli oggetti. Ivan Lanese Programmazione orientata agli oggetti Ivan Lanese Argomenti Programmazione orientata agli oggetti Classi Oggetti Costruttori Scrivere grosse applicazioni La gran parte delle applicazioni sono GROSSE Windows

Dettagli

Derivazione di Classi

Derivazione di Classi Derivazione di Classi Lezione 14 Derivazione di Classi Il meccanismo della derivazione di classi implementa l operazione di ereditarietà della programmazione ad oggetti La classe derivata può utilizzare

Dettagli

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il

Dettagli

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3) Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di

Dettagli

Lettura e scrittura di file di dati input/output

Lettura e scrittura di file di dati input/output Lettura e scrittura di file di dati input/output Lettura e scrittura da disco Molto semplice in C++: si fa esattamente come se fosse una tastiera (se sto leggendo da disco) o lo schermo (se sto scrivendo

Dettagli

Introduzione ai puntatori

Introduzione ai puntatori Introduzione ai puntatori Algoritmicamente November 19, 2009 http://algoritmicamente.wordpress.com/ 1 Concetti fondamentali Nei linguaggi quali C, C++, il concetto e l'uso dei puntatori è estremamente

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

Dettagli

Object-Oriented Programming

Object-Oriented Programming Object-Oriented Programming Una metodologia di programmazione che consente di modellare la realtà in modo più naturale e vicino all uomo Concetti fondamentali Oggetto Incapsulazione Messaggio Classe Ereditarietà

Dettagli

Strategie di programmazione

Strategie di programmazione Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie

Dettagli

Derivazione di Classi

Derivazione di Classi Derivazione di Classi Derivazione di Classi Lezione 14 Il meccanismo della derivazione di classi implementa l operazione di ereditarietà della programmazione ad oggetti La classe derivata può utilizzare

Dettagli

Esempi in Java di program.ne O-O

Esempi in Java di program.ne O-O Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti I Template a.a. 2008/2009 Claudio De Stefano 1 Programmazione generica E una tecnica di programmazione che permette di definire una classe di oggetti (o una funzione)

Dettagli

oggetti: Cenni generali Programmazione ad Ingegneria Informatica e dell'informazione Michelangelo Diligenti

oggetti: Cenni generali Programmazione ad Ingegneria Informatica e dell'informazione Michelangelo Diligenti Programmazione ad oggetti: Cenni generali Michelangelo Diligenti Ingegneria Informatica e dell'informazione diligmic@dii.unisi.it Argomenti Programmazione ad oggetti Motivazioni Classi Metodi e membri

Dettagli

Abstact Data Type. Abstact Data Type. Pubblico e privato. Struttura di un ADT

Abstact Data Type. Abstact Data Type. Pubblico e privato. Struttura di un ADT Abstact Data Type 2 Abstact Data Type Ver. 2.4 ADT, definisce un concetto astratto e il suo comportamento Viene utilizzato come una scatola nera (oggetto) di cui è visibile solo che cosa fa e non come

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Il tipo puntatore; l allocazione dinamica della memoria Claudio De Stefano - Corso di Fondamenti di Informatica 1 puntatori una variabile di tipo puntatore al tipo x

Dettagli

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza

Dettagli

14 - Metodi e Costruttori

14 - Metodi e Costruttori 14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo Ereditarietà & Polimorfismo Ereditarietà Meccanismo per definire una nuova classe (classe derivata) come specializzazione di un altra (classe base) La classe base modella un concetto generico La classe

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.

Dettagli

I Template in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di: Giancarlo Cherchi

I Template in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di: Giancarlo Cherchi I Template in C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di: Giancarlo Cherchi Introduzione Cosa sono i Template? TEMPLATE? MODELLI Funzionalità non presenti nelle prime versioni del

Dettagli

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà L ereditarietà è il meccanismo attraverso cui viene implementata la relazione di specializzazione (is-a). L ereditarietà è il meccanismo attraverso cui una classe (derivata) eredita da un altra classe

Dettagli

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 31 Ottobre 2014

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 31 Ottobre 2014 Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli 31 Ottobre 2014 1 Reimpiego di Codice Un punto fondamentale nei linguaggi di programmazione moderni è la possibilità di riutilizzo del codice. Nel

Dettagli

La classe java.lang.object

La classe java.lang.object La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita

Dettagli

Java Native Interface Appunti

Java Native Interface Appunti Java Native Interface Appunti Riccardo Rizzo 1/8 Introduzione L'uso delle Java Native Interface e' giustificato tutte quelle volte che una applicazione non puo' essere scritta interamente in Java. Per

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

18 - Classi parzialmente definite: Classi Astratte e Interfacce

18 - Classi parzialmente definite: Classi Astratte e Interfacce 18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione Java Struttura di una classe, Costruttore, Riferimento this Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento

Dettagli

Puntatori (in C) Emilio Di Giacomo

Puntatori (in C) Emilio Di Giacomo Puntatori (in C) Emilio Di Giacomo Puntatori In questa lezione parleremo di uno dei costrutti più potenti del C: i puntatori I puntatori vengono utilizzati per realizzare il passaggio di parametri per

Dettagli

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona di Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona su Sommario di su di di di su Astrazione sugli oggetti di su Il concetto di classe Classe: realizza l astrazione

Dettagli

Lezione 13 Classi interne

Lezione 13 Classi interne Lezione 13 Classi interne Questa lezione chiude la parte del corso più squisitamente dedicata alla programmazione orientata agli oggetti con Java. Sarà esaminato un nuovo tipo di classi, finora taciuto,

Dettagli

Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi

Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi Funzioni Introduzione Operatori & e * Passaggio by reference Passaggio di vettori Esercizio strcpy 2 Passaggio dei parametri Il linguaggio C prevede il passaggio di parametri by value Il chiamato non può

Dettagli

Modulo 2: Strutture fondamentali della programmazione Java

Modulo 2: Strutture fondamentali della programmazione Java Modulo 2: Strutture fondamentali della programmazione Java Argomenti Trattati: Un semplice programma Java: Presentazione di un primo Esempio; Introduzione alla struttura; Compilazione ed esecuzione. Argomenti

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

Primi passi col linguaggio C

Primi passi col linguaggio C Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta

Dettagli

Introduzione al polimorfismo. Il polimorfismo è la possibilità di utilizzare una unica interfaccia per più metodi

Introduzione al polimorfismo. Il polimorfismo è la possibilità di utilizzare una unica interfaccia per più metodi Polimorfismo Introduzione al polimorfismo Il polimorfismo è la possibilità di utilizzare una unica interfaccia per più metodi Polimorfismo Il polimorfismo al momento della compilazione si ottiene con con

Dettagli

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Dettagli

Gerarchia di classi Java 1

Gerarchia di classi Java 1 Costruttori della sottoclasse Gerarchia di classi Java Parte 2 Corso di laurea in Comunicazione digitale I costruttori non vengono ereditati, non essendo membri di classe Vengono definiti esplicitamente

Dettagli

Linguaggio C: PUNTATORI

Linguaggio C: PUNTATORI Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori

Dettagli

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1. OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione,

Dettagli

Introduzione. Java. Esempio. Esempio

Introduzione. Java. Esempio. Esempio Java polimorfismo G. Prencipe prencipe@di.unipi.it Introduzione È un altro degli ingredienti fondamentali della OOP Permette di organizzare il codice e la leggibilità e di ottenere programmi estensibili

Dettagli

Fondamenti di Informatica T. Linguaggio C: i puntatori

Fondamenti di Informatica T. Linguaggio C: i puntatori Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme

Dettagli

Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione.

Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione. Obiettivi Unità B2 Gli oggetti: concetti avanzati Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione Ereditarietà L ereditarietà permette

Dettagli

Tipi di dato semplici

Tipi di dato semplici Tipi di dato semplici Perché dichiarare una variabile? 2 Una variabile rappresenta uno spazio di memoria centrale Prima dell esecuzione del programma deve essere chiaro quanto spazio serve al programma

Dettagli

L ereditarieta` Riuso del software: Ereditarieta`, Composizione, Polimorfismo e Binding Dinamico Ereditarietà Ereditarietà

L ereditarieta` Riuso del software: Ereditarieta`, Composizione, Polimorfismo e Binding Dinamico Ereditarietà Ereditarietà L ereditarieta` Programmazione in Rete e Laboratorio Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino Riuso del software: Ereditarieta`, Composizione,

Dettagli

Il C nel C++: Funzioni

Il C nel C++: Funzioni Il C nel C++: Funzioni Funzioni (1) il concetto -> spezzare il programma in parti (procedure) una funzione è un parte di programma dotata di un nome che può essere richiamata in altri punti del programma

Dettagli

Funzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri

Funzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri Funzioni (Passaggio dei parametri per riferimento) Passaggio dei parametri Per passaggio dei parametri si intende l associazione fra parametri attuali e parametri formali che avviene al momento della chiamata

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Programmazione a oggetti

Programmazione a oggetti Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi piluc@dsi.unifi.it Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software

Dettagli

Indice Introduzione I fondamenti di C#

Indice Introduzione I fondamenti di C# Indice Introduzione XV Capitolo 1 I fondamenti di C# 1 1.1 L albero genealogico di C# 2 C: l inizio dell era moderna della programmazione 2 La creazione di OOP e C++ 3 La nascita di Internet e Java 4 La

Dettagli

Ereditarietà e Polimorfismo. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Ereditarietà e Polimorfismo. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Ereditarietà e Polimorfismo Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Ereditarietà L ereditarietà è lo strumento che permette di costruire nuove classi utilizzando

Dettagli

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto. Sistema C e organizzazione del codice Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto. Un programma C è costituito da un insieme

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti Tipi di dati Tipo = insieme di valori + insieme di operazioni Es. int: valori:, -2, -1, 0, 1, 2, operazioni:: +,-,*,/,

Dettagli

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali

Dettagli

Le funzioni. Fondamenti di programmazione

Le funzioni. Fondamenti di programmazione Le funzioni Fondamenti di programmazione Moduli I programmi sono spesso abbastanza complessi da dover essere scomposti in pezzi più maneggevoli Un modulo consiste di istruzioni per svolgere un certo compito

Dettagli

Tipi di Dati Astratti

Tipi di Dati Astratti Tipi di Dati Astratti April 19, 2017 Dati e Tipi di Dato Tipo di dato: concetto di alto livello Macchina fisica: unico tipo di dato sequenze di bit Macchine Astratte: tipi di dato più complessi Tipo di

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Funzioni e classi friend Overloading di operatori aa 2008/2009 Claudio De Stefano 1 Le funzioni friend Nella definzione di una classe è possibile elencare quali funzioni,

Dettagli

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012 Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni

Dettagli

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C Sommario Introduzione... xv Organizzazione del volume... xv Argomenti...xvi Domande...xvi Verifiche...xvi Domande e risposte...xvi Esercizi...xvi Non è richiesta alcuna precedente esperienza di programmazione...

Dettagli

Esempio: Costruttori ed ereditarietà

Esempio: Costruttori ed ereditarietà Esempio: 1 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il costruttore di default (quello senza parametri) Se in un costruttore

Dettagli

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Il paradigma OO e le Classi

Il paradigma OO e le Classi Oggetti e Classi (CAP 10) Alberto Garfagnini Università degli studi di Padova 1 Dicembre 2009 Il paradigma OO e le Classi La programmazione ad Oggetti () è una filosofia di programmazione che si basa sui

Dettagli

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. Array di Tipi di dato utente Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Array di Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Procedura. Procedure e funzioni. Esempio di procedura in C. Procedure in C. Esempio con prototipo. Esecuzione del codice

Procedura. Procedure e funzioni. Esempio di procedura in C. Procedure in C. Esempio con prototipo. Esecuzione del codice Procedure e funzioni In linguaggio C Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata. In un primo tempo la macchina deve essere

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Elementi di C++ di base

Elementi di C++ di base Elementi di C++ di base Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 10 ottobre, 2001 Gino Perna Esempi di semplici programmi in C++ Il programma più semplice consiste

Dettagli

7 Procedure. Estensioni sintattiche Dec ::= void Ide (Ptype Ide) Block Com ::= Ide(Exp);

7 Procedure. Estensioni sintattiche Dec ::= void Ide (Ptype Ide) Block Com ::= Ide(Exp); 7 Procedure Nei linguaggi di programmazione è di fondamentale importanza riuscire a scrivere dei programmi che siano facili da leggere e da modificare. Lo scopo di funzioni e procedure è quello di permettere

Dettagli

Uguaglianza e copia di oggetti

Uguaglianza e copia di oggetti Uguaglianza e copia di oggetti Sommario 1. Classi Object e Class 2. Uguaglianza superficiale e uguaglianza profonda 3. Copia superficiale e copia profonda 4. Uguaglianza e copia in classi derivate 1 La

Dettagli

Programmazione ad oggetti: Cenni generali

Programmazione ad oggetti: Cenni generali Programmazione ad oggetti: Cenni generali Michelangelo Diligenti Ingegneria Informatica e dell'informazione diligmic@diism.unisi.it Argomenti Programmazione ad oggetti Motivazioni Classi Metodi e membri

Dettagli

Corso di Programmazione a oggetti

Corso di Programmazione a oggetti Corso di Programmazione a oggetti Introduzione alla programmazione a oggetti aa 2014/2015 Francesco Fontanella La Programmazione Modulare Un programma può essere visto come un insieme di moduli che interagiscono

Dettagli

Subtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo

Subtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo Subtype Polymorphism Interfacce e subtype polimorfismo Tipi, sottotipi e conversioni di tipo Polimorfismo e dinamic dispatch Conversioni di tipo Variabile: locazione con un tipo associato Tipo della variabile

Dettagli

CODE MODEL - Modalità di scrittura del codice

CODE MODEL - Modalità di scrittura del codice CODE MODEL - Modalità di scrittura del codice Visual Studio supporta due modelli per la codifica di pagine web: - Codice Inline: Questo modello è il più vicino al tradizionale ASP. Tutto il markup HTML

Dettagli