PHP e OOP: classi astratte

il

Articoli precedenti sullo stesso tema OOP in PHP nei portali umbriaway:

  1. https://umbriawayinfo.wordpress.com/2019/04/07/programmazione-procedurale-oppure-oop-this-is-the-problem/
  2. https://umbriawaypotenzia.wordpress.com/2019/04/07/php-versione-sette-introdotte-nuove-direttive-per-trasformare-il-linguaggio-in-fortemente-tipicizzato/
  3. https://umbriawaysemplifica.wordpress.com/2019/04/08/ambito-di-visibilita-delle-variabili-in-php-public-protected-private/
  4. https://umbriawaytarget.wordpress.com/2019/04/08/php-oop-magic-method-e-costruttori/
  5. https://umbriawayvalorizza.wordpress.com/2019/04/08/warning-ambito-di-visibilita-publica-delle-classi-encapsulation-e-sicurezza-metodi-getter-e-setter/
  6. https://umbriawayvendita.wordpress.com/2019/04/09/php-e-oop-magic-method-__autoload-ereditarieta-pianificazione-iniziale-con-uml/
  7. https://umbriawaynoir.wordpress.com/2019/04/09/php-e-oop-overriding-e-polimorfismo/
  8. https://umbriawayformazione.wordpress.com/2019/04/09/php-e-oop-membri-statici-e-costanti-all-interno-di-una-classe/

A che cosa servono le classi astratte? Certo abbiamo a che fare con un principio avanzato di OOP. Sono classi che servono esclusivamente da modello per generare classi che si possono istanziare. Io posso estendere i metodi della classe astratta per generare delle definizioni di classe reali daq cui posso istanziare oggetti con caratteristiche più definite. L’esempio è quello di generare una classe astratta SEDIA e posso estendere questa classe ASTRATTA su cui non funziona la parola chiave NEW per generare una definizione di classe più particolareggiata come sedia_ufficio per esempio., che va ad ereditare i metodi della classe astratta per usare metodi come numRuote o setAltezzaSedia che sono firmati nella classe astratta ma che vengono riusati come modello nella mia definizione di classe. Certamente sono concetti avanzati di tipo applicazione enterprise perchè quando si inizia a lavorare con OOP non abbiamo certo a che fare con centinaia e centinaia di righe di codice, quindi da neofiti non avremo a che fare con le classi astratte tipo partire da classe astratta prodotto che sta in cima alla piramide da cui dipende come comportamento la classe astratta sedia da cui tiro fuori la definizione di classe vera e propria e cioè il nuovo ogetto di tipo sgabello. Un modell è un oggetto non ben definito che al suo interno contiene metodi e attributi che verranno poi sfruttati da nuovi oggetti più specifici del modello generico sedia, perché il nostro obiettivo è quello di avvicinarci il più possibile alla realtà. Quindi una astrazione del prodotto potrà essere:

/*
<?php
abstract class Prodotto {
protected $price;
protected $qta;
protected $database;
public function getPrezzo() {
return $this->price;
}
public function setPrezzo($prezzo) {
$this->price = $prezzo;
}
public function getQta() {
return $this->qta;
}
public function setQta($qta) {
$this->qta = $qta;
}
public function addQta($quantita) {
$this->qta += $quantita;
}
}

da qui posso creare una classe astratta sedia:

<?php
abstract class Sedia extends Prodotto {
protected $nome;
protected $mod;
public function __construct($nome,$modello) {
$this->nome = $nome;
$this->modello = $modello;
}
abstract public function setAltezzaSeduta($as);
abstract public function numRotelle();
}

e alla fine arrivo alla definizione della classe vera e propria che potrò finalmente istanziare:

<?php
class Sgabello extends Sedia {
protected $altezzaseduta;
public function setCertificazione($cod) {
//reale implementazione del metodo
echo “Certificazione :” . $cod;
}
public function setAltezzaSeduta($as) {
//reale implementazione del metodo
$this->altezzaseduta = $as;
}
public function numRotelle() {
//reale implementazione del metodo
echo “Numero Rotelle: 0”;
}
}

*/

Semplificando le classi astratte servono a generare modelli perchè su di loro la parola chiave NEW che istanzia gli oggetti non funziona. PUNTO!

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...