LA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "LA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI"

Transcript

1 1 LA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI ( I.D. Falconi ~ ) INTRODUZIONE La programmazione orientata agli oggetti (OOP) rappresenta una modalità di programmazione strutturata attraverso la quale il problema da risolvere viene affrontato rappresentando la realtà come un insieme di elementi (oggetti) interagenti fra loro, ciascuno in grado di compiere una serie di azioni specifiche. Ad esempio, supponiamo di voler progettare un applicazione che realizzi una lavagna elettronica (schermo) sulla quale si possano disegnare, cancellare, spostare, ingrandire e rimpicciolire una serie di figure (punti, cerchi, triangoli, ). In tale applicazione sono individuabili - un oggetto lavagna, caratterizzato da una serie di proprietà che ne descrivono le caratteristiche (colore, larghezza, altezza,) e dalle azioni che la lavagna è in grado di eseguire su richiesta dell utente (cancellazione, visualizzazione,). Inoltre, sulla lavagna potranno essere rappresentate figure di vario tipo: - oggetti di tipo punto, caratterizzati da posizione e colore e in grado di essere visualizzati o nascosti, spostati, - oggetti di tipo cerchio, caratterizzati da posizione, colore, raggio e in grado di compiere le stesse azioni degli oggetti di tipo punto, oltre a poter essere ingranditi o rimpiccioliti. - oggetti di tipo rettangolo Da quanto detto sopra, possiamo dire che, nelle linee essenziali, per definire un oggetto se ne devono specificare le caratteristiche e le azioni che è in grado di compiere. In termini di codice, ciò equivale a definire un record i cui campi descrivono le caratteristiche (proprietà) dell'oggetto e una serie di procedure o funzioni (metodi) che realizzano le azioni dell'oggetto. TCoordinata = integer; TPunto = OBJECT {proprietà} x,y: TCoordinata; colore: byte; {metodi} procedure crea (x0,y0:tcoordinata;col0:byte); procedure cambiacolore(nuovocolore:byte); Si noti che: La dichiarazione delle proprietà deve precedere quella dei metodi. I nomi delle proprietà e quelli dei parametri formali dei metodi devono essere diversi.

2 2 Il processo utilizzato per definire i metodi ricorda le unit PASCAL: all'interno dell'oggetto si specifica solo l'intestazione dei metodi, come nella sezione interface di una unit, mentre la definizione del codice dei metodi avviene all'esterno della definizione dell'oggetto, nella sezione della dichiarazione delle procedure, similmente a quanto accade nella sezione implementation delle unit. E' pratica comune creare delle librerie (unit) di oggetti, dichiarando i tipi oggetto nella sezione di interfaccia e il codice dei metodi nella sezione di implementazione. unit Punti; interface (***************************************) TCoordinata = integer; TPunto = OBJECT {proprietà} x,y: TCoordinata; colore: byte; {metodi} procedure crea (x0,y0:tcoordinata;col0:byte); procedure cambiacolore(nuovocolore:byte); procedure disegna; implementation (*********************************) uses GRAPH; { implementazione metodi dell'oggetto TPunto } procedure TPunto.crea (x0,y0:tcoordinata;col0:byte); x:=x0; y:=y0; colore:=col0; procedure TPunto.cambiaColore(nuovoColore:byte); colore:=nuovocolore; procedure TPunto.disegna; putpixel(x,y,colore); { } BEGIN (**************************************) grd:=detect; initgraph(grd,grm,' '); cleardevice END.

3 3 program usapunti; uses Crt,Punti; var puntorossoblu:tpunto; BEGIN puntorossoblu.crea(100,50,red); puntorossoblu.disegna; delay(2000); with puntorossoblu do cambiacolore(blue); disegna; repeat until keypressed; END. ISTANZE DI TIPI OBJECT Spesso si fa riferimento ai TIPI OBJECT definendoli CLASSI e riservando il termine OGGETTO alle ISTANZE (ovvero alle variabili) di tali classi. puntorossoblu è un oggetto, TPunto è la classe di cui esso è un'istanza. Le istanze dei tipi object possono essere dichiarate, come qualsiasi altra variabile, sia in memoria statica che dinamica: TPuntoPtr = ^TPunto; var punto : TPunto; {statica: già utilizzabile} puntoptr : TPuntoPtr; {dinamica: da allocare con new prima di poter essere utilizzata} ACCESSO ALLE PROPRIETA' E AI METODI Dall'esempio sopra riportato emergono alcune osservazioni: Per accedere alle parti di un oggetto si utilizza, come nei record, la notazione puntata o il costrutto with. Dall'interno del codice di un metodo è possibile fare riferimento direttamente alle proprietà del relativo oggetto. Poiché i metodi di un tipo di oggetto vengono implementati come procedure esterne agli oggetti, è necessario che nell'intestazione dei metodi questi siano preceduti dal nome del tipo di oggetto a cui appartengono.

4 4 procedure TPunto.cambiaColore(nuovoColore:byte); colore := nuovocolore; osserviamo ora il seguente codice: punto1.cambiacolore(red); punto2.cambiacolore(blue); Sembra presentarsi un problema: i due oggetti punto1 e punto2, essendo istanze della stessa classe TPunto, condividono lo stesso codice per il metodo cambiacolore. Il compilatore traduce quindi le due chiamate di cambiacolore con un salto allo stesso indirizzo. A tale indirizzo si trova l'assegnazione di un nuovo colore alla proprietà colore, ma di quale istanza? In realtà, ogni volta che viene richiamato un metodo, viene inizializzata una variabile di sistema, chiamata self, contenente l'indirizzo dell'istanza dell'oggetto che ha effettuato la chiamata. E' come se all'interno di ogni metodo vi fosse il seguente codice nascosto: with self do {codice del metodo} end PROPRIETA' FONDAMENTALI La OOP si basa su tre proprietà fondamentali: INCAPSULAMENTO EREDITARIETA POLIMORFISMO INCAPSULAMENTO : tutto ciò che riguarda l'oggetto deve essere definito al suo interno. In teoria, l'utilizzatore dell'oggetto si deve servire unicamente dei metodi, evitando l'accesso diretto alle proprietà. Per modificare il colore del punto si dovrà utilizzare il metodo cambiacolore piuttosto che modificare direttamente le proprietà colore. In teoria, ogni proprietà disponibile all'utilizzatore dovrebbe avere un corrispondente metodo che ne possa impostare o leggere il valore.

5 5 TPunto = OBJECT {proprietà} x,y: TCoordinata; colore: byte; {metodi} procedure crea (x0,y0:tcoordinata;col0:byte); function leggix: TCoordinata; procedure cambiax(nuovax:tcoordinata); function leggiy: TCoordinata; procedure cambiay(nuovay:tcoordinata); function leggicolore: byte; procedure cambiacolore(nuovocolore:byte); Rispettare il principio dell'incapsulamento rende il codice più sicuro e facilmente modificabile: il fatto di mantenere nascosti i dettagli implementativi all'utilizzatore degli oggetti rende possibili future modifiche del codice dei metodi senza dover necessariamente riscrivere i programmi già rilasciati che utilizzano tali metodi (ovviamente, pur di mantenerne invariata l'intestazione). Ad esempio, nei metodi cambiax e cambiay si potrebbe aggiungere un controllo che limiti i valori delle coordinate in un certo intervallo. EREDITARIETA': è possibile definire una gerarchia di oggetti che condividono proprietà e metodi. I discendenti ereditano tutto ciò che appartiene agli antenati, con la possibilità di aggiungere ulteriori proprietà e metodi che ne caratterizzano il comportamento. Ad esempio, tutte le figure hanno delle caratteristiche in comune con il punto: una posizione, un colore, la capacità di cambiare colore E' conveniente allora definire l'oggetto punto come antenato e far discendere da esso tutti i diversi tipi di figure. Si noti che l'antenato potrebbe essere un oggetto che non sarà mai utilizzato in un'applicazione, ma la cui funzione è semplicemente quella di "trasmettere" delle proprietà e dei metodi ai suoi discendenti. La sintassi per indicare il rapporto di discendenza è la seguente: TFiglio = OBJECT (TPadre).

6 6 Aggiungiamo qualche metodo alla dichiarazione di TPunto (premettendo che successivamente sarà necessario modificarla) e facciamo discendere da esso un nuovo tipo TCerchio: TPunto = OBJECT {proprietà} x,y: TCoordinata; colore: byte; {metodi} procedure crea (x0,y0:tcoordinata;col0:byte); function leggix: TCoordinata; procedure cambiax(nuovax:tcoordinata); function leggiy: TCoordinata; procedure cambiay(nuovax:tcoordinata); function leggicolore: byte; procedure cambiacolore(nuovocolore:byte); procedure disegna; procedure cancella; procedure sposta(nuovax,nuovay:tcoordinata); TCerchio = OBJECT (TPunto) { proprietà e metodi ereditati da non dichiarare x,y: TCoordinata; colore: byte; procedure crea (x0,y0:tcoordinata;col0:byte); function leggix: TCoordinata; procedure cambiax(nuovax:tcoordinata); function leggiy: TCoordinata; procedure cambiay(nuovax:tcoordinata); function leggicolore: byte; procedure cambiacolore(nuovocolore:byte); procedure disegna; procedure cancella; procedure sposta(nuovax,nuovay:tcoordinata); } { nuove proprietà e metodi caratteristici del cerchio } raggio:integer; function leggiraggio: integer; procedure cambiaraggio(nuovoraggio:integer); Si noti, nella dichiarazione di TCerchio, l'indicazione fra parentesi dell'antenato.

7 7 POLIMORFISMO: tradotta alla lettera, tale proprietà fa riferimento alla capacità di un oggetto di assumere "più forme". Più esattamente, in una gerarchia di oggetti, ciascun oggetto realizza le proprie azioni secondo una propria modalità specifica. Il punto e il cerchio sono visivamente rappresentati in modo diverso. Il metodo disegna, comune a entrambi perché ereditato, dovrà disegnare figure differenti a seconda dell'oggetto che lo invoca. In un certo senso è come se il metodo si "adattasse" all'oggetto. E' anche vero, però, che il metodo crea, non sarà in grado di assegnare un valore al raggio, poiché questa proprietà non è posseduta dal punto. Per capire come possa realizzarsi quanto richiesto dal POLIMORFISMO è indispensabile entrare maggiormente nei dettagli. RIDEFINIZIONE DEI METODI EREDITATI Un oggetto discendente eredita proprietà e metodi dell'antenato. Capita spesso, però, che il comportamento del discendente sia diverso da quello dell'antenato. Si rende quindi necessario "personalizzare" ovvero ridefinire alcuni metodi. Per ridefinire un metodo ereditato bisogna specificare nel discendente un nuovo metodo con lo stesso nome e, se necessario, con un diverso insieme di parametri. Anche il codice, ovviamente, andrà riscritto. In generale, tutti gli oggetti necessitano di un metodo di inizializzazione per "riempire" le proprietà dell'oggetto (ciò che rende un'istanza diversa da un'altra). Un discendente, quindi, avendo ulteriori proprietà oltre a quelle ereditate, necessiterà sicuramente di un'inizializzazione diversa rispetto ai propri antenati. procedure TPunto.crea (x0,y0:tcoordinata;col0:byte); x := x0; y := y0; colore := col0; procedure TCerchio.crea(x0,y0:TCoordinata;r0:integer;col0:byte); TPunto.crea(x0,y0,col0); {ereditata} raggio := r0; E' una buona norma inizializzare un'istanza servendosi del metodo di inizializzazione ereditato dall'antenato. Così facendo, eventuali modifiche apportate successivamente agli antenati verranno automaticamente ereditate da tutti i discendenti. Si noti la sintassi per richiamare il metodo ereditato: il nome del metodo viene fatto precedere dal nome della classe.

8 8 Ma a che serve ereditare un metodo se poi è necessario ridefinirlo? Per dare una risposta a questa domanda, bisogna prima chiarire i meccanismi di compilazione che rendono possibile la realizzazione del polimorfismo. Lo facciamo attraverso un esempio: consideriamo l'implementazione dei metodi disegna,cancella,sposta per le due classi viste: (************** metodi della classe TPunto ***********************************) procedure TPunto.disegna; putpixel(x,y,colore); procedure TPunto.cancella; putpixel(x,y,black); {supponendo che lo sfondo sia nero} procedure TPunto.sposta(nuovaX,nuovaY:TCoordinata); cancella; x:=nuovax; y:=nuovay; disegna; (************** metodi della classe TCerchio ***********************************) procedure TCerchio.disegna; setcolor(colore); circle(x,y,raggio); procedure TCerchio.cancella; setcolor(black); {supponendo che lo sfondo sia nero} circle(x,y,raggio); procedure TCerchio.sposta(nuovaX,nuovaY:TCoordinata); cancella; x:=nuovax; y:=nuovay; disegna; Possiamo notare che il codice del metodo sposta è identico per le due classi. Si potrebbe pensare di non ridichiarare il metodo sposta e di ereditarlo da TPunto. Vediamo cosa succederebbe in tal caso. Supponiamo di avere un oggetto cerchio di tipo TCerchio e di richiamarne il metodo sposta: cerchio.sposta(50,70);

9 9 Quando il compilatore trova una chiamata ad un metodo, per prima cosa cerca tale metodo fra quelli del tipo di oggetto chiamante. Se non lo trova, risale ordinatamente lungo la gerarchia. Una volta trovato, traduce la chiamata con un salto all'indirizzo assegnato al metodo durante la sua compilazione. Nell'ipotesi di avere ereditato il metodo sposta da TPunto, il compilatore, non avendolo trovato tra quelli di TCerchio, avrà tradotto tale chiamata con un salto all'indirizzo di compilazione del metodo TPunto.sposta. Una volta all'interno di tale codice, quindi, tutte le successive chiamate saranno relative all'oggetto TPunto e quindi si cercherà erroneamente di cancellare e disegnare un punto. Per poter invece realizzare quanto proposto dal POLIMORFISMO, bisognerà fare in modo che i metodi cancella e disegna siano relativi all'istanza dell'oggetto chiamante. E' evidente, allora, che l'indirizzo di salto non può essere fissato rigidamente in fase di compilazione, ma dovrà essere ricavato successivamente, quando sarà noto l'oggetto chiamante. Ciò è quanto si definisce un collegamento rinviato (late binding) e per tale motivo i metodi a cui si applica vengono definiti "dinamici" o virtuali, in opposizione di quelli classici che vengono detti "statici", il cui indirizzo è stabilito immediatamente (early binding). In termini di sintassi, la dichiarazione corretta di tali metodi prevede la specifica della direttiva di compilazione virtual nella definizione del metodo, all'interno della dichiarazione del tipo di oggetto (NON nell'implementazione). Inoltre, per realizzare il collegamento rinviato, ovvero il collegamento fra l'istanza e la classe di appartenenza, all'interno della classe dovrà essere presente un metodo che consenta, con la sua chiamata, di "costruire" tale collegamento PRIMA che uno qualsiasi dei metodi virtuali vada in esecuzione. Ciò si ottiene con la parola riservata constructor (al posto di procedure). E' pratica comune scegliere il metodo crea, essendo l'unico che sicuramente sarà sempre chiamato prima dell'utilizzo dell'oggetto. TPunto = OBJECT x,y: TCoordinata; colore: byte; constructor crea (x0,y0:tcoordinata;col0:byte); function leggix: TCoordinata; procedure cambiax(nuovax:tcoordinata); function leggiy: TCoordinata; procedure cambiay(nuovay:tcoordinata); function leggicolore: byte; procedure cambiacolore(nuovocolore:byte); procedure disegna; virtual; procedure cancella; virtual; procedure sposta(nuovax,nuovay:tcoordinata); TCerchio = OBJECT (TPunto) raggio:integer; constructor crea (x0,y0:tcoordinata;r0:integer;col0:byte;); procedure disegna; virtual; procedure cancella; virtual; function leggiraggio: integer; procedure cambiaraggio(nuovoraggio:integer);

10 10 Ogni tipo di oggetto che possiede dei metodi virtuali deve avere un costruttore. La semplice chiamata del costruttore inizializza il collegamento eseguendo un codice nascosto. Si potrebbe utilizzare anche una procedura vuota, ottenendo lo stesso risultato. Dichiarando un metodo come virtual in una classe, questo sarà tale in tutti i discendenti. A differenza dei metodi statici, quindi, dovrà necessariamente mantenere invariata l'intestazione. MECCANISMI CHE IMPLEMENTANO IL POLIMORFISMO Per ogni CLASSE (TIPO di oggetto) contenente dei metodi virtuali, il compilatore crea nel segmento dati, una TABELLA DEI METODI VIRTUALI (VMT). Esiste una sola VMT per tipo di oggetto (e NON una per ogni istanza). Come lascia intuire il nome, la VMT contiene gli indirizzi dei metodi virtuali presenti nella classe. VMT della classe TPunto VMT della classe TCerchio dimensioni di TPunto dimensioni var punto x y TPunto var cerchio x y TCerchio raggio Per ogni ISTANZA di classe con metodi virtuali, il compilatore alloca nell'area di memoria riservata all'istanza, un campo supplementare destinato a contenere l'indirizzo (offset) della VMT della classe corrispondente. L'indirizzo verrà effettivamente scritto in tale campo quando avverrà la chiamata del costruttore, durante l'esecuzione del programma (e NON durante la compilazione). Tale caratteristica consente di lavorare con oggetti il cui tipo è ignoto durante la fase di compilazione, che è la vera essenza del polimorfismo. Essa si basa sul fatto che un discendente eredita, oltre a tutto il resto, anche la COMPATIBILITA' con i suoi antenati, il che equivale a dire che è possibile assegnare ad un antenato uno qualsiasi dei suoi discendenti.

11 11 In base a ciò, è del tutto lecito (anche se apparentemente privo di significato) fare un assegnamento del tipo: punto:=cerchio; Dove va a finire il raggio? Più significativo può risultare sfruttare tale compatibilità impiegandola nella dichiarazione di un parametro di una procedura: procedure lampeggia(var figura:tpunto); var i:integer; for i:= 1 to 30 do figura.cancella; delay(100); figura.disegna; Si noti il passaggio del parametro per riferimento, che consente al parametro attuale, all atto della chiamata, di essere un punto, un cerchio o addirittura una figura non ancora ideata, purché discendente da TPunto. ATTENZIONE: i metodi richiamabili devono essere presenti nell antenato (EREDITATI) e virtuali Attraverso il POLIMORFISMO ciascun metodo (condiviso nella catena di discendenza) agisce secondo una PROPRIA modalità specifica: NON E' POSSIBILE progettare un nuovo oggetto con nuovi metodi e sfruttare il POLIMORFISMO se gli antenati non possiedono quei metodi!!! I vantaggi del polimorfismo vengono alla luce con oggetti gestiti tramite il loro indirizzo, ovvero allocati in memoria dinamica. TPuntoPtr : ^TPunto; var puntoptr:tpuntoptr; per consentire di creare un'istanza dinamica, esistono tre possibilità: new(puntoptr); puntoptr^.crea(50,70,red); new(puntoptr,crea(50,70,red); puntoptr:=new(tpuntoptr,crea(50,70,red)); la seconda e la terza, ideate apposta per la OOP, sono da preferire in quanto garantiscono la chiamata del costruttore. In particolare, la terza, essendo una function e utilizzando come primo parametro il del puntatore alla classe e non l'istanza, risulta direttamente applicabile senza l'esplicita dichiarazione di un puntatore (ad esempio, come parametro di una procedura).

12 12 UN ESEMPIO APPLICATIVO album TPunto TCerchio TNumFigure=1..5; TFigure = OBJECT elenco:array[tnumfigure] of TPuntoPtr; procedure crea; procedure inserisci(posizione:tnumfigure;figura:tpuntoptr); procedure visualizzatutto; var album : TFigure; uncerchio : TCerchio; procedure TFigure.crea; var i:tnumfigure; for i:= 1 to High(TNumFigure) do elenco[i]:= NIL; procedure TFigure.inserisci(posizione:TNumFigure;figura:TPuntoPtr); elenco[posizione]:= figura; procedure TFigure.visualizzaTutto; var i:tnumfigure; for i:= 1 to High(TNumFigure) do if (elenco[i]<> NIL) then elenco[i]^.disegna; BEGIN album.crea; album.inserisci(1,new(tpuntoptr, crea(50,50,green))); album.inserisci(2,new(tcerchioptr, crea(50,50,25,red))); uncerchio.crea(50,50,200, lightblue); {istanza STATICA} {album.elenco[2]^.cambiaraggio(100); ERRORE!!! non è un metodo virtual appartenente a TPunto} TCerchioPtr(album.elenco[2])^.cambiaRaggio(100); {cast del PUNTATORE} album.visualizzatutto; END.

13 13 ATTENZIONE: Si noti come al metodo cambiaraggio (non essendo un metodo virtual appartenente a TPunto) non possa essere applicato automaticamente il polimorfismo. Quando si desidera richiamare un metodo specifico del discendente, è necessario ricorrere esplicitamente al cast del puntatore (sarebbe errato fare il cast della classe TCerchio(album.elenco[2]^).cambiaRaggio(100) perché in tal modo l oggetto puntato sarebbe già stato interpretato come TPunto). LIBERAZIONE DELLA MEMORIA Riprendiamo in considerazione il metodo TFigure.inserisci : Potrebbe capitare di voler sostituire una figura. Dovremmo inserire quindi la nuova figura in una posizione già occupata. In tal caso, per non lasciare occupata una parte di memoria dinamica, prima dell'inserimento dovremmo liberare tale memoria. La rimozione di un oggetto allocato dinamicamente può avvenire in due modi: dispose(puntoptr); dispose(puntoptr,libera); La seconda abbina alla richiesta di rilascio di un'istanza, la chiamata di un suo metodo particolare, definito destructor. destructor TPunto.libera; La sintassi estesa della procedura dispose diventa obbligatoria quando l'oggetto da rimuovere è allocato dinamicamente. In modo particolare, se tale oggetto contiene al suo interno dei riferimenti a strutture dati o oggetti allocati anch'essi dinamicamente, il distruttore si occupa del rilascio ordinato della memoria occupata da tali risorse. Il distruttore deve quindi essere richiamato immediatamente prima della distruzione dell'istanza. I distruttori agiscono solo sugli oggetti allocati dinamicamente: oltre a svolgere il lavoro di "pulizia" (a carico del programmatore) essi si assicurano che venga rilasciata la quantità corretta di memoria per l'istanza che li invoca (ricavando tale informazione dalla VMT). Tale compito viene realizzato da una parte di codice "nascosta" che il compilatore genera automaticamente in coda al distruttore. Per tale motivo, il distruttore potrebbe anche essere un metodo vuoto. Richiedere il rilascio secondo la prima modalità, non consente di calcolare le esatte dimensioni dell'istanza: a causa del polimorfismo, un puntatore ad un oggetto potrebbe puntare ad un qualsiasi discendente.

14 14 La presenza di un distruttore non è legata a quella dei metodi virtuali. I distruttori possono essere sia statici che virtuali. Poiché però i diversi tipi di oggetti richiedono in genere operazioni di rilascio diverse, è buona norma che essi siano virtuali. TFigure = OBJECT elenco=array[tnumfigure] of TPuntoPtr; constructor crea; destructor libera;virtual; procedure inserisci(posizione:tnumfigure;figura:tpuntoptr); procedure visualizzatutto;. TFigurePtr = ^TFigure; destructor TFigure.libera; for i:= 1 to High(TnumFigure) do if (elenco[i]<>nil) then dispose(elenco[i],libera); var albumptr : TFigurePtr; BEGIN albumptr:=new(tfigureptr,crea); albumptr^.inserisci(1,new(tpuntoptr, crea(50,50,green))); albumptr^.inserisci(2,new(tcerchioptr, crea(50,50,25,green))); dispose(albumptr,libera); END. L ultima istruzione chiama il distruttore TFigure.libera che, come illustrato dal codice del metodo, rilascia la memoria occupata da tutte le figure inserite nell array richiamando il distruttore di ciascuna. Infine, il codice nascosto di TFigure.libera passa alla dispose le dimensioni dell'oggetto puntato da albumptr prelevandole dalla VMT.

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Il meccanismo dell ereditarietà a.a. 2008/2009 Claudio De Stefano 1 L ereditarietà consente di definire nuove classi per specializzazione o estensione di classi preesistenti,

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Introduzione alla programmazione ad oggetti a.a. 2008/2009 Claudio De Stefano 1 La programmazione modulare Un programma può essere visto come un insieme di moduli che

Dettagli

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di Giancarlo Cherchi 1 Introduzione Il meccanismo dell eredità consente di sfruttare delle relazioni tipo/sottotipo, ereditando attributi

Dettagli

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore Relazioni tra oggetti e classi : Generalizzazione Fondamenti di Informatica II 20. Laboratorio 6 Collegamenti e associazioni Le relazioni di tipo generalizzazione (specializzazione), servono per poter

Dettagli

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti 13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

P a s q u a l e t t i V e r o n i c a

P a s q u a l e t t i V e r o n i c a PHP: OOP Pasqualetti Veronica Oggetti Possiamo pensare ad un oggetto come ad un tipo di dato più complesso e personalizzato, non esistente fra i tipi tradizionali di PHP, ma creato da noi. 2 Gli oggetti

Dettagli

Modulo 4: Ereditarietà, interfacce e clonazione

Modulo 4: Ereditarietà, interfacce e clonazione Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo

Dettagli

Introduzione a Classi e Oggetti

Introduzione a Classi e Oggetti Introduzione a Classi e Oggetti Oggetto: concetto astratto Entità di un programma dotata di tre proprietà caratteristiche stato informazioni conservate nell oggetto condizionano il comportamento dell oggetto

Dettagli

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011. daniele.sgandurra@iit.cnr.it

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011. daniele.sgandurra@iit.cnr.it Programmazione II Lezione 4 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 30/09/2011 1/46 Programmazione II Lezione 4 30/09/2011 Sommario 1 Esercitazione 2 Panoramica della Programmazione Ad Oggetti 3

Dettagli

Object Oriented Programming

Object Oriented Programming OOP Object Oriented Programming Programmazione orientata agli oggetti La programmazione orientata agli oggetti (Object Oriented Programming) è un paradigma di programmazione Permette di raggruppare in

Dettagli

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Le operazioni di allocazione e deallocazione sono a carico del sistema. Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione

Dettagli

http://www.programmiamo.altervista.org/c/oop/o...

http://www.programmiamo.altervista.org/c/oop/o... PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario.

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe prencipe@di.unipi.it. È qualcosa che abbiamo già visto varie volte

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe prencipe@di.unipi.it. È qualcosa che abbiamo già visto varie volte Java riutilizzo delle classi G. Prencipe prencipe@di.unipi.it Introduzione Una delle caratteristiche fondamentali in Java è il riutilizzo del codice Ci sono due modi per ottenerlo Creare oggetti di classi

Dettagli

Capitolo 2. Operazione di limite

Capitolo 2. Operazione di limite Capitolo 2 Operazione di ite In questo capitolo vogliamo occuparci dell operazione di ite, strumento indispensabile per scoprire molte proprietà delle funzioni. D ora in avanti riguarderemo i domini A

Dettagli

1. I FONDAMENTI DELLA PROGRAMMAZIONE AD OGGETTI

1. I FONDAMENTI DELLA PROGRAMMAZIONE AD OGGETTI IL LINGUAGGIO JAVA Dispense per il corso di laboratorio di sistemi I.T.I.S. ABACUS A.S. 2008/2009 Autore: Roberto Amadini Testo di riferimento: La programmazione ad oggetti C++ Java (Lorenzi, Moriggia,

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche. Testo Esercizio Si consideri la realizzazione di un semplice programma grafico per il disegno di figure geometriche in due dimensioni. Si analizzino i requisiti e se ne rappresentino i risultati in UML

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T1 B2 Significato e proprietà della OOP 1 Prerequisiti Concetto ed elementi della comunicazione Allocazione e deallocazione della memoria Compilazione di un programma Spazio

Dettagli

Utilizzo e scrittura di classi

Utilizzo e scrittura di classi Utilizzo e scrittura di classi Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 14 novembre, 2001 Gino Perna Implementazione di classi in C++ UN ESEMPIO DI CLASSE: RISULTATI

Dettagli

Struttura logica di un programma

Struttura logica di un programma Struttura logica di un programma Tutti i programmi per computer prevedono tre operazioni principali: l input di dati (cioè l inserimento delle informazioni da elaborare) il calcolo dei risultati cercati

Dettagli

Il descrittore di processo (PCB)

Il descrittore di processo (PCB) Il descrittore di processo (PC) Il S.O. gestisce i processi associando a ciascuno di essi un struttura dati di tipo record detta descrittore di processo o Process Control lock (PC) Il PC contiene tutte

Dettagli

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012 + Sviluppo Applicazioni Mobile Lezione 11 + Credits I lucidi di questa lezione sono stati preparati da: Professor Stefano Mizzaro Professor Paolo Coppola e sono stati modificati e completati dal Dr. Paolo

Dettagli

progam ponteasensounicoalaternato ; type dir = ( nord, sud );

progam ponteasensounicoalaternato ; type dir = ( nord, sud ); Esercizio di Sincronizzazione Tra Processi: Ponte a Senso Unico Alternato Un ponte contiene una sola csia di traffico consentendo così l'accesso a macchine provenienti da una sola direzione per volta,

Dettagli

Elementi di Informatica

Elementi di Informatica Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica Algoritmi, e Programmi D. Gubiani 29 marzo 2010 D. Gubiani Algoritmi, e Programmi

Dettagli

CAPITOLO 24 I MONITOR

CAPITOLO 24 I MONITOR EFFETTO DELLE PRIMITIVE - signal E wait SUI SEMAFORI CAPITOLO 24 I MONITOR I semafori sono un mezzo efficace per la gestione della mutua esclusione in ambienti con processi concorrenti, ma spesso è difficile

Dettagli

HORIZON SQL CONFIGURAZIONE DI RETE

HORIZON SQL CONFIGURAZIONE DI RETE 1-1/9 HORIZON SQL CONFIGURAZIONE DI RETE 1 CARATTERISTICHE DI UN DATABASE SQL...1-2 Considerazioni generali... 1-2 Concetto di Server... 1-2 Concetto di Client... 1-2 Concetto di database SQL... 1-2 Vantaggi...

Dettagli

Gli algoritmi: definizioni e proprietà

Gli algoritmi: definizioni e proprietà Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Gli algoritmi: definizioni e proprietà La presente dispensa e da

Dettagli

GUIDA BASE DI PASCAL

GUIDA BASE DI PASCAL 1 GUIDA BASE DI PASCAL Un algoritmo, nel suo significato più ampio, è sequenza logica di istruzioni elementari (univocamente interpretabili) che, eseguite in un ordine stabilito, permettono la soluzione

Dettagli

Class File bytecode. Class loader. Verifier JIT. Run-time System

Class File bytecode. Class loader. Verifier JIT. Run-time System Un file.class è ottenuto compilando il codice sorgente Java. Esso contiene il bytecode, ovvero la sequenza di istruzioni per la JVM, ed anche molte informazioni simboliche. Il bytecode è il linguaggio

Dettagli

Le variabili di Visual Basic consentono di memorizzare temporaneamente valori durante

Le variabili di Visual Basic consentono di memorizzare temporaneamente valori durante Tiipii dii Datii iin Viisuall Basiic Le variabili di Visual Basic consentono di memorizzare temporaneamente valori durante l'esecuzione di un'applicazione. Alle variabili è associato un nome, utilizzato

Dettagli

Utilizzo in linguaggio Pascal.

Utilizzo in linguaggio Pascal. VISUALIZZARE DATI. Il personal computer visualizza informazioni utilizzando due dispositivi hardware: il monitor e la scheda video. Mentre il primo è ben identificabile e visibile, il secondo è installato

Dettagli

DAL DIAGRAMMA AL CODICE

DAL DIAGRAMMA AL CODICE DAL DIAGRAMMA AL CODICE Un diagramma di flusso Appare, come un insieme di blocchi di forme diverse che contengono le istruzioni da eseguire, collegati fra loro da linee orientate che specificano la sequenza

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 19 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 18 Maggio 2010 idea: sfruttare i

Dettagli

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente. Algoritmo Formalmente, per algoritmo si intende una successione finita di passi o istruzioni che definiscono le operazioni da eseguire su dei dati (=istanza del problema): in generale un algoritmo è definito

Dettagli

Vantaggi dell'utilizzo dei database

Vantaggi dell'utilizzo dei database Vantaggi dell'utilizzo dei database Access consente di sfruttare appieno il valore dei propri dati. Un database è molto di più di un semplice elenco o tabella. Offre la possibilità di gestire appieno i

Dettagli

GESTIONE INFORMATICA DEI DATI AZIENDALI

GESTIONE INFORMATICA DEI DATI AZIENDALI GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming

Dettagli

T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E

T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E Threading T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E Caratteristiche principali dei thread Consentono di eseguire elaborazioni simultanee in un programma scritto in C#. Possono essere

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

CAPITOLO 27 SCAMBIO DI MESSAGGI

CAPITOLO 27 SCAMBIO DI MESSAGGI CAPITOLO 27 SCAMBIO DI MESSAGGI SCAMBIO DI MESSAGGI Sia che si guardi al microkernel, sia a SMP, sia ai sistemi distribuiti, Quando i processi interagiscono fra loro, devono soddisfare due requisiti fondamentali:

Dettagli

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

!#$%&&'()#*%+%+!#$',,'()#*%+ -)%*&'&'+'$.)+-$$%&&) !#$%&&'(%)'*+%,#-%#.'%&'#/0)-+#12+3,)4+56#7+#.')8'9 !"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&)!"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9 Slide 1 Paradigmi di Programmazione! Un linguaggio supporta uno stile di programmazione se

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Codici Numerici. Modifica dell'informazione. Rappresentazione dei numeri.

Codici Numerici. Modifica dell'informazione. Rappresentazione dei numeri. Codici Numerici. Modifica dell'informazione. Rappresentazione dei numeri. A partire da questa lezione, ci occuperemo di come si riescono a codificare con sequenze binarie, quindi con sequenze di 0 e 1,

Dettagli

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche. Testo Esercizio Un negozio di musica vende anche libri e riviste musicali. Si intende automatizzare l intero processo, dall approvvigionamento alla vendita. Si analizzino i requisiti e se ne rappresentino

Dettagli

Altri metodi di indicizzazione

Altri metodi di indicizzazione Organizzazione a indici su più livelli Altri metodi di indicizzazione Al crescere della dimensione del file l organizzazione sequenziale a indice diventa inefficiente: in lettura a causa del crescere del

Dettagli

Tibet4DExt. Manuale Utente. Un Plug-in 4 th Dimension per accedere agli archivi di Tibet in linea. (Versione 1.7.x)

Tibet4DExt. Manuale Utente. Un Plug-in 4 th Dimension per accedere agli archivi di Tibet in linea. (Versione 1.7.x) Tibet4DExt Un Plug-in 4 th Dimension per accedere agli archivi di Tibet in linea (Versione 1.7.x) Manuale Utente Capitolo 1, Informazioni Generali Informazioni generali su Tibet4DExt Il plug-in Tibet4DExt

Dettagli

IMPORTAZIONE DI GRAFICI E TABELLE DA EXCEL A WORD

IMPORTAZIONE DI GRAFICI E TABELLE DA EXCEL A WORD WORD 2000 IMPORTAZIONE DI TABELLE E GRAFICI IMPORTAZIONE DI GRAFICI E TABELLE DA EXCEL A WORD Introduzione Il sistema operativo Windows supporta una particolare tecnologia, detta OLE (Object Linking and

Dettagli

costruttori e distruttori

costruttori e distruttori costruttori e distruttori Costruttore E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,

Dettagli

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata Esempi di Problema: Prendere un Caffè al Distributore Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica, e Programmi D. Gubiani

Dettagli

TRANSAZIONI. Una transazione è una successione di operazioni che si può concludere con successo o con insuccesso.

TRANSAZIONI. Una transazione è una successione di operazioni che si può concludere con successo o con insuccesso. Una transazione è una successione di operazioni che si può concludere con successo o con insuccesso. Nel caso di successo, i risultati delle operazioni effettuate devono essere resi definitivi; invece,

Dettagli

Gli ARRAY in FORTRAN 90

Gli ARRAY in FORTRAN 90 ELEMENTI DI PROGRAMMAZIONE Gli ARRAY in FORTRAN 90 Un ARRAY è un AGGREGATO di più DATI dello stesso TIPO (interi, reali, etc), ognuno univocamente individuato dal valore di uno oppure due.. e fino a sette

Dettagli

OBIETTIVI SPECIFICI DI APPRENDIMENTO

OBIETTIVI SPECIFICI DI APPRENDIMENTO Disciplina:... Anno scolastico: 20.../20... Classe/i :... Docente:... DI APPRENDIMENTO SEZIONE 1 Premesse matematiche Nozioni fondamentali sui sistemi di numerazione Sistemi di numerazione in base diversa

Dettagli

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

Dettagli

POWERPOINT è un programma del pacchetto Office con il quale si possono facilmente creare delle presentazioni efficaci ed accattivanti.

POWERPOINT è un programma del pacchetto Office con il quale si possono facilmente creare delle presentazioni efficaci ed accattivanti. 1 POWERPOINT è un programma del pacchetto Office con il quale si possono facilmente creare delle presentazioni efficaci ed accattivanti. Le presentazioni sono composte da varie pagine chiamate diapositive

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E08 Soluzione Esercizi F. Gasparetti, C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Soluzione Esercizi

Dettagli

3. La sintassi di Java

3. La sintassi di Java pag.9 3. La sintassi di Java 3.1 I tipi di dati statici In Java, come in Pascal, esistono tipi di dati statici predefiniti e sono i seguenti: byte 8 bit da -128 a 127 short 16 bit coincide con l integer

Dettagli

dall argomento argomento della malloc()

dall argomento argomento della malloc() Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È

Dettagli

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino Il Sistema Operativo Il Sistema Operativo è uno strato software che: opera direttamente sull hardware; isola dai dettagli dell architettura hardware; fornisce un insieme di funzionalità di alto livello.

Dettagli

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP Accademia Futuro info@accademiafuturo.it Programma Generale del Corso Analista Programmatore Web PHP Tematiche Trattate

Dettagli

SISTEMI OPERATIVI. Gestione della memoria Domande di verifica. Luca Orrù Centro Multimediale Montiferru 18/06/2007

SISTEMI OPERATIVI. Gestione della memoria Domande di verifica. Luca Orrù Centro Multimediale Montiferru 18/06/2007 2007 SISTEMI OPERATIVI Gestione della memoria Domande di verifica Luca Orrù Centro Multimediale Montiferru 18/06/2007 Gestione della memoria 1. Si descriva il concetto di memoria virtuale (esame del 19-06-2006)

Dettagli

06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 43. 3Oltre le tabelle

06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 43. 3Oltre le tabelle 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 43 3Oltre le tabelle Chiave primaria Progettare le tabelle di un database Relazioni Join Creare le relazioni Modificare una relazione Eliminare una o tutte le relazioni

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Paradigma OO Incapsulamento Polimorfismo e Overloading Ereditarietà e Overriding Esercizi svolti Esercizi proposti Paradigma OO Le

Dettagli

Struttura di un programma Java

Struttura di un programma Java Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che

Dettagli

Massimi e minimi vincolati di funzioni in due variabili

Massimi e minimi vincolati di funzioni in due variabili Massimi e minimi vincolati di funzioni in due variabili I risultati principali della teoria dell ottimizzazione, il Teorema di Fermat in due variabili e il Test dell hessiana, si applicano esclusivamente

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Informazioni generali Docente: Samuel Rota Bulò @email: srotabul@dais.unive.it Homepage: http://www.dais.unive.it/~srotabul/ ooprogramming2012.html

Dettagli

Corso di Visual Basic (Parte 9)

Corso di Visual Basic (Parte 9) Corso di Visual Basic (Parte 9) di Maurizio Crespi La nona lezione del corso dedicato alla programmazione in Visual Basic si pone lo scopo di illustrare le funzioni definibili dall'utente e il concetto

Dettagli

Idee guida. Finite State Machine (1) Un automa a stati finiti è definito da una 5- pla: FSM = , dove: Finite State Machine (2)

Idee guida. Finite State Machine (1) Un automa a stati finiti è definito da una 5- pla: FSM = <Q,,, q0, F>, dove: Finite State Machine (2) Idee guida ASM = FSM con stati generalizzati Le ASM rappresentano la forma matematica di Macchine Astratte che estendono la nozione di Finite State Machine Ground Model (descrizioni formali) Raffinamenti

Dettagli

Programma di Paradigmi e possibili domande. Capitolo 1

Programma di Paradigmi e possibili domande. Capitolo 1 Definizione di macchina astratta Programma di Paradigmi e possibili domande Capitolo 1 Una macchina astratta per il linguaggio L detta ML, è un qualsiasi insieme di algoritmi e strutture dati che permettono

Dettagli

Corso di Laurea in Informatica. Linguaggi di Programmazione. Appello del 21\02\2011: Tesine di Java

Corso di Laurea in Informatica. Linguaggi di Programmazione. Appello del 21\02\2011: Tesine di Java Corso di Laurea in Informatica Linguaggi di Programmazione Appello del 21\02\2011: Tesine di Java AVVERTIMENTI E AVVISI: - Ad ogni studente è assegnata una tesina, come si vede dallo schema a seguire.

Dettagli

Corso di formazione CerTICTablet

Corso di formazione CerTICTablet Redattore prof. Corso di formazione CerTICTablet Sesta Dispensa Comitato Tecnico Scientifico: Gruppo Operativo di Progetto CerticAcademy Learning Center, patrocinato dall assessorato al lavoro e alla formazione

Dettagli

Il diagramma dei casi d uso

Il diagramma dei casi d uso Il diagramma dei casi d uso Laboratorio di Ingegneria del Software Prof. Paolo Ciancarini Dott. Sara Zuppiroli A.A. 2010/2011 Lab di Ingegneria del Software () Il diagramma dei casi d uso A.A. 2010/2011

Dettagli

Proff. Fabio Ciao e Raffaele Bortone

Proff. Fabio Ciao e Raffaele Bortone ISTITUTO D ISTRUZIONE SUPERIORE FERRARIS BRUNELLESCHI - EMPOLI Materia: INFORMATICA PROGRAMMAZIONE ANNUALE A.S. 2014/2015 Classe IV C Informatica Proff. Fabio Ciao e Raffaele Bortone Libro di testo: Cloud

Dettagli

La gestione della memoria

La gestione della memoria La gestione della memoria Nella gestione della memoria il sistema operativo deve perseguire l'obiettivo di allocare il maggior numero di processi in memoria centrale per aumentare la probabilità che ci

Dettagli

'LVSHQVD :LQGRZV GL0&ULVWLQD&LSULDQL

'LVSHQVD :LQGRZV GL0&ULVWLQD&LSULDQL 'LVSHQVD 'L :LQGRZV GL0&ULVWLQD&LSULDQL ',63(16$',:,1'2:6,QWURGX]LRQH Windows 95/98 è un sistema operativo con interfaccia grafica GUI (Graphics User Interface), a 32 bit, multitasking preempitive. Sistema

Dettagli

Introduzione. Il principio di localizzazione... 2 Organizzazioni delle memorie cache... 4 Gestione delle scritture in una cache...

Introduzione. Il principio di localizzazione... 2 Organizzazioni delle memorie cache... 4 Gestione delle scritture in una cache... Appunti di Calcolatori Elettronici Concetti generali sulla memoria cache Introduzione... 1 Il principio di localizzazione... 2 Organizzazioni delle memorie cache... 4 Gestione delle scritture in una cache...

Dettagli

21-01 Controlli al volo

21-01 Controlli al volo 01. Matrici di controlli Per iniziare, una matrice di pulsanti Dichiarare una matrice di Button come segue: Button [, ] matrix; matrix = new Button [8, 8]; 21-01 Controlli al volo 21-01 Controlli al volo

Dettagli

progettare buone gerarchie

progettare buone gerarchie progettare buone gerarchie 1 generalizzazione permette di definire dettagli del modello a vari livelli di astrazione 2 generalizzazione le istanze delle classi più specifiche sono istanze anche delle classi

Dettagli

Premesse alla statistica

Premesse alla statistica Premesse alla statistica Versione 22.10.08 Premesse alla statistica 1 Insiemi e successioni I dati di origine sperimentale si presentano spesso non come singoli valori, ma come insiemi di valori. Richiamiamo

Dettagli

Programmazione Java: Variabili membro, Metodi La parola chiave final

Programmazione Java: Variabili membro, Metodi La parola chiave final Programmazione Java: Variabili membro, Metodi La parola chiave final romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Definire una classe» Variabili membro» Metodi La parola chiave

Dettagli

Sistema operativo: Gestione della memoria

Sistema operativo: Gestione della memoria Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e

Dettagli

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione Programmazione L attività con cui si predispone l elaboratore ad eseguire un particolare insieme di azioni su particolari dati, allo scopo di risolvere un problema Dati Input

Dettagli

Linguaggio C - Funzioni

Linguaggio C - Funzioni Linguaggio C - Funzioni Funzioni: Il linguaggio C è di tipo procedurale; ogni programma viene suddiviso in sottoprogrammi, ognuno dei quali svolge un determinato compito. I sottoprogrammi si usano anche

Dettagli

IL SISTEMA OPERATIVO

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO Windows è il programma che coordina l'utilizzo di tutte le componenti hardware che costituiscono il computer (ad esempio la tastiera e il mouse) e che consente di utilizzare applicazioni

Dettagli

Corso di Visual Basic (Parte 8)

Corso di Visual Basic (Parte 8) Corso di Visual Basic (Parte 8) di MAURIZIO CRESPI Questo mese il corso di programmazione in Visual Basic focalizza la propria attenzione sulle procedure, talvolta dette subroutine L oggetto dell ottava

Dettagli

www.renatopatrignani.it 1

www.renatopatrignani.it 1 APRIRE UN PROGRAMMA DI POSTA ELETTRONICA MODIFICARE IL TIPO DI VISUALIZZAZIONE LEGGERE UN CHIUDERE IL PROGRAMMA ESERCITAZIONI Outlook Express, il programma più diffuso per la gestione della posta elettronica,

Dettagli

Manuale Utente. Versione 3.0. Giugno 2012 1

Manuale Utente. Versione 3.0. Giugno 2012 1 Manuale Utente Versione 3.0 Giugno 2012 1 Manuale d uso di Parla con un Click Versione 3.0 Indice degli argomenti 1. Immagini Modificare le immagini - Modifiche generali delle immagini - Modifiche specifiche

Dettagli

Algebra Booleana ed Espressioni Booleane

Algebra Booleana ed Espressioni Booleane Algebra Booleana ed Espressioni Booleane Che cosa è un Algebra? Dato un insieme E di elementi (qualsiasi, non necessariamente numerico) ed una o più operazioni definite sugli elementi appartenenti a tale

Dettagli

Guida rapida all uso di Moodle per i docenti

Guida rapida all uso di Moodle per i docenti Guida rapida all uso di Moodle per i docenti Avvertenze: 1) Questo NON è un manuale completo di Moodle. La guida è esplicitamente diretta a docenti poco esperti che devono cimentarsi per la prima volta

Dettagli

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo. Prototype 28 4. Prototype (GoF pag. 117) 4.1. Descrizione 4.2. Esempio Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Dettagli

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1 Prossime lezioni Dai TDA agli oggetti Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione, lezione 18 19 gennaio

Dettagli

5. Traduzione degli indirizzi di rete in indirizzi fisici: ARP

5. Traduzione degli indirizzi di rete in indirizzi fisici: ARP 5. Traduzione degli indirizzi di rete in indirizzi fisici: ARP 5.1. Introduzione Due macchine si parlano solo se conoscono l'indirizzo fisico di sottorete Due applicazioni si parlano solo se conoscono

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

La programmazione: tradizionale vs Orientata agli Oggetti (OOP)

La programmazione: tradizionale vs Orientata agli Oggetti (OOP) La programmazione: tradizionale vs Orientata agli Oggetti (OOP) In generale, nella soluzione di un problema si individuano dati e funzionalità (azioni) potendola implementare, a livello più semplice, in

Dettagli

Introduzione al foglio elettronico

Introduzione al foglio elettronico Introduzione al foglio elettronico 1. Che cos'è un foglio elettronico? Un foglio elettronico è un programma che permette di inserire dei dati, di calcolare automaticamente i risultati, di ricalcolarli

Dettagli

Sottoprogrammi: astrazione procedurale

Sottoprogrammi: astrazione procedurale Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j

Dettagli

[Tutoriale] Realizzare un cruciverba con Excel

[Tutoriale] Realizzare un cruciverba con Excel [Tutoriale] Realizzare un cruciverba con Excel Aperta in Excel una nuova cartella (un nuovo file), salviamo con nome in una precisa nostra cartella. Cominciamo con la Formattazione del foglio di lavoro.

Dettagli

Siti interattivi e dinamici. in poche pagine

Siti interattivi e dinamici. in poche pagine Siti interattivi e dinamici in poche pagine 1 Siti Web interattivi Pagine Web codificate esclusivamente per mezzo dell HTML non permettono alcun tipo di interazione con l utente, se non quella rappresentata

Dettagli

DESIGN PATTERNS Parte 6. State Proxy

DESIGN PATTERNS Parte 6. State Proxy DESIGN PATTERNS Parte 6 State Proxy STATE Il Design Pattern State nasce dall'esigenza di poter gestire gli stati di una classe senza dover usare dei costrutti come gli Enum e quindi delle switch. Prendiamo

Dettagli