Sommario
Il polimorfismo è la capacità di una classe astratta o di un oggetto specifico di rispondere allo stesso metodo con il proprio comportamento. Il polimorfismo specifica che un parametro o oggetti passati o previsti possono assumere più forme e avere un comportamento diverso con gli stessi metodi.Quando eseguiamo la programmazione orientata agli oggetti con i polimorfismi dobbiamo tenere presente che un'istanza di una classe o di un oggetto può essere invocata e funzionerà e si comporterà allo stesso modo indipendentemente dalla classe a cui appartiene l'oggetto. Se abbiamo molte classi e oggetti dobbiamo strutturare bene le gerarchie di classi e classi astratte. Un altro vantaggio è poter dichiarare o programmare metodi con lo stesso nome anche se la loro funzionalità è completamente diversa, dato che ci riferiamo all'istanza della classe.
Ad esempio, supponiamo una classe astratta che rappresenti il numero di veicoli, che hanno in comune alcuni dati relativi al livello del carburante, alla marca e al modello del veicolo.
Le proprietà della classe Veicoli saranno quindi il carburante che conterrà il numero di litri che vengono caricati nel veicolo e marca e modello veicolo.
Di seguito definiamo i metodi comuni per tutti i veicoli che caricheranno carburante e mostreranno quanto ne rimane man mano che viene utilizzato, inoltre dobbiamo essere in grado di assegnare a ciascun veicolo una marca e un modello ed essere in grado di consultare anche la sua marca e modello . Successivamente definiamo i metodi per la classe Vehicles.
carburante = $ carburante; } public function show fuel() {return $ this-> fuel; } assegnazione della funzione pubblica ($ brand, $ model) {$ this-> brandymodel = $ brand. ' '.$ modello; } public function showbrandmodel () {return $ this-> markandmodel; }}?> var13 ->Quindi inizieremo a creare le classi che ereditano dai veicoli e avranno i loro metodi particolari, ad esempio creiamo la classe Cars, avrà la proprietà di far avanzare l'auto e ogni volta che avanza consumerà un litro di carburante (in modo che l'esercizio sia facilmente comprensibile)
la classe Auto estende Veicolo {funzione pubblica anticipo () {// ogni 10 chilometri consuma un litro $ questo-> carburante - = 1; }} // Fine classeOra implementeremo una classe generale per il conducente del veicolo, qui prendiamo in considerazione che uno o più conducenti possono guidare veicoli diversi.
In questa classe definiremo un costruttore di tipo generico o astratto
funzione __costrutto ($ parametro_oggetto) {$ questo-> mio oggetto = $ parametro_oggetto}Quindi possiamo quindi manipolare qualsiasi oggetto che viene passato come parametro del costruttore, quindi la nostra classe avrà la capacità di ricevere un oggetto come parametro, questo è polimorfismo, cioè può usare oggetti completi, ad esempio possiamo inviare la classe autos come parametro e usa tutti i suoi metodi.
Implementeremo gli esempi in php 5 quindi è importante ricordare l'ambito di un metodo e le variabili, nella maggior parte dei linguaggi è molto simile. Per assegnare o modificare l'ambito di una variabile o proprietà dobbiamo utilizzare la parola riservata corrispondente quando dichiariamo la variabile o il metodo in base all'accesso o all'ambito che vogliamo che abbia:
- privato: indica che alla variabile o al metodo è possibile accedere solo dai metodi della classe a cui appartiene l'oggetto e non da nessun altro.
- protetto: indica che la variabile o il metodo è accessibile dai metodi di e anche da una qualsiasi delle sue sottoclassi che appartiene a questa classe.
- pubblico: indica che le variabili oi metodi sono accessibili da qualsiasi altro metodo o indipendentemente da dove appartenga o a chi appartenga. Prestare attenzione agli attributi pubblici poiché potrebbero modificare un valore utilizzato anche da un'altra classe o da un altro metodo.
Successivamente, creiamo la classe Driver, che avrà i seguenti metodi: caricare il carburante, assegnare il veicolo, visualizzare la marca e il modello, far avanzare il veicolo e controllare il carburante rimanente man mano che avanza.
veicolo = $ oggetto; } carico carburante funzione pubblica ($ carburante) {$ questo-> veicolo-> carico carburante ($ carburante); } funzione pubblica assegnaveicolo ($ marca, $ modello) {$ questo-> veicolo-> assegna veicolo ($ marca, $ modello); } public function brandymodel () {return $ this-> vehicle-> showbrandmodel (); } public function advancedvehicle() {$ this-> vehicle-> advanced (); } carburante funzione pubblica rimanente () {return $ questo-> veicolo-> mostra carburante (); }}?> var13 ->Possiamo vedere come in ogni funzione della classe Cars stiamo istanziando i metodi comuni della classe Super Vehicles al fine di assegnare proprietà o metodi particolari e non comuni a tutti i veicoli.
Vediamo ora come utilizzare queste classi e il polimorfismo stesso.
assegnare veicolo ('Ferrari', '550 MARANELLO'). 'Vediamo di seguito i veri vantaggi del polimorfismo e dell'ereditarietà di classe, aggiungiamo la classe a
'; // Mostriamo il veicolo assegnato echo $ ferrari-> brandymodel (). '
'; // Carichiamo carburante nel veicolo indicando la quantità in litri echo 'Carico carburante'. $ Ferrari-> carico carburante (50). '
'; // Mostriamo la quantità di carburante corrente echo 'Carburante attuale'. $ Ferrari-> carburante rimanente (). ' litri
'; echo 'Veicolo avanzato
'; $ ferrari-> advancedVehicle (); echo $ ferrari-> brandymodel (). ' hai '.$ ferrari-> carburante rimanente ().' litri di carburante
'; // Creiamo un'altra istanza con un altro veicolo, ad esempio possiamo creare una variabile che è il marchio e il brevetto $ hondaHB0071 = new Driver (new Autos); echo $ hondaHB0071->assegnaveicolo ('Honda', 'ACCORD'). '
'; echo $ hondaHB0071-> makeandmodel (). '
'; echo 'Carico carburante'. $ hondaHB0071-> Carico carburante (50). '
'; echo 'Carburante attuale'. $ hondaHB0071-> carburante rimanente (). ' litri
'; echo 'Veicolo Advanced Honda
'; $ hondaHB0071-> advancedVehicle (); echo $ hondaHB0071-> makeandmodel (). ' hai '. $ hondaHB0071-> carburante rimanente ().' litri di carburante
'; ?> var13 ->
// La classe dei motocicli I motocicli si estendono Veicolo {avanzamento della funzione pubblica () {// ogni 10 chilometri consuma un litro $ questo-> carburante - = 1; }} $ moto = nuovo pilota (nuove motociclette); echo $ moto-> assegna veicolo ('Yamaha', 'YBR 125'). '
'; echo $ moto-> makeymodel (). '
'; echo 'Carico carburante'. $ moto-> carico carburante (10). '
'; echo 'Carburante attuale'. $ moto-> Carburante rimanente (). ' litri
'; echo 'Avanza il veicolo motociclistico
'; $ moto-> anticipoVeicolo (); echo $ moto-> makeymodel (). ' hai lasciato '. $ moto-> fuelremaining ().' litri di carburante
'; ?> var13 ->
Potremmo incorporare i calcoli necessari per rendere più reale il consumo di carburante in base al veicolo.
Il vantaggio dell'utilizzo del polimorfismo è che possiamo creare metodi simili ma con parametri diversi, ad esempio.
Implementazione di interfacce con pHp
Le interfacce sono dichiarazioni che definiscono quali metodi possono essere implementati da una classe, nascondendo come questi metodi vengono utilizzati o gestiti. I metodi dichiarati in un'interfaccia devono essere pubblici, per potervi accedere le classi che implementiamo. Consentono un incapsulamento di classi e polimorfismi.
Per implementare un'interfaccia con php, viene utilizzata la parola chiave implements. Se abbiamo diversi metodi dichiarati in un'interfaccia, devono essere implementati in una classe. Le classi possono implementare più di un'interfaccia per poter accedere a metodi diversi in modo da poter avere funzionalità diverse in classi diverse.
Vediamo un esempio di interfacce
Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo