(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]LRQHQIDFROWDWLYR 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]LRQHQFRPSRQHQWLVWDWLFL 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]LRQHQFRPSRQHQWLVWDWLFL 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]LRQHQFRPSRQHQWLVWDWLFL &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]LRQHQFRPSRQHQWLVWDWLFL &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
© Copyright 2024 Paperzz