Oggetti e dati primitivi
Parte 2
Introduzione agli oggetti
Interagiamo con oggetti di uso quotidiano,
conoscendone le funzioni, ma non il funzionamento
interno
Gli oggetti hanno uno stato e un comportamento
Gli oggetti sono scatole nere dotate di interfaccia che
limita l’accesso ai meccanismi interni
Un oggetto sw è una astrazione o un modello della
realtà che limita il numero dei dettagli rappresentati
all’essenziale per il contesto considerato
Gli oggetti software
Anche un oggetto sw ha uno stato, descritto e
rappresentato da
– una o più variabili
• Una variabile è un dato individuato da un identificatore
– ed un comportamento definito dai metodi
Un oggetto è costituito dall’insieme delle variabili e dei
metodi
Oggetti e classi
Gli oggetti sono generati da una
classe
La classe è uno schema per
produrre una categoria di oggetti
strutturalmente identici
Gli oggetti creati usando una classe
si dicono istanze della classe
Una classe è una fabbrica di
istanze: possiede lo schema e la
tecnica di produzione
La classe costituisce il prototipo
Gli oggetti come astrazione
STUDENTE
nome
cognome
stati
età
voti
Studia()
Dorme()
Ripete()
comportamenti
Un oggetto che modella una bicicletta
– Una velocità (20 Km/h), giro dei pedali (15 g/m), marcia (5°)
– Sono variabili di istanza, di proprietà di ciascuna bicicletta modellata
Gli oggetti come astrazione – 2
Il modello di bicicletta rappresenta funzioni come frenare o
cambiare marcia, che modificano le variabili d’istanza
Si chiamano metodi d’istanza perché hanno accesso alle variabili
d’istanza
JAVA: Le istanze, gli oggetti
Definita una classe, si possono creare un arbitrario numero di
oggetti appartenenti alla classe
Creo l’oggetto (istanza) “tangibile”
JAVA: il concetto di Incapsulamento
Le variabili di un oggetto, che ne rappresentano lo stato,
sono nascoste all’interno dell’oggetto, accessibili solo
ai metodi
Idealmente i metodi proteggono le variabili
Per diverse necessità esistono 4 diversi livelli di
accesso a metodi e variabili
Questa nozione si chiama: incapsulamento dei dati
– Consente modularità e flessibilità
– Nasconde le informazioni fornendo un’interfaccia
JAVA: In concetto di Astrazione
L’astrazione nasconde o ignora dettagli inessenziali
Un oggetto è un’astrazione
– Non ci preoccupiamo dei suoi dettagli interni per usarlo
– Non conosciamo come funziona il metodo println quando
l’invochiamo
Effettuiamo astrazioni continuamente
Possiamo anche scrivere software complesso
organizzandolo attentamente in classi e oggetti
JAVA: I messaggi tra oggetti – il dialogo
Gli oggetti interagiscono tra loro per ottenere funzioni più
complesse
– Laura chiede a Nino informazioni sul suo oggetto.
– Nino restituisce le informazioni desiderate solo se lo ritiene opportuno (ad
esempio se le condizioni sono “sicure”)
Gli oggetti sw per interagire si mandano messaggi
– Chiedendo di eseguire un certo metodo
I messaggi – 2
Spesso i metodi necessitano di informazioni per poter essere
eseguiti: i parametri
Tre componenti:
– L’oggetto a cui il messaggio è rivolto
– Il metodo da eseguire per ottenere un certo effetto
– I parametri se necessari al metodo
I messaggi - 3
Un oggetto può essere visto come un insieme di servizi
che possiamo chiedere che siano eseguiti
I servizi sono definiti dai metodi
– Il comportamento degli oggetti è definito dai metodi
– il meccanismo di invio dei messaggi consente l’interazione
Gli oggetti che comunicano possono essere “distanti”
– Su macchine diverse
– Non appartenenti allo stesso modello
Inviare messaggi
Chiediamo il servizio di stampa, invocando il metodo
println dell’oggetto System.out
System.out.println (“Le cose importanti per prime.");
oggetto
metodo
informazioni fornite al metodo:
i parametri
Java: I membri delle classi
Le classi contengono 2 tipi di membri, definiti per
l’intera classe o per le singole istanze
– Le variabili o i campi, che rappresentano lo stato della classe o
degli oggetti
– I metodi, che rappresentano il codice eseguibile sottoforma di
istruzioni
Il tipo di un oggetto è definito dalla classe di
appartenenza
Punto p = new Punto(25, 30);
Java: un Esempio
Class Uomo {
public int eta;
public String nome, cognome;
}
La classe Uomo ha tre campi che rappresentano l’età il
nome ed il cognome
I campi sono dichiarati public, cioè chiunque acceda alla
classe Uomo può modificarli
Java: I campi statici di classe
Generalmente i campi sono associati alle istanze della
classe
– Contengono informazioni specifiche per ogni oggetto
Per varie ragioni può essere utile avere campi
associabili alla classe
– Condivisibili da tutti gli oggetti della classe, specifiche della classe
e non degli oggetti
– Le variabili di classe
– Esempio: l’origine è una variabile di classe, riferimento a un
oggetto della classe Point, cioè di tipo Point
public static Point origine = new Point();
Java: Lavorare con le stringhe - String
Java mette a disposizione oggetti di tipo predefinito
Ad esempio String per rappresentare stringhe
Ogni stringa, delimitata dalle virgolette “, è un oggetto
della classe String
– Una stringa letterale non può essere spezzata su più righe nel
codice
String nome= “Laura”;
String cognome = new String(“Papaleo”);
Creare oggetti - 1
Gli oggetti vengono creati mediante un metodo di
istanziazione, detto costruttore
– Gli oggetti creati sono collocati in un’area di memoria e sono
accessibili mediante riferimenti (le frecce!)
Le variabili che rappresentano oggetti contengono il
loro riferimento
Point altoSinistra = new Point ();
Point bassoDestra = new Point();
bassoDestra.x = 112;
bassoDestra.y = 40;
Creare oggetti - 2
Si usa l’operatore new per creare un oggetto
new è uno speciale metodo detto costruttore
Si dice anche istanziare un oggetto
Un oggetto è un’istanza di una particolare classe
titolo = new String (“Fondamenti di progettazione sw");
Chiamata al costruttore, per creare un nuovo oggetto
Creare oggetti – 3
Per la classe String non è necessario invocare il
costruttore new per creare un oggetto stringa
corso = “Corso di JAVA";
Speciale sintassi che vale solo per questa classe
System.out.println (“Questa frase non ha senso.");
Il riferimento all’oggetto di tipo String viene
passato come parametro al metodo println
JAVA: Concatenazione di stringhe
L’operatore di concatenazione di stringhe + viene usato
per appendere una stringa ad un altra
Il simbolo + è anche usato per l’operazione di addizione
aritmentica
L’operatore + viene valutato da sinistra a destra
– Le parentesi possono essere usate per alterare l’ordine di
esecuzione
Sequenze di escape
Alcuni caratteri speciali possono dare luogo ad
ambiguità
System.out.println (“Laura disse:
“Ciao" e poi sorrise");
La sequenza di escape inizia con il carattere backslash \
e indica che il carattere che segue va trattato in modo
speciale
System.out.println (“Laura disse:
\“Ciao\" e poi sorrise");
Sequenze di escape
Alcune sequenze di escape in Java:
Sequenza
Significato
\b
\t
\n
\r
\"
\'
\\
backspace
tabulazione
newline
ritorno
virgolette doppie
virgoletta
backslash
JAVA: Tabella di metodi per stringhe
Tipo di ritorno
Nome del metodo
Argomenti
Rif. a String
toUpperCase
Rif. a String
toLowerCase
Rif. a String
concat
int
length
Rif. a String
substring
Due numeri interi
int
compareTo
Rif. a String
Rif. a String
JAVA: Prototipi e segnature
La signature di un metodo è costituita dal
– Nome del metodo
– Tipo degli argomenti
Per utilizzare un metodo occorre conoscerne anche il
prototipo
– Segnatura
– Tipo del valore di ritorno
Overloading.
Overloading È possibile che due metodi con lo stesso
nome diversi per segnatura
JAVA: Le Variabili
Una variabile è un dato identificato da un identificatore, che
rappresenta l’indirizzo della cella di memoria in cui il dato è
archiviato
Una variabile deve essere dichiarata, specificandone
l’identificatore e il tipo di informazione che deve contenere
Tipo del dato
Nome della variabile
int totale;
int contatore, temp, risultato;
Più variabili possono essere specificate in un’unica dichiarazione
Variabili
Nella dichiarazione può essere già assegnato un valore
iniziale alla variabile
int somma = 0;
int base = 32, max = 149;
Quando in un programma si richiama una variabile si
usa il suo valore
Variabili riferimento a un oggetto
Una variabile può contenere un valore di un tipo
primitivo o il riferimento a un oggetto
Il nome di una classe può essere usato per dichiarare
una variabile di riferimento a un oggetto
String titolo;
Nessun oggetto viene creato in questa dichiarazione
L’oggetto stesso deve essere creato separatemente
titolo = new String (“Java. Manuale”);
titolo = “Java. Manuale”;
JAVA: Gli Identificatori
Gli identificatori sono le parole usate
dal programmatore
Un identificatore è composto da lettere,
cifre, il carattere underscore _ e il segno $
Non possono iniziare con una cifra
Java è sensibile alle maiuscole, case sensitive
– Totale e totale sono identificatori diversi
JAVA: Gli Identificatori
Alcuni identificatori sono definiti da noi
Altri sono stati definiti da altri programmatori e noi li
usiamo (esempio: println)
Alcuni identificatori speciali sono detti parole riservate e
hanno un significato prestabilito
Una parola riservata non può essere ridefinita
JAVA: Alcune Parole riservate
Sono gli identificatori predefiniti nel linguaggio:
abstract
boolean
break
byte
byvalue
case
cast
catch
char
class
const
continue
default
do
double
else
extends
false
final
finally
float
for
future
generic
goto
if
implements
import
inner
instanceof
int
interface
long
native
new
null
operator
outer
package
private
protected
public
rest
return
short
static
super
switch
synchronized
this
throw
throws
transient
true
try
var
void
volatile
while
Assegnamento
Una istruzione di assegnamento modifica il valore di
una variabile
L’operatore di assegnamento è indicato con =
totale = 55;
– L’espressione alla destra del carattere = è valutata e il suo valore
viene assegnato alla variabile a sinistra
– L’eventuale valore precedente di totale è sovrascritto
– Si possono assegnare solo valori compatibili con il tipo dichiarato
JAVA: Dichiarazione ed Uso di Costanti
Una costante è un identificatore il cui valore non può
essere modificato dopo la sua dichiarazione iniziale
– Il compilatore segnala un errore se si cerca di modificare una
costante
Si dichiara con final
final int ALT_MIN = 69;
– Rendono chiari valori letterali altrimenti non evidenti
– Rendono il codice modulare, facilitandone il cambiamento
– Prevengono errori involontari