7. Java e la progettazione ad oggetti Linguaggio e fasi di progettazione. appunti java pag. 47

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "7. Java e la progettazione ad oggetti. 7.1. Linguaggio e fasi di progettazione. appunti java pag. 47"

Transcript

1 appunti java pag Java e la progettazione ad oggetti Nei paragrafi precedenti si è mostrato che una classe di Java è la veste che assume una pluralità di cose: programmi standalone; applet; classi che definiscono nuovi oggetti. In generale per passare dalla programmazione imperativa-procedurale del Pascal alla programmazione ad oggetti in Java è necessario ricostruire un quadro di riferimento concettuale nuovo. In Pascal si ragiona in termini di Algoritmi e di Strutture Dati, come indicato fin dalle origini dal progettista del Pascal Niklaus Wirth che intitola un suo testo fondamentale Programmi=Algoritmi+StruttureDati. Nella programmazione ad oggetti si potrebbe dire che un Programma è una Costruzione tipo Lego e i mattoni che la compongono sono gli Oggetti. Un oggetto (più esattamente una classe) è un contenitore costituito dai Dati che lo caratterizzano e dalle Operazioni che intervengono su quei dati. In termini più precisi una classe è un entità unica costituita da tre parti essenziali: NOME (che individua la classe univocamente) ATTRIBUTI o CAMPI (Dati che caratterizzano la classe) METODI (Servizi forniti dalla classe o Operazioni che intervengono sugli attributi) Linguaggio e fasi di progettazione In precedenza si sono utilizzate alcune classi presenti nel "jdk" di java quali String, StringBuffer, Integer o Double e si è visto il manuale della documentazione di Java e la sua organizzazione in "Packages" che sono raggruppamenti di classi affini. Ora si cercheranno di definire alcuni criteri necessari per progettare un programma con una metodologia orientata agli oggetti Object Oriented (OO). Di norma si parte da una Situazione Problematica (situazione più o meno definita dalle esigenze dell'utente finale) e si affrontano diverse fasi che, in sequenza, sono: l'analisi, il Disegno e la vera e propria Programmazione. FASI Analisi preliminare DOCUMENTI Def. CASI D'USO Disegno o specifica Disegno CLASSI Codifica e Test CODICE Java

2 appunti java pag. 48 a) Nella fase di analisi OOA si analizza la situazione problematica e si definiscono i "casi d'uso" finali, i requisiti, le funzionalità richieste dall'utente. Occorre porsi dal punto di vista dell'utilizzatore finale e usare le conoscenze di sistema che di norma sono spesso esterne all ambito dell'informatica. Ai casi d'uso individuati si assegna un nome e si schematizza la situazione con il diagramma dei casi d'uso, eventualmente accompagnato da un testo esplicativo. b) Nella fase di disegno OOD, che segue l'individuazione dei casi d'uso, si devono individuare le classi (o le gerarchie di classi) necessarie, rispondendo alla domanda "chi fa che cosa?". Questa domanda può essere tradotta come "quali Classi devono fornire i servizi necessari per realizzare le funzionalità individuate nei casi d'uso?" Si decidono le caratteristiche informative, il tipo di dati e le caratteristiche relazionali che definiscono gli attributi (campi o data member) della classe. Si individuano quali servizi quelle classi devono fornire. Ovvero quali operazioni (metodi) sono necessarie per manipolare un oggetto di quella classe. Si definiscono i costruttori della classe. Si individuano le relazioni tra le classi progettate. Sotto è disegnato lo schema di rappresentazione di un Classe. <Nome> <Attributi> <Costruttori> <Metodi> c) Nella fase di programmazione o codifica OOP, che segue il disegno delle classi, si produce la codifica vera e propria delle classi e dei metodi individuati e si testa con un programma di prova il funzionamento dei casi d'uso desiderati.

3 appunti java pag Esempi di progettazione Supponiamo ad esempio di voler affrontare la semplice situazione problematica seguente: esempio 1 - "Si desidera realizzare un sistema che manipoli cerchi calcolandone l'area e determinando se un punto assegnato è interno o esterno al cerchio." Nella fase di analisi (OOA) si individueranno le esigenze dell'utente che si possono desumere dalle parole chiave del testo: possibilità di inserire i dati che definiscono un cerchio; possibilità di calcolare l'area: possibilità di sapere se un punto assegnato è interno al cerchio. Questi sono i tre casi d'uso che possiamo stabilire in prima approssimazione e schematizzare con il seguente diagramma: immetti area interno Nella fase di Disegno (OOD) si dovranno definire le classi necessarie CHE FANNO ciò che si desidera (CHI FA CHE COSA?). Per il nostro problema la classe centrale sarà il cerchio e dovrà avere come attributi raggio e centro. I metodi minimi necessari saranno: il costruttore che consente l'immissione dei dati; il metodo Area; il metodo interno. Lo schema da realizzare per disegnare tale classe è il seguente: - double Xc; - double Yc; - double raggio; Cerchio + Cerchio(double x, double y, double r) + area() : double; + interno(double x, double y) : boolean; Si potrebbero progettate non una ma due classi: la Cerchio, indispensabile, e una classe Punto che potrebbe indicare il fatto che il cerchio è dotato di un punto particolare che è il suo centro.

4 appunti java pag. 50 In questo modo il disegno alternativo sarebbe: - double Xc; - double Yc; Punto + Punto(double x, double y) + getx( ) : double; + gety( ) : double; associazione 1 Cerchio - Punto centro; - double raggio; + Cerchio(Punto p, double r) + area() : double; + interno(punto p) : boolean; Le due alternative di disegno sono didatticamente utili per mostrare come si rappresenta una relazione tra due diverse classi. E' evidente che se si progetta una classe Punto si deve prevedere un costruttore adeguato e che per accedere dall'esterno agli attributi privati del Punto dovranno essere disegnati i due metodi getx() e gety(). Annotazioni teoriche: Modalità con cui si indicano attributi, costruttori e metodi. Il segno che li precede (-), (+), (#) indica rispettivamente che il metodo è private, public o protected. Un metodo o un attributo public (+) è SEMPRE accessibile dall'esterno della classe, un metodo o un attributo private (-) è accessibile SOLO dal codice interno alla classe; infine un metodo o un attributo protected (#) è accessibile solo dal codice della classe o delle sue sottoclassi ma non dall'esterno. Le classi possono stare tra loro in una relazione associativa di Composizione e questo si indica con la seguente simbologia Punto 1 Cerchio Punto 3..* Poligono due classi sono in relazione di composizione se la prima di esse risponde alla domanda "HA UN" e la seconda di conseguenza si configura come la parte di un tutto. Nel primo caso disegnato si dice che la classe Cerchio ha un Punto (il centro) che le appartiene come sua parte. Nel secondo caso disegnato la relazione ci informa del fatto che un Poligono deve avere come sue parti 3 o più punti. Sempre nella fase di Disegno (ma potrebbe essere realizzata contemporaneamente alla codifica) si deve definire la Documentazione della classe; questa consiste nello scrivere le specifiche o manuale d'uso di ogni metodo della classe. Tali Specifiche hanno valore contrattuale e formale, devono quindi essere precise e non contenere ambiguità. Il documento di specifica è utilizzato, quando si progetta in grande, da due diverse figure: Il programmatore di sistema, il quale costruisce il pacchetto con le nuove classi vincolandosi alle specifiche, e il

5 appunti java pag. 51 futuro utilizzatore, il quale userà le specifiche come manuale della classe per realizzare applicazioni. Per queste finalità tale manuale dovrà contenere una "intestazione" dei metodi (detta anche signature) scritta nella sintassi del linguaggio di programmazione e la descrizione per ogni metodo di: effetti prodotti dal metodo; descrizione dei parametri di input e di output; casi d'uso ed eventuali eccezioni. Disegno o specifica Classi e Relazioni tra esse Metodi e significato dei parametri Produzione del manuale Eccezioni ed esempi d uso Nome Identificatore Cerchio Campi o attributi Punto centro private double raggio Costruttori Intestazione: Cerchio(Punto p, double r) Metodi Invocazione: Effetti: Intestazione: Invocazione: Punto p=new Punto(3,4); Cerchio C=new Cerchio(p, 9); Riceve il centro p di coordinate (3,4) e il raggio 9 e costruisce un oggetto cerchio C. double area() double S=C.area(); Effetti:: determina l'area del cerchio C e l'assegna alla variabile S. Intestazione: boolean interno(punto p) Invocazione: Effetti:: boolean b=c.interno(p); determina se il punto p assegnato è o no interno al cerchio C. Restituisce true se Si, No altrimenti. Nella fase di codifica (OOP) delle Classi e dei metodi (attività specifica del programmatore di sistema) si deve scegliere l algoritmo più opportuno per implementare ciascun metodo. Di norma questa fase è lasciata libera da vincoli sia nella scelta delle strutture dati di supporto più opportune che nella scelta dell algoritmo; ovviamente tale scelta deve superare i test di funzionamento previsti dalle specifiche e gli eventuali test di efficienza (la velocità di esecuzione dipende dalla rappresentazione dei dati e dall algoritmo scelti).

6 appunti java pag. 52 Codifica e test Codifica Classi Scelta algoritmi e codifica metodi CODICE Java Test di correttezza ed efficienza Nel caso del problema da cui siamo partiti si tratterà di codificare le due Classi individuate nel disegno e di costruire un programma di prova che verifichi il funzionamento dei Casi d'uso previsti. public class Punto { private double Xc; private double Yc; public Punto(double x, double y) { Xc=x; Yc=y; public double getx() { return Xc; public double gety() { return Yc; // end Punto public class Cerchio { private Punto centro; private double raggio; public Cerchio(Punto p, double r) { centro=p; raggio=r; public double area() { double ris=math.pi*raggio*raggio; return ris; public boolean interno(punto p) { boolean ris=false; double x=p.getx(); double y=p.gety(); double xc=centro.getx(); double yc=centro.gety(); double dist=math.sqrt((x-xc)*(x-xc)+(y-yc)*(y-yc)); if (dist<=raggio) ris=true; return ris; // end Cerchio Il main() deve verificare i "casi d'uso" individuati nell'analisi, in particolare calcolare l'area e stabilire se un punto assegnato è o no interno al cerchio:

7 appunti java pag. 53 public class es01_c07 { public static void main(string arg[]) { Punto Centro=new Punto(3,4); Cerchio C=new Cerchio(Centro, 9); Punto P=new Punto(3,13); Punto Q=new Punto(4,10); Punto R=new Punto(5,13); System.out.println("Area="+C.area()); System.out.println("P interno "+C.interno(P)+", Q interno " + C.interno(Q) +", R interno "+C.interno(R)); Il programma stamperà: Area= P interno true, Q interno true, R interno false Supponiamo ad esempio di voler affrontare la situazione problematica seguente: esempio 2 - "Si desidera realizzare un programma che manipoli numeri Razionali (frazioni) e si vuole almeno la funzionalità di immissione e stampa". In un secondo momento si amplierà il sistema con altre operazioni. Analisi preliminare (definizione dei Casi d'uso) Lo schema indica i due casi d'uso indicati nel testo: immetti stampa Disegno o specifica Un numero razionale è una coppia di numeri (n,d) tali che n ε Z e d ε N0, il numeratore potrebbe avere segno negativo o essere nullo, il denominatore deve essere diverso da Zero. Questi sono gli unici due attributi previsti per la classe razionale. Le uniche operazioni che si svilupperanno provvisoriamente sono l operazione che consente di immettere costruire un razionale e quella che consente di stamparlo sul video. Il numeratore e il denominatore saranno rappresentati (memorizzati) in una forma "normalizzata" nel senso che è ammesso il segno negativo al più al numeratore, e i due numeri devono essere ridotti ai minimi termini. Se si costruisce il razionale 4/8 si memorizzerà negli attributi 1/2. A questo scopo si è previsto di progettare un metodo (private) che determina il massimo comune divisore al fine di semplificare i valori immessi dall'utente.

8 appunti java pag. 54 Lo schema di disegno della classe è il seguente: - long N; - long D; Razionale + Razionale(long n, long d) + stampa( ) : void; - mcd(long a, long b) : long; Il disegno si conclude con la specifica che consiste nella scrittura del manuale. Nome Identificatore Razionale Campi o attributi int Num; private int Den; Costruttori Intestazione:: Razionale(long Num, long Den) Metodi Invocazione: Razionale r=new Razionale(6,-4); Effetti: Riceve 6 e -4 interi e alloca l oggetto r = 3/2; se il denominatore è zero interrompe e segnala un errore irreparabile. Intestazione: void stampa() Invocazione:: Effetti:: r.stampa(); Riceve il razionale r e lo mostra a video in forma frazionaria ridotta ai minimi termini. Se il denominatore è 1 stampa il solo numeratore. Il jdk di Java mette a disposizione uno strumento (programma javadoc) che consente di stilare, oltre al codice, il testo del manuale d'uso delle classi codificate nella forma di file HTML. In questo caso si parla di "manuale on line" del sistema progettato. In particolare codificando le classi e i metodi con opportuni commenti formali e "lanciando" il programma javadoc si ottiene automaticamente la documentazione in formato <HTML>. Per l'esempio "Razionale" si farà uso di tale potenzialità. Di seguito vediamo i passi da percorrere, documentazione inclusa, in sede di codifica. Codifica, Test e manuale online La codifica di questa classe in Java dovrà rispettare le specifiche e memorizzare due numeri ridotti ai minimi termini e normalizzati nel segno. I commenti formalizzati compresi tra /** */ sono indispensabili per ottenere il manuale di documentazione online.

9 appunti java pag. 55 /** * La classe Razionale consente di immettere e stampare numeri razionali. Pinco Pallo 2 Luglio 2002 */ public class Razionale { private long N,D; //ATTRIBUTI della classe /** * Costruttore di Razionale. a numeratore, b denominatore * <p>se il parametro (denominatore) b è nullo, si ha una * interruzione con un messaggio di fallimento.</p> */ public Razionale(long a, long b) { long div = mcd(a,b); a=a/div; b=b/div; if (b<0) {N=-a; D=-b; else {N=a; D=b; /** * Stampa un Razionale nella forma n/d. void */ public void stampa() { if (D==1) System.out.println(N); else System.out.println(N+"/"+D); private static long mcd(long a, long b) { // mcd() Privato a=math.abs(a); b=math.abs(b); long ris=0; if (b!=0) { if (a!=0) { long r=1; while (r!=0) { r= a % b; a=b; b=r; ris=a; else ris=b; else { // a e b diversi da zero // a=0, b diverso da zero // b=0 inaccettabile System.out.println("Denominatore Nullo! errore fatale."); System.exit(1); return ris; Si salva il file sorgente col nome Razionale.java e dopo la compilazione si ottiene il programma oggetto Razionale.class. Per ottenere la documentazione online sotto la forma di file HTML è necessario scegliere dal menù di RealJava l'opzione <Tools> e successivamente <Javadoc Project Files..>. Dopo aver scelto la cartella nella quale salvare la documentazione si avvia il processo di generazione automatica della documentazione. Al termine, se non vengono segnalati errori, si apre la cartella e si avvia <index.html> visualizzando la documentazione di Razionale. Nella scrittura della documentazione sono da notare i TAG specifici che compaiono tra /** */ preceduti si tratta di TAG predefiniti (per definire l'autore del (per illustrare il significato dei

10 appunti java pag. 56 parametri passati al metodo) (che illustra i parametri restituiti da un metodo. Per vedere gli altri TAG disponibili leggere la documentazione di Java nella illustrazione di Javadoc. Per fare un test o usare la classe e costruire oggetti razionali è necessario creare un main program di prova come il seguente: class es02_c07 { public static void main(string args[]) { Razionale a, b, c; a=new Razionale(-3,-6); b=new Razionale(28,-8); c=new Razionale(28,-7); a.stampa(); b.stampa(); c.stampa(); eseguendo l operazione Run si ottiene come risultato: 1/2-7/2-4 In sintesi analizzando il main() si nota che: Razionale non è un tipo di dato statico come int o float ma un oggetto. Lo si deduce dal fatto che la definizione Razionale a; non è sufficiente per disporre di un dato di tipo razionale ma è necessario crearlo con il costruttore Razionale(). L operazione a=new Razionale(num,den); provvede a semplificare la frazione e a memorizzarla allocandola dinamicamente nella memoria libera del computer. Ogni invocazione del costruttore crea (istanzia) un oggetto. L invocazione di un metodo avviene sempre anteponendo all operazione l oggetto a cui deve essere applicato quel metodo. La scrittura a.stampa(); si potrebbe interpretare come l ordine applica l operazione stampa all oggetto a. Questa sintassi è tipica dell invocazione dei metodi applicati agli oggetti. Supponiamo ad esempio di voler ampliare le richieste definendo la seguente situazione problematica: esempio 3 - "Si desidera ampliare la classe razionale implementando almeno l'operazione di somma tra due razionali." Trascuriamo di disegnare i "casi d'uso" della nuova funzionalità e limitiamoci a indicare nel disegno della classe il nuovo metodo sum() che esegua la somma di due frazioni nel modo seguente: Nome Identificatore Razionale Metodi Intestazione: Razionale sum(razionale B) Invocazione:: Effetti:: Razionale C=A.sum(B); Riceve il Razionale B e lo somma a quello invocante A. Il risultato Razionale restituito è assegnato alla variabile C.

11 appunti java pag. 57 public Razionale sum(razionale r) { long nris, dris; nris = N*r.D+D*r.N; dris = D*r.D; return new Razionale(nris,dris); // METODO sum() // le variabli N e D // non vengono definite // perché sono attributi. modificando il main() si può eseguire un test nel modo seguente: class es03_c07 { public static void main(string args[]) { Razionale a, b, c, d; a=new Razionale(-3,-6); b=new Razionale(28,-8); c=new Razionale(28,-7); a.stampa(); b.stampa(); c.stampa(); d=a.sum(b); d.stampa(); Si ottiene a video: 1/2-7/ Spingiamoci oltre affrontando la seguente situazione problematica: esempio 4 - "Si desidera implementare una <finestra di Windows> che consenta alcune operazioni: almeno la creazione, il disegno sul desktop e il suo dimensionamento." OOA Crea_frame Dimensiona Disegna

12 appunti java pag. 58 OOD La classe potrebbe avere il seguente disegno - int x, y; - int width, height; - boolean stato; + Frame() Frame + setsize(int W, int H ) : void; + setbounds(int X, int Y, int W, int H ) : void; + setvisible(boolean S ) : void; x,y sono le coordinate in alto a sinistra della frame; width, height la sua larghezza e altezza espresse in pixel, lo stato indica se la frame è visibile sullo schermo; stato true o se e solo allocata nella memoria; stato false. Le specifiche del manuale potrebbero essere: Nome Identificatore Frame Campi o attributi int x, y; private int width, height; boolean visible; Costruttori Intestazione:: Frame() Metodi OOP Invocazione: Effetti: Intestazione: Frame f=new Frame(); Crea in memoria la struttura (non visibile su schermo) con dimensioni nulle. void setsize(int W, int H); Invocazione:: f.setsize(100, 100); Effetti:: Intestazione: Dimensiona f assegnando agli attributi width=100 ed height=100 void setbounds(int X, int Y, int W, int H); Invocazione:: f.setbounds(20,30, 100, 100); Effetti:: Posizione il vertice in alto a sinistra di f in (20,30) rispetto al desktop e assegna agli attributi width=100 ed height=100 Intestazione: void setvisible(boolean stato); Invocazione:: f.setvisible(true); Effetti:: Mostra sul desktop la frame f. La class Frame per fortuna, è già stata implementata dai progettisti di java e quindi possiamo limitarci a realizzare un programma di prova che mostri i casi d'uso che abbiamo definito nell'analisi.

13 appunti java pag. 59 Si noti che la classe Frame e tutti gli oggetti grafici sono contenuti nel Package java.awt. e quindi per utilizzarli in un programma è necessario "importare" il package che la contiene, come si vede nella prima riga del codice seguente. import java.awt.*; class es04_c07 { public static void main(string args[]) { Frame f=new Frame(); f.setbounds(200,150,100,100); Frame g=new Frame(); g.setsize(200,100); f.setvisible(true); g.setvisible(true); Se provate ad eseguire questo programma otterrete sulla finestra dell editor la seguente situazione: E evidente che la classe Frame è stata implementata nel linguaggio Java e quindi tutto funziona. Noterete che le Frame create non si chiudono, l unico modo di chiuderle è spegnere il computer o interrompere il processo Java, non ci siamo preoccupati di attivare un METODO che consenta di terminare il programma. Vedremo successivamente come fare. Si potrebbe affrontare un problema di progettazione di carattere gestionale come il seguente. esempio 5 - "Si desidera gestire un Conto Corrente bancario consentendo di eseguire operazioni di creazione, prelievo e versamento; inoltre si desidera anche registrare il numero di operazioni eseguite sul conto. Un cliente della banca può avere al massimo due conti correnti mentre un conto corrente ha sempre un solo titolare." OOA I Casi d'uso identificati sono:

14 appunti java pag. 60 Crea_Cliente Crea_CC Versa_Preleva Mostra OOD Le classi da progettare sono la Conto Corrente e la Cliente. E' opportuno progettare una classe Cliente per evitare la ripetizione dei dati anagrafici del Cliente nei due possibili conti correnti con lo stesso intestatario che il problema autorizza. Se i dati del cliente fossero inseriti come attributi di ogni CC si ripeterebbero inutilmente inserimenti e aggiornamenti con la quasi sicurezza di inserire incongruenze. E' evidente che le due classi devono interagire tra loro e quindi dobbiamo immaginare che tra esse ci sia una relazione associativa, infatti un CC ha sempre un Cliente e un Cliente può avere da Zero a Due Conti. L'associazione risponde ancora alla modalità "HA UN", infatti un CC ha sempre un cliente intestatario. Si può notare che questa associazione non è esattamente corrispondente a quella che intercorreva tra Cerchio e Punto, infatti un "oggetto" Cerchio "ha come sua parte obbligatoriamente un punto" questo implica che se si elimina (cancella dalla memoria) il cerchio si elimina anche il suo centro associato. Se è vero che un "oggetto" CC ha sempre come associato un "oggetto" Cliente NON è' vero che eliminando un CC deve essere eliminato anche il Cliente. Il cliente può avere un altro Conto, il Cliente non è a rigore "UN COMPONENTE" del CC. La relazione associativa si chiama in questo contesto Aggregazione. La rappresentazione grafica può essere: - int NumConto; - double Saldo; - int NumOp; - Cliente Cli; CC + CC(Cliente inte, int numc) + versa(double cifra ) : void; + preleva(double cifra ) : boolean; + mostracli( ) : void; + mostra( ) : void; Cliente - String Nome; - String Indir; - String Tel; - CC C1=null; C2=null; + Cliente( String nom, String in, String te) + setconto( CC c): void; + mostra( ) : void;

15 appunti java pag. 61 Il rombo vuoto ( in Composizione era pieno) indica che si tratta di Aggregazione e la direzione della freccia indica che la "navigabilità" va da CC a Cliente ovvero che si accede ai servizi di cliente partendo da CC e non viceversa. CC è responsabile del sistema mentre Cliente si limita a fornire a CC gli attributi anagrafici. Non è possibile accedere a CC partendo da Cliente. Questa interpretazione non consente di controllare, con facilità, che un Cliente abbia un massimo di due CC intestati come richiesto dal testo. Il sistema delle due classi può essere progettato anche in modo diverso immaginando che Cliente sia responsabile del sistema e che un Cliente "Abbia come suoi componenti" da 0 a 2 CC e che tutte le funzionalità di CC siano "navigabili" a partire da Cliente. In questo caso si realizza un'associazione di Composizione perché è legittimo pensare che un Cliente che viene eliminato comporti anche la chiusura dei conti di sua proprietà. In questo modo si controlla anche che il cliente non superi mai i due conti a lui intestati. Il diagramma della classi cambia anche per i servizi che ciascuna classe fornirà. - int NumConto; - double Saldo; - int NumOp; + CC( int numc) CC + versa(double cifra ) : void; + preleva(double cifra ) : boolean; + mostra( ) : void; 0..2 Cliente - String Nome; - String Indir; - String Tel; - CC C1=null, C2=null; + Cliente( String nom, String in, String te) + creaconto(int numc): boolean; + contouno() : CC; + contodue() : CC; + mostracc( ) : void; + mostra( ) : void; Si potrebbe pensare che il sistema debba consentire "navigabilità" nei due sensi a seconda che il sistema debba fornire servizi d'ufficio che prendono in esame totali e statistiche che partono dai Conti Correnti o servizi di sportello che si limitano ad ascoltare le richieste dei correntisti. In questo caso si evidenzia la doppia navigabilità e la relazione con le rispettive molteplicità. Il progetto delle classi potrebbe essere indicato nel seguente modo Cliente - int NumConto; - double Saldo; - int NumOp; - Cliente Cli; CC + CC(Cliente inte, int numc) + versa(double cifra ) : void; + preleva(double cifra ) : boolean; + mostracli( ) : void; + mostra( ) : void; String Nome; - String Indir; - String Tel; - CC C1=null, C2=null; + Cliente( String nom, String in, String te) + creaconto(int numc): boolean; +setconto(cc c) : void; + contouno() : CC; + contodue() : CC; + mostracc( ) : void; + mostra( ) : void;

16 appunti java pag. 62 OOP La codifica del primo dei tre progetti sarà: public class CC { private int NumConto; private double Saldo; private int NumOp; private Cliente Cli=null; // Classe Conto Corrente public CC(Cliente inte,int numc){ inte.setconto(this); Cli=inte; NumConto=numc; Saldo=0;NumOp=0; public void versa(double cifra){ Saldo=Saldo+cifra; NumOp++; public boolean preleva(double cifra){ boolean fatto=true; if (cifra<=saldo) { Saldo=Saldo-cifra; NumOp++; else { System.out.println("Saldo insufficiente! OP Fallita."); fatto=false; return fatto; public void mostracli() { Cli.mostra(); public void mostra( ){ System.out.println("Conto n "+NumConto); System.out.println("Opreazioni svolte= "+NumOp); System.out.println("Saldo= "+Saldo+"\n"); public class Cliente { // class Cliente private String Nome; private String Indir; private String Tel; private CC C1=null, C2=null; public Cliente(String nom,string ind, String tel){ Nome=nom; Indir=ind; Tel=tel;

17 appunti java pag. 63 public void setconto(cc c) { if (C1==null) C1=c; else if (C2==null) C2=c; else { System.out.println("il cliente ha giù due conti. op Fallita!"); System.exit(0); public void mostra( ){ System.out.println("Cliente :"+Nome); System.out.println("Indirizzo :"+Indir+" Telefono: "+Tel+"\n"); Il main() che verifica i casi d'uso sarà; public class es05_c07 { public static void main(string ar[]){ Cliente C1=new Cliente("Tizio","via Pioppa 2 - BO"," "); Cliente C2=new Cliente("Caio","via Olmi 3 - BO"," "); CC conto1=new CC(C1,1); CC conto2=new CC(C1,2); CC conto4=new CC(C2,4); conto1.versa(2000.0); conto2.versa(3000.0); conto4.versa(4000.0); conto1.preleva(4000.0);// fallisce supera saldo conto1.preleva(2000.0); conto2.preleva(3000.0); conto4.preleva(3000.0); conto1.mostracli(); conto1.mostra(); conto2.mostracli(); conto2.mostra(); conto4.mostracli(); conto4.mostra(); CC conto3=new CC(C1,3); // fallisce sup.2 conti L'output del programma: Saldo insufficiente! OP Fallita. Cliente :Tizio Indirizzo :via Pioppa 2 - BO Telefono: Conto n 1 Operazioni svolte= 2 Saldo= 0.0 Cliente :Tizio Indirizzo :via Pioppa 2 - BO Telefono: Conto n 2 Operazioni svolte= 2 Saldo= 0.0

18 appunti java pag. 64 Cliente :Caio Indirizzo :via Olmi 3 - BO Telefono: Conto n 4 Operazioni svolte= 2 Saldo= il cliente ha giù due conti. op Fallita! 7.3. Le classi e l ereditarietà La relazione di Generalizzazione o Ereditarietà tra classi è una delle più importanti tra quelle "supportate" dalla programmazione ad oggetti. Nell'esempio del Cerchio si è segnalata la relazione associativa di Composizione e nella Conto Corrente quella di Aggregazione, ora si vedrà la relazione associativa di Generalizzazione o Ereditarietà tra classi. Questa caratteristica molto importante consente di progettare classi complesse facendo ereditare a queste il codice scritto precedentemente per altre classi genitrici simili. Questa proprietà è un punto di forza di un linguaggio ad oggetti ma impone al progettista una visione ampia delle necessità e dell architettura che intende realizzare. Procediamo con un esempio; l'esempio, pur avendo solo utilità didattica, mostra alcuni punti di forza di questa metodologia. Dopo la precedente progettazione della classe Razionale, si potrebbe pensare alla seguente situazione problematica. esempio 6 - "Si desidera disporre, oltre ai Razionali, anche di numeri Interi e se possibile eseguire operazioni, come la somma o la sottrazione tra i due tipi diversi come avviene in matematica". OOA Crea_Numeri Operazioni Stampa_Risultati OOD Dalla matematica si sa che i numeri Interi e Razionali si possono sommare e sottrarre tra loro e si ottengono risultati interi o razionali corretti. Nel progetto si potrebbe sfruttare la caratteristica dei numeri interi che "possono essere pensati" come Razionali con denominatore uguale all'unità.

19 appunti java pag. 65 In altre parole esiste un rapporto di generalizzazione tra interi e razionali che risponde al criterio tipico dell'ereditarietà (Inheritance). Due classi stanno in una relazione di ereditarietà una classe è Figlia (Subclass) e l'altra è Genitore (Parent, Superclass), se la prima risponde al criterio di "essere un". In altre parole in Intero "E' UN" Razionale con denominatore uno e quindi l'intero è figlio di razionale che diviene la classe genitrice. Questa relazione di ereditarietà è rappresentata dal seguente schema nella figura 3: Numero Numero Fig.2 Razionale Naturale Intero Razionale Intero Razionale Naturale Fig.1 Intero Fig.3 Nulla esclude di pensare la gerarchia in modo diverso e più esteso come nelle figure 1 e 2. In esse si indica che esiste un genitore "astratto", la classe Numero, di tutti gli insiemi numerici (Razionali, Interi e Naturali). In figura 2 si evidenzia solo che sia i razionali che gli interi che i naturali sono Numeri ma tra di loro non esiste una gerarchia. Nella figura 1 si mostra che un naturale è contemporaneamente un Intero (positivo evidentemente), un Razionale (con denominatore uno) ed è anche un Numero. Si disegneranno ora Classi e Metodi del modello di Fig long N; - long D; Razionale + Razionale(long n, long d) + sum(razionale B ) : Razionale; + sub(razionale B ) : Razionale; + tostring( ) : String; - mcd(long a, long b) : long; Intero + Intero(long n)

20 appunti java pag. 66 La classe Intero è dotata del solo Costruttore infatti un intero è un Razionale e quindi la classe eredita sia gli attributi che tutti i metodi definiti per la classe genitrice. Non è necessario scrivere codice per ottenere le operazioni di somma e sottrazione tra interi. OOP Ecco il codice completo delle due classi La classe Razionale: class Razionale { private long N, D; public Razionale(long n, long d) { long div=mcd(n,d); n=n/div; d=d/div; if (d<0) {n=-n; d=-d; N=n ;D=d; public Razionale sum(razionale B) { long R=N*B.D+B.N*D; long K=D*B.D; Razionale Ris=new Razionale(R,K); return Ris; private static long mcd(long a, long b) { long x=math.abs(a);long y=math.abs(b); long ris=0; if (y!=0) { if (x!=0) { long r=1; while (r!=0) { r= x % y; x = y; y = r; ris=x; else ris=y; // x=0, y diverso da zero else { // y=0 inaccettabile System.out.println("Denominatore Nullo"); System.exit(0); return ris; // Fine mcd // Fine Class Razionale La classe Intero: public class Intero extends Razionale { public Intero(long a) { super(a,1);

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java Riassunto Rassegna API - 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 17 3 maggio 2015! Programmazione

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it UML: Class Diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania Class Diagram Forniscono una vista strutturale

Dettagli

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); } import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO

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

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

Classi ed Oggetti in JAVA

Classi ed Oggetti in JAVA Classi ed Oggetti in JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA Uff. 0577233606 rigutini@dii.unisi.it www.dii.unisi.it/~rigutini/

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

esercizi Esercizi / problemi

esercizi Esercizi / problemi Sistemi informativi applicati (reti di calcolatori): esercizi 1 Esercizi / problemi 1. Creare un applicazione che calcoli la media aritmetica dei seguenti valori interi: 35, 117, 23 e ne visualizzi il

Dettagli

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Lezione 1 Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Definizione di utente e di programmatore L utente è qualsiasi persona che usa il computer anche se non è in grado di programmarlo

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

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

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

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile Problemi connessi all utilizzo di un numero di bit limitato Abbiamo visto quali sono i vantaggi dell utilizzo della rappresentazione in complemento alla base: corrispondenza biunivoca fra rappresentazione

Dettagli

Scuola Specializzazione Istruzione Superiore. Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti

Scuola Specializzazione Istruzione Superiore. Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti Scuola Specializzazione Istruzione Superiore Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti Michele Batocchi ITC Vittorio Emanuele II Perugia A.S. 2007/2008 Introduzione

Dettagli

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ Classi ed oggetti. Classi derivate, ereditarietà e polimorfismo. Template Capitoli 12, 13, 14 Luis Joyannes Aguilar. Fondamenti di Programmazione in C++. Algoritmi,

Dettagli

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione Sede di Latina Corso di Laurea in Ingegneria dell Informazione Consorzio Nettuno La fase di realizzazione si occupa

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno

GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno La Vista CAS L ambiente di lavoro Le celle Assegnazione di una variabile o di una funzione / visualizzazione

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Finestra.java. static String nomicolonne[] = {"ind.","cognome","nome","telefono","e-mail"}; //nomi delle colonne della tabella

Finestra.java. static String nomicolonne[] = {ind.,cognome,nome,telefono,e-mail}; //nomi delle colonne della tabella import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowevent; import java.awt.event.windowlistener; import java.io.*; import java.util.*;

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 1.1 Che cos è un algoritmo CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 Gli algoritmi sono metodi per la soluzione di problemi. Possiamo caratterizzare un problema mediante i dati di cui si dispone all inizio

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni Funzioni Le funzioni Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, consente di calcolare un risultato, come avviene anche per una funzione matematica

Dettagli

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009 Lab 02 Tipi semplici in C Obiettivo dell esercitazione Acquistare familiarità con i tipi di dato semplici supportati

Dettagli

Calc è il programma per la gestione di fogli di calcolo della suite OpenOffice.org.

Calc è il programma per la gestione di fogli di calcolo della suite OpenOffice.org. Calc è il programma per la gestione di fogli di calcolo della suite OpenOffice.org. Nuovo documento Anteprima di stampa Annulla Galleria Apri Controllo ortografico Ripristina Sorgente dati Salva Controllo

Dettagli

Introduzione ad Access

Introduzione ad Access Introduzione ad Access Luca Bortolussi Dipartimento di Matematica e Informatica Università degli studi di Trieste Access E un programma di gestione di database (DBMS) Access offre: un supporto transazionale

Dettagli

Visibilità dei Membri di una Classe

Visibilità dei Membri di una Classe Visibilità dei Membri di una Classe Lezione 10 Ogni classe definisce un proprio scope racchiude il codice contenuto nella definizione della classe e di tutti i suoi membri ogni metodo della classe definisce

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

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

ALGORITMI 1 a Parte. di Ippolito Perlasca. Algoritmo:

ALGORITMI 1 a Parte. di Ippolito Perlasca. Algoritmo: ALGORITMI 1 a Parte di Ippolito Perlasca Algoritmo: Insieme di regole che forniscono una sequenza di operazioni atte a risolvere un particolare problema (De Mauro) Procedimento che consente di ottenere

Dettagli

Codifica dei numeri negativi

Codifica dei numeri negativi E. Calabrese: Fondamenti di Informatica Rappresentazione numerica-1 Rappresentazione in complemento a 2 Codifica dei numeri negativi Per rappresentare numeri interi negativi si usa la cosiddetta rappresentazione

Dettagli

PROPRIETA' ASSOCIATIVA La somma di tre o più addendi non cambia se al posto di alcuni di essi si sostituisce la loro somma.

PROPRIETA' ASSOCIATIVA La somma di tre o più addendi non cambia se al posto di alcuni di essi si sostituisce la loro somma. Addizione: PROPRIETA' COMMUTATIVA Cambiando l'ordine degli addendi la somma non cambia. 1) a + b = b + a PROPRIETA' ASSOCIATIVA La somma di tre o più addendi non cambia se al posto di alcuni di essi si

Dettagli

+ / operatori di confronto (espressioni logiche/predicati) / + 5 3 9 = > < Pseudo codice. Pseudo codice

+ / operatori di confronto (espressioni logiche/predicati) / + 5 3 9 = > < Pseudo codice. Pseudo codice Pseudo codice Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova linguaggio testuale mix di linguaggio naturale ed elementi linguistici con sintassi ben definita e semantica

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

Ricapitoliamo. Ricapitoliamo

Ricapitoliamo. Ricapitoliamo Ricapitoliamo Finora ci siamo concentrati sui processi computazionali e sul ruolo che giocano le procedure nella progettazione dei programmi In particolare, abbiamo visto: Come usare dati primitivi (numeri)

Dettagli

DAL PROBLEMA AL PROGRAMMA

DAL PROBLEMA AL PROGRAMMA 1. I PROBLEMI E LA LORO SOLUZIONE DAL PROBLEMA AL PROGRAMMA L'uomo, per affrontare gli innumerevoli problemi postigli dallo sviluppo della civiltà, si è avvalso della scienza e della tecnica, i cui destini

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Informatica Applicata

Informatica Applicata Ing. Irina Trubitsyna Concetti Introduttivi Programma del corso Obiettivi: Il corso di illustra i principi fondamentali della programmazione con riferimento al linguaggio C. In particolare privilegia gli

Dettagli

R.Focardi Laboratorio di Ingegneria del Software 6. 1

R.Focardi Laboratorio di Ingegneria del Software 6. 1 Networking Java permette comunicazioni in rete basate sul concetto di socket, che permette di vedere la comunicazione in termini di flusso (stream), in modo analogo all input-output di file, usando Stream

Dettagli

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java Fondamenti di Informatica Dichiarazione, creazione e gestione di array in Java Array in Java - creazione La creazione fa una inizializzazione implicita: num = new int[10]; con valore 0 per int e double,

Dettagli

EQUAZIONI E DISEQUAZIONI POLINOMIALI E COLLEGAMENTI CON LA GEOMETRIA ELEMENTARE

EQUAZIONI E DISEQUAZIONI POLINOMIALI E COLLEGAMENTI CON LA GEOMETRIA ELEMENTARE EQUAZIONI E DISEQUAZIONI POLINOMIALI E COLLEGAMENTI CON LA GEOMETRIA ELEMENTARE 1. EQUAZIONI Definizione: un equazione è un uguaglianza tra due espressioni letterali (cioè in cui compaiono numeri, lettere

Dettagli

Esempi di algoritmi. Lezione III

Esempi di algoritmi. Lezione III Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni

Dettagli

Editor vi. Editor vi

Editor vi. Editor vi Editor vi vi 1 Editor vi Il vi è l editor di testo standard per UNIX, è presente in tutte le versioni base e funziona con qualsiasi terminale a caratteri Permette di visualizzare una schermata alla volta

Dettagli

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad

Dettagli

Dispense di Informatica Anno Scolastico 2008/2009 Classe 3APS. Dal Problema all'algoritmo

Dispense di Informatica Anno Scolastico 2008/2009 Classe 3APS. Dal Problema all'algoritmo stituto Tecnico Statale Commerciale Dante Alighieri Cerignola (FG) Dispense di nformatica Anno Scolastico 2008/2009 Classe 3APS Dal Problema all'algoritmo Pr.: 001 Ver.:1.0 Autore: prof. Michele Salvemini

Dettagli

Numeri naturali numeri naturali minore maggiore Operazioni con numeri naturali

Numeri naturali numeri naturali minore maggiore Operazioni con numeri naturali 1 Numeri naturali La successione di tutti i numeri del tipo: 0,1, 2, 3, 4,..., n,... forma l'insieme dei numeri naturali, che si indica con il simbolo N. Tale insieme si può disporre in maniera ordinata

Dettagli

Cicli in Visual Basic for Application. For contatore = inizio To fine istruzioni Next contatore

Cicli in Visual Basic for Application. For contatore = inizio To fine istruzioni Next contatore Cicli in Visual Basic for Application Le strutture del programma che ripetono l'esecuzione di una o più istruzioni sono chiamate Cicli. Alcune strutture per i cicli sono costruite in modo da venire eseguite

Dettagli

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

Le formule possono essere scritte utilizzando un insieme di funzioni predefinite che Excel mette a disposizione, raggruppate per argomento.

Le formule possono essere scritte utilizzando un insieme di funzioni predefinite che Excel mette a disposizione, raggruppate per argomento. Excel: le funzioni Le formule possono essere scritte utilizzando un insieme di funzioni predefinite che Excel mette a disposizione, raggruppate per argomento. DEFINIZIONE: Le funzioni sono dei procedimenti

Dettagli

CATTURARE LO SCHERMO INTERO O LA FINESTRA ATTIVA

CATTURARE LO SCHERMO INTERO O LA FINESTRA ATTIVA CATTURARE LO SCHERMO INTERO O LA FINESTRA ATTIVA Supponiamo di voler eseguire una istantanea del nostro desktop, quella che in gergo si chiama Screenshot (da screen, schermo, e shot, scatto fotografico).

Dettagli

Gli algoritmi. Gli algoritmi. Analisi e programmazione

Gli algoritmi. Gli algoritmi. Analisi e programmazione Gli algoritmi Analisi e programmazione Gli algoritmi Proprietà ed esempi Costanti e variabili, assegnazione, istruzioni, proposizioni e predicati Vettori e matrici I diagrammi a blocchi Analisi strutturata

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

Università degli Studi di Parma. Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica

Università degli Studi di Parma. Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica A.A. 2007-08 CORSO DI INGEGNERIA DEL SOFTWARE Prof. Giulio Destri http://www.areasp.com (C) 2007 AreaSP for

Dettagli

---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero

---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero ---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero delle variabili a cui possono essere assegnati gli indirizzi

Dettagli

Esercitazione 7. Procedure e Funzioni

Esercitazione 7. Procedure e Funzioni Esercitazione 7 Procedure e Funzioni Esercizio Scrivere un programma che memorizza in un array di elementi di tipo double le temperature relative al mese corrente e ne determina la temperatura massima,

Dettagli

Algoritmo euclideo, massimo comun divisore ed equazioni diofantee

Algoritmo euclideo, massimo comun divisore ed equazioni diofantee Algoritmo euclideo, massimo comun divisore ed equazioni diofantee Se a e b sono numeri interi, si dice che a divide b, in simboli: a b, se e solo se esiste c Z tale che b = ac. Si può subito notare che:

Dettagli

Import Dati Release 4.0

Import Dati Release 4.0 Piattaforma Applicativa Gestionale Import Dati Release 4.0 COPYRIGHT 2000-2005 by ZUCCHETTI S.p.A. Tutti i diritti sono riservati.questa pubblicazione contiene informazioni protette da copyright. Nessuna

Dettagli

LA NOTAZIONE SCIENTIFICA

LA NOTAZIONE SCIENTIFICA LA NOTAZIONE SCIENTIFICA Definizioni Ricordiamo, a proposito delle potenze del, che = =.000 =.000.000.000.000 ovvero n è uguale ad seguito da n zeri. Nel caso di potenze con esponente negativo ricordiamo

Dettagli

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.

Dettagli

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Algoritmi Algoritmi Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Il procedimento (chiamato algoritmo) è composto da passi elementari

Dettagli

MIPS Instruction Set 2

MIPS Instruction Set 2 Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general

Dettagli

Un oggetto per la lettura dalla tastiera

Un oggetto per la lettura dalla tastiera Fondamenti di informatica Oggetti e Java ottobre 2012 1 Un oggetto per la lettura dalla tastiera Le API di Java hanno un oggetto System.in che rappresenta la tastiera del calcolatore, ma che non è semplice

Dettagli

Lezione su Informatica di Base

Lezione su Informatica di Base Lezione su Informatica di Base Esplora Risorse, Gestione Cartelle, Alcuni tasti di scelta Rapida Domenico Capano D.C. Viterbo: Lunedì 21 Novembre 2005 Indice Una nota su questa lezione...4 Introduzione:

Dettagli

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone SQL: il DDL Parti del linguaggio SQL Definizione di basi di dati (Data Definition Language DDL) Linguaggio per modificare

Dettagli

INFORMATIVA FINANZIARIA

INFORMATIVA FINANZIARIA Capitolo 10 INFORMATIVA FINANZIARIA In questa sezione sono riportate le quotazioni e le informazioni relative ai titoli inseriti nella SELEZIONE PERSONALE attiva.tramite la funzione RICERCA TITOLI è possibile

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Dev C++ Prerequisiti. Note di utilizzo. Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma

Dev C++ Prerequisiti. Note di utilizzo. Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma Dev C++ Note di utilizzo 1 Prerequisiti Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma 2 1 Introduzione Lo scopo di queste note è quello di diffondere la conoscenza

Dettagli

APPLICAZIONI SU PIU FILE

APPLICAZIONI SU PIU FILE APPLICAZIONI SU PIU FILE Serve poter sviluppare applicazioni su piú file: - alcune funzioni e alcune definizioni di dati in un file - altre funzioni e dati in file diversi Perché?? 1. Se il programma è

Dettagli

Rappresentazione dei numeri in un calcolatore

Rappresentazione dei numeri in un calcolatore Corso di Calcolatori Elettronici I A.A. 2010-2011 Rappresentazione dei numeri in un calcolatore Lezione 2 Università degli Studi di Napoli Federico II Facoltà di Ingegneria Rappresentazione dei numeri

Dettagli

Rapida Introduzione all uso del Matlab Ottobre 2002

Rapida Introduzione all uso del Matlab Ottobre 2002 Rapida Introduzione all uso del Matlab Ottobre 2002 Tutti i tipi di dato utilizzati dal Matlab sono in forma di array. I vettori sono array monodimensionali, e così possono essere viste le serie temporali,

Dettagli

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di esempio CERCA 90 NEL SACCHETTO = estrai num Casi num 90 Effetti CERCA 90 NEL

Dettagli

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

RAPPRESENTAZIONE BINARIA DEI NUMERI. Andrea Bobbio Anno Accademico 1996-1997

RAPPRESENTAZIONE BINARIA DEI NUMERI. Andrea Bobbio Anno Accademico 1996-1997 1 RAPPRESENTAZIONE BINARIA DEI NUMERI Andrea Bobbio Anno Accademico 1996-1997 Numeri Binari 2 Sistemi di Numerazione Il valore di un numero può essere espresso con diverse rappresentazioni. non posizionali:

Dettagli

Introduzione al linguaggio C Gli array

Introduzione al linguaggio C Gli array Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome

Dettagli

Cross Software ltd Malta Pro.Sy.T Srl. Il gestionale come l'avete sempre sognato... Pag. 1

Cross Software ltd Malta Pro.Sy.T Srl. Il gestionale come l'avete sempre sognato... Pag. 1 Il gestionale come l'avete sempre sognato... Pag. 1 Le funzionalità di X-Cross La sofisticata tecnologia di CrossModel, oltre a permettere di lavorare in Internet come nel proprio ufficio e ad avere una

Dettagli

razionali Figura 1. Rappresentazione degli insiemi numerici Numeri reali algebrici trascendenti frazionari decimali finiti

razionali Figura 1. Rappresentazione degli insiemi numerici Numeri reali algebrici trascendenti frazionari decimali finiti 4. Insiemi numerici 4.1 Insiemi numerici Insieme dei numeri naturali = {0,1,,3,,} Insieme dei numeri interi relativi = {..., 3,, 1,0, + 1, +, + 3, } Insieme dei numeri razionali n 1 1 1 1 = : n, m \{0}

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica L uso delle funzioni in C++ Claudio De Stefano - Corso di Fondamenti di Informatica 1 Funzioni Nel C++ è possibile scomporre problemi complessi in moduli più semplici

Dettagli

Funzioni di base. Manualino OE6. Outlook Express 6

Funzioni di base. Manualino OE6. Outlook Express 6 Manualino OE6 Microsoft Outlook Express 6 Outlook Express 6 è un programma, incluso nel browser di Microsoft Internet Explorer, che ci permette di inviare e ricevere messaggi di posta elettronica. È gratuito,

Dettagli

Le funzionalità di un DBMS

Le funzionalità di un DBMS Le funzionalità di un DBMS Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: DBMS.pdf Sistemi Informativi L-A DBMS: principali funzionalità Le

Dettagli

I numeri. Premessa: Che cosa sono e a che servono i numeri?

I numeri. Premessa: Che cosa sono e a che servono i numeri? I numeri Premessa: Che cosa sono e a che servono i numeri? Come ti sarai reso conto, i numeri occupano un ruolo importante nella tua vita: dai numeri che esprimono il prezzo degli oggetti venduti in un

Dettagli

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi alternative: function nome { lista-comandi } oppure nome ( ) {

Dettagli

MEGA Process. Manuale introduttivo

MEGA Process. Manuale introduttivo MEGA Process Manuale introduttivo MEGA 2009 SP4 1ª edizione (giugno 2010) Le informazioni contenute nel presente documento possono essere modificate senza preavviso e non costituiscono in alcun modo un

Dettagli

Un ripasso di aritmetica: Conversione dalla base 10 alla base 16

Un ripasso di aritmetica: Conversione dalla base 10 alla base 16 Un ripasso di aritmetica: Conversione dalla base 1 alla base 16 Dato un numero N rappresentato in base dieci, la sua rappresentazione in base sedici sarà del tipo: c m c m-1... c 1 c (le c i sono cifre

Dettagli

Esercizi Capitolo 5 - Alberi

Esercizi Capitolo 5 - Alberi Esercizi Capitolo 5 - Alberi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle

Dettagli

Come si può esprimere il risultato dl un conteggio e di una misura? Quando si dice che In una

Come si può esprimere il risultato dl un conteggio e di una misura? Quando si dice che In una NUMERI INTERI E NUMERI DECIMALI Come si può esprimere il risultato dl un conteggio e di una misura? Quando si dice che In una cassetta sono contenuti 45 penne e che una lamiera misura 1,35 m. dl lunghezza,

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

WINDOWS - Comandi rapidi da tastiera più utilizzati.

WINDOWS - Comandi rapidi da tastiera più utilizzati. WINDOWS - Comandi rapidi da tastiera più utilizzati. La prima colonna indica il tasto da premere singolarmente e poi rilasciare. La seconda e terza colonna rappresenta la combinazione dei i tasti da premere

Dettagli

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio IDE = Integrated Development Environment Gerardo Pelosi 01 Ottobre 2014 Pagina 1 di 8 Dev-C++ - Installazione Potete

Dettagli

PROBABILITA, VALORE ATTESO E VARIANZA DELLE QUANTITÁ ALEATORIE E LORO RELAZIONE CON I DATI OSSERVATI

PROBABILITA, VALORE ATTESO E VARIANZA DELLE QUANTITÁ ALEATORIE E LORO RELAZIONE CON I DATI OSSERVATI statistica, Università Cattaneo-Liuc, AA 006-007, lezione del 08.05.07 IDICE (lezione 08.05.07 PROBABILITA, VALORE ATTESO E VARIAZA DELLE QUATITÁ ALEATORIE E LORO RELAZIOE CO I DATI OSSERVATI 3.1 Valore

Dettagli

Guida rapida. Cos è GeoGebra? Notizie in pillole

Guida rapida. Cos è GeoGebra? Notizie in pillole Guida rapida Cos è GeoGebra? Un pacchetto completo di software di matematica dinamica Dedicato all apprendimento e all insegnamento a qualsiasi livello scolastico Riunisce geometria, algebra, tabelle,

Dettagli

IL LINGUAGGIO C++ Configurazione di Dev-C++

IL LINGUAGGIO C++ Configurazione di Dev-C++ IL LINGUAGGIO C++ Note sull'uso di DevC++ Requisiti di sistema per Dev-C++ - Sistema operativo Microsoft Windows 95, 98, Millenium Edition, NT 4, 2000 o XP - RAM: 8 Mb (consigliati almeno 32 Mb) - CPU:

Dettagli

Funzioni. Corso di Fondamenti di Informatica

Funzioni. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Funzioni Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti e dei

Dettagli

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C.:luxx:. PREMESSE In questa guida non verranno trattati i costrutti di flusso, le funzioni, o comunque le caratteristiche del linguaggio, che si danno come presupposte.

Dettagli

SISSI IN RETE. Quick Reference guide guida di riferimento rapido

SISSI IN RETE. Quick Reference guide guida di riferimento rapido SISSI IN RETE Quick Reference guide guida di riferimento rapido Indice generale Sissi in rete...3 Introduzione...3 Architettura Software...3 Installazione di SISSI in rete...3 Utilizzo di SISSI in Rete...4

Dettagli

Prolog: aritmetica e ricorsione

Prolog: aritmetica e ricorsione Capitolo 13 Prolog: aritmetica e ricorsione Slide: Aritmetica e ricorsione 13.1 Operatori aritmetici In logica non vi è alcun meccanismo per la valutazione di funzioni, che è fondamentale in un linguaggio

Dettagli

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi TIPI DI DATO Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe di caratteri e quasi sempre anche collezioni di oggetti,

Dettagli