Definizione di classi Capitolo 18 febbraio 2004 Definizione di classi.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Classi ed Oggetti in JAVA
Oggetti Java.
Costruttori e Distruttori
Iterazione Capitolo 17 febbraio 2004 Iterazione.
Array di array Capitolo 20 febbraio 2004 Array di array.
Istruzioni condizionali e blocco
Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
SISSIS MODULO DI JAVA PER LA CLASSE IV DELL’ITI
Fondamenti di Informatica
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Soluzione Esercizio - Classe Vettore
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
Lab. Calc. AA 2005/061 Classi. Lab. Calc. AA 2005/062 C e C++ Fino a questo punto abbiamo introdotto gli elementi base di qualsiasi linguaggio di programmazione,
1 Strutture Dinamiche Corso di Informatica A Vito Perrone.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Esercizi.
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
Esercitazione Ereditarietà Polimorfismo. Entita’ Geometrica PuntoCerchioPoligono TriangoloQuadrilatero Rettangolo Quadrato.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Una "vera" classe.. ..un esempio pratico: la calcolatrice
Programmazione ad oggetti
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Variabili e assegnazione
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
Interfacce grafiche Capitolo 27 marzo 2004 Interfacce grafiche.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Capitolo 12 Thread Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Gestione dei thread in Java
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Introduzione alle Classi e agli Oggetti in Java 1.
Oggetti Java.
Transcript della presentazione:

Definizione di classi Capitolo 18 febbraio 2004 Definizione di classi

Classi per istanziare oggetti Una classe per istanziare oggetti è il progetto per una tipologia di oggetti istanza è una descrizione composta dalle dichiarazioni e definizioni necessarie a rappresentare le caratteristiche di tali oggetti variabili d’istanza metodi d’istanza costruttori Definizione di classi

Esempio: la classe Punto nell’ambito di una applicazione geometrica, si vogliono rappresentare e gestire dei punti in uno spazio bidimensionale ciascun oggetto della classe Punto modella un punto in uno spazio bidimensionale /* Un oggetto Punto rappresenta un punto * in uno spazio bidimensionale. */ class Punto { ... dichiarazione di variabili d'istanza ... ... definizione di costruttori ... ... definizione di metodi d'istanza ... } Definizione di classi

Caratterizzazione dello stato e del comportamento La classe Punto stato una coppia di coordinate (X,Y) comportamento accedi alla coordinata X del punto accedi alla coordinata Y del punto trasla il punto di (DX,DY) modalità di creazione creazione parametrica rispetto alle sue coordinate Definizione di classi

Uso della classe Punto Punto p, p1, p2; // tre punti nel piano p = new Punto(0,0); // p è l'origine del piano p1 = new Punto(1,-1); // p1 è il punto di coordinate // (1,-1) p2 = new Punto(1,-1); // un altro punto di coordinate System.out.println(p1.getX()); // visualizza 1.0 System.out.println(p1.getY()); // visualizza -1.0 p1.trasla(4,3); // ora p1 ha coordinate (5,2) System.out.println(p1.getX()); // visualizza 5.0 System.out.println(p1.getY()); // visualizza 2.0 Definizione di classi

La classe Punto p : Punto Punto (0.0, 0.0) ... p1 : Punto «costruttori» Punto(double xx, double yy) «operazioni» double getX() double getY() void trasla(double dx, double dy) (1.0, -1.0) p1 : Punto (0.0, 0.0) p : Punto p2 : Punto Definizione di classi

Variabili d’istanza Le variabili d’istanza sono variabili che servono a rappresentare lo stato di un oggetto della classe La classe Punto le coordinate di un Punto possono essere rappresentate dalle variabili d’istanza x e y /* Un oggetto Punto rappresenta un punto * in uno spazio bidimensionale. (Prima versione.) */ class Punto { /* Coordinata x del punto. */ public double x; /* Coordinata y del punto. */ public double y; } Definizione di classi

Variabili d’istanza x : double y : double Punto x = 1.0 y = -1.0 p1 : Punto x = 0.0 y = 0.0 p : Punto p2 : Punto Definizione di classi

Accesso a variabili d’istanza Punto p1; p1 = new Punto(1,-1); System.out.println(p1.x); // visualizza 1.0 p1.y = 2; // ora p1 è il punto (1,2) x = 1.0 y = -1.0 p1 : Punto p1 Punto Definizione di classi

Esempio: Distanza tra due punti /* Calcola la distanza tra gli oggetti Punto p1 e p2. */ public static double distanza(Punto p1, Punto p2) { double qd; // quadrato della distanza /* calcola il quadrato della distanza */ qd = (p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y); /* calcola e restituisce la distanza */ return Math.sqrt(qd); } Definizione di classi

Metodi d’istanza Un metodo d’istanza è un metodo la cui esecuzione può essere richiesta inviando un messaggio a un oggetto istanza viene eseguito dall’oggetto istanza a cui è stata richiesta l’esecuzione l’oggetto che esegue un metodo d’istanza può referenziare se stesso con la parola this (questo) Metodi d’istanza per la classe Punto double getX() double getY() void trasla(double dx, double dy) Definizione di classi

La classe Punto /* Un oggetto Punto rappresenta un punto * in uno spazio bidimensionale. (Seconda versione.) */ class Punto { /* Coordinata x del punto. */ public double x; /* Coordinata y del punto. */ public double y; /* Restituisce la coordinata x di questo punto. */ public double getX() { return this.x; } /* Restituisce la coordinata y di questo punto. */ public double getY() { return this.y; /* Trasla questo punto di (dx,dy). */ public void trasla(double dx, double dy) { this.x += dx; this.y += dy; Definizione di classi

Costruttori Un costruttore consente di inizializzare lo stato di un oggetto appena creato Costruttori per la classe Punto Punto(double xx, double yy) Definizione di classi

La classe Punto /* Un oggetto Punto rappresenta un punto * in uno spazio bidimensionale. (Terza versione.) */ class Punto { /* Coordinata x del punto. */ public double x; /* Coordinata y del punto. */ public double y; /* Crea un nuovo Punto di coordinate (xx,yy). */ public Punto(double xx, double yy) { this.x = xx; this.y = yy; } ... metodi d'istanza ... Definizione di classi

Ulteriori aspetti nella definizione di classi sempre con riferimento alla classe Punto Definizione di classi

Auto-referenziazione Un oggetto può accedere alle proprie variabili d’istanza anche senza specificare il riferimento this /* Restituisce la coordinata x di questo punto. */ public double getX() { return x; } Definizione di classi

Quando è necessario usare this Se una classe dichiara una variabile d’istanza var e un metodo o costruttore dichiara anche una variabile locale var, allora in quel metodo o costruttore l’espressione this.var denota la variabile d’istanza var l’espressione var denota la variabile locale var /* Crea un nuovo Punto di coordinate (x,y). */ public Punto(double x, double y) { this.x = x; this.y = y; } Definizione di classi

Il metodo toString Il metodo String toString() ha il compito di calcolare una descrizione testuale di un oggetto ad esempio, Punto[x=1.0,y=-1.0] /* Calcola una descrizione testuale di questo punto. */ public String toString() { return "Punto[x=" + x + ",y=" + y + "]"; } Definizione di classi

Il metodo equals Il metodo boolean equals(...) deve verificare l’uguaglianza tra due oggetti istanza della classe /* Verifica se questo punto è uguale al Punto p. */ public boolean equals(Punto p) { // pre: p!=null return (this.x==p.x) && (this.y==p.y); } Definizione di classi

Sovraccarico del costruttore Un costruttore senza argomenti /* Crea un nuovo Punto di coordinate (0,0). */ public Punto() { this.x = 0; this.y = 0; } Un costruttore di copia /* Crea un nuovo Punto uguale al Punto p. */ public Punto(Punto p) { // pre: p!=null this.x = p.x; this.y = p.y; Definizione di classi

Metodi di classe Una classe per istanziare oggetti può anche definire dei metodi di classe /* Calcola la distanza tra gli oggetti Punto p1 e p2. */ public static double distanza(Punto p1, Punto p2) { double qd; // quadrato della distanza /* calcola il quadrato della distanza */ qd = (p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y); /* calcola e restituisce la distanza */ return Math.sqrt(qd); } invocazione di un metodo di classe pa = new Punto(1,1); pb = new Punto(4,5); dist = Punto.distanza(pa,pb); // 5.0 Definizione di classi

Variabili di classe Una classe per istanziare oggetti può anche dichiarare delle variabili di classe Definizione di classi

Classi e oggetti «oggetto classe» Punto x : double y : double Punto «costruttori» Punto() Punto (double x, double y) Punto(Punto p) «operazioni d’istanza» double getX() double getY() void trasla(double dx, double dy) String toString() boolean equals(Punto p) «operazioni di classe» static double distanza(Punto p1, Punto p2) «oggetto classe» double distanza(Punto p1, Punto p2) x = 1.0 y = -1.0 p2 : Punto p1 : Punto x = 0.0 y = 0.0 p : Punto Definizione di classi

Occultamento dell’informazione Le variabili d’istanza di una classe vengono normalmente dichiarate private class Punto { /* Coordinata x del punto. */ private double x; /* Coordinata y del punto. */ private double y; ... } da chi può essere acceduta una variabile d’istanza privata? Occultamento dell’informazione un principio basilare della programmazione orientata agli oggetto Definizione di classi

Esempio: la classe Rettangolo Si vuole definire una classe Rettangolo un oggetto Rettangolo rappresenta un rettangolo in un piano bidimensionale, ortogonale rispetto agli assi cartesiani 1 2 3 4 5 6 7 8 r1 r2 x y Definizione di classi

Caratterizzazione della classe Rettangolo Comportamento un rettangolo deve saper calcolare la sua base la sua altezza la sua area un rettangolo deve sapersi traslare di (DX,DY) bisogna poter calcolare l’intersezione tra due rettangoli Stato lo stato di un rettangolo deve rappresentare le sue dimensioni la sua posizione nel piano le posizioni dei suoi vertici Definizione di classi

Scelta delle variabili d’istanza Sono possibili diverse scelte per le variabili d’istanza di Rettangolo la nostra scelta il punto vbs (vertice in basso a sinistra) – di tipo Punto – ad esempio, (2,1) il punto vad (vertice in alto a destra) – di tipo Punto – ad esempio, (7,4) Definizione di classi

La classe Rettangolo /* Un oggetto Rettangolo rappresenta un rettangolo in * uno spazio bidimensionale, i cui lati sono entrambi * paralleli agli assi cartesiani del piano. */ class Rettangolo { /* Vertice in basso a sinistra. */ private Punto vbs; /* Vertice in alto a destra. */ private Punto vad; ... } Definizione di classi

Costruttori Due costruttori per la classe Rettangolo /* Crea un nuovo Rettangolo tra i punti p1 e p2. */ public Rettangolo(Punto p1, Punto p2) { // pre: p1!=null && p2!=null this.vbs = new Punto(Math.min(p1.getX(),p2.getX()), Math.min(p1.getY(),p2.getY())); this.vad = new Punto(Math.max(p1.getX(),p2.getX()), Math.max(p1.getY(),p2.getY())); } /* Crea un nuovo Rettangolo che è inizialmente uguale * al Rettangolo r. */ public Rettangolo(Rettangolo r) { // pre: r!=null this.vbs = new Punto(r.vbs); this.vad = new Punto(r.vad); Definizione di classi

Metodi Per la classe Rettangolo si vogliono definire i seguenti metodi d’istanza double base() double altezza() void trasla(double dx, double dy) boolean equals(Rettangolo r) String toString() Si vuole inoltre definire il seguente metodo di classe Rettangolo intersezione(Rettangolo r1, Rettangolo r2) Definizione di classi

Metodi d’istanza /* Calcola la base di questo rettangolo. */ public double base() { return vad.getX() - vbs.getX(); } /* Calcola l'altezza di questo rettangolo. */ public double altezza() { return vad.getY() - vbs.getY(); /* Calcola l'area di questo rettangolo. */ public double area() { return this.base()*this.altezza(); /* Trasla questo rettangolo di dx in orizzontale * e di dy in verticale. */ public void trasla(double dx, double dy) { vbs.trasla(dx,dy); vad.trasla(dx,dy); Definizione di classi

Metodi d’istanza /* Verifica se questo rettangolo è uguale * al Rettangolo r. */ public boolean equals(Rettangolo r) { // pre: r!=null return (this.vbs.equals(r.vbs)) && (this.vad.equals(r.vad)); } /* Restituisce una descrizione di questo rettangolo. */ public String toString() { return "Rettangolo[vbs=" + vbs.toString() + ",vad=" + vad.toString() + "]"; Definizione di classi

Intersezione tra due rettangoli /* Calcola il rettangolo intersezione tra r1 e r2. * Restituisce null se l'intersezione è vuota. */ public static Rettangolo intersezione(Rettangolo r1, Rettangolo r2) { // pre: r1!=null && r2!=null Rettangolo inters; // intersezione di r1 e r2 if (r1.vbs.getX()>r2.vad.getX() || r1.vbs.getY()>r2.vad.getY() || r1.vad.getX()<r2.vbs.getX() || r1.vad.getY()<r2.vbs.getY()) inters = null; else inters = new Rettangolo( new Punto(Math.max(r1.vbs.getX(),r2.vbs.getX()), Math.max(r1.vbs.getY(),r2.vbs.getY())), new Punto(Math.min(r1.vad.getX(),r2.vad.getX()), Math.min(r1.vad.getY(),r2.vad.getY()))); return inters; } Definizione di classi

Uso della classe Rettangolo Rettangolo r1, r2; // due rettangoli Rettangolo r12; // l'intersezione di r1 e r2 r1 = new Rettangolo(new Punto(2,4),new Punto(7,1)); System.out.println(r1); // Rettangolo[vbs=Punto[x=2.0,y=1.0],vad=Punto[x=7.0,y=4.0]] r2 = new Rettangolo(new Punto(0,0),new Punto(3,4)); r2.trasla(5,2); System.out.println(r2); // Rettangolo[vbs=Punto[x=5.0,y=2.0],vad=Punto[x=8.0,y=6.0]] r12 = Rettangolo.intersezione(r1,r2); System.out.println(r12); // Rettangolo[vbs=Punto[x=5.0,y=2.0],vad=Punto[x=7.0,y=4.0]] Definizione di classi

Classi per oggetti dati Si consideri una classe Giocatore un oggetto Giocatore rappresenta il nome di un giocatore e il suo punteggio corrente un giocatore può essere creato specificando il suo nome e il suo punteggio iniziale il suo nome può essere acceduto mediante il metodo String getNome() il suo punteggio può essere acceduto mediante il metodo int getPunteggio() il suo punteggio può essere modificato mediante il metodo void setPunteggio(int p) Un oggetto dati è un oggetto i cui metodi consentono solo l’accesso o la modifica diretta delle sue variabili proprietà metodi accessori metodi modificatori Definizione di classi

La classe Giocatore /* Un oggetto Giocatore rappresenta il nome e il punteggio * di un giocatore di un gioco a punti. */ class Giocatore { /* Il nome del giocatore. */ private String nome; /* Il punteggio corrente del giocatore. */ private int punteggio; /* Crea un nuovo Giocatore, * dati il nome e il punteggio iniziale. */ public Giocatore(String nome, int punteggio) { this.nome = nome; this.punteggio = punteggio; } /* Restituisce il nome di questo Giocatore. */ public String getNome() { return nome; /* Restituisce il punteggio corrente di questo Giocatore. */ public int getPunteggio() { return punteggio; /* Cambia il punteggio a questo Giocatore. */ public void setPunteggio(int p) { this.punteggio = p; Definizione di classi