Esercitazione nƒ 2 Obiettivi Problema Scopo Specifica

(VHUFLWD]LRQHQƒ
2ELHWWLYL
Progettazione di una applicazione Java
Utilizzo di classi come “schemi”
Utilizzo di costruttori
Utilizzo di stringhe
Uguaglianza tra oggetti
Utilizzo di classi come componenti software statici
Utilizzo di -&UHDWRU come Editor
3HU OD FRPSLOD]LRQH HG HVHFX]LRQH XVDUH DQFRUD JOL VWUXPHQWL
-'.«
Laboratorio di Fondamenti I TLC – Esercitazione II
1
3UREOHPD
6FRSR
3URJHWWDUHXQ¶DSSOLFD]LRQH-DYDXQ*LRFR
6SHFLILFD
Si progetti un gioco che simuli il combattimento tra entità 0DU]LDQH e
7HUUHVWUL. Il comportamento astratto di tali entità è specificato nelle
slide n°3 e n°6. Il componente software che gestisce il gioco dovrà
creare un oggetto di tipo ‘Marziano’ con matricola non definita ed uno
invece con matricola “[”. Dovrà creare inoltre un oggetto di tipo
‘Terrestre’ dal nome sconosciuto ed uno di nome “.HQ”. L’oggetto
“[” deve attaccare i Terrestri mentre “.HQ” deve attaccare i
Marziani. A seconda che vincano o perdano l’indice di vitalità di “[”
e “.HQ” può salire o scendere. Inoltre, il componente software che
gestisce il gioco dovrà farli entrambi attaccare due volte stampando in
uscita il loro stato al termine di ogni attacco.
Laboratorio di Fondamenti I TLC – Esercitazione II
2
/¶HQWLWj0$5=,$12
Ogni marziano ha un numero di PDWULFROD. Il suo
stato è rappresentato da un’DXWRQRPLD, un livello di
,QWHOOLJHQ]D $UWLILFLDOH e di WHFQRORJLD. Un
marziano può attaccare i terrestri.
3LLQGHWWDJOLR«
La PDWULFROD è una stringa alfanumerica.
L’DXWRQRPLD è rappresentata da un indice compreso tra 1 e
100. Quando tale indice è 100 l’autonomia è massima, quando è
zero il marziano è morto.
L’$, è rappresentata da un indice compreso tra 1 e 10.
La WHFQRORJLD è rappresentata da un indice compreso tra 1 e
10.
&RPHDVWUDUUHWDOLHQWLWjPDU]LDQH"
Laboratorio di Fondamenti I TLC – Esercitazione II
3
/¶HQWLWj0$5=,$12
2FFRUUHUjXQDFODVVH0DU]LDQRFKH GHILQLVFHLO
WLSRGLGDWRDVWUDWWRµ0DU]LDQR¶
3DUWH 1DVFRVWD VWDWR matricola,AI,tecnologia e
autonomia
non
devono
essere
accessibili
direttamente dall’esterno…
3DUWH9LVLELOHFRVWUXWWRUL
Marziano() //parametri di default: matricola = “indefinito”
//automomia = 50; AI = 5; tecnologia=5
Marziano (String matricola, int[] param)
// param è un array di 3 interi che corrispondono ai valori di
// DXWRQRPLD, $,e WHFQRORJLD di inizializzazione
Al termine della inizializzazione ogni costruttore deve stampare in
uscita: “Il Marziano [matricola] entra in gioco.”
Laboratorio di Fondamenti I TLC – Esercitazione II
4
/¶HQWLWj0$5=,$12
3DUWH9LVLELOHRSHUD]LRQL
void attaccaTerrestri() //vedi slide 11
boolean attivo()
// WUXH se autonomia>0; IDOVH altrimenti
String toString() // restituisce la matricola e il livello di autonomia
// corrente es: “Marziano x102. Autonomia = 50”
boolean equals (Marziano x)
Ai fini del gioco due oggetti ‘Marziani’ sono uguali se hanno le stesse
‘potenzialità offensive’. Ossia se, indipendentemente dalla matricola,
hanno lo stesso livello di autonomia, AI e tecnologia. Se uno solo di
questi parametri è diverso i due Marziani non si equivalgono.
Laboratorio di Fondamenti I TLC – Esercitazione II
5
/¶HQWLWj7(55(675(
Ogni terrestre ha un QRPH. Il suo stato è
rappresentato dalla YLWD che ha ancora a
disposizione, dalla YHORFLWj di combattimento e da
un DUPDPHQWR. Un terrestre può attaccare i
marziani.
3LLQGHWWDJOLR«
Il QRPH è una stringa di caratteri.
La YLWD disponibile è rappresentata da un indice compreso tra 1
e 100. 100 è l’indice massimo di vita disponibile, quando la vita è
zero il terrestre è morto.
La YHORFLWD è rappresentata da un indice compreso tra 1 e 10.
L’DUPDPHQWR è rappresentato da un indice compreso tra 1 e
10.
&RPHDVWUDUUHOHHQWLWjWHUUHVWUL"
Laboratorio di Fondamenti I TLC – Esercitazione II
6
/¶HQWLWj7(55(675(
2FFRUUHUjXQDFODVVH7HUUHVWUHFKH GHILQLVFHLO
WLSRGLGDWRDVWUDWWRµ7HUUHVWUH¶
3DUWH1DVFRVWDVWDWR
Nome,vita,velocità e armamento non devono
essere accessibili direttamente dall’esterno…
3DUWH9LVLELOHFRVWUXWWRUL
Terrestre() // parametri di default: nome = “sconosciuto”
// vita = 50; velocita = 5; armamento=5
Terrestre (String nome, int[] param)
// param è un array di 3 interi che corrispondono ai valori di
// YLWD, YHORFLWD e DUPDPHQWR di inizializzazione
Al termine della inizializzazione ogni costruttore deve stampare in
uscita: “Il Terrestre [nome] entra in gioco.”
Laboratorio di Fondamenti I TLC – Esercitazione II
7
/¶HQWLWj7(55(675(
3DUWH9LVLELOHRSHUD]LRQL
void attaccaMarziani()
boolean vivente()
// vedi slide 11
// WUXH se vita>0; IDOVH altrimenti
String toString() // restituisce il nome e il livello di vita
// corrente es: “Terrestre Ken. Vita = 75”
boolean equals (Terrestre x)
Ai fini del gioco due oggetti ‘Terrestri’ sono uguali se hanno le stesse
‘potenzialità offensive’. Ossia se, indipendentemente dal nome, hanno lo
stesso livello di vita, velocità e armamento. Se uno solo di questi
parametri è diverso i due Terrestri non si equivalgono.
Laboratorio di Fondamenti I TLC – Esercitazione II
8
/¶DSSOLFD]LRQHµ*LRFR%DWWDJOLD¶
,OFRPSRQHQWHVRIWZDUHFKHJHVWLVFHLOJLRFR
GRYUj«
Segnalare in uscita che il gioco ha inizio.
Definire e creare un oggetto ‘Marziano’ con matricola e
parametri di default (costruttore senza parametri).
Definire e creare un oggetto ‘Terrestre’ con nome e
parametri di default (costruttore senza parametri).
Definire e creare il marziano “x102” con autonomia=50,
AI=5, tecnologia=5.
Definire
e creare il terrestre “Ken” con vita=75,
velocita=10, armamento=6.
Laboratorio di Fondamenti I TLC – Esercitazione II
9
/¶DSSOLFD]LRQHµ*LRFR%DWWDJOLD¶
,OFRPSRQHQWHVRIWZDUHFKHJHVWLVFHLOJLRFR
GRYUj«
…..
Confrontare l’equivalenza ai fini del gioco dei due
Terrestri creati (“Ken” e “sconosciuto”) e stampare in
uscita un messaggio con il risultato del confronto.
Ripetere il punto 6 per i due Marziani creati.
Mostrare in uscita lo stato di vita di Ken e di autonomia di
x102 con l’indicazione che si tratta dello stato prima
dell’attacco.
Far attaccare (se vivi) 2 volte Ken e x102 e mostrare ogni
volta in uscita il loro stato di vita e autonomia con
l’indicazione che si tratta dello stato dopo dell’attacco.
Segnalare in uscita che il gioco è terminato.
Laboratorio di Fondamenti I TLC – Esercitazione II
10
6LPXOD]LRQHGLXQDWWDFFR
9LHQH TXL ULSRUWDWR LO FRGLFH GHO PHWRGR DWWDFFD0DU]LDQL QHOOD
FODVVH 7HUUHVWUH 6L EDVD SHU VHPSOLFLWj VXL YDORUL GHOOH YDULDELOL GL
LVWDQ]D
Da utilizzare nella implementazione della classe 7HUUHVWUH e da
adattare per la classe 0DU]LDQR.
6LPXOD]LRQHGLXQDWWDFFR
SXEOLFYRLG DWWDFFD0DU]LDQL^
LI YLYHQWH6\VWHPRXWSULQWOQ1RQSRVVRDWWDFFDUH
6RQRPRUWR
HOVH^
DOJRULWPRGLDWWDFFR VHPSOLILFDWR
YLWD YLWD YHORFLWD DUPDPHQWR
`
`
Laboratorio di Fondamenti I TLC – Esercitazione II
11
(VHUFLWD]LRQHQƒ
&RPHSURFHGHUH"
Scaricare il file *LRFR%DWWDJOLDMDYD dal sito Web del
corso e salvarlo in &?7(03
Il file *LRFR%DWWDJOLDMDYD contiene il PDLQ completo
dell’applicazione.
Capirne il funzionamento e implementare le classi mancanti:
7HUUHVWUHMDYD e 0DU]LDQRMDYDsulla base della specifica data. Si usi
come editor JCreator.
Compilare tutto ed eseguire l’applicazione usando i
comandi della JDK attraverso la Console per Java.
Laboratorio di Fondamenti I TLC – Esercitazione II
12
(VHUFLWD]LRQHQƒ
6XJJHULPHQWRSHUFUHDUHODFODVVH7HUUHVWUHMDYD«
&ODVVHFKHDVWUDHXQ%!7HUUHVWUH%!
SXEOLFFODVV 7HUUHVWUH^
YDULDELOL
SULYDWH 6WULQJQRPH
«
FRVWUXWWRUL
SXEOLF 7HUUHVWUH^«`
SXEOLF 7HUUHVWUH6WULQJQDPHLQW>@SDUDP^«`
PHWRGL
SXEOLFYRLG DWWDFFD0DU]LDQL^FRPHYLVWR`
SXEOLFERROHDQ YLYHQWH^LI «UHWXUQWUXH
HOVHUHWXUQIDOVH`
SXEOLF 6WULQJWR6WULQJ^«`
`
$QDORJDPHQWHSHU0DU]LDQRMDYD«
Laboratorio di Fondamenti I TLC – Esercitazione II
13
(VHUFLWD]LRQHQƒIDFROWDWLYR
Documentare MDYDGRF tutti i metodi e le variabili delle
classi Marziano.java e Terrestre.java.
Cambiare il componente software che gestisce il gioco:
— Creare più personaggi.
Varianti nei tipi di dati astratti:
— Cambiare la visualizzazione dello stato (metodo toString())
degli oggetti stampando in uscita, per esempio, anche il
valore corrente di AI e tecnologia per i Marziani e di velocità e
armamento per i Terrestri.
Laboratorio di Fondamenti I TLC – Esercitazione II
14
(VHUFLWD]LRQHQƒFRPSRQHQWLVWDWLFL
3UREOHPD
&RPHDVWUDUUHORVWDWRGHO*LRFR"
1HOPRPHQWRLQFXLDWWDFFDXQ0DU]LDQR7HUUHVWUHQRQFRQRVFHQXOOD
FLUFD OR VWDWR FRPSOHVVLYR GHO JLRFR 1RQ SXz TXLQGL DSSOLFDUH DOFXQD
VWUDWHJLD UHODWLYD DOOD FRQGL]LRQH GL JLRFR FRUUHQWH 3HU HVHPSLR VL
GHFLGHFKHSHUXQ7HUUHVWUHQRQqFRQYHQLHQWHDWWDFFDUHVHLOQXPHUR
FRUUHQWH GHL 0DU]LDQL LQ JLRFR q VXSHULRUH D TXHOOR GHL 7HUUHVWUL H
YLFHYHUVD&RPHIRUQLUHTXHVWDFDSDFLWj"
6ROX]LRQH
8VRGHOOHFODVVLFRPHFRPSRQHQWLVRIWZDUH67$7,&,
/RVWDWRGHOJLRFRGHYHHVVHUHFRQGLYLVRGDWXWWHOHHQWLWj1RQ GHYRQR
HVVHUHFUHDWLWDQWLRJJHWWLGLWLSR³6WDWR*LRFR´PDQHGHYHHVLVWHUHXQD
HQWLWj XQLFD H FRQGLYLVD D FXL WXWWH OH HQWLWj SRVVDQR DFFHGHUH
DWWUDYHUVRLPHWRGLPHVVLDGLVSRVL]LRQHGDOO¶LQWHUIDFFLD
Laboratorio di Fondamenti I TLC – Esercitazione II
15
(VHUFLWD]LRQHQƒFRPSRQHQWLVWDWLFL
6SHFLILFD
Si progetti una classe che astragga lo stato del gioco e che
funga da componente software. La classe ha variabili e
metodi di tipo VWDWLF.
In particolare si desidera che lo stato contenga
l’informazione circa il numero corrente di Marziani e
Terrestri creati.
Il numero può essere modificato solo attraverso i metodi
LQF0DU]LDQL ( per aumentare di 1 il numero di marziani) e
LQF7HUUHVWUL (sempre di 1, ma i terrestri).
Tale
stato
è
accessibile
attraverso
QXP7HUUHVWULLQ*LRFR e QXP0DU]LDQLLQ*LRFR.
Laboratorio di Fondamenti I TLC – Esercitazione II
i
metodi
16
(VHUFLWD]LRQHQƒFRPSRQHQWLVWDWLFL
&RPHSURFHGHUH"
Implementare la classe 6WDWR*LRFR.
3DUWH 1DVFRVWD VWDWR definisce in una variabile
statica numeroTerrestri e numeroMarziani (in gioco)
inizializzata a 0.
3DUWH9LVLELOHRSHUD]LRQL
&RVWUXWWRUH
NO
3HUFKq"
static void incMarziani() // incrementa di 1 QXPHUR0DU]LDQL
static void incTerrestri() // incrementa di 1 QXPHUR7HUUHVWUL
static int numMarzianiinGioco() // restituisce QXPHUR0DU]LDQL
static int numTerrestriinGioco() // restituisce QXPHUR7HUUHVWUL
Laboratorio di Fondamenti I TLC – Esercitazione II
17
(VHUFLWD]LRQHQƒFRPSRQHQWLVWDWLFL
&RPHSURFHGHUH"
Modificare i costruttori di 0DU]LDQRMDYD e 7HUUHVWUHMDYDin
modo che aggiornino coerentemente 6WDWR*LRFR.
Modificare i metodi DWWDFFD7HUUHVWUL e DWWDFFD0DU]LDQL in
modo che se in gioco c’è un numero di avversari
superiore a quello dei compagni il marziano o il terrestre
si astenga dall’attaccare e compaia una scritta a video di
tipo : “Marziano [matricola]. Non mi conviene attaccare!”.
Scaricare il file *LRFR%DWWDJOLDMDYD dal sito Web del
corso e salvarlo in &?7(03. Il PDLQ crea un numero
di Terrestri maggiore a quello dei Marziani.
Compilare tutto ed eseguire *LRFR%DWWDJOLD.
&RPHFDPELDO¶RXWSXW"
Laboratorio di Fondamenti I TLC – Esercitazione II
18
$SSHQGLFH-&UHDWRU FRPH(GLWRU
&5($=,21(18292),/(
Per scrivere un nuovo file usando JCreator cliccare su
)LOH
1HZ o sul bottone corrispondente
Selezionare quindi nella finestra )LOHV l’icona denominata -DYD)LOH
ed inserire il nome del file completo nel campo )LOHQDPH ed il
percorso in cui vogliamo crearlo in /RFDWLRQ.
Laboratorio di Fondamenti I TLC – Esercitazione II
19
$SSHQGLFH-&UHDWRU FRPH(GLWRU
$3(5785$),/((6,67(17(
Per aprire un file già esistente usando JCreator cliccare su
)LOH
2SHQ o sul bottone corrispondente
Selezionare quindi dalla finestra il File desiderato.
5LFRUGDUVLGLVDOYDUH)LOH6DYHGRSRRJQLPRGLILFDSULPD
GLFRPSLODUH
Laboratorio di Fondamenti I TLC – Esercitazione II
20