Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.

Slides:



Advertisements
Presentazioni simili
Classi ed Oggetti in JAVA
Advertisements

Oggetti Java.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
29 febbraio 2008 Progettare tipi di dato astratti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Le gerarchie di tipi.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
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
Interfacce. Interfacce come strumento di progetto Scelta delle classi di un progetto Criteri di coesione e accoppiamento Interfacce e riuso di codice.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
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.
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.
nome: sequenza di caratteri usata per denotare un oggetto
Programmazione con Interfacce
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
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: ________________________________________________________________________________.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
15/11/2004Laboratorio di Programmazione - Luca Tesei1 Costrutto condizionale Scelte, blocchi.
Una "vera" classe.. ..un esempio pratico: la calcolatrice
Sintassi: Programma e classi Program::=prog {ClassDeclList {StatList}} ClassDeclList::=ClassDecl ClassDeclList |  ClassDecl::=class Ide c [StaticMetDefList]
Programmazione ad oggetti
Definizione di classi Capitolo 18 febbraio 2004 Definizione di classi.
30/11/2004Laboratorio di Programmazione - Luca Tesei1 Interfacce e Polimorfismo.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
1 Lezione IX Lu 10-Ott Convertire numeri in stringhe  Si puo’ usare l’operatore di concatenazione; funziona anche con i numeri:  In alternativa.
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.
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.
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
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.
Metodologie di Programmazione Esercizi sulla semantica di Java.
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.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
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.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
Classi ed Oggetti in Java (Cenni). Richiami Cenni sull’ Implementazione, Macchine Astratte, Compilatore, Interprete Ruolo delle Classi in Java Oggetti.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
Esercitazione 14 Marzo Esercizio dell’altra volta Definire un tipo di dato Abbonato i cui oggetti descrivono le informazioni relative ad un abbonato.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
Introduzione a Java. Java Linguaggio Object-Oriented La maggior parte dei dati manipolati dai programmi e’ contenuta in oggetti La principale forma di.
1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |
1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono.
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Classi ed Oggetti in Java (Cenni)

Richiami Ruolo delle Classi in Java Oggetti

Ruolo delle classi in Java I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure stand-alone (metodi statici) oggetti (tramite variabili e metodi distanza, che definiscono il loro stato interno e le operazioni) Le due funzionalita possono coesistere allinterno di una stessa classe Una classe puo contenere variabili statiche e distanza Analogo per i metodi

Procedure Stand-alone Collezione di metodi statici (non ci sono variabili e metodi distanza) public class Num { public static int gcd (int n, int d) { while (n != d) if (n > d) n = n - d; else d = d - n; return n;} public static boolean isPrime (int p) { // implementazione} }

Oggetti Servono per creare nuovi tipi di dato con relative operazioni Vogliamo realizzare una classe BankAccount i cui oggetti sono dei semplici conti bancari. Vogliamo le seguenti operazioni depositare denaro prelevare denaro chiedere il saldo corrente

Come si procede? Variabili distanza devono modellare lo stato degli oggetti Metodi distanza devono modellare le operazioni richieste Costruttore (o costruttori) per creare un nuovo oggetto della classe

Una possibile implementazione public class BankAccount { public double balance; //il saldo corrente // costruttori public BankAccount(double initial){ balance=initial; }

Una possibile implementazione // metodi public void deposit(double amount) { balance = balance + amount; } public void withdraw(double amount) { balance = balance - amount; } public double getBalance() { return balance; }

Variabili distanza Gli oggetti della classe si creano tramite new Le variabili distanza appartengono agli oggetti Ogni oggetto ha la propria variabile distanza balance BankAccount p1= new BankAccount(1000); BankAccount p2=new BankAccount(2000);

Come si accede? Dato che le variabili distanza appartengono agli oggetti vi si accede tramite il riferimento alloggetto (che puo anche essere implicito) Supponiamo per esempio di essere in un metodo esterno alla classe (tipo main) tramite il riferimento alloggetto BankAccount p1= new BankAccount(1000); BankAccount p2=new BankAccount(2000); if (p1.balance=p2.balance) {…}

ATTENZIONE: Specificatore di Accesso public (si puo accedere da qualsiasi metodo della classe o non ) private (si puo accedere solo da metodi della classe)

Esempio Supponiamo che balance sia private allora il seguente accesso dal metodo main non e legale (viene rilevato dal compilatore) BankAccount p1= new BankAccount(1000); BankAccount p2=new BankAccount(2000); if (p1.balance=p2.balance) {…}

Ruolo di private Come vedremo e consigliabile sempre usare variabili distanza private Impediscono laccesso diretto allo stato degli oggetti che puo essere modificato solo dai suoi metodi distanza (tipo per esempio deposit e withdraw) Creano un incapsulamento degli oggetti (fondamentale per garantirne un corretto funzionamento)

Metodi distanza I metodi distanza eseguono operazioni su un determinato oggetto (che e riferito come this nel suo corpo) devono essere chiamati con il riferimento alloggetto (che puo anche essere implicito) per esempio da un metodo esterno alla classe come main BankAccount p1= new BankAccount(1000); BankAccount p2=new BankAccount(2000); p1.deposit(2000); p1.deposit(3000);

Specificatori di Accesso Valgono le stesse regole che per le variabili I metodi private possono essere chiamati solo dallinterno della classe Non fanno parte dellinterfaccia pubblica della classe (quindi delle operazioni che puo usare un utente del tipo di dato)

Metodi e Variabili Statici Variabili e metodi statici appartengono alla classe in cui sono dichiarati Sono quindi condivisi tra tutti gli oggetti della classe A differenza delle variabili e dei metodi di istanza che appartengono agli oggetti (istanze della classe). Come vedremo nella semantica stanno nellambiente delle classi e non nella heap

Esempio Supponiamo di volere modificare BankAccount in modo che ogni conto abbia un codice identificativo unico, diverso dagli altri Si puo utilizzare una variabile statica che mantiene il valore del primo numero intero fresh (non e ancora stato assegnato)

Una possibile implementazione public class BankAccount { public double balance; //il saldo corrente public int miapassword; //la password public static int password; //la prima password disponibile // costruttori public BankAccount(double initial){ balance=initial; miapassword=password; password++; } La variabile statica e unica e condivisa tra tutti i conti questo garantisce che il valore non sia stato gia usato.

Specificatori di accesso Valgono le stesse regole viste per le variabili ed i metodi di istanza

Variabili e Metodi Statici: come si accede? Supponiamo per esempio di essere in un metodo esterno alla classe (tipo main) e che la variabile sia public (anche se non ha senso da un punto di vista di sicurezza) Come facciamo a riferirci alla variabile password ?

Due Modi Possibili Tramite la classe di appartenenza BankAccount.password=1; Tramite un oggetto della classe BankAccount p1=new Bankaccount(1000); p1.password=1; La variabile statica e visibile da tutti gli oggetti della classe)

Regole di Visibilita dei Nomi Sono quelle verificate staticamente dal compilatore (si chiamano regole di scoping) Verifica che ogni accesso ad un nome (di variabile o metodo) sia legale, ovvero il legame tra le dichiarazioni e luso dei nomi

Regole di Visibililita dei Nomi Vediamo le regole di base Sono un po piu complicate di quelle che avete visto fino ad ora (erano semplificate a scopo didattico) Complicate dalla coesistenza di nomi statici e distanza Tralasciando i vincoli imposti dagli specificatori di accesso

Cosa e visibile da un oggetto? I suoi nomi distanza I nomi statici dichiarati nella classe a cui appartiene (perche sono condivise tra tutti gli oggetti)

Cosa e visibile da una classe? I suoi nomi statici Non sono visibili nomi distanza (sono relativi agli oggetti)

Metodi Come facciamo a capire se un accesso del seguente tipo e legale? Path.I Dipende dal Path e dal tipo di metodo (statico o distanza)

Path Vuoto Accesso diretto (I) Vediamo le variabili locali del metodo Vediamo quello che si vede dalla classe (se il metodo e statico) Vediamo quello che si vede dagli oggetti della classe (se il metodo e distanza o e un costruttore)

Esempio public void deposit(double amount) { balance = balance + amount;} public BankAccount(double initial){ balance=initial; miapassword=password; password++; } Accesso diretto alle variabili distanza (this implicito) e a quella statica Entrambe sono visibili dagli oggetti della classe

Path Classe Vediamo solo quello che si vede dalla classe Per esempio da main: BankAccount p1=new Bankaccount(1000); BankAccount.password=1; (accesso legale) BankAccount.balance=1; (accesso illegale)

Path Oggetto Vediamo quello che si vede dalloggetto Per esempio da main: BankAccount p1=newBankaccount(1000); p1.password=1;(accesso legale) p1.balance=1; (accesso legale)