Programmazione Orientata agli Oggetti in Linguaggio Java Sommario

10/05/2005
Programmazione Orientata
agli Oggetti in Linguaggio Java
Introduzione
Piattaforme di Riferimento
versione 1.4
Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
G. Mecca – Università della Basilicata – [email protected]
Piattaforme >> Sommario
Sommario
m Linguaggi
di Riferimento
m La Piattaforma Java
m La Piattaforma .NET
m Caratteristiche del Linguaggio Java
m Caratteristiche del Linguaggio C#
m Utilizzo degli Strumenti
G. Mecca - Programmazione Orientata agli Oggetti
2
1
10/05/2005
Piattaforme >> Linguaggi di Riferimento
Linguaggi di Riferimento
m In
questo corso
ðtecniche e metodi della programmazione a
oggetti
m Linguaggio
principale
ðJava
m Linguaggio
secondario
ðC# della piattaforma Microsof.NET
3
G. Mecca - Programmazione Orientata agli Oggetti
Piattaforme >> Linguaggi di Riferimento
Linguaggi di Riferimento
m Domanda:
ATTENZIONE
alle ragioni di questa
scelta (>>)
Perché questi due linguaggi ?
ðin effetti ne esistono molti altri
ðSmalltalk (tradizionale)
ðDelphi
ðPython (recente)
m Risposta
ðrappresentano le piattaforme di riferimento
attuali per lo sviluppo software
ðuna serie di caratteristiche distintive comuni
G. Mecca - Programmazione Orientata agli Oggetti
4
2
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Complessa
piattaforma software
ðcentrata attorno al linguaggio Java
ðideata dalla Sun (http://www.java.sun.com) e
tuttora di “proprietà” della Sun
ðsviluppata attraverso lo Java Community
Process (JCP, http://www.jcp.org)
m Essenzialmente
ðun complesso di specifiche e di componenti
software
G. Mecca - Programmazione Orientata agli Oggetti
5
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Un
po’ di storia
ðnasce da un progetto della Sun (progetto
Green) con scopi totalmente diversi
ðinizialmente si chiamava Oak
ðJava 1.0 – rilasciato nel 1995 dalla Sun
ðJava 1.1 – rilasciato nel 1997
m Java
2
ðdalla v. 1.2 del 1998, riscrittura significativa
G. Mecca - Programmazione Orientata agli Oggetti
6
3
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Le
versioni di Java2
ðv. 1.2, la prima
ðv. 1.3, sostanzialmente equivalente alla 1.2
ðv. 1.4, introduce alcune limitate funzionalità
nuove incompatibili con il passato
ðv. 1.5, ulteriore riscrittura significativa, con
molte funzionalità nuove ed incompatibili
G. Mecca - Programmazione Orientata agli Oggetti
7
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Java
2 v. 1.5 = Java 2 5.0
ðè stato alla fine chiamato Java 2 v. 5.0 per
sottolineare le novità rispetto alla versione
precedente
m Il
problema di Java 2 5.0
ðil codice compilato è incompatibile con le
vecchie macchine virtuali
ðle funzionalità vanno utilizzate in modo
controllato
G. Mecca - Programmazione Orientata agli Oggetti
8
4
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Attualmente
ðla piattaforma è organizzata in tre livelli
m J2SE
– Java 2 Standard Edition
ðper lo sviluppo di applicazioni desktop
m J2EE
– Java 2 Enterprise Edition
ðper lo sviluppo di applicazioni lato server
m J2ME
– Java 2 Micro Edition
ðper lo sviluppo di applicazioni mobili
G. Mecca - Programmazione Orientata agli Oggetti
9
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Ognuno
dei livelli si compone di
ðuna serie di specifiche (documenti)
ðuna serie di strumenti (es: compilatore,
debugger ecc.)
ðuna serie di librerie o API (Application
Program Interfaces)
ðschematizzando (eccessivamente) è
possibile dire che i livelli più complessi
includono i più semplici
G. Mecca - Programmazione Orientata agli Oggetti
10
5
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
fonte: www.java.sun.com
G. Mecca - Programmazione Orientata agli Oggetti
11
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Principali
caratteristiche della piattaforma
ðI. scalabile e di ampia applicabilità
ðII. fornisce un’ampia libreria di classi
ðIII. indipendente dalla piattaforma hardware e
realmente “portabile”
G. Mecca - Programmazione Orientata agli Oggetti
12
6
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m I.
Scalabilità e applicabilità
ðconsente di sviluppare applicazioni di vario
genere
ðsia di piccole e medie dimensioni
ðsia di grandi dimensioni e altissimo carico
ðsia in contesti applicativi tradizionali (sistemi
informativi) sia in contesti meno tradizionali
ðcon attenzione agli aspetti di sicurezza e
prestazioni
G. Mecca - Programmazione Orientata agli Oggetti
13
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Le
varie classi di applicazioni
ðapplicazioni “desktop” tradizionali
ðapplicazioni client-server a due livelli
ðapplicazioni Web a tre livelli, anche con
componenti distribuiti e ad alto traffico
ðapplicazioni per dispositivi mobili
ðapplicazioni orientate ai servizi (Web
Services)
G. Mecca - Programmazione Orientata agli Oggetti
14
7
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m II.
Ampia libreria di classi
ðlibrerie per qualsiasi esigenza di calcolo
ðAPI (“Application Program Interface”):
collezione di librerie di classi disponibili per
l’uso
ðattualmente più di 3000 classi, 32000 metodi
e circa 130 package
ðcollezioni (liste, pile ...), prog. grafica
(finestre, bottoni, menu...), prog. Web...
15
G. Mecca - Programmazione Orientata agli Oggetti
Piattaforme >> La Piattaforma Java
La Piattaforma Java
G. Mecca - Programmazione Orientata agli Oggetti
fonte: www.java.sun.com
16
8
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
fonte: www.java.sun.com
17
G. Mecca - Programmazione Orientata agli Oggetti
Piattaforme >> La Piattaforma Java
La Piattaforma Java
Versione di J2SE
Numero di Classi delle Numero di Metodi delle
API Standard
API Standard
1.0
212
2125
1.1
504
5478
1.2
1781
20935
1.3
2130
23901
1.4
2991
32138
1.5 (5.0)
3279
??????
G. Mecca - Programmazione Orientata agli Oggetti
18
9
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m III.
Indipendenza dalla piattaforma
ðcaratteristica essenziale di Java
m Le
origini
ðle “applet” Java
ðidea: scaricare codice dalla rete ed eseguirlo
attraverso il browser
ðrequisito essenziale: il codice doveva essere
eseguibile indipendentemente dall’hardware
e dal sistema operativo
G. Mecca - Programmazione Orientata agli Oggetti
19
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Attenzione
ðin C++ (e in tutti i linguaggi tradizionali):
ðuna volta compilato, il codice oggetto e poi
l’eseguibile contengono codice macchina
specifico del (a) processore (b) sistema
operativo utilizzato
ðper eseguire il codice su altre piattaforme
hardware bisogna ricompilarlo (sperando che
tutte le librerie usate e le funzionalità siano
compatibili)
G. Mecca - Programmazione Orientata agli Oggetti
20
10
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Il
compilatore di Java
ðproduce codice oggetto in un linguaggio
intermedio per una “macchina virtuale”
m JVM
– Java Virtual Machine
ðmacchina composta da componenti virtuali
(processore virtuale, registri virtuali, ecc.)
ðil tutto simulato attraverso un’applicazione
software (java.exe)
G. Mecca - Programmazione Orientata agli Oggetti
21
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m
Bytecode
ðcodice oggetto della macchina virtuale (istruzioni
eseguibili dalla macchina virtuale)
ðlinguaggio intermedio
m
Funzionamento
ðil codice sorgente viene compilato in bytecode
ðil bytecode viene eseguito dall’emulatore della m.v.
(java.exe) simulando il funzionamento della
macchina virtuale sulla macchina fisica
G. Mecca - Programmazione Orientata agli Oggetti
22
11
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
bytecode
delle librerie
01001001
11001011
00110011
compilatore
javac
01001001
11001011
00110011
JVM
java
bytecode
Prova.class
codice sorgente
Prova.java
110 111
010 001
101 101
ATTENZIONE
al processo di
compilazione ed
esecuzione
macchina fisica
codice eseguibile
G. Mecca - Programmazione Orientata agli Oggetti
23
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Esecuzione
da parte della JVM
ðla macchina virtuale potrebbe eseguire lo
bytecode interpretandolo
m Interpretazione
del codice
ðmodo alternativo alla compilazione
ðprocesso per cui il codice di un’applicazione
viene tradotto da un interprete in codice
eseguibile dal processore
ðdurante l’esecuzione
G. Mecca - Programmazione Orientata agli Oggetti
24
12
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m In
effetti, però
ðl’interpretazione è a volte inefficiente (la
stessa istruzione viene tradotta tutte le volte
che viene eseguita)
m Tipicamente
ðper ragioni di prestazioni il bytecode viene
precedentemente compilato “al volo” dalla
macchina virtuale in codice macchina per la
macchina fisica
G. Mecca - Programmazione Orientata agli Oggetti
25
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m JIT
Compiler (Just in Time Compiler)
ðcomponente della macchina virtuale che
analizza pezzi di bytecode alla prima
esecuzione
ðe li compila “al volo” in codice oggetto per la
macchina fisica
ðsuccessivamente viene eseguito
direttamente il codice compilato
G. Mecca - Programmazione Orientata agli Oggetti
26
13
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m In
questo modo
ðil codice può essere compilato una volta ed
eseguito da molte macchine diverse
ðbasta che ciascuna delle macchine disponga
di una implementazione della JVM e delle
librerie necessarie
m JRE
– Java Runtime Environment
ðJVM e API di J2SE
ð“compile once, run anywhere”
27
G. Mecca - Programmazione Orientata agli Oggetti
Piattaforme >> La Piattaforma Java
Introduzione
G. Mecca - Programmazione Orientata agli Oggetti
fonte: www.java.sun.com
28
14
10/05/2005
Piattaforme >> La Piattaforma Java
La Piattaforma Java
m Prima
ATTENZIONE
all’importanza di Java
nell’evoluzione dell
informatica
di Java: le piattaforme principali
ðC/C++, Visual Basic, PHP, Delphi
m Differenze
sostanziali rispetto a Java
ðsono relativamente specializzate (nessuna
ha lo stesso ambito di applicabilità di Java)
ðle librerie predefinite sono relativamente
povere
ðil codice compilato non è portabile da una
piattaforma all’altra
G. Mecca - Programmazione Orientata agli Oggetti
29
Piattaforme >> La Piattaforma .NET
La Piattaforma .NET
m Piattaforma
di riferimento della Microsoft
ðper molti versi, una risposta alla larghissima
diffusione di Java
m Storia
della piattaforma .NET
ðnel 2000 la versione 1.0
ðnel 2004 la versione 1.1
ðattualmente: versione 2.0 beta
G. Mecca - Programmazione Orientata agli Oggetti
30
15
10/05/2005
Piattaforme >> La Piattaforma .NET
La Piattaforma .NET
m Principali
caratteristiche
ðI. scalabile e di ampia applicabilità
ðII. fornisce un’ampia libreria di classi
ðIII. multilinguaggio
G. Mecca - Programmazione Orientata agli Oggetti
31
Piattaforme >> La Piattaforma .NET
La Piattaforma .NET
m I.
Scalabilità e applicabilità
ðesattamente come la piattaforma Java
ðdalle applicazioni di fascia alta ai palmari
ðmaggiore enfasi su standard recenti
ðXML e Web services
m II.
Ampia libreria di classi
ðesattamente come la piattaforma Java
G. Mecca - Programmazione Orientata agli Oggetti
32
16
10/05/2005
Piattaforme >> La Piattaforma .NET
fonte: Microsoft .NET
Academic Resource Kit
Introduzione
System.Web
Services
Description
Discovery
Protocols
UI
HtmlControls
Caching
Configuration
Security
SessionState
System.Windows.Forms
Form
Button
MessageBox
ListControl
WebControls
System.Drawing
Drawing2D
Imaging
System.Data
OLEDB
Design
SQL
SQLTypes
Collections
Configuration
Diagnostics
Globalization
IO
Net
Reflection
Resources
Printing
Text
System.Xml
XSLT
XPath
Serialization
System
Security
ServiceProcess
Text
Threading
Runtime
InteropServices
Remoting
Serialization
G. Mecca - Programmazione Orientata agli Oggetti
33
Piattaforme >> La Piattaforma .NET
La Piattaforma .NET
m III.
Multilinguaggio
ðpensata per consentire l’interoperabilità di
codice scritto con linguaggi diversi
mI
linguaggi di .NET
ðripensamento di linguaggi tradizionali
Microsoft: Visual Basic.NET, C++.NET, J#
ðun linguaggio completamente nuovo: C#
ðtutti i linguaggi condividono la stessa libreria
G. Mecca - Programmazione Orientata agli Oggetti
34
17
10/05/2005
Piattaforme >> La Piattaforma .NET
La Piattaforma .NET
m Come
consentire l’interoperabilità ?
ðidea: architettura software basata su una
macchina virtuale
ðed un linguaggio intermedio in cui viene
compilato il codice sorgente di ciascun
linguaggio
m Nota
ðè la stessa architettura di Java ma pensata
per uno scopo diverso
G. Mecca - Programmazione Orientata agli Oggetti
35
Piattaforme >> La Piattaforma .NET
La Piattaforma .NET
m CLR
– Common Languare Runtime
ðmacchina virtuale .NET
ðdotata di un compilatore JIT per Windows
m MSIL
– Microsoft Intermediate Language
ðlinguaggio intermedio di .NET
ðlinguaggio in cui viene compilato il codice di
tutti i linguaggi della famiglia .NET
ðsotto forma di assembly (>>)
G. Mecca - Programmazione Orientata agli Oggetti
36
18
10/05/2005
Piattaforme >> La Piattaforma .NET
fonte: Microsoft .NET
Academic Resource Kit
Introduzione
Source
code
MSIL
VB.NET
C#
C++
Compiler
Compiler
Compiler
Assembly
Assembly
Assembly
Common Language Runtime JIT Compiler
Native
code
Managed
Code
CLR Services
Managed
CLR
Code
Managed
Code
Unmanaged
Code
Operating System Services
G. Mecca - Programmazione Orientata agli Oggetti
37
Piattaforme >> La Piattaforma .NET
La Piattaforma .NET
m Attenzione
ðla compilazione, come nel caso di Java,
genera codice intermedio (IL)
ðnel caso di .NET, questo codice viene
definito assembly, e può avere varie
estensioni, tra cui .exe
ða differenza di Java, per eseguire l’assembly
non è necessario invocare esplicitamente la
macchina virtuale (il sistema operativo la
esegue automaticamente)
G. Mecca - Programmazione Orientata agli Oggetti
38
19
10/05/2005
Piattaforme >> La Piattaforma .NET
La Piattaforma .NET
m Per
eseguire codice .NET
ðuna macchina Windows deve avere installato
il .NET Framework
m .NET
Framework
ðCLR
ðAPI di .NET
ðanalogo di JRE
39
G. Mecca - Programmazione Orientata agli Oggetti
Piattaforme >> La Piattaforma .NET
La Piattaforma .NET
m Di
ATTENZIONE
alla differenze tra
le piattaforme
conseguenza
ðalcune fortissime analogie con la piattaforma
Java
ðin particolare l’architettura basata sulla
macchina virtuale
m La
differenza principale
ðun linguaggio su molte piattaforme
ðtanti linguaggi su una piattaforma (di fatto)
G. Mecca - Programmazione Orientata agli Oggetti
40
20
10/05/2005
Piattaforme >> La Piattaforma .NET
La Piattaforma .NET
m Il
progetto Mono
ðtentativo di sviluppare un’implementazione
open source della macchina virtuale .NET e
del compilatore di C#
ðsponsorizzato dalla Xymian
ðhttp://www.go-mono.org
ðattualmente una implementazione parziale
del framework versione 1.1
G. Mecca - Programmazione Orientata agli Oggetti
41
Piattaforme >> Caratteristiche del Linguaggio Java
Caratteristiche del Linguaggio Java
m Principali
caratteristiche del linguaggio
ðI. completamente orientato agli oggetti
ðII. sintassi basata sul C/C++
ðIII. semplice e robusto
ðIV. collegamento dinamico
ðV. caratteristiche avanzate (multi-thread,
riflessione, ...)
G. Mecca - Programmazione Orientata agli Oggetti
42
21
10/05/2005
Piattaforme >> Caratteristiche del Linguaggio Java
Caratteristiche del Linguaggio Java
m I.
Completamente orientato agli oggetti
ðnon è consentita programmazione ibrida
ðtutta la programmazione è basata su classi e
oggetti
m II.
Sintassi basata sul C/C++
ðsimilarità nei costrutti del linguaggio
ðes: espressioni, if, cicli ecc.
G. Mecca - Programmazione Orientata agli Oggetti
43
Piattaforme >> Caratteristiche del Linguaggio Java
Caratteristiche del Linguaggio Java
m III.
Semplice e robusto
ðdrastica semplificazione rispetto al C++
ðgestione automatica della memoria
(“garbage collection”)
ðfortemente tipato
ðgestione rafforzata delle eccezioni
ðereditarietà singola (>>)
G. Mecca - Programmazione Orientata agli Oggetti
44
22
10/05/2005
Piattaforme >> Caratteristiche del Linguaggio Java
Caratteristiche del Linguaggio Java
m IV.
Collegamento dinamico
ðle librerie non devono essere collegate
staticamente al codice
ðil collegamento avviene dinamicamente
(appena viene richiesto l’uso della libreria)
ðgrosso vantaggio: consente di collegare
versioni aggiornate delle librerie senza dover
ricollegare il codice
m V.
Altre caratteristiche avanzate
G. Mecca - Programmazione Orientata agli Oggetti
45
Piattaforme >> Caratteristiche dei Linguaggio C#
Caratteristiche del Linguaggio C#
m Principali
caratteristiche di Java e C#
ðI. completamente orientato agli oggetti
ðII. sintassi basata sul C/C++
ðIII. semplice e robusto (ATTENZIONE)
ðIV. collegamento dinamico
ðV. caratteristiche avanzate (multi-thread,
riflessione, ...)
G. Mecca - Programmazione Orientata agli Oggetti
46
23
10/05/2005
Piattaforme >> Caratteristiche dei Linguaggio C#
Caratteristiche del Linguaggio C#
m Semplice
e robusto
ðC# eredita molte delle scelte fatte per Java
ðgestione automatica della memoria,
tipizzazione, ereditarietà singola, eccezioni...
m Ma
ðè meno restrittivo nell’imporre queste scelte
al programmatore
ðes: gestione della memoria, eccezioni
ðquesta è una delle principali differenze
G. Mecca - Programmazione Orientata agli Oggetti
47
Piattaforme >> Utilizzo degli Strumenti
Utilizzo degli Strumenti
m Per
sviluppare in Java
ðè necessario installare il J2SE Development
Kit (JDK)
ðscaricabile liberamente da
http://www.java.sun.com con la relativa
documentazione (zip con file html)
ðattenzione alle dimensioni
ðjdk-1_5_0-windows.exe >> circa 52 Mega
ðjdk-1_5_0-doc.zip >> circa 44 Mega
G. Mecca - Programmazione Orientata agli Oggetti
48
24
10/05/2005
Piattaforme >> Utilizzo degli Strumenti
Utilizzo degli Strumenti
m Post-Configurazione
ðcreare una nuova variabile di ambiente
JAVA_HOME e assegnargli il valore della
cartella in cui è installato l’SDK
ðPannello di Controllo >> Sistema >>
Avanzate >> Variabili di Ambiente
ðes: JAVA_HOME=C:\Programmi\Java\jdk1.5.0_01
ðaggiornare la variabile PATH aggiungendo il
valore %JAVA_HOME%\bin
G. Mecca - Programmazione Orientata agli Oggetti
49
Piattaforme >> Utilizzo degli Strumenti
Utilizzo degli Strumenti
m Gli
strumenti principali
ðil compilatore: javac.exe
ðla macchina virtuale: java.exe
mI
passo
ðcompilare il sorgente (.java) con javac
ðeseguire il bytecode (.class) con java
G. Mecca - Programmazione Orientata agli Oggetti
50
25
10/05/2005
Piattaforme >> Utilizzo degli Strumenti
Un Semplice Programma Java
/*
Questo e' il primo programma Java
file: Prima.java
*/
package prima;
public class Prima {
}
public static void main(String[] args) {
// stampa una scritta sullo schermo
System.out.println("Prima prova");
}
>>
G. Mecca - Programmazione Orientata agli Oggetti
51
Piattaforme >> Utilizzo degli Strumenti
G. Mecca - Programmazione Orientata agli Oggetti
52
26
10/05/2005
Piattaforme >> Utilizzo degli Strumenti
Utilizzo degli Strumenti
m Per
sviluppare in C#
ðè necessario installare il
.NET Redistributable Package e il
.NET Framework SDK v. 1.1
ðscaricabili liberamente dal sito
http://www.gotdotnet.com
ðattenzione alle dimensioni
ðdotnetfx.exe >> ca. 23 Mega
ðNETSDKSetup1.1.exe >> circa 112 Mega
G. Mecca - Programmazione Orientata agli Oggetti
53
Piattaforme >> Utilizzo degli Strumenti
Utilizzo degli Strumenti
m Post-Configurazione
ðcambiare il PATH aggiungendo il valore
C:\Windows\Microsoft.NET\Framework\v1.1.4322\
ðATTENZIONE: il nome effettivo della cartella
può cambiare con la versione dell’SDK
m Lo
strumento principale
ðil compilatore csc.exe
ðla macchina virtuale viene eseguita
automaticamente
G. Mecca - Programmazione Orientata agli Oggetti
54
27
10/05/2005
Piattaforme >> Utilizzo degli Strumenti
Un Semplice Programma C#
/*
Questo e' il primo programma in C#
file: primo.cs
*/
namespace primo {
public class Prima {
public static void Main(string[] args) {
// stampa una scritta sullo schermo
System.Console.WriteLine("Prima Prova");
}
}
}
G. Mecca - Programmazione Orientata agli Oggetti
>>
55
Piattaforme >> Utilizzo degli Strumenti
G. Mecca - Programmazione Orientata agli Oggetti
56
28
10/05/2005
Piattaforme >> Sommario
Riassumendo
m Linguaggi
di Riferimento
m La Piattaforma Java
m La Piattaforma .NET
m Caratteristiche del Linguaggio Java
m Caratteristiche del Linguaggio C#
m Utilizzo degli Strumenti
G. Mecca - Programmazione Orientata agli Oggetti
57
Termini della Licenza
Termini della Licenza
m
This work is licensed under the Creative Commons AttributionShareAlike License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to
Creative Commons, 559 Nathan Abbott Way, Stanford, California
94305, USA.
m
Questo lavoro viene concesso in uso secondo i termini della
licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere
una copia della licenza, è possibile visitare
http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una
lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way,
Stanford, California 94305, USA.
G. Mecca - Programmazione Orientata agli Oggetti
58
29