Tecniche di Programmazione Oggetti
In sintesi la programmazione oggetti: classe e oggetti, metodi
BREVE DESCRIZIONE DELLA PROGRAMMAZIONE OGGETTI
Fino ad ora abbiamo visto script PHP scritto con il linguaggio Procedurale
Nella creazione di un sito Ecommerce useremo invece in prevalenza la programmazione oggetti
Questa programmazione si basa sul concetto di CLASSE e OGGETTI
Per spiegarla si usa spesso la macchina.
Esiste la classe delle macchine che ha:
• Proprieta’: marca,Lunghezza, Larghezza, trazione etc..
• Metodi o funzioni: marcia , accellerazione etc..
Pero’ nella vita di ogni giorno non vediamo classi di macchine generiche, ma specifiche autovetture
SUZUKY lunghe 3mt, larghe 2 mt, 4 ruote motrici
Questa autovettura corrisponde all’instanza della classe cioè l’oggetto
Attraverso l’oggetto la CLASSE diventa una realta’ specifica e identificata
Oppure attraverso l’oggetto dall’insieme generico delle macchine identifichiamo l’elemento specifico.
Una altro esempio è la classe degli umani che ha:
• Proprieta’: Lunghezza,peso, nome etc..
• Metodi/proprietà: cammina eretto, parla, pensa etc…
Ma in strada non vediamo la classe degli umani, ma persone fisiche, ognuno con
Il proprio nome, peso e altezza. Che camminano, parlano ognuno in modo differente
Vediamo quindi
ALBERTO alto 1,83 cm, peso 82 kg etc
Noi esseri umani, ogni con il proprio nome etc siamo l’oggetto della classe Umani e usiamo i metodi della classe in modo differente.
Tutto questo lungo discorso si scrive in PHP con due file Definizione della Classe Auto.php
class Auto
{
//proprietà
public $marca;
public $trazione;
public $dimensione;
//metodi
public function leggoMarca()
{
return $this->marca;
}
public function trazione()
{
return "trazione " . $this->trazione;
}
}
Uso della classe attraverso un altro file che
include Auto.php
include 'auto.php';
$nuovauto = new Auto();
$nuovauto->marca = 'fiat';
$nuovauto->trazione = 'integrale';
echo 'la marca è ' . $nuovauto->leggoMarca();
echo 'la trazione: ' . $nuovauto->trazione();
Creo un oggetto, istruzione
• $nuovauto = new Auto();
Do un valore alle proprietà della classe
• $nuovauto->marca = 'fiat';
• $nuovauto->trazione = 'integrale';
Uso i metodi della classe
• echo 'la marca è ' . $nuovauto->leggoMarca();
• echo 'la trazione: ' . $nuovauto->trazione();
Con queste operazioni avro’ una autovettura
• marca = FIAT
• trazione = INTEGRALE
Grazie all’istruzione $nuovauto = new Auto(); otteniamo una oggetto reale e non generico capace di circolare!!.
$this
Da notare che all’interno della classe si usa $this->trazione.$this-> è il modo per chiamare una proprietà ma anche un metodo. Nella programmazione oggetto, all’interno di una classe $variabile si scrive $this->variabile.
Costruttore
Un’ altro modo per inizializzare le proprietà della classe è il costruttoreUna funzione all’interno della classe che viene eseguita automaticamente, per prima.
auto_costr.php
Class Auto{
//proprietà
public $marca;
public $trazione;
public $dimensione ;
//costruttore
public function __construct($v1,$v2,$v3){
$this->marca=$v1;
$this->trazione=$v2;
$this->dimensione=$v3;
}
}
?>
Questa classe verrà poi inizializzata attraverso l’istruzione
include 'auto_costr.php';
$nuovauto= new Auto('volvo', 'normale', 'utilitaria');
Cioè l’oggetto passa i parametri che il costruttore deve utilizzare
Extends e Incapsulamento
Class Auto extends Padre{
protected $marca;
protected $trazione;
//costruttore
public function __construct($v1,$v2){
$this->marca=$v1;
$this->trazione=$v2;
}
public function getMarca(){
return $this->marca;
}
public function getTrazione(){
return $this->trazione;
}
}
In questa classe due tecniche:
• Extends: cioè la classe Auto utilizza le proprietà e i metodi della classe Padre
• Le proprietà sono dichiarate protected, quindi possono essere utilizzate solo all’interno della classe, per poter settare e ottenere il loro valore sono state create due funzioni set e get.
Questa tecnica si chiama incapsulamento.
Statico
Quando voglio usare metodi senza dover creare (instanziare) un oggetto allora uso il metodo statico
class Persona
{
public static $nome = "Mario";
public static $cognome = "Rossi";
public static function mostraDati()
{
echo "il mio nome: ".self:: $nome. "
";
echo "il mio cognome: ". Persona::$cognome."
";
}
}
Persona::mostraDati();
echo "in alternativa ".Persona::$cognome."
";
Da notare:
• All’interno della classe si usa l’espressione self::
In alternativa nomeClasse::
• Per usare all’ esterno della classe proprieta’ o metodi si usa NomeClasse::metodo(), per i metodi, NomeClasse::$proprietà per le proprietà.
Parents
class Scimmia
{
public function baseScimmia()
{
echo "I metodi delle scimmie";
}
}
$scimmia= new Scimmia();
class Umani extends Scimmia
{
public function baseUomo()
{
echo "Gli umani hanno molti metodi ma anche:
";
parent::baseScimmia();
}
}
$Uomo = new Umani();
echo $Uomo ->baseUomo();
In questo codice si noti parent::baseScimmia. La classe Umani extends la classe Scimmia, quindi sono parents e posso richiamare il metodo baseScimmia.
L’istruzione:
echo $Uomo ->baseUomo();
Avra’ quindi come output:
Gli umani hanno molti metodi ma anche:
I metodi delle scimmie