Concetti di OOP OOP = Object Oriented Programming OOPS = Object Oriented Mistakes
|
|
- Giuseppe Piccolo
- 7 anni fa
- Visualizzazioni
Transcript
1 Concetti di OOP OOP = Object Oriented Programming OOPS = Object Oriented Mistakes Corso di Programmazione CdS: Informatica e Tecnologie per la Produzione di Software Nicola Fanizzi fanizzi@di.uniba.it
2 2 Introduzione: Concetti OOP Oggetti e Classi classi e istanziazione Information Hiding accesso public e private Ereditarietà estendere le classi: gerarchia ereditarietà multipla: le interfacce accesso protected Polimorfismo late-binding già incontrati
3 3 Ereditarietà Possibilità di definire nuove classi utilizzando come punto di partenza classi pre-esistenti L'ereditarietà organizza astrazioni di oggetti dai più generici ai più specifici L'ereditarietà stabilisce una relazione Esempi: "è è un" Una mountain bike è un tipo di bicicletta Un'utilitaria è un tipo di automobile Un'automobile è un tipo di veicolo Un portatile è un tipo di computer
4 Gerarchia degli Strumenti 4 Musicali Strumenti Musicali Idiofoni Membranofoni Aerofoni Ad Ancia Clarinetto Sassofono Fagotto Cordofoni Elettrofoni A Canna A Bocchino
5 Gerarchia Strumenti Musicali La gerarchia aiuta a comprendere le relazioni e le somiglianze tra gli strumenti musicali Un clarinetto è un tipo di strumento a fiato Gli strumenti a fiato sono un tipo di aerofono NB: La relazione è un è transitiva Un clarinetto è un tipo di strumento a fiato Uno strumento a fiato è un tipo di aerofono Un clarinetto è un tipo di aerofono 5
6 6 Estensione: Terminologia Estensione (o derivazione) ) di classi definizione di una classe a partire da un altra classe mediante l aggiunta e/o la specializzazione di caratteristiche (attributi e/o comportamenti) classe base detta anche super-classe classe estesa detta anche derivata ovvero sotto-classe Clarinetto Strumento ad ancia Aerofono Strumento musicale
7 7 Estensione In Java si utilizza la parola chiave extends nell intestazione della classe derivata NB: non è constentito estendere più di una classe public class Clarinetto extends StrumentoAdAncia {... Un oggetto di una sottoclasse, quindi, ha più tipi: per dichiarazione, è del tipo della sottoclasse è un oggetto specializzato del tipo della superclasse Clarinetto cl1 = new Clarinetto();
8 8 1. class Persona { 2. private String nome; 3. private String cognome; 4. Classe Persona 5. public Persona(String nome, String cognome) { 6. this.nome = nome; this.cognome = cognome; public String getnome() { return nome; public String getcognome() { return cognome; public String tostring() { 14. return getnome() + + getcognome() + "."; // classe Persona
9 9 Classe Studente 1. class Studente extends Persona { 2. private int matricola; public Studente(String n, String c, int m) { 5. super(n, c); this.matricola = m; public String getmatricola() { return matricola; 10. public String tostring() { 11. return getnome() + "" + getcognome() + ", matr. " + matricola + "."; // classe Studente
10 Uso di Classi Derivate Persona p1; 2. Studente s3; p1 = new Persona("Guglielmo", "Cancelli"); 5. System.out.println(p1.getNome()); 6. // Guglielmo 7. System.out.println(p1.toString()); 8. // Guglielmo Cancelli s3 = new Studente("Marisa", "Monte", ); 11. System.out.println(s3.getCognome()); 12. // Monte 13. System.out.println(s3.getMatricola()); 14. // System.out.println(s3.toString()); 16. // Marisa Monte, matr
11 11 Classi Persona e Studente Persona nome : String cognome : String Persona(String n, String c) String getnome() String getcognome() String tostring() p1 : Persona nome = "Guglielmo" cognome = "Cancelli" String getnome() String getcognome() String tostring() estende Studente matricola : int Studente(String n, String c, int m) String getmatricola() String tostring() s3 : Studente nome = "Marisa" cognome = "Monte" matricola = "123456" String getnome() String getcognome() String getmatricola() String tostring()
12 Ereditarietà: Costruttori 12 Quando viene costruito un nuovo oggetto sottoclasse, viene sempre chiamato il costruttore per la superclasse L'invocazione del costruttore della superclasse può essere: implicita chiamato del costruttore di default della classe base esplicita chiamata di super() all'inizio del costruttore della classe derivata
13 Ereditarietà: Costruttori 13 public class B { public B() { System.out.println("B1"); public B(int i) { System.out.println("B2"); // classe B public class C extends B { public C() { System.out.println("C1"); System.out.println(); // segue... //... public C(int a) { System.out.println("C1"); System.out.println(); public C(int a, int b) { super(a + b); System.out.println("C2"); System.out.println(); B1 C1 public static void main (String[] args) { C o1 = new C(); C o2 = new C(2); C o3 = new C(2,4); // classe C B1 C2 B2 C2
14 Accesso protected Nella definizione di gerarchie di classi, l uso dei soli modificatori public e private è troppo restrittivo viene di solito usato il modificatore protected livello di restrizione dell accesso intermedio tra public e private 14
15 Accesso package 15 Un'istruzione package indica che le definizioni successive fanno parte di una collezione più vasta, detta pacchetto Classi (ed interfacce) vanno messe in un pacchetto per motivi organizzativi (modularità) per motivi di accesso Per evitare conflitti sui nomi, Java inserisce le classi di un pacchetto in uno spazio di nomi (name( space) ) separato e distinto (per ogni pacchetto). Specifica predefinita: ai membri di una classe senza specifica di accesso possono accedere solo i membri del pacchetto due classi dello stesso pacchetto hanno implicitamente accesso public e protected
16 Diritti di Accesso 16 restrizione per i membri this sottoclasse pacchetto generale public protected default private
17 package demo; public class P { private int data; public P() { setdata(0); Controllo dell'accesso Esempio 1 public int getdata() { return data; protected void setdata (int v) { data = v; void print() { System.out.println(); 17 // class P
18 import demo.p; public class Q extends P { public Q() { super(); public Q(int v) { setdata(v); Controllo dell'accesso Esempio 2 18 public String tostring(){ int v = getdata(); return String.valueOf(v); public void invalid1() { data = 12; public void invalid2() { print(); // class Q
19 package demo; public class R { private P p; public R() { p = new P(); Controllo dell'accesso public void set(int v) { p.setdata(v); //R Esempio 3 public int get() { return p.getdata(); public void use() { p.print(); public void invalid() { p.data = 12; 19
20 import demo.p; public class S { private P p; public S() { p = new P(); Controllo dell'accesso Esempio 4 public void illegal1 (int v) { p.setdata(v); public void illegal2 () { p.data = 12; 20 public int get() { return p.getdata(); public void illegal3 () { p.print(); // S
21 Attributi ed Ereditarietà 21 Un attributo/metodo di una superclasse può essere nascosto dalla definizione nella sottoclasse di un attributo/metodo con lo stesso nome
22 Attributi ed Ereditarietà 22 public class D { protected int d; public D() { d = 0; public D(int v) { d = v; public void printd() { System.out.println("in D, d = " + d); System.out.println();
23 Attributi ed Ereditarietà 23 public class F extends D { int d; public F(int v) { d = v; super.d = v*100; La classe F estende D e introduce una nuova variabile istanza d. La definizione di d in F nasconde la definizione eseguita da D public void printf() { System.out.println("in D, d = " + super.d); System.out.println("in F, d = " + this.d); System.out.println();
24 Operatore instanceof Persona p; 2. Studente s; 4. p = new Persona("Antonio", "Stornaiolo"); 5. s = new Studente("Emilio", "Solfrizzi", ); 7. System.out.println(p instanceof Persona); 8. // true 9. System.out.println(p instanceof Studente); 10. // false 11. System.out.println(s instanceof Persona); 12. // true 13. System.out.println(s instanceof Studente); 14. // true
25 Ereditarietà e Tipi 25 public class X { public X() { // corpo non necessario public static boolean isx(object v) { return (v instanceof X); public static boolean isobj(x v) { return (v instanceof Object); // X public class Y extends X { public Y() { // corpo non necessario public static boolean isy (Object v) { return (v instanceof Y); // continua...
26 Ereditarietà e Tipi 26 public static void main(string[] args) { X x = new X(); Y y = new Y(); X z = y; System.out.println("x is an Object: " + X.isObj(x)); System.out.println("x is an X: " + X.isX (x)); System.out.println("x is a Y: " + Y.isY(x)); System.out.println("y is an Object: " + X.isObj(y)); System.out.println("y is an X: " + X.isX (y)); System.out.println("y is a Y: " + Y.isY(y)); System.out.println("z is an Object: " + X.isObj(z)); System.out.println("z is an X: " + X.isX (z)); System.out.println("z is a Y: " + Y.isY(z));
27 Ereditarietà e Tipi 27 Output del programma: x is an Object: true x is an X: true x is a Y: false y is an Object: true y is an X: true y is a Y: true z is an Object: true z is an X: true z is a Y: true
28 Finalizzazione di Classi 28 Una classe final è una classe che non può essere estesa Gli sviluppatori potrebbero voler impedire agli utenti di estendere certe classi Rende più difficile l'intromissione mediante sovrascrittura (overriding) final public class U { // U(): costruttore predefinito public U() { // f(): facilitatore public void f() { System.out.println("f() non può essere sovrascritto: U e' finale");
29 Finalizzazione di Metodi 29 Un metodo final è un metodo che non può essere sovrascritto public class V { public V() { final public void f() { System.out.println("il metodo finale f () non può essere sovrascritto");
30 Ereditarietà e Polimorfismo Polimorfismo letteralmente: da molte forme un oggetto di una classe viene considerato secondo varie sfaccettature p. di tipo statico e p. di tipo dinamico (late( binding) in pratica è possibile assegnare il riferimento a un oggetto della classe estesa a una variabile il cui tipo è la classe base 30
31 Polimorfismo 31 Un'espressione di codice può invocare metodi diversi a seconda dei tipi di oggetti manipolati Esempio: overloading della funzione come il metodo min() di java.lang.math Il metodo invocato dipende dai tipi di argomenti effettivi int a, b, c; double x, y, z; c = min(a, b); z = min(x, y); // invoca min() su interi // invoca min() su double
32 Due tipi di polimorfismo Polimorfismo Polimorfismo sintattico: : determinare quale metodo invocare in fase di compilazione Efficiente Facile da comprendere e analizzare Detto anche polimorfismo primitivo Polimorfismo puro: : il metodo da invocare può essere determinato solo in fase di esecuzione 32
33 PolymorphismDemo 33 // Esempio di polimorfismo puro public class PolymorphismDemo { public static void main(string[] args) { Point[] p = new Point[4]; p[0] = new Colored3DPoint(4, 4, 4, Color.BLACK); p[1] = new ThreeDimensionalPoint(2, 2, 2); p[2] = new ColoredPoint(3, 3, Color.RED); p[3] = new Point(4, 4); for (int i = 0; i < p.length; ++i) { String s = p[i].tostring(); System.out.println("p[" + i + "]: " + s); return;
34 1. Persona r; 2. Polimorfismo Esempio 3. r = new Studente("Lino", "Torvaldi", ); System.out.println(r.toString()); 6. // Lino Torvaldi, matr // E NON Lino Torvaldi. 9. System.out.println(r.getMatricola()); 10. // NO, ERRORE (IN COMPILAZIONE)! 34
35 Late Binding 35 public class L { // L(): costruttore predefinito public L() { // f(): facilitatore public void f() { System.out.println("Uso f() di L"); g(); // g(): facilitatore public void g() { System.out.println("Uso g() di L");
36 Late Binding 36 public class M extends L { // M(): costruttore predefinito public M() { // nessun corpo necessario // g(): facilitatore public void g() { System.out.println("Uso g() di M"); public static void main(string[] args) { L l = new L(); M m = new M(); l.f(); m.f(); return; Output Uso f() di L Uso g() di L Uso f() di L Uso g() di M
37 Cast Persona p; 2. Studente s; p = new Studente("Letizia", "Arnaboldi", ); s = (Studente)p; 7. System.out.println("matr." + s.getmatricola()); 8. // matr
38 Classe Object 38 Ogni classe implicitamente o esplicitamente estende la classe più generica Object, definita nel package java.lang Metodi tostring() equals() clone() getclass() finalize() hashcode() wait(), wait(long), wait(long,int) come si vedrà, i metodi possono essere ridefiniti nelle classi derivate
39 1. int x,y; // coordinate 2. Metodo equals Esempio 3. public boolean equals(punto p) { 4. // pre: p!=null 5. return (this.x == p.x) && (this.y == p.y); public boolean equals(object p) { 9. // pre: p!=null 10. boolean uguali; 11. if (p instanceof Punto) 12. uguali = this.equals((punto) p); 13. else 14. uguali = false; 15. return uguali;
40 Classi: Ereditarietà e Progettazione L ereditarietà (in generale) è una tecnica che va tenuta in considerazione nella progettazione delle classi prima si progetta la gerarchia delle classi 40 criteri per decidere se una classe può essere definita come estensione di una classe poi vengono implementate le classi
41 Classi Astratte 41 Una classe astratta è una classe implementata in modo parziale metodi astratti: viene specificata la loro intestazione ma non il loro corpo una classe astratta non può essere istanziata Utilità delle classi astratte definire un comportamento comune le classi derivate dichiarare le funzionalità che devono essere implementate da tutte le classi che la estendono una classe senza metodi astratti è detta concreta
42 Classi Astratte Si supponga di voler creare una classe GeometricObject Esempio Metodi concreti ragionevoli comprendono getposition() setposition() getcolor() setcolor() paint() 42 Per tutti tranne paint(),, è possibile creare implementazioni. Per paint(),, occorre conoscere il tipo di oggetto da disegnare: è un quadrato, un triangolo ecc. Il metodo paint() dovrebbe essere un metodo astratto
43 import java.awt.*; Classi Astratte Esempio 43 abstract public class GeometricObject { Point position; Color color; public Point getposition() { return position; public void setposition(point p) { position = p; public Color getcolor() { return color; public void setcolor(color c) { color = c; abstract public void paint(graphics g);
44 Classe Astratta Forma abstract class Forma { 2. protected String colore; public Forma(String colore) { 5. this.colore = colore; public String colore() { 9. return colore; // Ogni forma deve saper calcolare la sua area 13. public abstract double area();
45 Classe Concreta Quadrato class Quadrato extends Forma { 2. protected double lato; public Quadrato(double lato, String colore) { 5. super(colore); 6. this.lato = lato; public double lato() { 10. return lato; // Restituisce l'area di questo Quadrato 14. public double area() { 15. return lato*lato;
46 Classe Concreta Cerchio class Cerchio extends Forma { 2. protected double raggio; public Cerchio(double raggio, String colore) { 5. super(colore); 6. this.raggio = raggio; public double raggio() { 10. return raggio; // Restituisce l'area di questo Cerchio 14. public double area() { 15. return raggio*raggio*math.pi;
47 Esempio Uso delle Classi Astratte/Concrete 1. Quadrato q; 2. Forma fq; // un quadrato // un altro quadrato q = new Quadrato(5, "bianco"); 5. fq = new Quadrato(10, "rosso"); System.out.println(q.area()); // System.out.println(q.colore()); // bianco 9. System.out.println(q.lato()); // System.out.println(fq.area()); // System.out.println(fq.colore()); // rosso System.out.println(fq.lato()); 15. // NO, errore di compilazione!
48 Interfacce 48 Una interfaccia (interface)) descrive un insieme di comportamenti consiste nella dichiarazione di un certo numero di metodi d istanza e pubblici i metodi sono considerati implicitamente astratti le variabili sono considerate public, final e static una classe implementa (implements)) una interfaccia se implementa tutti i metodi d istanza dichiarati dall interfaccia
49 Interfacce 49 Un'interfaccia è un modello che specifica che cosa deve essere presente in una classe che implementa l'interfaccia Un'interfaccia non può specificare nessuna implementazione dei metodi Tutti i metodi di un'interfaccia sono pubblici Tutte le variabili definite in un'interfaccia sono public, final e static
50 Interfacce 50 Un'interfaccia per un oggetto colorabile public interface Colorable { public Color getcolor(); public void setcolor(color c); Ora l'interfaccia può essere utilizzata per creare classi che implementano l'interfaccia
51 Interfacce 51 import java.awt.*; public class ColorablePoint extends Point implements Colorable { Color color; public ColorablePoint() { super(); setcolor(color.blue);...
52 Esempio Interfaccia Comparable public interface Comparable { 2. /* Confronta questo oggetto con o per determinare 3. * in che relazione d'ordine sono. 4. * Restituisce: 5. * - zero, se sono uguali 6. * - un valore negativo, 7. * se questo oggetto è minore di o 8. * - un valore positivo, 9. * se questo oggetto è maggiore di o. */ public int compareto(object o); 12. le classi String e Integer implementano questa interfaccia
53 Interfacce Implementazione // Un oggetto Numero rappresenta un numero intero, // con un valore che può essere letto e modificato. class Numero implements Comparable { private int valore; public Numero(int v) { this.valore = v; public int getvalore() { return this.valore; public void setvalore(int v) { this.valore = v;... segue... 53
54 Interfacce Implementazione 1. // Verifica la relazione tra numeri. 2. public int compareto(numero o) { 3. // pre: o!=null 4. int confronto; 5. if (this.valore==o.valore) 6. confronto = 0; 7. else if (this.valore<o.valore) 8. confronto = -1; 9. else // this.valore>o.valore 10. confronto = 1; 11. return confronto; // Verifica la rel. tra questo numero e l oggetto o 15. public int compareto(object o) { 16. // pre: o!=null && o instanceof Numero 17. return compareto((numero) o); // classe 54
55 Interfacce e Polimorfismo 55 Una interfaccia definisce un tipo (parziale) che può essere implementato polimorficamente da più classi: il metodo void sort(object[] a) di Arrays ipotizza che gli elementi di a siano tutti di uno stesso tipo che questo tipo implementi l interfaccia Comparable si può usare per ordinare un array di oggetti di tipo Numero
56 Interfacce 56 Rappresentazione int compareto(object o) implementa «interfaccia» Comparable Numero valore : int «costruttore» Numero(int v) «operazioni» int getvalore() void setvalore(int v) int compareto(numero o) int compareto(object o)
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 08 Ereditarietà A. Miola Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Ereditarietà 1 Contenuti!Livelli di astrazione
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 25 Ereditarietà A. Miola Maggio 2012 http://www.dia.uniroma3.it/~java/fondinf/ Ereditarietà 1 Contenuti q Livelli di astrazione
DettagliConcetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio
Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica Introduzione Ereditarietà in Sintesi È uno dei concetti chiave della programmazione orientata agli
DettagliLa classe java.lang.object
La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita
DettagliEreditarietà: concetti di base
: concetti di base L ereditarietà è uno dei concetti base della programmazione ad oggetti Concetto di base: l ereditarietà permette di usare una classe precedentemente definita per la definizione di una
DettagliRiassunto. La programmazione OO. Oggi. Esempio
Riassunto La programmazione OO Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@dimi.uniud.it Programmazione, lezione 17 29 novembre
DettagliCorso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
DettagliRiassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.
OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione,
Dettagli18 - Classi parzialmente definite: Classi Astratte e Interfacce
18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
Dettagli17 - Classi parzialmente definite: Classi Astratte e Interfacce
17 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliEsempi in Java di program.ne O-O
Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico
DettagliClassi astratte. Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura
Classi astratte Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura Rettangolo getarea() Quadrato getarea() getarea() Cerchio
DettagliProgrammazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA
DettagliPolimorfismo. Subtyping-polimorfismo
Polimorfismo 23 Polimorfismo - Esempio Definiamo la classe Persona che gestisce i dati anagrafici di una persona (nome ed età per semplicità) La classe definisce un costruttore e il metodo print che stampa
DettagliEreditarietà. Ereditarietà. Ereditarietà. Ereditarietà
L ereditarietà è il meccanismo attraverso cui viene implementata la relazione di specializzazione (is-a). L ereditarietà è il meccanismo attraverso cui una classe (derivata) eredita da un altra classe
DettagliNON ABBIAMO ANCORA CORRETTO LE PROVETTE!!!
NON ABBIAMO ANCORA CORRETTO LE PROVETTE!!! OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/
Dettagli! 26/5: Fine lezioni teoria. ! ~ Settimana dopo: fine lezioni lab. ! ~ 5/6: Pubblicazione progetto 1o appello. !? Scadenza attività autovalutazione
La programmazione OO Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 15 Calendario provvisorio! 26/5:
DettagliA. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas
Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),
DettagliProgrammazione in Java (I modulo) Lezione 20: Ereditarietà
Programmazione in Java (I modulo) Lezione 20: Ereditarietà Ereditarietà (Inheritance) Il programmatore definisce una classe generale In seguito definisce una classe più specifica Aggiungo soltanto nuovi
DettagliClassi astratte Interfacce
Classi astratte Interfacce Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni 1 Ereditarietà Abbiamo visto come L ereditarietà permette di costruire nuove classi utilizzando
DettagliCorso di Progettazione del Software
T. Mancini & M. Scannapieco S.JOO.3 Java: le classi Object e Class February 2, 2008 p. 1/12 Università degli Studi di Roma La Sapienza Facoltà di Ingegneria Corso di Laurea in Ingegneria Gestionale Corso
DettagliProgrammazione Java Avanzata Programmazione Object- Oriented in Java
Programmazione Java Avanzata Programmazione Object- Oriented in Java Ing. Gianluca Caminiti Testi di Riferimento (Java) Cay Horstmann Concetti di informatica e fondamenti di Java Apogeo, 2007 (Versione
DettagliProgrammazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento
DettagliFondamenti di Informatica
Fondamenti di Informatica (L-Z) Corso di Laurea in Ingegneria Gestionale Object Oriented Programming: Fondamenti Prof. Stefano Mariani Dott. Alket Cecaj Indice Introduzione all OOP Classi vs. oggetti Campi
DettagliEreditarietà e Polimorfismo. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni
Ereditarietà e Polimorfismo Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Ereditarietà L ereditarietà è lo strumento che permette di costruire nuove classi utilizzando
Dettagliereditarietà e polimorfismo
ereditarietà e polimorfismo Java ereditarietà o l ereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza o la nuova classe viene definita esprimendo solamente le differenze
DettagliProgrammazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
DettagliProgrammazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this Davide Di Ruscio Dipartimento di Informatica Università degli Studi dell Aquila diruscio@di.univaq.it. Sommario 2 2» Struttura
DettagliLaboratorio di Sistemi Polimorfismo Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java.
Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java. Di solito se abbiamo la struttura di una classe con gli attributi e i metodi possiamo istanziare
DettagliProgrammazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
DettagliProgrammazione a oggetti
Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi piluc@dsi.unifi.it Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software
DettagliRIUSABILITÀ L OBIETTIVO
RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice già funzionante e corretto il cui sviluppo ha richiesto tempo (anni-uomo)
DettagliProgrammazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce
Programmazione orientata agli oggetti Classi astratte e interfacce 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma solo dichiarati Questi metodi
DettagliE18 Esercizi su ereditarietà e polimorfismo
E18 Esercizi su ereditarietà e polimorfismo Esercizio 1 (esercizio 10.1 del libro di testo). Si scriva una classe Persona dotata dei campi CodiceFiscale, Nome, Cognome e dei metodi per impostare e leggere
DettagliEreditarietà (ultima)
Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction...
DettagliEreditarietà (ultima)
Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction
Dettagli16 - Ereditarietà, tipi e gerarchie
16 - Ereditarietà, tipi e gerarchie Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo
Dettagli16 - Ereditarietà, tipi e gerarchie
16 - Ereditarietà, tipi e gerarchie Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo
DettagliGerarchia di classi Java 1
Specializzare un modello Gerarchia di classi Java Corso di laurea in Una classe modella un pezzo di realtà Una macchina, una moneta, un impiegato Spesso è necessario specializzare la versione originale
DettagliCapitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125
Capitolo 6 Uso della gerarchia c 2005 Pearson Education Italia Capitolo 6-1 / 125 Sommario: Uso della gerarchia 1 Notazione UML per le classi 2 Introduzione alla gerarchia 3 Gerarchia e tipi La gerarchia
DettagliProgrammazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce
Programmazione orientata agli oggetti Classi astratte e interfacce 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma solo dichiarati Questi metodi
DettagliEreditarietà e Polimorfismo
Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le
DettagliCorso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona
di Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona su Sommario di su di di di su Astrazione sugli oggetti di su Il concetto di classe Classe: realizza l astrazione
Dettagli17 - Ereditarietà, tipi e gerarchie
17 - Ereditarietà, tipi e gerarchie Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo
DettagliInformatica Ereditarietà Java. Ereditarietà
Ereditarietà L'ereditarietà consente allo sviluppatore di riutilizzare il codice già scritto creando sottoclassi a partire da classi già definite. La sottoclasse eredita tutti gli attributi e tutti i metodi
DettagliParadigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1
Incapsulamento Paradigmi della PO Ereditarietà Polimorfismo Software per TLC - AA 2008/2009 1 Incapsulamento Una classe contiene dati e metodi Filosofia Ai dati si accede solo attraverso i metodi I metodi
DettagliIl Linguaggio Java. Le interfacce
Il Linguaggio Java Le interfacce Ordinamento dei conti PROBLEMA: si vogliono ordinare i libretti di risparmio (SavingsAccount) in base al loro tasso di interesse REQUISITO: La classe dovrebbe essere ordinabile,
DettagliProgrammazione II. Lezione 18. Daniele Sgandurra 11/1/2011.
Programmazione II Lezione 18 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 11/1/2011 1/26 Programmazione II Lezione 18 11/1/2011 Sommario 1 2/26 Programmazione II Lezione 18 11/1/2011 Parte I 3/26 Programmazione
DettagliProgrammazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
DettagliGerarchia di classi Java 1
Specializzare un modello Gerarchia di classi Java Corso di laurea in Una classe modella un pezzo di realtà Una macchina, una moneta, un impiegato Spesso è necessario specializzare la versione originale
DettagliProgrammazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo
Programmazione orientata agli oggetti Subtyping e polimorfismo 1 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti
DettagliInterfacce. Esempio: interfaccia I con una sola funzione g() public interface I {
Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi
DettagliProgrammazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo
Programmazione orientata agli oggetti Subtyping e polimorfismo 1 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti
DettagliProgrammazione orientata agli oggetti Classi astratte e interfacce
Programmazione orientata agli oggetti Classi astratte e interfacce Fondamenti di Informatica L-B 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma
DettagliUguaglianza e Identità. (no, non avete sbagliato corso )
1 Uguaglianza e Identità (no, non avete sbagliato corso ) Fondamenti di Java Che vuol dire "uguaglianza"? Che vuol dire "Identità"? Che differenza c è? Uguaglianza public class Test { public static void
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Ereditarietà e Polimorfismo: Polimorfismo - d Regole Sintattiche e Semantiche versione 1.2 Questo lavoro è concesso in uso secondo i termini di
DettagliObiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione.
Obiettivi Unità B2 Gli oggetti: concetti avanzati Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione Ereditarietà L ereditarietà permette
DettagliPROGRAMMAZIONE 2 4. Java: un modello operazionale
PROGRAMMAZIONE 2 4. Java: un modello operazionale PR2 2018-2019 1 Abstract Stack Machine Abstract Stack Machine: modello computazionale per Java che permette di descrivere la nozione di stato modificabile
DettagliUguaglianza e copia di oggetti
Uguaglianza e copia di oggetti Sommario 1. Classi Object e Class 2. Uguaglianza superficiale e uguaglianza profonda 3. Copia superficiale e copia profonda 4. Uguaglianza e copia in classi derivate 1 La
Dettagli14 - Metodi e Costruttori
14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
Dettaglie il loro uso: esistente e cambiare quel che va cambiato specializzare (per ereditarietà) la classe Counter public class EsempioNuovo {
APPROCCI PER IL RIUTILIZZO: ricopiare manualmente il codice della classe esistente e cambiare quel che va cambiato creare un oggetto composto che incapsuli il componente esistente... gli inoltri le operazioni
Dettaglie il loro uso: Oggetti composti IL TEMA DELLA RIUSABILITÀ APPROCCI PER IL RIUTILIZZO:
APPROCCI PER IL RIUTILIZZO: ricopiare manualmente il codice della classe esistente e cambiare quel che va cambiato creare un oggetto composto che incapsuli il componente esistente... gli inoltri le operazioni
DettagliImplementare un'interfaccia
Le interfacce Un metodo astratto è un metodo senza corpo, con un ";" dopo l'intestazione. Una interfaccia (interface) in Java ha una struttura simile a una classe, ma può contenere SOLO costanti e metodi
DettagliOOP Ereditarietà A. FERRARI
OOP Ereditarietà A. FERRARI ereditarietà l ereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza la nuova classe viene definita esprimendo solamente le differenze che
DettagliFondamenti di Informatica I
Sapienza Università di Roma, Facoltà di Ingegneria Corso di Fondamenti di Informatica I Canale 1 (A-K) Anno Accademico 2009-2010 Corso di Laurea in Ingegneria Informatica Docente: Camil Demetrescu Esercitatore:
DettagliProgrammazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo
Programmazione orientata agli oggetti Subtyping e polimorfismo 1 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti
DettagliIL CONCETTO DI CLASSE
IL CONCETTO DI CLASSE Una CLASSE riunisce le proprietà di: componente software: può essere dotata di suoi propri dati / operazioni moduli: riunisce dati e relative operazioni, fornendo idonei meccanismi
DettagliEreditarietà. Linguaggi di Programmazione: Paradigmi di Programmazione. Ereditarietà. Sottoclassi. Ereditarietà. Controllo statico dei tipi
Linguaggi di Programmazione: Paradigmi di Programmazione Ereditarietà Meccanismo per lo sviluppo incrementale di programmi Consente di estendere classi preesistenti aggiungendo o modificando componenti
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
DettagliGerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1
Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1 Gerarchia delle classi Una sottoclasse eredita metodi, variabili, etc. dalla superclasse... Per
DettagliOverloading - Overriding
1 Overloading - Overriding Overloading: Funzioni con uguale nome e diversa firma possono coesistere. move(int dx, int dy) move(int dx, int dy, int dz) Overriding: Ridefinizione di una funzione in una sottoclasse
DettagliFondamenti di Informatica T-1. Costruttori Ereditarietà
Costruttori Ereditarietà 2 Costruttori Si occupano della creazione e dell'allocazione in memoria degli oggetti. public class Persona{ //Variabili di istanza private String nome; private String cognome;
DettagliJava Classi wrapper e classi di servizio. Classi di servizio
Java Classi wrapper e classi di servizio 1 Ereditarietà - recap Una classe può derivare da un altra - extends Eredita metodi e attributi (non i costruttori) Aggiunge attributi e metodi, ma può anche ridefinire
DettagliProgrammazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013
Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Paradigma O.O. Oggetti e Classi Ereditarietà Paradigma Object-Oriented Il paradigma O.O. si ispira all ambiente che ci circonda,
DettagliAutovalutazione. OO in Java: classi astratte, interfacce, classi interne. Riassunto: cos è la OOP?
OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione
DettagliL ereditarieta` Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni)
L ereditarieta` Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni) Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino
DettagliPRINCIPI DELLA OOP. Ereditarietà e polimorfismo
PRINCIPI DELLA OOP Ereditarietà e polimorfismo Ereditarietà e specializzazione Una delle caratteristiche distintive del paradigma di programmazione orientato agli oggetti è l'ereditarietà L'ereditarietà
DettagliProprietà delle Classi e degli Oggetti in Java
Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di
DettagliDichiarazione di una classe. Dichiarazione ereditarietà
Introduzione Il Java è un linguaggio di programmazione orientato agli oggetti (OOL), perché permette di realizzare in un programma tutti i concetti alla base dell OOP quali: l astrazione dei dati, mediante
DettagliL ereditarieta` Riuso del software: Ereditarieta`, Composizione, Polimorfismo e Binding Dinamico Ereditarietà Ereditarietà
L ereditarieta` Programmazione in Rete e Laboratorio Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino Riuso del software: Ereditarieta`, Composizione,
DettagliBank account. private double balance; 11/2/2011
Il Linguaggio Java Ereditarietà Bank account class BankAccount { public BankAccount() { balance = 0; } public void deposit(double amount) { balance += amount; } public void withdraw(double amount) { balance
Dettaglipublic double getraggio() restituisce la lunghezza del raggio del cerchio che esegue il metodo.
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 7 settembre 2015 TEMPO DISPONIBILE: 1 ora e 40
DettagliProprietà delle Classi e degli Oggetti in Java
Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di
DettagliCorso di Laurea in Ingegneria Informatica. Corso di Reti di Calcolatori A.A. 2009/2010
Corso di Laurea in Ingegneria Informatica Corso di Reti di Calcolatori l Introduzione ai Thread in Java A.A. 2009/2010 1 Thread Un thread è un flusso sequenziale di esecuzione di istruzioni all interno
DettagliPROGRAMMAZIONE 2 4. Un modello operazionale per Java
PROGRAMMAZIONE 2 4. Un modello operazionale per Java PR2 2017-2018 1 Liste in Java (à la OCaML) class Cons implements StringList { private String head; private StringList tail; public Cons (String h, StringList
DettagliSOMMARIO Tipo di dato astratto (ADT) : Interfacce: interface. TIPI DI DATI ASTRATTI. Polimorfismo: Tipo class. Tipo interface. Tipi run-time: is e as.
SOMMARIO Tipo di dato astratto (ADT) : Interfacce: interface. Polimorfismo: Tipo class. Tipo interface. Tipi run-time: is e as. Confronto tra oggetti: Equals(). IComparable. IComparer. TIPI DI DATI ASTRATTI
DettagliModello procedurale versus modello O-O
Modello procedurale versus modello O-O Quando si scrive un programma si crea dentro il calcolatore un modello di una porzione del mondo reale. I linguaggi di programmazione procedurali consentono di costruire
DettagliLa classe Object. Ce li ha anche HelloWorld!!!
La classe Object Ogni classe estende implicitamente la classe java.lang.object La classe java.lang.object contiene dei metodi che vengono implicitamente ereditati I metodi ereditati sono: clone equals
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Sintassi e Semantica Uso dei Componenti versione 2.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima
DettagliGerarchia di classi Java 1
Costruttori della sottoclasse Gerarchia di classi Java Parte 2 Corso di laurea in Comunicazione digitale I costruttori non vengono ereditati, non essendo membri di classe Vengono definiti esplicitamente
Dettaglipublic BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }
Il Linguaggio Java Le interfacce La classe BankAccount public class BankAccount { public BankAccount() { balance = 0; public BankAccount(double initialbalance) { balance = initialbalance; public void deposit(double
DettagliAltri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E17. C. Limongelli Maggio 2012
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E17 C. Limongelli Maggio 2012 1 Contenuti q Definizione di classi con ereditarietà q Uso di tipi di dati astratti q Ricorsione
DettagliParadigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30
Paradigma a oggetti Programmazione orientata agli oggetti Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30 Programmazione ad oggetti. Si estendono i tipi di dati astratti che permettono:
DettagliProgrammazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice
Programmazione ad oggetti. Paradigma a oggetti Programmazione orientata agli oggetti Si estendono i tipi di dati astratti che permettono: information hiding e incapsulamento nascondo la rappresentazione
Dettagli