Oggetti Definiti dall’Utente Roberto Bruni e Daniela Giorgetti
Bruni e Giorgetti2 Creare oggetti su misura bisogna dare il costruttore speciale funzione JS definisce l’aspetto dell’oggetto per creare oggetti bisogna istanziare il costruttore con new
Bruni e Giorgetti3 Generico costruttore function tipooggetto (parametro 1,…,parametro n ) { this.proprietà 1 = parametro 1 ; … this.proprietà n = parametro n ; this.metodo 1 = funzione 1 ; … this.metodo m = funzione m ; } function funzione i (arg 1,…,arg k ) { corpo }
Bruni e Giorgetti4 Chiarimenti e consigli Le proprietà diventano i parametri del costruttore I metodi vengono implementati esternamente solitamente i parametri hanno gli stessi nomi delle proprietà solitamente le funzioni hanno lo stesso nome dei metodi (alcuni autori preferiscono prefissarle con il nome dell’oggetto che implementano) L’istanziazione crea un nuovo oggetto istanza = new tipooggetto(par 1,…,par n );
Bruni e Giorgetti5 Esempio: Libro I tipo oggetto Libro : function Libro (titolo,autore,ISBN,voto) { this.titolo = titolo; this.autore = autore; this.ISBN = ISBN; this.voto = voto; this.show = show; //metodo! }
Bruni e Giorgetti6 EsempioEsempio: Libro II bisogna implementare il metodo: function show () { finestra = window.open(“”, “”, “resizable=1,width=300, height=300”); finestra.document.write(“ ”); finestra.document.write(“ Descrizione ”); finestra.document.write(“ ”); finestra.document.write(this.titolo.bold()); finestra.document.write(this.autore.italics()); finestra.document.write(“ISBN: “+this.ISBN); finestra.document.write(“ ”); finestra.document.close() }
Bruni e Giorgetti7 Lavorare con gli oggetti Definire il tipo oggetto Creare le istanze (mancanza di persistenza) Offrire all’utente la possibilità di accedere agli oggetti (es. tramite interfaccia) selezionarli usarne i metodi lavorare con le loro proprietà
Bruni e Giorgetti8 Estendiamo il tipo con la possibilità di modificare il voto Creiamo un archivio con 5 libri Diamo all’utente la possibilità di selezionare un libro che gli interessa per –modificare il voto –visualizzare la scheda relativa Esempio
Bruni e Giorgetti9 LibroLibro: aggiunta di un metodo function Libro (titolo,autore,ISBN,voto) { this.titolo = titolo; this.autore = autore; this.ISBN = ISBN; this.voto = voto; this.show = show; //metodo! this.giudica = giudica; //metodo! } function giudica (valore) { this.voto = valore }
Bruni e Giorgetti10 LibroLibro: creazione istanze <!-- var libri = new Array(); libri[0] = new Libro(“Bar Sport”, “Stefano Benni”, “ ”, “9”); libri[1] = new Libro(“Bar Sport Duemila”, “Stefano Benni”, “ ”, “7”); libri[2] = new Libro(“L'Ultima Lacrima”, “Stefano Benni”, “ ”, “7”); libri[3] = new Libro(“Il Bar sotto il Mare”, “Stefano Benni”, “ ”, “8”); libri[4] = new Libro(“La Compagnia dei Celestini”, “Stefano Benni”, “ ”, “8”); //-->
Bruni e Giorgetti11 LibroLibro: la form I Scegli il libro: Bar Sport Bar Sport Duemila L'Ultima Lacrima Il Bar sotto il Mare La Compagnia dei Celestini <!-- come valori usiamo i nomi delle variabili/oggetti create precedentemente (ma qui vengono viste come stringhe) --> …
Bruni e Giorgetti12 LibroLibro: la form I … e Votalo: <input type=“button” value=“Assegna Voto” onclick=“assegnaVoto()” /> <input type=“button” value=“Mostra la Scheda” onclick=“mostraScheda()” />
Bruni e Giorgetti13 LibroLibro: assegna voto <!-- function assegnaVoto() { with (document.modulo) { var libroScelto = scelta.options[scelta.selectedIndex].value; var votazione = rating.options[rating.selectedIndex].text; } libroScelto = eval(libroScelto); // con eval si ottiene l’oggetto associato alla stringa (interpretata come varibile!) votazione = parseInt(votazione); libroScelto.giudica(votazione); } //-->
Bruni e Giorgetti14 LibroLibro: mostra scheda <!-- function mostraScheda() { with (document.modulo) { var libroScelto = scelta.options[scelta.selectedIndex].value; } libroScelto = eval(libroScelto); // con eval si ottiene l’oggetto associato alla stringa (interpretata come varibile!) libroScelto.show(); } //-->
Bruni e Giorgetti15 Oggetti più complessi Le possibilità sono praticamente infinite Possiamo annidare le definizioni creando oggetti complessi le proprietà sono ancora oggetti Questa è la base dei documenti HTML e della loro gestione con JS
Bruni e Giorgetti16 Dinamicità? Usando gli array è possibile raccogliere e creare nuovi oggetti sulla base di dati forniti in input dall’utente (es. usando form) (problema della non persistenza) possiamo aggiungere liberamente proprietà e metodi singolarmente alle istanze (es. bar_sport.letto = true ) ai tipi oggetto se supportano prototype (JS1.1+)
Bruni e Giorgetti17 Esercizi