lezione 3 Il paradigma a oggetti in PHP a conoscere il paradigma a oggetti in PHP a creare classi, metodi e proprietà a istanziare oggetti



Documenti analoghi
giochi sulla persistenza

Corso di PHP. Prerequisiti. 8.1 PHP e MySQL. Conoscenza MySQL Tecnica della programmazione

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Ereditarietà e Polimorfismo. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Lezione 4. Massimiliano Palese IEEE Student Member

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Oggetti. La programmazione orientata agli oggetti, OOP (Object-Oriented Programming), prende il nome dall elemento su cui si basa, l oggetto.

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

Classi ed Oggetti. Fondamenti di Informatica A-K

JavaScript JavaScript Programmazione lato client JScript JavaScript ECMAScript

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione lato client. JavaScript. Applicazioni di Rete M. Ribaudo - DISI. JavaScript

SQL: le funzioni di aggregazione

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Diagramma delle classi

Corso di Informatica

Array. // utente pippo $utente1 = array( username => pippo, password => pippo123, ruolo => amministratore );

Definizione di classi

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1

Fondamenti di informatica T-1 (A K) Esercitazione 9: array

Ereditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Corso di Access Modulo L2 A (Access) I tipi di query

JAVA IL LINGUAGGIO. Ogni valore nel linguaggio ha un tipo Ogni variabile deve essere dichiarata ed associata ad un tipo:

I L IN I GU G AGG G I G O

Programmazione con Java

Select From Where...

Javascript e CSS nelle pagine WEB

Corso sul linguaggio Java

Corso di Access. Prerequisiti. Modulo L2A (Access) Struttura delle tabelle

Programmazione ad oggetti

La stampa unione in Word 2007

PHP & OOP. Domenico Nappo Domenico Surace - Manuali.Net Tutti i diritti riservati

Ereditarietà: concetti di base

Ingegneria del Software

Laboratorio - Programmazione

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

TUTORIAL. Uso di FB e creazione di Istanze in ambiente TIA Portal V12

Dichiarazione di una classe. Dichiarazione ereditarietà

Array. Walter Didimo

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Progettazione Object-Oriented

Grafici e Pagina web

2011 Politecnico di Torino 1

Introduciamo l'uso della programmazione ad oggetti in PHP...perchè si può fare!

Programmazione orientata agli oggetti Ereditarietà

INFORMATICA OOP Relazioni tra classi Roberta Gerboni

Creare maschere personalizzate

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016

ACCESS. Database: archivio elettronico, dotato di un programma di interfaccia che facilita la registrazione e la ricerca dei dati.

Proprietà delle Classi e degli Oggetti in Java

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Inserire record. Microsoft Access. Inserire/modificare record. Inserire record. Cancellare record. Inserire/modificare record

Imparare a utilizzare le formule e le funzioni

Introduzione alla programmazione nella shell di Unix 10 Maggio 2005

Funzioni costruttore e istanza di un'oggetto

Microsoft Access (parte 5) Query. Query. Query. Query. Creare una query

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione visuale

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

14Ex-Cap11.qxd :20 Pagina Le macro

4. I moduli in Access 2000/2003

PSICOMETRIA. Esercitazione n.1. C.d.L. Comunicazione e Psicologia a.a. 2012/13

A livello fisico, un istanza di base di dati Oracle è composta. Gubiani & Montanari Oracle Database 3

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette.

Equivalenza di espressioni. Equivalenze. Equivalenze. Due espressioni sono equivalenti se: Atomizzazione delle selezioni σ F1 F2 (E) σ F1 (σ F2 (E))

Elementi di Informatica A. A. 2016/2017

Calcolo su Polinomi ===================

Indice. Ricerca richiesta d offerta. Risultati della ricerca Navigazione Stati

Proprietà delle Classi e degli Oggetti in Java

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Sistemi Web per il turismo - lezione 3 -

Matlab: Script e Funzioni

UTILIZZIAMO GLI OPERATORI MATEMATICI E COMMENTIAMO IL CODICE

{4, 4, 2, 9, 13} {2, 2, 9, 13, 0} {0, 4, 2, 9, 13} {2, 9, 13, 0, 0}

NON ABBIAMO ANCORA CORRETTO LE PROVETTE!!!

Corso di Informatica

Installazione di EasyPhp. Avviare EasyPhp. La finestra di amministrazione di EasyPhp

ESERCIZIO 1 (STRINGHE)

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Esempio su strutture dati dinamiche: ArrayList

Lettura e scrittura di file di dati input/output

Creare l array presentato nei lucidi ([pippo, pluto, etc])

Corso di Access. Prerequisiti. Modulo L2 A (Access) Le query

Laboratorio di Python

Inizializzare oggetti

Modulo 1 Information Communication Technology. ICT e computer... Pag. 6 Classificazione dei computer...» 8

Programmazione orientata agli oggetti Ereditarietà

Ho raggiunto la fine del file Provo a leggere un intero, ma il dato che prelevo dal file non è un intero

Fondamenti di Informatica T-1. Costruttori Ereditarietà

Corso di Reti di Calcolatori T

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

Programmazione orientata agli oggetti Ereditarietà

MDG Enpals Spettacolo MANUALE D USO E INSTALLAZIONE

Fondamenti di informatica T-1 (A K) Esercitazione 7: metodi, classi, oggetti

Transcript:

lezione 3 gli oggetti in php In questa lezione impareremo... a conoscere il paradigma a oggetti in PHP a creare classi, metodi e proprietà a istanziare oggetti Il paradigma a oggetti in PHP PHP implementa il paradigma degli oggetti (Object Oriented Paradigm) anche se è un linguaggio a carattere misto, sia procedurale che a oggetti. Object Oriented Paradigm Is a programming paradigm that uses objects to design applications and computer programs, it models the real world. This includes some unique concepts which overcome the drawbacks of fellow programming paradigms. In OOP (Object Oriented Programming) the emphasis is on data and not on procedures. Per la creazione di una nuova classe di oggetti, si deve utilizzare il costrutto class, all interno del quale possiamo collocare i metodi e le proprietà, rappresentate rispettivamente da funzioni e variabili. Tuttavia le proprietà devono essere dichiarate anteponendo chiave var. Esempio 35 Una classe carrello della spesa Nel codice che segue vediamo come realizzare una classe Carrello con due proprietà rappresentate da due array che contengono gli articoli presenti nel carrello e la relativa quantità. Vi sono poi quattro metodi, uno che aggiunge a un ipotetico carrello alcuni ordini di articoli, chiamato aggiungi_carrello(), un altro che elimina un elemento dal carrello (togli_carrello()), quindi il metodo aggiorna() effettua l aggiornamento di un prodotto in termini di quantità, infine il metodo stampa() mostra a video tutti gli elementi dell oggetto carrello, cioè quanto inserito nella nostra borsa della spesa virtuale. Il file è salvato con il nome esempio35.php: Incominciamo a vedere il codice del metodo che aggiunge nuovi articoli. Innanzi tutto vengono dichiarati due attributi (righe 5-6) come array. Il metodo aggiungi_carrello() riceve come parametro il nome dell articolo da aggiungere e la quantità. Dopo aver letto la dimensione dell array attraverso la funzione predefinita count (riga 11) viene effettuato un ciclo (riga 14) per verificare se l elemento è presente (riga 17), in caso positivo viene chiamata la funzione aggiorna (riga 22) che provvederà ad aggiornare la quantità del prodotto passato come parametro insieme alla nuova quantità. Se l elemento non è presente viene aggiunto ai due array (righe 26-27). 2 P. Camagni, R. Nikolassy, Progettare i database, Nuova Edizione OPENSCHOOL, Ulrico Hoepli Editore S.p.A. 2014

Gli oggetti in PHP Lezione 3 Come possiamo notare davanti al nome del metodo è stato anteposto l operatore di auto referenza $this e la notazione trattino freccia (->). L operatore di auto referenza serve per indicare che il metodo appartiene alla classe. Il codice seguente è relativo al metodo togli_carrello(): P. Camagni, R. Nikolassy, Progettare i database, Nuova Edizione OPENSCHOOL, Ulrico Hoepli Editore S.p.A. 2014 3

Il metodo riceve come parametro il nome dell articolo da eliminare (riga 31) e viene cercato nell array articoli mediante un ciclo (riga 36). Se l elemento è presente viene salvata la posizione nella variabile posizione (riga 41). Se l elemento è presente (riga 44) viene effettuato un ciclo (righe 48-56) per copiare gli elementi degli array articoli e quantita negli array temporanei (app_ar e app_qt) escludendo l elemento da cancellare (riga 50). A quel punto vengono eliminati gli array articoli e quantita (righe 52-53) e quindi nel ciclo successivo (righe 61-66) vengono ripristinati i contenuti delle proprietà della classe (quantita e articoli). Il codice seguente è relativo al metodo aggiorna(): Come possiamo vedere questo metodo riceve due parametri ($n e $q) che rappresentano il nome del prodotto da cercare e la quantità alla quale aggiornarlo. Il ciclo (riga 74) ricerca la presenza dell elemento nell array, quando l elemento è stato trovato (righe 77-78) viene salvata la posizione. Le istruzioni (righe 81-82) aggiornano la quantità di posizione salvata nella variabile $posizione al valore ricevuto dal metodo. Infine se l elemento non viene trovato (riga 83) viene stampato un messaggio di errore. Il codice seguente è relativo al metodo stampa(). Questo metodo è assai semplice ed effettua un ciclo per visualizzare gli elementi del carrello contenuti nei due array articoli e quantita (righe 88-93): Il file esempio35_test.php (codice a fianco) effettua l istanza della classe Carrello. Prima di tutto però lo script include il file esempio35.php che contiene il codice relativo alla classe da istanziare (riga 3). L istanza della classe Carrello avviene per mezzo dell operatore new (riga 5). L invocazione dei metodi avviene nel codice che segue: come possiamo notare do- 4 P. Camagni, R. Nikolassy, Progettare i database, Nuova Edizione OPENSCHOOL, Ulrico Hoepli Editore S.p.A. 2014

Gli oggetti in PHP lezione 3 po il nome dell oggetto ($acquisti) viene scritto il metodo secondo la notazione chiamata brackets notation, rappresentata da una freccia formata da un trattino e dal simbolo maggiore (->). Il codice seguente è nel file esempio35_test.php: L esecuzione dello script che istanzia un oggetto di classe Carrello (esempio35_test.php) è mostrato nella seguente finestra: Prova adesso! Utilizzare le classi Istanziare oggetti Usare metodi e proprietà AprI Il FIle esempio35_test.php Modifica il file esempio35_test.php in modo che mostri all utente una pagina in cui può scegliere se aggiungere, cancellare o aggiornare i prodotti dall elenco della spesa virtuale, quindi a ogni aggiunta o eliminazione visualizzare quanto presente nel carrello. P. Camagni, R. Nikolassy, Progettare i database, Nuova Edizione OPENSCHOOL, Ulrico Hoepli Editore S.p.A. 2014 5

L ereditarietà Secondo il concetto di ereditarietà della OOP (Object Oriented Programming) le classi possono essere estese ad altre classi, le classi estese possiedono tutte le proprietà e i metodi della classe base oltre a quello che viene aggiunto nella definizione estesa. PHP non possiede tuttavia, come ad esempio in C++, l ereditarietà multipla. La parola riservata per definire una estensione di classe, come in Java, è extends. La sintassi seguente mostra una classe MioCarrello che eredita dalla classe Carrello e la estende aggiungendone un metodo (setprezzo): class MioCarrello extends Carrello //definizione di una nuova proprietà var $prezzi=array(); function setprezzo($a,$p) //ciclo di ricerca del prodotto for ($i=0;$i<count($this->articoli);$i++) //Verifico se il prodotto è presente nel carrello salvo la posizione if ($this->articoli[$i]==$a) $this->prezzi[$i]=$p; Viene definita una classe MioCarrello che eredita tutte le variabili e le funzioni di Carrello e in più una proprietà addizionale rappresentata dall array associativo $prezzi e dal metodo setprezzo. In tal modo possiamo memorizzare nell oggetto il prezzo dell articolo all interno dell array parallelo $prezzi. Se istanziamo un oggetto di classe MioCarrello possiamo ancora utilizzare i metodi definiti per la classe base: //Istanzio un nuovo oggetto della nuova classe derivata $nuovo_c = new MioCarrello; //Aggiungo un articolo $nuovo_c->aggiungo_carrello( Acquarello,3); //Aggiungo il prezzo all articolo Acquarello $nuovo_c->setprezzo( Acquarello,12); Il costruttore I costruttori sono metodi di una classe, aventi il nome della stessa classe e richiamati automaticamente quando viene creata una nuova istanza della classe. Il codice che segue mostra come creare un costruttore per la classe Carrello: class Carrello function Carrello($a,$b) $this->aggiungi_carrello($a,$b); 6 P. Camagni, R. Nikolassy, Progettare i database, Nuova Edizione OPENSCHOOL, Ulrico Hoepli Editore S.p.A. 2014

Gli oggetti in PHP Lezione 3 È stato definito un costruttore che inizializza la classe Carrello con l articolo e le quantità passate come parametro al costruttore stesso. Ogni volta che viene istanziato un nuovo oggetto di classe Carrello con l operatore new. Vediamo come istanziare una classe con il costruttore: //Istanza della classe con il costruttore al quale vengono passati due parametri $carrello=new Costruttore( Cornice,3); Nelle classi derivate, il costruttore della classe genitore non viene chiamato automaticamente quando viene chiamato il costruttore della classe derivata, quindi se vogliamo richiamare il costruttore della classe ereditata dobbiamo indicarlo espressamente. Una classe cronografo Esempio 36 In questo esempio utilizziamo un classe per verificare la durata di esecuzione di uno script. La classe interessata utilizza due metodi StartStop e LapReset. L implementazione di tali funzioni come metodi della classe si basa sulla funzione time() che restituisce il Timestamp di UNIX. La risoluzione di questo cronometro non è molto elevata (essendo di ben 1 secondo), e inoltre esso non tiene conto del tempo di esecuzione del solo processo, ma del tempo complessivo di esecuzione, infatti il metodo fermati() calcola la differenza tra l ora di sistema di inizio processo e l ora di fine. Questo script in pratica crea un nuovo oggetto chrono di classe Cronometro, che all inizio è automaticamente resettato. Avvia quindi il cronometro (che restituisce il valore 0 all inizio, proprio come un vero cronometro). Timestamp è una sequenza di caratteri che rappresentano una data in modo da renderla comparabile con un altra per stabilirne l ordine temporale. Nei sistemi operativi Unix-like, come ad esempio Linux il tempo viene rappresentato come offet in secondi rispetto alla mezzanotte (UTC) del 1 gennaio 1970, chiamata UNIX epoch (epoca). Otteniamo quanto mostrato a fianco: P. Camagni, R. Nikolassy, Progettare i database, Nuova Edizione OPENSCHOOL, Ulrico Hoepli Editore S.p.A. 2014 7

Verifichiamo le competenze g Problemi 1 Definisci una classe Convertitore, in grado di convertire valute diverse, ad esempio Dollaro-Euro. Per il programma si richiede la scrittura di almeno un metodo per il calcolo, un metodo di stampa dei valori risultanti e la definizione di uno o più attributi privati ove memorizzare i dati. 2 Definisci una classe Libro contenente i seguenti attributi: nome del libro (array di caratteri), prezzo, numero di scaffale, numero di pagine, casa editrice. Inoltre definisci i seguenti metodi: inizializza mostra applicasconto le quali, rispettivamente, hanno i seguenti compiti: inizializzare i campi dati dell oggetto classe stampare tutti i dati dell oggetto diminuire del 10% il prezzo del libro in oggetto 3 Crea la classe Massimi che contiene i metodi max() e min(), che calcolano rispettivamente il valore massimo e minimo di due numeri passati come parametri. 4 Crea una classe Negozio con due costruttori che inizializzino lo stato dell oggetto, dotato dei seguenti parametri: proprietario nomenegozio 5 Crea una classe ContoCorrente che contiene tre costruttori che inizializzino lo stato dell oggetto, dotato dei seguenti parametri: nome codiceconto saldo 6 Crea la classe Prodotto utilizzando meno codice possibile con tre costruttori che inizializzino lo stato dell oggetto, dotati dei seguenti parametri: codice descrizione; codice descrizione 7 Crea la classe Fattura utilizzando meno codice possibile con tre costruttori che inizializzino lo stato dell oggetto, dotati dei seguenti parametri: cliente numeroprodotti cliente numeroprodotti 8 Definisci una classe LineaBus per rappresentare oggetti linea di autobus urbano con il numero identificativo, il nome dei due capolinea e con opportuni metodi d istanza per la descrizione del suo percorso. 9 Definisci una classe Auto per rappresentare oggetti automobile con il nome della marca, il nome del modello, la targa e l anno di immatricolazione e con opportuni metodi d istanza. 10 Definisci una classe Studente per rappresentare oggetti studente con il cognome, il nome, il codice fiscale, il numero di matricola e con opportuni metodi d istanza. 8 P. Camagni, R. Nikolassy, Progettare i database, Nuova Edizione OPENSCHOOL, Ulrico Hoepli Editore S.p.A. 2014