Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Lezione 3.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

© 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
Informatica Recupero debito quarto anno Terzo incontro.
Unità D2 Database nel web. Obiettivi Comprendere il concetto di interfaccia utente Comprendere la struttura e i livelli che compongono unapplicazione.
Algoritmi e Programmazione
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.
Derivazione tra classi
Approfondimento delle classi
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Java base IV: Java e la programmazione O.O.
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
Programmazione in Java
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Componenti fondamentali di un programma Java
Java Contardi Carlo A.S. 2008/09.
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
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: ________________________________________________________________________________.
© M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti A.A Package.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Lezioni 1-2.
Programmazione a oggetti
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Libreria standard.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
CORSO DI PROGRAMMAZIONE II Lezione 22
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Alberi bilanciati (rif. Algoritmi in Java, di R. Sedgewick)
Una "vera" classe.. ..un esempio pratico: la calcolatrice
I processi.
Programmazione ad oggetti
Incapsulamento e information hiding
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
Tecnologie di InternetDocument Type Definition Dott. Nicola Dragoni Document Type Definition  Document Type Definition (DTD)  Documento XML valido 
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.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Ese 1 (del 31 Marzo 2004). Il compilatore Non esegue il programma, non guarda i valori che possono assumere di volta in volta le variabili, non fa assunzioni.
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)
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.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
1 Java primo contatto Quando le classi fanno la differenza …
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte I.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Metodi in Java. Note Identificazione input: (il raggio è un numero reale !!!) Identificazione delle operazioni necessarie al calcolo Area=r*r*PI Circonferenza=2*r*PI.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Lezione 3

 Un package permette di raggruppare in un'unica entità complessa classi Java logicamente correlate  Fisicamente il package non è altro che una cartella del nostro sistema operativo che contiene classi, ma non tutte le cartelle sono package.  Per eleggere una cartella a package, una classe Java deve dichiarare nel suo codice la sua appartenenza a quel determinato package, ed inoltre ovviamente, deve risiedere fisicamente all’interno di essa. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/20152

“un modificatore sta ad un componente di un’applicazione Java come un aggettivo sta ad un sostantivo nel linguaggio umano”  Un modificatore è una parola chiave capace di cambiare il significato di un componente di un’applicazione Java  Si possono anteporre alla dichiarazione di un componente di un’applicazione Java anche più modificatori alla volta, senza tener conto dell’ordine in cui vengono anteposti ◦ Una variabile dichiarata static public avrà le stesse proprietà di una dichiarata public static. 3 Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

4

5  I modificatori di accesso regolano la visibilità e l’accesso ad un componente Java:  public : Un membro (attributo o metodo) di una classe dichiarato pubblico sarà accessibile da una qualsiasi classe situata in qualsiasi package. Una classe dichiarata pubblica sarà anch’essa visibile da un qualsiasi package.

6 Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015  protected : Questo modificatore definisce per un membro il grado più accessibile dopo quello definito da public.  Un membro protetto sarà infatti accessibile all’interno dello stesso package ed in tutte le sottoclassi della classe in cui è definito, anche se non appartenenti allo stesso package.

7 Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015 Attenzione a protected !  Molti programmatori preferiscono ereditare nelle sottoclassi direttamente una variabile protected piuttosto che lasciarla private, ed ereditarne i metodi “set “e “get” pubblici  In realtà nella maggior parte dei casi non c’è una vera necessità di utilizzare questo modificatore

8 Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015 L’utilizzo di tale modificatore, implica anche una strana limitazione:  se una classe A definisce un metodo m() protetto, un’eventuale sottoclasse B appartenente ad un package diverso da quello di A, può accedere al metodo della superclasse mediante il reference super, ma non può invocare tale metodo su altre istanze di altre classi che non siano di tipo B

9 Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

10 Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015  default : Possiamo evitare di usare modificatori sia relativamente ad un membro (attributo o metodo) di una classe, sia relativamente ad una classe stessa.  Se non anteponiamo modificatori d’accesso ad un membro di una classe, esso sarà accessibile solo da classi appartenenti al package dove è definito.  Se dichiariamo una classe appartenente ad un package senza anteporre alla sua definizione il modificatore public, la classe stessa sarà visibile solo dalle classi appartenenti allo stesso package.

11 Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015  private : Questo modificatore restringe la visibilità di un membro di una classe alla classe stessa  Osservazione: L’incapsulamento permette a due oggetti istanziati dalla stessa classe di accedere in “modo pubblico” ai rispettivi membri privati. ◦ In rif al seguente esempio, nel metodo getDifferenzaAnni() si accede direttamente alla variabile anni dell’oggetto altro, senza usare il metodo getAnni()  Sebbene il codice seguente sia valido per la compilazione, l’uso del metodo getAnni() favorirebbe sicuramente di più il riuso di codice, e quindi è da considerarsi preferibile. Infatti, getAnni() potrebbe evolvere introducendo controlli, che conviene richiamare piuttosto che riscrivere.

12 Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/2015

13

 È applicabile sia a variabili, sia a metodi, sia a classi.  Potremmo tradurre il termine final con “finale”, nel senso di “non modificabile”. Infatti: ◦ una variabile dichiarata final diviene una costante ◦ un metodo dichiarato final non può essere riscritto in una sottoclasse (non è possibile applicare l’override) ◦ una classe dichiarata final non può essere estesa  Il modificatore final si può utilizzare anche per variabili locali e parametri locali di metodi. In tali casi, ovviamente, i valori di tali variabili non saranno modificabili localmente. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201514

 static è forse il più potente modificatore di Java. Forse anche troppo!  Con static la programmazione ad oggetti trova un punto di incontro con quella strutturata ed il suo uso deve essere quindi limitato a situazioni di reale e concreta utilità.  Potremmo tradurre il termine static con “condiviso da tutte le istanze della classe”, oppure “della classe”. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201515

 Un membro statico ha la caratteristica di poter essere utilizzato mediante una sintassi del tipo: NomeClasse.nomeMembro  in luogo di: nomeOggetto.nomeMembro  Anche senza istanziare la classe, l’utilizzo di un membro statico provocherà il caricamento in memoria della classe contenente il membro in questione, che quindi, condividerà il ciclo di vita con quello della classe. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201516

 Un esempio di metodo statico è il metodo sqrt() della classe Math, che viene chiamato tramite la sintassi: Math.sqrt(numero)  Math è quindi il nome della classe e non il nome di un’istanza di quella classe.  La ragione per cui la classe Math dichiara tutti i suoi metodi statici è facilmente comprensibile. Infatti, se istanziassimo due oggetti differenti dalla classe Math, ogg1 e ogg2, i due comandi: ogg1.sqrt(4); e ogg2.sqrt(4);  produrrebbero esattamente lo stesso risultato (2).  Effettivamente non ha senso istanziare due oggetti di tipo matematica, che come si sa è unica. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201517

 Una variabile statica, essendo condivisa da tutte le istanze della classe, assumerà lo stesso valore per ogni oggetto di una classe.  Di seguito viene presentato un esempio: Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201518

Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201519

 L’output sarà:  se un'istanza modifica la variabile statica, essa risulterà modificata anche relativamente all’altra istanza. Infatti essa è condivisa dalle due istanze ed in realtà risiede nella classe.  Esempio d’uso:conteggio del numero di oggetti istanziati da una classe (per esempio incrementandola in un costruttore). Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201520

Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201521

 Per esempio, dopo questa istruzione la variabile statica counter varrà 1 e la variabile c1.number varrà sempre 1: Counter c1 = new Counter();  Se poi istanziamo un altro oggetto Counter, allora la variabile statica counter varrà 2. Infatti, essendo condivisa da tutte le istanze della classe, non viene riazzerata ad ogni istanza: Counter c2 = new Counter();  Invece la variabile c1.number varrà sempre 1, mentre la variabile c2.number varrà 2.  Il modificatore static quindi prescinde dal concetto di oggetto e lega strettamente le variabili al concetto di classe, che a sua volta si innalza a qualcosa più di un semplice mezzo per definire oggetti. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201522

 Il modificatore static può anche essere utilizzato per marcare un semplice blocco di codice, che viene a sua volta ribattezzato inizializzatore statico. Questo blocco, come nel caso dei metodi statici, potrà utilizzare variabili definite fuori da esso se e solo se dichiarate statiche.  In pratica un blocco statico definito all’interno di una classe avrà la caratteristica di essere chiamato al momento del caricamento in memoria della classe stessa, addirittura prima di un eventuale costruttore. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201523

 Istanziamo con la seguente sintassi: EsempioStatico ogg = new EsempioStatico();  Output: valore statico = 10 Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201524

 È possibile inserire in una classe anche più di un inizializzatore statico. Ovviamente, questi verranno eseguiti in maniera sequenziale “dall’alto in basso”. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201525

 Esiste anche un’altra tipologia di inizializzatore, ma non statico. Si chiama inizializzatore d’istanza (instance initializer o object initializer) e si implementa includendo codice in un blocco di parentesi graffe all’interno di una classe.  La sua caratteristica è l'essere eseguito quando viene istanziato un oggetto, prima del costruttore. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201526

 Per esempio, se istanziassimo la precedente classe l’output risultante sarebbe il seguente: Inizializzatore Costruttore Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201527

 Un’applicazione può essere composta da molte classi (eventualmente correlate)  Un package è un gruppo di classi che compongono un’unità concettuale ◦ Un package può comprendere più classi ◦ Anche definite in file separati  La dichiarazione del package di appartenenza di una classe ha la forma: Package ;  L’istruzione package deve essere all’inizio del file Java Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201528

 File Counter.java package pippo; public class Counter { // …. }  File Esempio.java package pippo; public class Esempio { public static void main(String args[]){ … } Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201529

 Esiste una corrispondenza biunivoca fra il nome del package e la posizione nel file system delle classi del package  Un package di nome pippo richiede che tutte le sue classi si trovino in una cartella (directory) di nome pippo  Per compilare una classe Counter che fa parte di un package pippo occorre porsi nella cartella superiore a pippo e invocare il compilatore con il percorso completo della classe: javac pippo/Counter.java  Per eseguire una classe Esempio che fa parte di un package pippo occorre porsi nella cartella superiore a pippo e invocare l’interprete con il nome assoluto della classe: java pippo.Esempio Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201530

 Sono possibili nomi di package strutturati, come programmi.gestioneClienti  Ogni volta che si usa una classe, Java richiede che venga denotata con il suo nome assoluto: Programmi.gestioneClienti.AssistenzaClienti  Questo è chiaramente scomodo se il nome è lungo e la classe è usata frequentemente. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201531

 I package fisicamente sono cartelle (directory).  Dopo aver dichiarato la classe appartenente a questo package, dovremo inserire la classe compilata all’interno di una cartella chiamata gestioneClienti, situata a sua volta all’interno di una cartella chiamata programmi. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201532

Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201533

 Il Java Development Kit ci permette comunque di realizzare il giusto inserimento dei file nelle cartelle e la relativa creazione automatica delle cartelle stesse, mediante il comando: javac –d. AssistenzaClienti.java  Lanciando il suddetto comando dalla cartella di base (dove è situato il file “AssistenzaClienti.java”), verranno automaticamente create le cartelle “programmi” e “gestioneClienti”, ed il file “AssistenzaClienti.class” collocato nella cartella giusta, senza però spostare il file sorgente dalla cartella di base. Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201534

 Se il file in questione contenesse il metodo main(), potremmo mandarlo in esecuzione solo posizionandoci nella cartella di base e lanciando il comando: java programmi.gestioneClienti.AssistenzaClienti Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201535

 Si introduce il concetto di importazione di un nome per evitare di riscrivere più volte un nome assoluto di una classe: import java.awt.print.Book;  È possibile scrivere semplicemente Book invece del nome completo java.awt.print.Book  Per importare tutti i nomi pubblici di un package, si scrive import java.awt.print.* ; Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2014/201536