java base iv: java e la programmazione o.o.. argomenti classi e oggetti in java i metodi i...

31
Java base IV: Java base IV: Java e la Java e la programmazione O.O. programmazione O.O.

Upload: fausto-rizzi

Post on 01-May-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Java base IV:Java base IV:Java e la programmazione Java e la programmazione

O.O.O.O.

Page 2: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Argomenti

• Classi e oggetti in Java• I metodi• I costruttori• Principi di programmazione O.O. in Java:

– Incapsulamento,– Ereditarietà,– Polimorfismo.

• Le classi Astratte• Le interfacce• Metodi e variabili static

Page 3: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Obiettivi

• Familiarizzare con l’implementazione Java dei principi dell’O.O.

• Conoscere i fondamenti della programmazione in Java

Page 4: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Ricapitoliamo quanto detto della Ricapitoliamo quanto detto della programmazione ad oggetti…programmazione ad oggetti…

OOP è un paradigma di programmazione nel quale i problemi sono OOP è un paradigma di programmazione nel quale i problemi sono modellati come in insieme di modellati come in insieme di oggettioggetti

Un oggetto è una istanza di una classeclasse

Insieme di oggetti con le stesse caratteristiche e gli stessi comportamenti

Agli oggetti si applicano i principi di

Ereditarietà Incapsulamento

Polimorfismo

Page 5: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Esempio…un videogiocoEsempio…un videogioco

Attributi Descrivono lo stato dell’oggetto

Page 6: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Oggetti e classi di oggettiOggetti e classi di oggetti

OrcoOrco

CavaliereCavaliere

Classi

Istanze (Oggetti)

Page 7: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Le classiLe classi

Implementazione di un oggetto

Modificatore d’accesso11 Tutti gli attributi della classe

22 Tutti i metodi della classe

package it.miopackage.itMaster;

import java.util.Iterator;

public class Classe{int attributo;

public void metodo(){//implementazione metodo

}}

11

22

= nome del file

Page 8: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Esempio di classe JavaEsempio di classe Java

class Auto {

public int numeroRuote; public int cilindrata; public int porte; ….. public void frenare(){ //.... }

}

File Auto.java Astrarre il concetto di Auto

attraverso la definizione degli

attributi/variabili dichiarate di

tipo intero (int) e pubbliche

(public)

Variabili (di) istanzaVariabili (di) istanza

VsVs

Variabili localiVariabili locali

Page 9: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Modificatori di accesso Modificatori di accesso In Java l’accesso (la visibilità) di proprietà e metodi è regolata dal

programmatore facendo ricorso a parole chiaveparole chiave riconosciute dal compilatore

private

default

protected

public

Accessibili solo all’interno della classe

Accessibili all’interno dello stesso package e da tutte le classifiglie anche se definite in altri packageAccessibili da tutte le classi del programma

Accessibili all’interno dello stesso package (compilatore)

Modificatori public e private

Page 10: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Visibilità delle variabiliVisibilità delle variabili

Come C e C++ Java consente di dichiarare variabili Come C e C++ Java consente di dichiarare variabili in qualunque punto del codice della applicazione in qualunque punto del codice della applicazione

Necessario stabilire le regole di visibilità delle variabili SCOPESCOPE

In generale diremo che una variabile ha “scope” limitato al blocco all’interno del quale è stata dichiarata

Page 11: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

I metodi in JavaI metodi in Java

Un Metodo è sinonimo di “azione”, attraverso cui

un programma esegue istruzioni gli oggetti comunicano tra loro

Il metodo più importante di Java è il MAINMAIN

Permette l’esecuzione di Permette l’esecuzione di un programma Javaun programma Java Almeno uno per applicazioneAlmeno uno per applicazione

public static void main (String args[]) { }

Page 12: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Dichiarazione di un metodoDichiarazione di un metodo

modificatori tipo_di_ritorno nome_del_metodo (parametri) {corpo del metodo

}

modificatori: parole chiave di Java che possono essere usate per modificare in qualche modo le funzionalità e le caratteristiche di un metodo.

tipo di ritorno: il tipo di dato che un metodo restituisce dopo essere stato chiamato

nome del metodo: identificatore utilizzato quando si chiama il metodo

parametri: dichiarazioni di variabili che potranno essere passate al metodo quindi sfruttate nel corpo del metodo al momento della chiamata

corpo del metodo: insieme di comandi che verranno eseguiti quando il metodo sarà chiamato.

FIRMA DEL METODO

Page 13: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Dichiarazione di un metodo. EsempioDichiarazione di un metodo. Esempiopublic class SerieNumeri { private int serie[ ]; private int n;

public SerieNumeri ( String s[ ] ) { n = s.length; serie = new int[n]; for (int i=0 ;i < n; i++){ serie[i] = Integer.parseInt(s[i]); } }

public double calcoloMedia () { int totale = 0; for(int i=0; i < n; i++){ totale += serie[i]; } return( (float) totale/n); } }

File SerieNumeri.java

Se il metodo ritornaqualche valore

Page 14: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Invocazione di un metodoInvocazione di un metodo

public static void main (String args[ ] ){ SerieNumeri a = new SerieNumeri(args); System.out.println("La media e' "+a.calcoloMedia()); }

} //chiusura classe SerieNumeri

L’ accesso al metodo calcoloMedia avviene con l’operatore “dot” (.)

La sintassi da utilizzare per l’invocazione è

nomeOggetto.nomeMetodo;

In linea teorica ciò vale anche per le variabiliEs. fiat500.cilindrata

Vedremo che non è così!

Page 15: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Istanziazione di un oggetto: i Istanziazione di un oggetto: i costruttoricostruttori

Il costruttore è un “metodo speciale” avente queste

caratteristiche:

1. Ha lo stesso nome della classe

2. Non ha tipo di ritorno

3. È chiamato ogni volta che è istanziato un oggetto

4. È presente in ogni classe. Se il programmatore non lo

introduce, ne

viene generato uno vuoto dal compilatore a run-time.OggettoX istanzaOggetto = newnew OggettoX();

Di solito un costruttore è utilizzato per inizializzare le variabili d’istanza di un oggetto.

EsempioEsempio

Viene allocata la memoria necessaria per il nostro oggetto e viene ritornata la locazione in memoria della entità creata

OverloadingOverloading dei costruttori. Al programmatore è consentito scrivere più di un costruttore per una data classe a seconda delle necessità di disegno dell’oggetto

Page 16: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

I costruttori: esempioI costruttori: esempio

class Auto {

public int numeroRuote; public Auto(){ this.numeroRuote=4; }

public Auto(int numeroRuote){ this.numeroRuote= numeroRuote; }

}

Costruttore vuoto che valorizza

di default l’attributo

numeroRuoteCostruttore che valorizza

l’attributo numeroRuote con il

valore del parametro passato

Si riferisce al valore dell’attributo

numeroRuote per l’istanza che si sta

creando

Page 17: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

IncapsulamentoIncapsulamento

Processo di mascheramento dei dettagli dell’implementazione ad altri Processo di mascheramento dei dettagli dell’implementazione ad altri oggetti per evitare riferimenti incrociati oggetti per evitare riferimenti incrociati

In Java si ottiene costruendo delle Classi dotate diIn Java si ottiene costruendo delle Classi dotate di

ATTRIBUTI ATTRIBUTI PRIVATEPRIVATE METODI DI ACCESSOMETODI DI ACCESSO AGLI ATTRIBUTI AGLI ATTRIBUTI PUBLICPUBLIC

Lettura attributoLettura attributo Modifica attributoModifica attributo

GETTER SETTER

private int attributo;

public int getAttributo(){ return this.attributo;}

public void setAttributo(int nuovoValore ){ this.attributo= nuovoValore;}

Page 18: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Esempio: costruiamo la classe Esempio: costruiamo la classe AutomobileAutomobile

• Quali proprietà possiede?• Quali valori possono assumere? • Possono essere modificate?• Quali azioni può svolgere?• …

Poniamoci queste domande:Poniamoci queste domande:

Scriviamo la

classe in Java

Creiamo

diagramma della

classe secondo

standard UML

Istanziamola e

chiamiamo dei

metodi

Page 19: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Parentesi necessaria…Parentesi necessaria…

GC e oggetti non più referenziatiGC e oggetti non più referenziati

2 tipi di dato2 tipi di dato

PrimitiviPrimitivi

OggettiOggetti RIFERIMENTIRIFERIMENTI

Cambia modalità di memorizzazione

int a=5;

String b=“test”;

aa55

bb

valorevalore

puntatorepuntatore test

StringString

HEAPHEAPSTACKSTACK

0B345

Diversità:Diversità:

Inizializzazione e creazione,Inizializzazione e creazione,

Valore di default,Valore di default,

Metodi associati alle istanzeMetodi associati alle istanze == confronta indirizzi di memoria== confronta indirizzi di memoria

NBNB

Page 20: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Riferimento Vs ValoreRiferimento Vs Valore

int x = 4;int y;

y = x ;

System.out.println("x vale : " + x) ;System.out.println("y vale : " + y) ;

y = 7 ;

System.out.println("x vale : " + x) ;System.out.println("y vale : " + y) ;

Qual è l’output?Qual è l’output?

Page 21: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Riferimento Vs Valore (2)Riferimento Vs Valore (2)

Dimension x = new Dimension(4, 4);Dimension y;

y = x;

System.out.println("x vale : " + x) ;System.out.println("y vale : " + y) ;

y.setSize(2, 2); // Modifica le coordinate

System.out.println("x vale : " + x) ;System.out.println("y vale : " + y) ;

Qual è l’output?Qual è l’output?

Page 22: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

EreditarietàEreditarietà

Creazione di una Creazione di una gerarchiagerarchia tra le classitra le classi

Meccanismo tramite il quale un oggetto è in una relazione logicarelazione logica con un altro

Sconveniente scrivere una classe per ogni oggetto che contenga tutte

le caratteristiche

Definita in modo generico

Perfezionata

EREDITAEREDITA proprietà e

metodi

AGGIUNGEAGGIUNGE proprietà e

metodi

super-classesuper-classe

sotto-classesotto-classe

EXTENDSEXTENDS

PADREPADRE

FIGLIAFIGLIA

Aumenta specificità

Esercizio: Mezzi di trasporto. Disegniamo la gerarchiaEsercizio: Mezzi di trasporto. Disegniamo la gerarchia

Page 23: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Ereditarietà in JavaEreditarietà in Java

Parola chiave Parola chiave EXTENDSEXTENDS per definire la relazione di ereditarietà per definire la relazione di ereditarietà

class Auto extendsextends MezziDiTrasporto{ ….. }

Tutte le classi in Java ereditano da Tutte le classi in Java ereditano da ObjectObject. Se non viene specificato, il . Se non viene specificato, il compilatore lo fa implicitamente.compilatore lo fa implicitamente.

Java Java nonnon permette l’ereditarietà Multipla (Vs C++). permette l’ereditarietà Multipla (Vs C++).

Eseguita attraverso le Eseguita attraverso le INTERFACCEINTERFACCE

Classe che eredita accede alla classe padre attraverso l’istruzione Classe che eredita accede alla classe padre attraverso l’istruzione SUPER.SUPER.

Classe figlia si distingue dalla classe padre:Classe figlia si distingue dalla classe padre:

Per Per estensioneestensione Per Per ridefinizioneridefinizione

Aggiunge nuovi attributi/metodiAggiunge nuovi attributi/metodi Implementa in modo diverso i metodi della Implementa in modo diverso i metodi della classe padreclasse padre

Page 24: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Ereditarietà e costruttoriEreditarietà e costruttoripublic class Persona { String nome; public Persona(){}

public Persona(String nome){ this.nome=nome; }}

public class Studente extends Persona { String matricola; public Studente (){}

public Studente (String nome, String matricola){ super(nome);super(nome); this. matricola = matricola; }}

Prima operazione di ogni costruttorePrima operazione di ogni costruttore

Chiamata costruttore classe padreChiamata costruttore classe padre

Classe estesaClasse estesa

Se manca, chiamato costruttore vuotoSe manca, chiamato costruttore vuoto

ObjectObject

Page 25: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Lavoriamo su questo esempioLavoriamo su questo esempio

Creiamo le due classiCreiamo le due classi

In una terza classe con Main, istanziamo eIn una terza classe con Main, istanziamo elavoriamo sui due oggettilavoriamo sui due oggetti

11

22

Page 26: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Ereditarietà e classi AstratteEreditarietà e classi Astratte

• una classe avente anche solo un metodo abstract è astratta, e deve essere dichiarata abstract essa stessa

• una classe astratta può però anche non avere metodi dichiarati abstract • una sottoclasse di una classe astratta è anch’essa astratta, se non

ridefinisce tutti i metodi che erano astratti nella classe base

L’ereditarietà porta riflettere sul processo di astrazione e di modellizzazione del dominio

Spesso è utile scrivere una o più classi GENERICHEGENERICHE, il cui scopo è predisporre un’interfaccia di metodi implementati diversamente da tutte le classi figlie

Progettata soltanto per svolgere la

funzione di classe classe basebase

non viene creata per derivarne istanze ma per derivarne altre classi, che dettaglieranno (specificandole) le

operazioni qui solo dichiarate

ABSTRACTABSTRACT

Page 27: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

public abstract class Animale {

public abstract String verso();

public abstract String si_muove();

public abstract String vive();

}

Esempio di classi AstratteEsempio di classi Astratte

IL REGNO ANIMALEIL REGNO ANIMALE

• ogni animale ha un qualche verso

• ogni animale si muove in qualche modo

• ogni animale vive in un qualche ambiente

non esiste “il generico animale”!

perché introdurre una tale classe “animali”?perché introdurre una tale classe “animali”?

per fattorizzare aspetti comuni classificazione degli oggetti del mondo

Procediamo con la tassonomia..Procediamo con la tassonomia..

Page 28: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Java e il PolimorfismoJava e il PolimorfismoPossibilità per i metodi di assumere forme, cioè implementazioni, diverse Possibilità per i metodi di assumere forme, cioè implementazioni, diverse

all’interno della gerarchia delle classiall’interno della gerarchia delle classi

Tutti i veicoli a motore possiedono il metodo Tutti i veicoli a motore possiedono il metodo acceleraaccelera

automobile

pressione del pedale

moto

movimento della manopola

Consente ad oggetti differenti (ma collegati tra Consente ad oggetti differenti (ma collegati tra loro) la flessibilità di rispondere in modo loro) la flessibilità di rispondere in modo differente allo stesso tipo di messaggio. differente allo stesso tipo di messaggio.

Creiamo classe Aeroporto che implementa un metodo abilita_decollo e che accetta come

parametro un velivolo…

Nel metodo main proviamo a chiamare il metodo passando i diversi tipi di velivolo e osserviamo

cosa succede

Page 29: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Le Interfacce in JavaLe Interfacce in Java

• CostruttoriCostruttori,,

• Variabili statiche,Variabili statiche,

• Variabili di istanzaVariabili di istanza,,

• Metodi statici.Metodi statici.

La parola chiave interface serve a creare classi astratte pure

Può contenere SOLO

costanti metodi d'istanza astratti

Non può contenere:Non può contenere:

PRIVI DI IMPLEMENTAZIONEPRIVI DI IMPLEMENTAZIONE

Serve a fornire una FORMAServe a fornire una FORMA

Per crearne una è sufficiente utilizzare la parola chiave interface invece di class

Per implementare una interfaccia si utilizza la parola chiave implements

Interfacce possono estendere PIU’ interfacce contemporaneamente.

Classe può implementare PIU’ interfacce contemporaneamente.

Page 30: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Interfacce: esempioInterfacce: esempio

interface Strumenti {

String descrizione = "strumento musicale";

void suona() ;

}

IMPLICITAMENTE IMPLICITAMENTE static e finalstatic e final

class Flauto implements Strumenti {

public void suona() {

System.out.println(" fiuuuuuuu ");

}

}

PROTOTIPO del metodo:PROTOTIPO del metodo:

Tipo RitornoTipo Ritorno

NomeNome

ParametriParametri

Page 31: Java base IV: Java e la programmazione O.O.. Argomenti Classi e oggetti in Java I metodi I costruttori Principi di programmazione O.O. in Java: –Incapsulamento,

Metodi e variabili Metodi e variabili StaticheStatiche

Abbiamo visto che in Java per usare un metodo che serve sempre una istanza

Per fortuna è possibile dichiarare un metodo in modo che non richieda una istanza per essere utilizzata

POSSONO ESSERE INVOCATI ACCEDENDO DIRETTAMENTEPOSSONO ESSERE INVOCATI ACCEDENDO DIRETTAMENTEALLA CLASSE, SENZA PRIMA ISTANZIARLAALLA CLASSE, SENZA PRIMA ISTANZIARLA

Dichiarati con la Dichiarati con la parolaparola riservata riservata STATICSTATIC

Esempi di metodi statici classici:Esempi di metodi statici classici:

Metodo MAINMetodo MAIN

System.out….System.out….