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

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità B1 Le basi della programmazione a oggetti.
Oggetti Java.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Recupero debito quarto anno Secondo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Le gerarchie di tipi.
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.
Fondamenti di Informatica
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Introduzione al linguaggio Java
Derivazione tra classi
Overriding.
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.
Oggetti e dati primitivi
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
CLASSI ASTRATTE L’ereditarietà porta riflettere sul
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Programmazione in Java (8)
Ereditarietà e Polimorfismo
Componenti fondamentali di un programma Java
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: ________________________________________________________________________________.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Programmazione a oggetti
Programmazione ad oggetti
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
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)
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
La Programmazione ad Oggetti
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
La programmazione ad oggetti
28/12/2001package 1 Package Pacchetti e interfacce.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

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à, Polimorfismo. Le classi Astratte Le interfacce Metodi e variabili static

Obiettivi Familiarizzare con l’implementazione Java dei principi dell’O.O. Conoscere i fondamenti della programmazione in Java

Ricapitoliamo quanto detto della programmazione ad oggetti… OOP è un paradigma di programmazione nel quale i problemi sono modellati come in insieme di oggetti Insieme di oggetti con le stesse caratteristiche e gli stessi comportamenti Un oggetto è una istanza di una classe Agli oggetti si applicano i principi di Ereditarietà Incapsulamento Polimorfismo

Esempio…un videogioco Attributi Descrivono lo stato dell’oggetto

Oggetti e classi di oggetti Orco Istanze (Oggetti) Cavaliere

Le classi 1 2 1 2 package it.miopackage.itMaster; Implementazione di un oggetto package it.miopackage.itMaster; import java.util.Iterator; public class Classe{ int attributo; public void metodo(){ //implementazione metodo } 1 2 = nome del file Tutti gli attributi della classe 1 Modificatore d’accesso Tutti i metodi della classe 2

Esempio di classe Java Astrarre il concetto di Auto attraverso la definizione degli attributi/variabili dichiarate di tipo intero (int) e pubbliche (public) File Auto.java class Auto { public int numeroRuote; public int cilindrata; public int porte; ….. public void frenare(){ //.... } Variabili (di) istanza Vs Variabili locali

Modificatori di accesso In Java l’accesso (la visibilità) di proprietà e metodi è regolata dal programmatore facendo ricorso a parole chiave riconosciute dal compilatore private Accessibili solo all’interno della classe default Accessibili all’interno dello stesso package (compilatore) protected Accessibili all’interno dello stesso package e da tutte le classi figlie anche se definite in altri package public Accessibili da tutte le classi del programma Modificatori public e private

Visibilità delle variabili Come C e C++ Java consente di dichiarare variabili in qualunque punto del codice della applicazione Necessario stabilire le regole di visibilità delle variabili SCOPE In generale diremo che una variabile ha “scope” limitato al blocco all’interno del quale è stata dichiarata

Permette l’esecuzione di un programma Java I 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 MAIN Permette l’esecuzione di un programma Java Almeno uno per applicazione public static void main (String args[]) { }

Dichiarazione di un metodo modificatori tipo_di_ritorno nome_del_metodo (parametri) { corpo del metodo } FIRMA 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.

Dichiarazione di un metodo. Esempio public 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 ritorna qualche valore

Invocazione 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 variabili Es. fiat500.cilindrata Vedremo che non è così!

Istanziazione di un oggetto: i costruttori 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. Esempio OggettoX istanzaOggetto = new OggettoX(); Viene allocata la memoria necessaria per il nostro oggetto e viene ritornata la locazione in memoria della entità creata Di solito un costruttore è utilizzato per inizializzare le variabili d’istanza di un oggetto. Overloading dei costruttori. Al programmatore è consentito scrivere più di un costruttore per una data classe a seconda delle necessità di disegno dell’oggetto

I 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 numeroRuote Costruttore 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

Incapsulamento Processo di mascheramento dei dettagli dell’implementazione ad altri oggetti per evitare riferimenti incrociati In Java si ottiene costruendo delle Classi dotate di ATTRIBUTI PRIVATE METODI DI ACCESSO AGLI ATTRIBUTI PUBLIC private int attributo; Lettura attributo Modifica attributo GETTER SETTER public int getAttributo(){ return this.attributo; } public void setAttributo(int nuovoValore ){ this.attributo= nuovoValore; }

Esempio: costruiamo la classe Automobile Poniamoci queste domande: Quali proprietà possiede? Quali valori possono assumere? Possono essere modificate? Quali azioni può svolgere? … Creiamo diagramma della classe secondo standard UML Istanziamola e chiamiamo dei metodi Scriviamo la classe in Java

Parentesi necessaria… Primitivi Cambia modalità di memorizzazione 2 tipi di dato Oggetti RIFERIMENTI int a=5; String b=“test”; a 5 b valore puntatore test String HEAP STACK 0B345 Diversità: Inizializzazione e creazione, Valore di default, Metodi associati alle istanze GC e oggetti non più referenziati NB == confronta indirizzi di memoria

Riferimento 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?

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?

Creazione di una gerarchia Ereditarietà Meccanismo tramite il quale un oggetto è in una relazione logica con un altro Sconveniente scrivere una classe per ogni oggetto che contenga tutte le caratteristiche Creazione di una gerarchia tra le classi super-classe sotto-classe EXTENDS Definita in modo generico Perfezionata EREDITA proprietà e metodi AGGIUNGE proprietà e metodi PADRE Aumenta specificità Esercizio: Mezzi di trasporto. Disegniamo la gerarchia FIGLIA

Implementa in modo diverso i metodi della classe padre Ereditarietà in Java Parola chiave EXTENDS per definire la relazione di ereditarietà class Auto extends MezziDiTrasporto{ ….. } Tutte le classi in Java ereditano da Object. Se non viene specificato, il compilatore lo fa implicitamente. Java non permette l’ereditarietà Multipla (Vs C++). Eseguita attraverso le INTERFACCE Classe che eredita accede alla classe padre attraverso l’istruzione SUPER. Classe figlia si distingue dalla classe padre: Per estensione Per ridefinizione Implementa in modo diverso i metodi della classe padre Aggiunge nuovi attributi/metodi

Ereditarietà e costruttori public class Persona { String nome; public Persona(){} public Persona(String nome){ this.nome=nome; } Prima operazione di ogni costruttore Chiamata costruttore classe padre Object Classe estesa public class Studente extends Persona { String matricola; public Studente (){} public Studente (String nome, String matricola){ super(nome); this. matricola = matricola; } Se manca, chiamato costruttore vuoto

Lavoriamo su questo esempio 1 Creiamo le due classi In una terza classe con Main, istanziamo e lavoriamo sui due oggetti 2

Ereditarietà e classi Astratte L’ereditarietà porta riflettere sul processo di astrazione e di modellizzazione del dominio Progettata soltanto per svolgere la funzione di classe base Spesso è utile scrivere una o più classi GENERICHE, il cui scopo è predisporre un’interfaccia di metodi implementati diversamente da tutte le classi figlie ma per derivarne altre classi, che dettaglieranno (specificandole) le operazioni qui solo dichiarate non viene creata per derivarne istanze ABSTRACT 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

Esempio di classi Astratte IL 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”? per fattorizzare aspetti comuni classificazione degli oggetti del mondo public abstract class Animale { public abstract String verso(); public abstract String si_muove(); public abstract String vive(); } Procediamo con la tassonomia..

movimento della manopola Java e il Polimorfismo Possibilità per i metodi di assumere forme, cioè implementazioni, diverse all’interno della gerarchia delle classi Tutti i veicoli a motore possiedono il metodo accelera automobile moto pressione del pedale movimento della manopola Consente ad oggetti differenti (ma collegati tra loro) la flessibilità di rispondere in modo 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

La parola chiave interface serve a creare classi astratte pure Le Interfacce in Java La parola chiave interface serve a creare classi astratte pure Può contenere SOLO costanti metodi d'istanza astratti PRIVI DI IMPLEMENTAZIONE Non può contenere: Costruttori, Variabili statiche, Variabili di istanza, Metodi statici. Serve 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.

Interfacce: esempio interface Strumenti { String descrizione = "strumento musicale"; void suona() ; } IMPLICITAMENTE static e final PROTOTIPO del metodo: Tipo Ritorno Nome Parametri class Flauto implements Strumenti { public void suona() { System.out.println(" fiuuuuuuu "); }

Metodi e variabili Statiche 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 DIRETTAMENTE ALLA CLASSE, SENZA PRIMA ISTANZIARLA Dichiarati con la parola riservata STATIC Esempi di metodi statici classici: Metodo MAIN System.out….