Introduzione agli oggetti
Raffaella Brighi, a.a. 2005/06
Corso di Algoritmi e programmazione. A.A. 2005-06
CdL Operatore Informatico Giuridico.
L’astrazione
„
„
„
„
L’assembler e i linguaggi imperativi (fortran, basic, c) sono
astrazioni rispetto al linguaggio macchina ma costringono a
pensare ancora in termini di struttura del computer (spazio delle
soluzioni) anziché di struttura del problema (spazio dei
problemi).
L’approccio OO (object oriented) consente di descrivere il
problema nei suoi propri termini. Il programmatore può
rappresentare elementi nello spazio dei problemi. Il programma
si adatta al gergo del problema.
Gli oggetti sono elementi nello spazio dei problemi che hanno
una rappresentazione nello spazio delle soluzioni.
Ogni oggetto assomiglia ad un piccolo computer: ha uno stato e
possiede operazioni che gli si può chiedere di eseguire.
1
Ogni cosa è un oggetto.
„
‰
Un oggetto è una variabile particolare che memorizza dati
ma a cui possiamo anche fare richieste di operazioni su se
stesso. Qualunque componente concettuale del problema
può essere un oggetto.
Un programma è un insieme di oggetti che si
dicono l’un l’altro cosa fare inviandosi
messaggi.
„
‰
Per fare una richiesta ad un oggetto gli si manda un
messaggio.
Ogni oggetto ha la sua memoria formata da
altri oggetti.
„
‰
„
Ogni oggetto ha un tipo.
‰
„
problemi complessi possono essere rappresentati in modo
semplice
Ciascun oggetto è un’istanza di una classe.
Tutti gli oggetti di un determinato tipo
possono ricevere gli stessi messaggi.
‰
Siccome un oggetto di tipo “cerchio” è anche un
oggetto di tipo “forma geometrica”, un cerchio
può accettare anche tutti i messaggi delle forme
geometriche.
Un oggetto possiede un stato, un comportamento ed
un’identità.
2
Oggetti e classi
„
„
La classe definisce il tipo dell’oggetto, vale a dire
caratteristiche (proprietà, campi=dati) e
comportamenti (funzionalità, metodi) che ogni
oggetto deve avere.
Ciascun oggetto è l’istanza di una classe.
Conto corrente di Mario Rossi
Saldo: 20.000 euro
Conto corrente
Conto corrente di Luca Bianchi
Saldo: 10.000 euro
CLASSE
OGGETTI
saldo ed intestatario sono proprietà
comuni a tutti gli oggetti della classe, ogni
oggetto a un suo stato
Classi e oggetti
„
„
„
Una classe è solo il modello di un oggetto e quindi
non riserva spazio in memoria per i suoi dati. Indica
quali campi e quali metodi ciascun oggetto creato
sulla base di quella classe deve avere.
Ciascun oggetto è caratterizzato da: campi (variabili,
proprietà) e metodi. I valori delle variabili
definiscono lo stato dell’oggetto, i metodi il suo
comportamento.
Ogni oggetto quando viene istanziato occupa spazio
di memoria per le variabili.
3
Esempio di istanza ( = oggetti)
cc : ContoCorrente
intestatario = mario rossi
saldo = 20000
miaLampada: Lampada
Un oggetto ha un’interfaccia
„
„
Le richieste che possono essere fatte ad un
oggetto sono definite dalla sua interfaccia. Il
tipo (la classe) indica l’interfaccia degli
oggetti.
Il modo migliore di pensare agli oggetti è
come fornitore di servizi.
4
Esempi di interfaccia
ContoCorrente
-intestatario
-saldo
+visualizzaMovimenti()
+apri()
+chiudi()
Lampada
Classe ContoCorrente
„
‰
‰
„
Campi: intestatario e saldo
Metodi:
visualizzaMovimenti(),
apri(), chiudi()
Classe Lampada
‰
+accendi()
+spegni()
+soffusa()
Metodi: accendi(), spegni(),
soffusa()
L’implementazione
„
„
„
„
L’interfaccia dice solo quali richieste gli
oggetti di una classe mettono a disposizione.
Dentro ad ogni classe ci sono blocchi di
codice che indicano quali azioni devono
essere eseguite per soddisfare ogni richiesta.
Esistono sempre due punti di vista: la
creazione della classe e l’utilizzo della classe.
Alcune classi fondamentali sono predefinite e
incluse nelle librerie Java (es. System.out,
String, Date…)
5
Ereditarietà e polimorfismo
„
„
„
„
Vi sono due importanti proprietà del OO che
danno grande flessibilità ai programmi
Ereditarietà : consente di riusare le
interfaccia, clonando le classi basi e
modificandole.
Polimorfismo: rende gli oggetti
intercambiabili.
Le vedremo piu’ avanti.
Ogni cosa è un oggetto
„
„
„
In Java ogni cosa è un oggetto ad eccezione
dei tipi di dato primitivi (int, boolean, ecc.).
Un programma Java stesso è un oggetto:
helloworld è una classe con un metodo
particolare “main”.
In ogni programma Java è introdotta
automaticamente una libreria di classi
Java.lang con cui possiamo gia’ fare semplici
operazioni.
6
Hello World!
public class helloworld {
public static void main(String[] args) {
// TODO code application logic here
System.out.println("Ciao mondo!!");
}
}
Diagramma delle classi e degli oggetti del
programma HelloWorld
HelloWorld
«uses»
+Main()
: HelloWorld
System.out
+println()
println()
: System.out
7
Esempio di creazione di un programma
(linea di comando)
„
„
„
Creare un file con lo stesso nome della classe
ed estensione .java ->helloworld.java
Compilare: istruzione javac nomefile.java
(il compilatore crea il file .class)
Esecuzione: istruzione java nomefile
Creazione, durata ed uso di un oggetto
„
„
„
Un oggetto, per poter essere utilizzato, deve essere
creato, sia esso istanza di una classe di libreria
piuttosto che istanza di classi da noi definite.
Per creare un oggetto occorre definire un
riferimento ad esso (= dire che un nuovo oggetto di
quel tipo deve essere creato - dichiarazione) e
inizializzarlo (= dire come deve essere creato).
Come l’oggetto deve essere inizializzato (cioe’ quali
siano i valori necessari) è indicato dal costruttore
della classe.
8
Esempi di dichiarazione e creazione di
oggetti
Cerchio c;
c= new Cerchio (10);
oppure
Cerchio c = new Cerchio (10)
String parola = new String (“casa”)
Date datadinascita=new Date(01/01/1980)
L’operatore new
„
L’operatore new crea l’oggetto (crea l’istanza
della classe) chiamando il costruttore della
classe (è simile alla chiamata di un metodo
della classe).
9
Gli oggetti si manipolano con i riferimenti
„
„
„
c, parola, datadinascita non sono in
realta’ oggetti ma riferimenti ad oggetti.
Il rapporto che c’è tra un riferimento e
l’oggetto è analogo al rapporto
telecomando/TV.
Manipoliamo il riferimento per modificare
l’oggetto.
Utilizzare gli oggetti
„
„
„
Ogni oggetto è caratterizzato da campi e metodi
(definiti nella classe)
I campi sono elementi dati, proprietà. Ad ogni
campo corrisponde un tipo. Possono essere tipi di
dato primitivi (es. numeri, il raggio del cerchio)
oppure riferimenti ad altri oggetti.
I metodi sono funzioni, cioe’ richieste di operazioni
che possiamo fare all’oggetto. I metodi possono
ricevere dei parametri (argomenti) e restituire dei
valori una volta terminata l’esecuzione.
10
Utilizzo di campi e metodi
„
Campi
RiferimentoOggetto.campo
c.raggio = 10
‰
„
Assegna il valore 10 al campo raggio dell’oggetto collegato al
riferimento c
Metodi
RiferimentoOggetto.nomeMetodo(argomenti)
c.disegna;
‰
Disegna l’oggetto collegato al riferimento c
area=c.calcolaArea();
‰
il metodo calcola l’area di c e la restituisce in output.
Metodi statici (o metodi di classe)
„
„
„
Alcuni metodi possono essere invocati
direttamente richiamando la classe senza
istanziarla.
Tali metodi hanno nella definizione del
metodo la parola chiave static
Es. System.out
11
Librerie di classi e package
„
„
Una libreria di classi è una collezione di classi che possono essere
utilizzate nello sviluppo di un programma
Con qualsiasi ambiente di sviluppo viene distribuita la libreria
standard di Java. Si possono poi aggiungere altre librerie free o
commerciali.
„
„
„
System e String ad esempio appartengono alla libreria standard.
Una libreria è formata da gruppi di classi tra loro collegati,
denominate API (Application Programmer Interface) - java Database
API.
Le classi di una libreria possono essere raggruppate in package, a
seconda delle loro funzioni
Librerie di classi e package
„
Alcuni package della libreria standard
„
„
„
„
„
„
java.lang: supporto generico. Importato
automaticamente in ogni programma.
Java.applet: crea programmi (applet) trasportabili
attraverso la rete
Java.util: utilità generali
Java.io: funzioni di input/output
Java.net: serve per comunicare attraverso la rete
Java.sql: interagisce con le basi di dati
12
La clausola import
„
Per utilizzare classi di un package occorre
specificare il nome della classe assieme al
nome del package a cui appartiene oppure
specificare la clausola import.
import java.util.Random;
importa la classe Random del package java.util
import java.util.*;
importa tutte le classe del package java.util
Classe String
„
„
„
In Java le stringhe di caratteri sono oggetti della classe String che
appartiene alla libreria Java.lang
La classe String include metodi per esaminare singoli caratteri della
sequenza, per confrontare stringhe, per cercare stringhe, per
estrarre sottostringhe, per creare copie della stringha con
trasformazioni in maiusc o minusc, per concatenare stringhe.
Una volta che un oggetto di tipo String è stato creato è
IMMUTABILE. Esistono numerosi metodi però che restituiscono un
nuovo oggetto di tipo String, risultato di modifiche fatte al valore
originario della stringa.
13
Metodi della classe String
String (String str)
Costruttutore: crea un nuovo oggetto di tipo stringa aventi gli stessi
caratteri di str
String nome; (dichiarazione)
String nome = new String (“oggi piove”);
char charAt (int index)
„
Restituisce un dato di tipo carattere corrispondente al carattere all’indice
specificato
char mycar;
mycar = nome.charAt (1)
int compareTo (String str)
„
„
Restituisce un dato di tipo intero che indica se la stringa precede (torna un
valore negativo), è uguale (torna zero) o segue (torna un valore positivo) la
stringa str nell’ordinamento lessicografico.
int mynum;
String nome2 = new String (“domani sara bel tempo”);
mynum= nome.compareTo (nome2)
Metodi della classe String
String concat(String str)
„
Restituisce una nuova stringa che è il risultato del concatenamento della
stringa precedente con il valore di str.
boolean equals (String str)
boolean equalsIgnoreCase (String str)
„
Restituisce true se la stringa contiene gli stessi caratteri di str, false
altrimenti. Il primo considera anche maius e minuscole, il secondo no.
int length ()
„
Restituisce il numero di caratteri della stringa
String replace (char OldChar, char newChar)
„
Restituisce una nuova stringa identica a quella attuale eccetto per il fatto
che ogni occorrenza di oldChar è sostituita da newChar.
14
Metodi della classe String
String substring(int offset, int endIndex)
„
Restituisce una nuova stringa che è un sottoinsieme di quella attuale
partendo dalla posizione offset fino al carattere endIndex -1.
String toLowerCase()
String toUpperCase()
„
Restituisce una nuova stringa identica a quella attuale tranne per il fatto
che tutte le lettere maiuscole sono convertite in minuscole.
String toUpperCase()
„
Restituisce una nuova stringa identica a quella attuale tranne per il fatto
che tutte le lettere minuscolo sono convertite in maiuscole.
L’operatore di concatenazione di
stringhe +
„
„
„
„
Una stringa di caratteri delimitata da doppi
apici non può essere divisa su due linee di
codice.
L’operatore di concatenazione (+) consente
di sommare le due stringhe
Anche un valore numerico può essere
concatenato ad una stringa
L’operatore + si comporta diversamente se
agisce tra numeri o tra stringhe.
15
Sequenza di escape
„
Java definisce la sequenze di escape per
rappresentare caratteri speciali all’interno di
stringhe (esempio il doppio apice).
‰
‰
‰
‰
‰
‰
\t : Carattere di tabulazione
\n : nuova linea
\r : ritorno di carrello
\” : doppi apici
\’ : singolo apice
\\ : barra inversa
16