Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Documenti analoghi
Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce

ereditarietà e polimorfismo

Programmazione orientata agli oggetti Classi astratte e interfacce

Classi astratte Interfacce

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

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

La classe java.lang.object

OOP Ereditarietà A. FERRARI

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

Informatica Ereditarietà Java. Ereditarietà

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

Programmazione. Cognome... Nome... Matricola... Compitino del 26 gennaio 2009

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Ereditarietà: concetti di base

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

Laboratorio di Sistemi Polimorfismo Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java.

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013

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

Capitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

Esempi in Java di program.ne O-O

Modello procedurale versus modello O-O

E18 Esercizi su ereditarietà e polimorfismo

Programmazione. Cognome... Nome... Matricola... Compitino del 17 gennaio 2007

Array di array. E' possibile creare strutture a matrice (2D, 3D,..., ND), esempio: double [ ][ ] entrate = new double [NANNI][NMESI];

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Lezione 13 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona

Lezione 13 programmazione in Java

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Esercitazione n 3. Capacità di analisi e di estensione di progetti esistenti Linguaggio Java:

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Lezione 13 Classi interne

PRINCIPI DELLA OOP. Ereditarietà e polimorfismo

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

Classi astratte. Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura

CLASSI ASTRATTE - ESERCIZIO

Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili

I Metodi. Fondamenti di Informatica A-K

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

E7 Esercizi sul Capitolo 7 Realizzazione di Classi

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

16 - Ereditarietà, tipi e gerarchie

16 - Ereditarietà, tipi e gerarchie

Corso sul linguaggio Java

Polimorfismo. Subtyping-polimorfismo

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

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

Programmazione I - Preparazione A.A. 2010/2011

Programmazione I - corso B a.a prof. Viviana Bono

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E17. C. Limongelli Maggio 2012

Ereditarietà e Polimorfismo

Gerarchia di classi Java 1

Programma... Autoboxing / unboxing Array Classe Rettangolo / classe Quadrato / Gerarchia e ereditarietà. Laboratorio di Programmazione - Esercitazio 1

Linguaggi di Programmazione II Matricole con le due ultime cifre dispari

A. Ferrari Object Oriented Design

17 - Ereditarietà, tipi e gerarchie

Programmazione in Java

Fondamenti di informatica T-1 (A K) Esercitazione 7: metodi, classi, oggetti

Ereditarietà e polimorfismo

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1

Ereditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

E21 Esercizi sulle collezioni in Java

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

Esempio 2: Subtyping

Progettazione del Software

Programmazione Orientata agli Oggetti in Linguaggio Java

Diagrammi di classe e sistemi orientati agli oggetti

Progettazione del Software

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2. Dispensa E09. C. Limongelli Marzo 2008

Laurea in Informatica. "Programmazione Distribuita" - Prof. Scarano. A.A Università di Salerno 1. Organizzazione della lezione

Uguaglianza e copia di oggetti

LA CLASSE Data ESERCIZIO. Definiamo la classe Data che incapsuli giorno, mese e anno (tutti int)

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

Preparazione allo Scritto di Programmazione

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

Informatica Interfacce Java

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

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

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

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

Transcript:

Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013

Sommario Array di oggetti Gerarchie di Classi Classi astratte Esercizi

Array di oggetti In Java è possibile costruire array di oggetti

public class Persona protected String cognome; protected String nome; protected String codicefiscale; protected String citta; Persona() cognome=null; nome=null; codicefiscale=null; citta=null; Persona (String c,string n,string cf,string ct) cognome=c; nome=n; codicefiscale=cf; citta=ct;

public void setcognome(string cg) cognome=cg; public String getcognome() return cognome; public void setnome(string nm) nome=nm; public String getnome() return nome; public void setcodicefiscale(string cdf) codicefiscale=cdf; public String getcodicefiscale() return codicefiscale;

public void setcitta(string ctt) citta=ctt; public String getcitta() return citta; public String AnnoNascita() String anno; anno=codicefiscale.substring(6,8);/ /metodo che permette di estrarre la sottostringa a partire dalla posizione 6 alla 8 esclusa return anno; public String tostring() return "Nome della persona: "+nome+" "+"Cognome della persona : "+cognome;

class Studente extends Persona private String corsolaurea; private int numeromatricola; Studente(String c,string n,string cd,string ct, String np, int id) super(c,n,cd,ct); corsolaurea=np; numeromatricola=id; public void setcorsolaurea(string npr) corsolaurea=npr;

public String getcorsolaurea() return corsolaurea; public void setnumeromatricola(int idf) numeroimatricola=idf; public int getnumeromatricola() return numeromatricola; @Override public String tostring() return "Nome dello studente: "+nome+" "+"Cognome dello studente : "+cognome;

Array di oggetti di tipo Studente Studente vett[]= new Studente [3]; L unica accortezza, è che in questo caso vanno istanziati anche gli oggetti che formano l array. Nel caso dell esempio ciò può essere fatto nel modo seguente: vett[0] = new Studente ("Rossi","Mario", " RSSMRA83A01H501X","Roma",Ingegneria,23); vett[1] = new Studente ("Bianchi", Francesca", " BNCFNC83A41H501O ","Roma",Fisica,10); vett[2] = new Studente("Verdi", Marcello", " VRDMCL83A30H501F ","Roma",Matematica,30); Array di oggetti

oppure Studente primo=new Studente ("Rossi","Mario", " RSSMRA83A01H501X ","Roma",Ingegneria,23); Studente secondo=new Studente ("Bianchi", Francesca", " BNCFNC83A41H501O ","Roma",Fisica,10); Studente terzo=new Studente ("Verdi", Marcello", " VRDMCL83A30H501F ","Roma",Matematica,30 Studente vett[]=primo,secondo,terzo; Array di oggetti

Esempio di definizione e uso di oggetti di tipo Persona e Array di oggetti di tipo Studente

public class UsaPersona public static void main(string[] args) int anno,ind,app,max,i; String an; Persona p=new Persona( Manzoni", Alessandro", " MNZLSN85C07F205D ", Milano"); String c=p.getcognome(); String n=p.getnome(); an=p.annonascita(); anno=integer.parseint(an); System.out.println("cognome della persona:"+c); System.out.println("il nome della persona:"+n); System.out.println("l'anno di nascita della persona:"+anno);

Persona name=new Persona( Leopardi", Giacomo", " LPRGCM98H29H211C", Recanati"); c=name.getcognome(); n=name.getnome(); an=name.annonascita(); anno=integer.parseint(an); System.out.println("cognome della persona:"+c); System.out.println("il nome della persona:"+n); System.out.println("l'anno di nascita della persona:"+anno);

Studente primo=new Studente ("Rossi","Mario", " RSSMRA83A01H501X ","Roma",Ingegneria,23); Studente secondo=new Studente ("Bianchi", Francesca", " BNCFNC83A41H501O ","Roma",Fisica,10); Studente terzo=new Studente ("Verdi", Marcello", " VRDMCL83A30H501F ","Roma",Matematica,30 Studente vett[]=primo,secondo,terzo;

max=integer.parseint(vett[0].annonascita()); ind=0; for (i=1;i<3;i++) app=integer.parseint(vett[i].annonascita()); if (max<app) max=app; ind=i; System.out.println( lo studente più giovane e':" +vett[ind].getcognome());

Vantaggi dell ereditarietà L ereditarietà facilita il riutilizzo di software estendendone o ridefinendone caratteristiche e comportamenti; è possibile adattare una classe preesistente alle nuove esigenze. Specificare le differenze da una classe simile piuttosto che ridefinire completamente la classe facilita enormemente lo sviluppo di nuovi progetti eliminando ridondanza di codice. L ereditarietà non è un meccanismo di inclusione del codice di una classe base in una derivata. Non c è copia di codice, ogni modifica della struttura di una classe base si ripercuote automaticamente nelle sue classi derivate

Gerarchia di classi L ereditarietà può estendersi a più livelli generando quindi una gerarchia di classi. Una classe derivata può, a sua volta, essere base di nuove sottoclassi. Sportivo è sottoclasse di Persona ed è superclasse di Nuotatore, Motociclista e Calciatore. Nella parte alta della gerarchia troviamo le classi generiche, scendendo aumenta il livello di specializzazione.

Gerarchia di classi class Persona class Sportivo extends Persona class Nuotatore extends Sportivo class Motociclista extends Sportivo class Calciatore extends Sportivo

Gerarchia di classi: Esercizio Codificare in Java la gerarchia di classi riportata in figura

Gerarchia di classi: Esercizio Codificare in Java la gerarchia di classi riportata in figura class Computer class PC extends Computer class Server extends Computer class Notebook extends PC class Desktop extends PC

Classi astratte Man mano che si sale nella gerarchia dell ereditarietà, le classi diventano sempre più generiche e spesso più astratte. Ad un certo punto la classe superiore diventa a tal punto generica (astratta) che la si può pensare come una base di riferimento per la costruzione delle altre classi piuttosto che come una classe concretamente utilizzabile.

Classi astratte Sono usate come superclassi astratte per sottoclassi concrete e per dichiarare riferimenti a variabili. Diverse gerarchie di ereditarietà hanno superclassi astratte che occupano i livelli più alti. Per dichiarare una classe astratta va usata la parola chiave abstract Le classi abstract contengono almeno un metodo astratto abstract (solo definito e non implementato) Tutte le sottoclassi concrete derivate da una classe astratta DEVONO fare l override dei metodi astratti

Esempio Figura protected double base abstract protected double altezza + Figura(double b, double h) + setbase(double ba) + double getbase() + setaltezza(double al) + double getaltezza() + double area (double a, double h) abstract

Esempio abstract class Figura protected double base; protected double altezza; Figura(double b,double h) base=b; altezza=h; Figura protected double base protected double altezza + Figura(double b, double h) + setbase(double ba) abstract public void setbase(double ba) base=ba; public double getbase() return base; + double getbase() + setaltezza(double al) + double getaltezza() + double area (double a, double h) abstract

Esempio public void setaltezza(double al) altezza=al; public double getaltezza() return altezza; Figura protected double base protected double altezza + Figura(double b, double h) + setbase(double ba) + double getbase() + setaltezza(double al) + double getaltezza() abstract abstract double area(double a,double h); + double area (double a, double h) abstract Nella rappresentazione UML metodi e classi astratte sono in corsivo

Esempio public void setaltezza(double al) altezza=al; public double getaltezza() return altezza; Figura Un metodo astratto consiste in una protected double base semplice definizione (in quanto non protected double altezza implementa codice), pertanto si definisce omettendo + Figura(double b, le double parentesi h) + setbase(double ba) graffe. + double getbase() + setaltezza(double al) + double getaltezza() abstract abstract double area(double a,double h); + double area (double a, double h) abstract Nella rappresentazione UML metodi e classi astratte sono in corsivo

Classi astratte Java permette di definire classi astratte ovvero classi in cui uno o più metodi non sono implementati, ma solo dichiarati, non hanno un corpo tra parentesi graffe ma solo la dichiarazione terminata con ; questi metodi sono detti astratti e vengono marcati con la parola chiave abstract. Una classe astratta deve essere marcata a sua volta con la parola chiave abstract Attenzione: un metodo vuoto () e un metodo astratto sono due cose diverse!! Una classe che ha almeno un metodo astratto si dice classe astratta Le classi non astratte si dicono concrete

Classi astratte Si noti che che non è possibile creare istanze di una classe astratta! Infatti una classe astratta viene utilizzata come superclasse comune per un insieme di sottoclassi concrete Queste sottoclassi concrete derivate da una classe astratta DEVONO fare l override dei metodi astratti!

Esempio class Rettangolo extends Figura Rettangolo(double b,double h) super(b,h); Figura protected double base protected double altezza + Figura(double b, double h) + setbase(double ba) + double getbase() abstract public double area(double b,double h) double ar=base*altezza; return ar; Rettangolo + setaltezza(double al) + double getaltezza() + double area (double a, double h) abstract Triangolo + Rettangolo(double b, double h) + double area (double a, double h) + Triangolodouble b, double h) + double area (double a, double h)

Esempio class Triangolo extends Figura Triangolo(double b,double h) super(b,h); Figura protected double base protected double altezza + Figura(double b, double h) + setbase(double ba) + double getbase() abstract + setaltezza(double al) public double area(double b,double h) + double getaltezza() + double area (double a, double h) double ar=(base*altezza)/2; abstract return ar; Rettangolo Triangolo + Rettangolo(double b, double h) + double area (double a, double h) + Triangolodouble b, double h) + double area (double a, double h)

Esempio Metodi e classi astratte sono in corsivo class TestUsaFigura public static void main(string[] args) double arearet,areatri; Figura protected double base protected double altezza + Figura(double b, double h) abstract Metodi e classi astratte sono in corsivo Rettangolo objr=new Rettangolo(6.6,3.0); + setbase(double ba) arearet=objr.area(6.6,3.0); + double getbase() System.out.println("l'area del rettangolo:" +arearet); + setaltezza(double al) + double getaltezza() triangolo objt=new triangolo(10.2,7.5); areatri=objt.area(10.2,7.5); + double area (double a, double h) abstract System.out.println("l'area del triangolo:" +areatri); Rettangolo Triangolo + Rettangolo(double b, double h) + Triangolodouble b, double h) + double area (double a, double h) + double area (double a, double h)

class UsaTriangolo public static void main(string[] args) int ar,al,bas; Triangolo objs=new Triangolo(3,6); ar=objs.area(); System.out.println("valore dell'area:" +ar); Esempio Figura protected double base abstract objs.setaltezza(10); protected double altezza objs.setbase(20); ar=objs.area(); System.out.println("la nuova area:" +ar); + Figura(double b, double h) + setbase(double ba) + double getbase() al=objs.getaltezza(); bas=objs.getbase(); System.out.println("la nuova altezza:" +al); System.out.println("la nuova base:" +bas); + setaltezza(double al) + double getaltezza() + double area (double a, double h) abstract Rettangolo Triangolo + Rettangolo(double b, double h) + double area (double a, double h) + Triangolodouble b, double h) + double area (double a, double h)

Regole Una classe abstract ha almeno un metodo astratto Non è possibile creare oggetti di classi astratte. Es. new Figura(6.6,3.0) Causa un errore È possibile creare solo oggetti di sottoclassi concrete. Es. new Rettangolo (6.6,3.0) OK

Esempio public abstract class Programmatore private String nome; private String cognome; private int anniesperienza; public Programmatore(String n, String c, int a) nome=n; cognome=g; anniesperienza=a; public abstract void programma();

public abstract class Programmatore private String nome; private Una String classe cognome; astratta è una classe che contiene metodi astratti (almeno uno ) e non può essere private int anniesperienza; istanziata direttamente, ma solo attraverso le sottoclassi ( che effettuano l'override dei metodi public astratti) Programmatore(String che derivano da n, essa. String c, int a) nome=n; Le classi astratte vengono utilizzata quando si cognome=g; preferisce definire un determinato concetto in modo generalizzato e specificare le caratteristiche anniesperienza=a; attraverso l override delle classi derivate public abstract void programma();

public abstract class Programmatore private String nome; private String cognome; private int anniesperienza; public Programmatore(String n, String c, int a) nome=n; cognome=g; Un metodo astratto consiste in una semplice anniesperienza=a; definizione (in quanto non implementa codice), pertanto si definisce omettendo le parentesi graffe. public abstract void programma();

public ProgrammatoreJava extends Programmatore public Programmatore(String n, String c, int a) super(n,c,a); public void programma() )

Esercizio Scrivere una gerarchia di classi per rappresentare figure geometriche. La gerarchia prevede una superclasse astratta Shape da cui derivano le classi TwoDimensionalShape e ThreeDimensionalShape, anch'esse classi astratte, e le sottoclassi concrete Sfera, Parallelepipedo, Cubo, Rettangolo, Quadrato, Cerchio. Devono essere disponibili i metodi perimetro, area e volume, in modo che questi calcoli possano essere effettuati, quando istanzieremo gli oggetti delle sottoclassi concrete della gerarchia. Scrivere un programma per testare la gerarchia Shape e i suoi metodi.

Cosa abbiamo imparato? E possibile definire un array di oggetti: auto vett[]= new auto[10] Cos è una classe astratta, definendone le caratteristiche principali: vengono dichiarate tramite la parola chiave abstract e contengono almeno un metodo astratto. Tutte le sottoclassi derivate da un metodo astratto devono fare l override dei metodi astratti. Un metodo astratto consiste in una semplice definizione, pertanto si definisce omettendo le parentesi graffe.