Oggetti. Oggetti e occultamento delle informazioni. Definire oggetti. Oggetti. Definire oggetti la sintassi. Convenzione sugli identificatori

Documenti analoghi
Oggi. I Tipi di Dato Astratto (TDA) Prossime lezioni. Esercitazione di autovalutazione. Programma del corso. Scaletta.

Oggi. I Tipi di Dato Astratto (TDA) Programma del corso. 1. Programmazione strutturata

! Riassunto. ! Programmazione strutturata. ! TDA (Tipo di dato astratto) ! Evoluzione della programmazione strutturata. !

Sviluppo Applicazioni Mobile Lezione 8. Dr. Paolo Casoto, Ph.D

Java Gli array. Array

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

L Array e un oggetto. L array puo contenere elementi che sono: tipi primitivi, o oggetti (in realta riferimenti ad oggetti!!!).

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione I - corso B a.a prof. Viviana Bono

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Oggi. I Tipi di Dato Astratti (TDA) - 2. TDA: i concetti (1/2) TDA: l idea. TDA: i concetti (2/2) Esempio: definizione e uso.

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Lezione 9 programmazione in Java Classi come contenitori

Corso sul linguaggio Java

Linguaggi di Programmazione I Lezione 10

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Lezione 13 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona

Lezione 13 programmazione in Java

Lezione 11 programmazione in Java. Anteprima. Gestione della memoria

Insieme.java. Printed by Paolo. Feb 24, 04 16:44 Page 1/1 class Insieme { private int[] elementi; Tuesday February 24, /10

Programmazione con Java

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Programmazione ad oggetti

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi

Oggetti e classi. Cos è un oggetto

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java

Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008

Introduzione alla Programmazione in Java attraverso un esempio commentato

Allocazione Dinamica della Memoria

Metodi statici. Dichiarazione e chiamata di metodi statici

Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007

Oggetti Composti (1) Oggetti Composti (2)

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Fondamenti di Informatica T-1

Modulo 2: Strutture fondamentali della programmazione Java

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

Fondamenti di Informatica T-1

Array. Definizione e utilizzo di vettori

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Esempio 2: Subtyping

Proprietà delle Classi e degli Oggetti in Java

Il linguaggio C. Puntatori e dintorni

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 11. Leggibilità. Aprile Leggibilita 1

14 - Metodi e Costruttori

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Laboratorio di programmazione

Proprietà delle Classi e degli Oggetti in Java

Dichiarazione di una classe. Dichiarazione ereditarietà

Laboratorio di programmazione

Java Le stringhe. Stringhe

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

Fondamenti di Informatica T1 Introduzione al linguaggio Java Input/Output-Variabili-Tipi

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Java Classi wrapper e classi di servizio. Classi di servizio

Fondamenti di Informatica T-1

Programmazione Orientata agli Oggetti in Linguaggio Java

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Usare e costruire oggetti. Concetti Fondamentali. Interfaccia Pubblica di una. Application Program Interface

Fondamenti di Informatica T-1. Variabili, costanti e operazioni Selezione

Array. In Java un array è un oggetto senza metodi, con attributo pubblico length che memorizza la dimensione dell array

Strutture Dati. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Strutture Dati 1 / 16

Java Le stringhe. Stringhe

Funzioni, Stack e Visibilità delle Variabili in C

La Gestione della Memoria. Carla Binucci e Walter Didimo

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Comunicazioni di servizio. I metodi - III. Oggi. Dove siamo. Esempio. Parametri di tipo array. Stefano Mizzaro 1. Domani non c è lezione :-(

Programmazione Orientata agli Oggetti in Linguaggio Java

Metodi statci. Dichiarazione e chiamata di metodi statci

Cenni su programmazione con tipi generici (generics)

Corso sul linguaggio Java

Creazione di oggetti e Stringhe

Definizione di classi. Walter Didimo

Introduzione Programmazione Java

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

JAVA GENERICS. Angelo Di Iorio Università di Bologna

Uso di metodi statici. Walter Didimo

Scelte. Costrutto condizionale. Il costrutto if. Il costrutto if. Rappresentazione con diagramma a blocchi. Il costrutto if

Oggetti. Definizioni di Classi II

Corso di Laurea Ingegneria Informatica

Dati due punti sul piano calcolare la loro distanza

Fondamenti di informatica T-1 (A K) Esercitazione 7: metodi, classi, oggetti

Transcript:

Oggetti Oggetti e occultamento delle informazioni Paolo Coppola Dipartimento di Matematica e Informatica Università degli Studi di Udine http://www.dimi.uniud.it/coppola/ coppola@dimi.uniud.it I metodi (procedure e funzioni) possono essere visti come un modo per estendere il linguaggio di programmazione appena definito un nuovo metodo, è come se il linguaggio avesse acquistato una nuova istruzione È un meccanismo di astrazione Ne esiste un altro 2 Oggetti Definire oggetti Possiamo estendere il linguaggio definendo nuovi tipi di dato Dovremo definire come sono fatti Dovremo decidere quali operazioni sono lecite su di essi Per definire un nuovo tipo di oggetti si deve specificare una classe il nome della classe rappresenterà il nuovo tipo una classe definisce le sue variabili e i suoi metodi 3 4 Definire oggetti la sintassi Convenzione sugli identificatori class <NomeDellaClasse> { Gli identificatori Java vanno scritti <tipo1> <var1>; <tipo2> <var2>; con l iniziale maiuscola se sono nomi di classi con l iniziale minuscola se sono nomi di variabili o di metodi <tipometodo1> <nomemetodo1>(<parametri1>) { <tipometodo2> <nomemetodo2>(<parametri2>) { se l identificatore è formato da più parole, queste vanno scritte attaccate e ogni parola deve iniziare con la maiuscola Esempi: Classe1, variabile1, metodo1, AltroNomeDiClasse, altronomedivariabile, altronomedimetodo, nome_sbagliato 5 6

Esempio 1 classe coordinate classe ora rappresenta le coordinate di un punto del piano cartesiano della classe: Coordinate classe: x, y int x; int y; double x; double y; 7 rappresenta un ora del giorno della classe: Ora classe: ore, minuti, secondi secondi trascorsi dalla mezzanotte int ore; int minuti; int secondi; int secondi; 8 classe freccia orizzontale Usare oggetti la notazione puntata rappresenta una freccia orizzontale della classe: FrecciaOrizzontale classe: lunghezza, verso class FrecciaOrizzontale { int lunghezza; char verso; class FrecciaOrizzontale { int lunghezza; boolean versodestra; Una volta definita una classe si possono: dichiarare variabili di quella classe (di quel tipo) creare nuovi oggetti di quella classe (istanze) usare gli oggetti di quella classe 9 10 Dichiarazione L istruzione new Analogamente a come si dichiarano le variabili con tipo primitivo: int x, k, count; Coordinate punto, coppia, pluto; Ora oradelgiorno, pippo; Dichiarare una variabile non basta. Per usare un oggetto bisogna crearlo esplicitamente. Bisogna allocare dello spazio in memoria. Lo spazio per i tipi primitivi invece viene allocato in modo automatico Dichiarazione e istanziazione: Coordinate punto; punto = new Coordinate();, in una sola riga: Coordinate punto = new Coordinate(); new alloca lo spazio nello heap per una nuova istanza. Viene creato un nuovo oggetto che verrà riferito dalla variabile. 11 12

Istanziazione La notazione puntata Pila dei record di attivazione Dichiarazione: Coordinate punto; punto Istanziazione: punto = new Coordinate(); x y Heap Una volta dichiarata una variabile e istanziato un oggetto, si può accedere ai suoi componenti, ovvero alle variabili e ai metodi della classe usando questa sintassi: variabileoggetto.variabilecomponente variabileoggetto.metodo() Esempio punto.x = 2; punto.y = 3 + punto.x; System.out.println(punto.y); 13 14 Esempio 1 Scrivere un programma che crea due punti le cui coordinate sono lette da tastiera usando la classe Leggi e stampa la distanza tra i due punti. Per calcolare la radice quadrata usate la funzione Math.sqrt 15 /* Definizione del nuovo tipo da usare */ int x; //primo componente int y; //secondo componente /* Definizione del programma */ class Distanza { public static void main(string[] args) { //dichiarazione e istanziazione di due punti Coordinate punto1 = new Coordinate(); Coordinate punto2 = new Coordinate(); System.out.println( Inserisci le prime due coordinate ); //Leggi.unInt() aspetta un intero da tastiera //l isturzione di assegnazione salva l intero letto //nella variabile x dell oggetto punto1 punto1.x = Leggi.unInt(); //analogamente viene salvato un intero letto da //tastiera nella variabile y dell oggetto punto1 punto1.y = Leggi.unInt(); System.out.println( Inserici le altre coordinate ); punto2.x = Leggi.unInt(); punto2.y = Leggi.unInt(); //le variabili di un oggetto possono essere usate anche //nelle espressioni int distanzax = punto1.x - punto2.x; int distanzay = punto1.y - punto2.y; double distanza = Math.sqrt(distanzaX*distanzaX + distanzay*distanzay); System.out.println( I due punti inseriti distano + distanza); Scrivere un programma che legge da tastiera un ora del giorno e la stampa //Legge un ora del giorno x.ore = Leggi.unInt(); x.minuti = Leggi.unInt(); x.secondi = Leggi.unInt(); System.out.println( Ora sono le +x.ore+ : +x.minuti+. +x.secondi); 18

Con l altra definizione della classe Ora //Legge un ora del giorno int ore = Leggi.unInt(); int minuti = Leggi.unInt(); int secondi = Leggi.unInt(); x.secondi = ore*3600+minuti*60+secondi; System.out.println( Ora sono le +(x.secondi/3600)+ : +((x.secondi%3600)/60)+. +(x.secondi%60)); Scrivere un programma che legge da tastiera la lunghezza e il verso di una freccia e poi la stampa FrecciaOrizzontale x = new FrecciaOrizzontale(); //Legge lunghezza e verso x.lunghezza = Leggi.unInt(); x.verso = Leggi.unChar(); if (x.verso == s ) System.out.print( < ); for (int i=0; i<x.lunghezza; i++) System.out.print( - ); if (x.verso == d ) System.out.println( > ); else System.out.println(); 19 20 L occultamento delle informazioni Oppure, con l altra definizione della classe FrecciaOrizzontale FrecciaOrizzontale x = new FrecciaOrizzontale(); //Legge lunghezza e verso x.lunghezza = Leggi.unInt(); char verso = Leggi.unChar(); x.versodestra = (verso == d ); if (!x.versodestra) System.out.print( < ); for (int i=0; i<x.lunghezza; i++) System.out.print( - ); if (x.versodestra) System.out.println( > ); else System.out.println(); 21 Negli esempi precedenti non è evidente il vantaggio di usare gli oggetti. L astrazione è ancora limitata. Per usare un oggetto si fa riferimento direttamente a come è fatto (alla sua implementazione) Negli esempi 2 e 3, cambiando la definizione della classe dovevamo cambiare anche il codice che usava quegli oggetti 22 L occultamento delle informazioni I modificatori È buona norma nascondere l implementazione degli oggetti. L accesso e la modifica delle variabili interne avviene solo tramite metodi. In questo modo si realizza un astrazione maggiore. Chi userà la classe dovrà conoscere solo l insieme dei metodi. In Java si possono nascondere le variabili di una classe usando il modificatore private Esempio: private int x; private int y; 23 24

Variabili private Esempio 1 Se una variabile è dichiarata privata, può essere riferita solo nei metodi della sua classe Se un metodo di un altra classe prova ad accedere ad una variabile privata, il compilatore segnala un errore Se si nascondono le variabili di una classe, si devono aggiungere dei metodi per modificarle 25 private int x; private int y; void setcoordinate(int a, int b) { x = a; y = b; int primacoordinata() { return x; int secondacoordinata() { return y; 26 altra implementazione private int ore, minuti, secondi; void impostaora(int o, int m, int s) { ore = o; minuti = m; secondi = s; int getore() {return ore; int getminuti() {return minuti; int getsecondi() {return secondi; private int secondi; void impostaora(int o, int m, int s) { secondi = o*3600+m*60+s; int getore() {return secondi/3600; int getminuti() {return (secondi%3600)/60; int getsecondi() {return secondi%60; 27 28 vantaggio dell occultamento x.impostaora(12,22,31); System.out.println( Sono le ore +x.getore()); Questo codice va bene con entrambe le implementazioni! 29