Programmazione Corso di laurea in Informatica

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
PUNTATORI Introduzione
Universita di Camerino
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.
1 Semantica Operazionale di un frammento di Java: lo stato.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Metodologie di Programmazione = decomposizione basata su astrazioni
Introduzione al linguaggio C
Fondamenti di Informatica
Programmazione Procedurale in Linguaggio C++
FUNZIONI DI BIBLIOTECA
Funzioni definite dall’utente
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
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 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
Eliana minicozzi linguaggi L1 Lezione3.
eliana minicozzi linguaggi1a.a lezione2
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Soluzione Esercizio - Classe Vettore
Oggetti e dati primitivi
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
AA2003/04 © M.A. Alberti Programmazione Interfacce 1 Programmazione Corso di laurea in Informatica.
1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Argomenti della lezione
FUNZIONI: IL MODELLO APPLICATIVO 1) Valutazione, nellenvironment corrente, del simbolo che denota il nome della funzione; 2) Valutazione, nellenvironment.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
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.
14 marzo 2002 Avvisi:.
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
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 5 (Deitel) Le funzioni Indice degli argomenti Introduzione Moduli nei programmi C 5.3.
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
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
Astrazione procedurale ed eccezioni
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Il linguaggio Fortran 90: 3. Procedure e Funzioni
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
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.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
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.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Programmazione Corso di laurea in Informatica Le classi in Java Programmazione Corso di laurea in Informatica

Oggetti Un oggetto è definito dal suo stato - descrive le sue caratteristiche comportamento - quello che può fare Ad esempio: il modello di una moneta Una moneta può essere lanciata per consentire una scelta casuale tra due valori: testa o croce Lo stato della moneta è la sua faccia corrente (testa o croce) Il comportamento consiste nel fatto di poter essere lanciata Il comportamento può modificare il suo stato AA2003/04 © M.A. Alberti Programmazione Classi

Classi Possiamo definire una classe per produrre oggetti specifici Ad esempio: una classe per simulare il lancio di una moneta Scriviamo la classe Moneta per rappresentare il modello di una moneta AA2003/04 © M.A. Alberti Programmazione Classi

Dichiarazioni di metodi Classi Una classe contiene la dichiarazione dei dati e dei metodi int x, y; char ch; Dichiarazioni di dati stato Dichiarazioni di metodi comportamento AA2003/04 © M.A. Alberti Programmazione Classi

Visibilità dei dati La visibilità dei dati indica la parte di programma in cui i dati possono essere usati o referenziati Dati dichiarati a livello della classe sono visibili da tutti i metodi della classe Possono essere dati di istanza o dati di classe Dati dichiarati all’interno di un metodo sono visibili solo a quel metodo E vengono chiamati anche dati locali AA2003/04 © M.A. Alberti Programmazione Classi

Scrivere metodi La dichiarazione di un metodo specifica il codice che verrà eseguito quando il metodo viene invocato Quando un metodo viene invocato il flusso di controllo passa al metodo e il codice relativo viene eseguito Quindi, il flusso ritorna al punto da cui è partita la chiamata e continua da lì L’esecuzione di un metodo può causare il ritorno di un valore all’ambiente chiamante, in funzione di come il metodo è definito AA2003/04 © M.A. Alberti Programmazione Classi

Flusso di controllo nei metodi Il metodo invocato può essere anche della stessa classe Serve quindi solo il nome del metodo mioMetodo(); mioMetodo computazione AA2003/04 © M.A. Alberti Programmazione Classi

Flusso di controllo nei metodi O il metodo chiamato è parte di altra classe Obj.fai(); main fai aiuta aiuta(); Obj AA2003/04 © M.A. Alberti Programmazione Classi

La classe Moneta Definiamo una classe Moneta e i seguenti dati: faccia, una variabile int che rappresenta la faccia corrente TESTA e CROCE, costanti di tipo int che rappresentano i due possibili stati della faccia Il comportamento della classe è definito dai seguenti possibili metodi: Il costruttore Moneta, per costruire un oggetto Un metodo lancia, per lanciare la moneta Un metodo dammiFaccia, per riportare la faccia corrente Un metodo toString, per riportare una frase di descrizione per la stampa AA2003/04 © M.A. Alberti Programmazione Classi

La classe Moneta Moneta.java contiene la definizione della classe La classe Moneta può essere usata anche da altre classi ContaMoneta.java usa la classe Moneta Un programma non necessariamente usa tutti i metodi di cui una classe dispone La classe ContaMoneta non usa il metodo toString AA2003/04 © M.A. Alberti Programmazione Classi

Dati d’istanza La variabile faccia nella classe Moneta è un dato d’istanza perchè ogni istanza (oggetto) della classe ne ha una sua copia Una classe dichiara il tipo di dato di un dato d’istanza, ma non riserva lo spazio di memoria per archiviarlo È al momento della creazione di un oggetto della classe Moneta (quando viene istanziato), che viene anche creata una nuova variabile faccia Gli oggetti di una classe condividono le definizione dei metodi ma non hanno un unico spazio di memoria per i dati In questo modo due oggetti possono avere stati diversi AA2003/04 © M.A. Alberti Programmazione Classi

Dati d’istanza TestMoneta.java moneta_1 class Moneta Moneta() lancia() dammiFaccia() int faccia; faccia moneta_2 Moneta faccia 1 AA2003/04 © M.A. Alberti Programmazione Classi

Incapsulamento Un oggetto è un astrazione, che nasconde dettagli al resto del sistema Un oggetto può essere visto da due punti di vista: interno - la struttura dati o gli algoritmi usati dai metodi esterno - l’interazione tra gli oggetti in un programma Dal punto di vista esterno, un oggetto è un’entità incapsulata, che fornisce un insieme di servizi I servizi costituiscono l’interfaccia dell’oggetto AA2003/04 © M.A. Alberti Programmazione Classi

Incapsulamento Un oggetto si autogestisce Ogni cambiamento dello stato dell’oggetto (le sue variabili) deve essere ottenuto tramite i metodi di quell’oggetto Una buona programmazione ad oggetti deve rendere difficile, se non impossibile, agli oggetti modificare lo stato di un altro oggetto L’utente, o il client, di un oggetto può richiedere i suoi servizi, ma non deve conoscere come questi sono implementati AA2003/04 © M.A. Alberti Programmazione Classi

Incapsulamento Un oggetto incapsulato può essere visto come una scatola nera I suoi meccanismi di funzionamento interno sono tenuti nascosti al client, che può solo invocare i metodi che ne costituiscono l’interfaccia Metodi Dati Client AA2003/04 © M.A. Alberti Programmazione Classi

I modificatori di visibilità In Java, l’incapsulamento è realizzato mediante l’uso appropriato di modificatori di visibilità Un modificatore è una parola riservata Java che specifica particolari caratteristiche di un metodo o di un dato Il modificatore final definisce una costante 3 modificatori di visibilità: public private protected AA2003/04 © M.A. Alberti Programmazione Classi

I modificatori di visibilità I membri di una classe dichiarati public possono essere manipolati da chiunque I membri di una classe dichiarati private possono essere manipolati solo dall’interno della classe I membri di una classe dichiarati senza alcun modificatore di visibilità hanno una visibilità di default e possono essere manipolati da ogni classe del pacchetto a cui appartengono AA2003/04 © M.A. Alberti Programmazione Classi

I modificatori di visibilità Regola generale 1 I dati d’istanza in generale non hanno una visibilità public Regola generale 2 I metodi hanno di norma una visibilità public perché possono essere invocati dai client I metodi pubblici si chiamano anche metodi di servizio o servizi Un metodo definito semplicemente per contribuire alla definizione di un altro si chiama anche metodo di supporto Regola generale 3 I metodi di supporto, che non devono essere chiamati direttamente dai client, non devono avere una visibilità public AA2003/04 © M.A. Alberti Programmazione Classi

Dichiarazione di metodi La dichiarazione di un metodo inizia con l’intestazione char calc (int num1, int num2, String messaggio) Nome del metodo Lista dei parametri Tipo del valore di ritorno La lista dei parametri specifica il tipo e il nome di ciascun parametro Il nome di un parametro nell’intestazione di un metodo indica gli argomenti o i parametri formali AA2003/04 © M.A. Alberti Programmazione Classi

Dichiarazione di metodi L’intestazione di un metodo è seguita dal corpo del metodo char calc (int num1, int num2, String message) { int somma = num1 + num2; char risultato = messaggio.charAt (somma); return risultato; } somma e risultato sono dati locali Vengono creati ogni volta che il metodo viene invocato e sono distrutti quando il metodo ha finito di essere eseguito L’espressione che produce il valore che viene riportato deve essere consistente con il tipo di rientro del metodo AA2003/04 © M.A. Alberti Programmazione Classi

L’istruzione return L’istruzione return specifica il valore che verrà riportato La sua espressione deve essere conforme al tipo di rientro dichiarato Il tipo dell’espressione di rientro di un metodo indica il tipo del valore che il metodo riporta a chi lo ha invocato Un metodo che non riporta alcun valore ha tipo di rientro void AA2003/04 © M.A. Alberti Programmazione Classi

Passaggio di valori a parametri Ad ogni chiamata di un metodo, gli argomenti attuali all’atto della chiamata sono copiati sui parametri formali Chiamata del metodo ch = obj.calc (2, cont, “Ciao, che fai?"); Definizione del metodo char calc (int num1, int num2, String messaggio) { int somma = num1 + num2; char risultato = messaggio.charAt(somma); return risultato; } AA2003/04 © M.A. Alberti Programmazione Classi

Parametri I valori dei parametri attuali non vengono quindi modificati dalla chiamata del metodo TestParametriSemplici.java AA2003/04 © M.A. Alberti Programmazione Classi

Passare parametri oggetti a metodi Anche in questo caso i parametri sono passati ai metodi per valore All’atto della chiamata del metodo, una copia dei parametri attuali è il valore passato effettivamente che viene archiviato nei parametri formali dichiarati nell’intestazione del metodo Il passaggio di parametri è sostanzialmente un assegnamento Quando un oggetto viene passato a un metodo, il parametro formale e quello attuale diventano alias AA2003/04 © M.A. Alberti Programmazione Classi

Passare oggetti a metodi Gli effetti sul valore dei parametri all’interno del metodo non hanno in generale effetto al di fuori del metodo, ma tramite i riferimenti si possono cambiare valori PassaggioParametri.java TestParametri.java Num.java Si noti la differenza tra cambiare un riferimento e cambiare l’oggetto a cui punta il riferimento AA2003/04 © M.A. Alberti Programmazione Classi

Scrivere classi Un oggetto aggregato è un oggetto che contiene riferimenti ad altri oggetti Un oggetto di classe Account è un oggetto aggregato perché contiene il riferimento all’oggetto di classe String Un oggetto aggregato rappresenta una relazione has-a (ha-un) Un conto di banca ha-un nome Account.java e TestAccount.java AA2003/04 © M.A. Alberti Programmazione Classi

risultato = fraz_1.somma(fraz_2); Scrivere classi Talore un oggetto deve interagire con altri oggetti dello stesso tipo Sommare due oggetti rappresentanti frazioni della classe frazione: risultato = fraz_1.somma(fraz_2); L’oggetto fraz_1 esegue il metodo somma con l’oggetto fraz_2 che gli viene passato come parametro e ritorna un nuovo oggetto Frazione.java e TestFrazione.java AA2003/04 © M.A. Alberti Programmazione Classi

Overloading di metodi L’overloading di metodi è presente quando si usano gli stessi nomi per indicare metodi diversi La segnatura di ciascun metodo coinvolto dal processo di overloading deve essere unica La segnatura include il numero, tipo e l’ordine dei parametri Il tipo di rientro di un metodo non fa parte della segnatura ma del prototipo Il compilatore determina la versione del metodo da invocare analizzando i parametri AA2003/04 © M.A. Alberti Programmazione Classi

Overloading di metodi float prova (int x) { return x + .375; } versione 1 float prova (int x, float y) { return x*y; } versione 2 result = prova (25, 4.32) invocazione AA2003/04 © M.A. Alberti Programmazione Classi

Overloading di metodi Il metodo println è sovraccaricato: println (String s) println (int i) println (double d) E si possono usare le diverse versioni del metodo println: System.out.println (“Il totale è:"); System.out.println (totale); ProvaOverloading.java AA2003/04 © M.A. Alberti Programmazione Classi

Overloading di metodi Non si può effettuare un overloading di un metodo distinguendo solo il tipo del valore di rientro int metodo_f () {…} void metodo_f () {…} Perché come potrebbe il compilatore comprendere dal contesto cosa chiamare int x = this.metodo_f(); OK metodo_f(); ???? Qual è il metodo chiamato? AA2003/04 © M.A. Alberti Programmazione Classi

Overloading di metodi o costruttori Anche i costruttori possono essere sovrascritti Un costruttore sovrascritto fornisce diversi modi con cui istanziare un nuovo oggetto di una classe Frazione.java AA2003/04 © M.A. Alberti Programmazione Classi

Overloading e promozione In presenza di metodi sovraccaricati la scelta di quello da eseguire avviene valutando il tipo del parametro attuale a confronto con il tipo del parametro formale Quando non c’è esatta corrispondenza il parametro attuale viene promosso al tipo più grande PromOverloading.java Esempio con riduzione RidOverloading.java AA2003/04 © M.A. Alberti Programmazione Classi

La classe StringTokenizer La classe StringTokenizer è definita nel pacchetto java.util Un oggetto StringTokenizer separa una stringa di caratteri in sottostringhe più piccole (tokens) Il costruttore StringTokenizer riceve come parametro la stringa originale da separare Per default, il tokenizer separa la stringa di input agli spazi bianchi Ogni invocazione del metodo nextToken riporta il prossimo token nella stringa di input InputInArray.java AA2003/04 © M.A. Alberti Programmazione Classi

Decomposizione di metodi Un metodo dovrebbe essere relativamente piccolo, in modo da poter essere compreso Un metodo potenzialmente complesso dovrebbe venire decomposto in diversi metodi più piccoli per maggior chiarezza Quindi, un metodo di servizio di un oggetto può chiamarne altri di supporto per raggiungere l’obiettivo PigLatin.java PigLatinTranslator.java AA2003/04 © M.A. Alberti Programmazione Classi