POO: Programació Orientada a Objectes¶
Per què objectes?¶
La POO és un paradigma(tècnica) de la programació que utilitza objectes per al seu desenvolupament. Permet entre altres coses una millor reutilització i consistència del codi.
Ara bé, això requereix un aprenentatge de com desenvolupar aquesta arquitectura.
A més dona una seguretat als desenvolupadors en la generació de codi que ha desenvolupat i publicat una altra persona.
Elements de la POO¶
Elements base d'una POO són les classes i els objectes.
Classe
Una classe és un model abstracte que s'utilitza per englobar propietats i mètodes i que comparteixen un mateix comportament.
Per exemple
Objecte
Un objecte serà una instància d'aquesta classe i serà la que usarem per a desenvolupar.
D'alguna manera l'objecte és la variable de tipus classe en php.
Mètode
Un mètode serà una de les funcions que podrem cridar de l'objecte declarat.
Esdeveniment i missatges
Un esdeveniment és un succés en el desenvolupament de l'aplicació.
Un missatge és la couminació del succés dirigida a l'objecte.
Propietats i atributs
Les propietats i atributs, són les variables que contenen dades associats a l'objecte
Característiques conceptuals de POO¶
La POO té unes catacterístiques en el seu desenvolupament que l'identifiquen i sobretot diferencien d'altres paradigmes de la programació.
Per exemple:
Abstracció
Aillament d'un element del seu contexte. Defineix les caractarísitques esencials d'un objecte.
Encapsulament
Ajuntar en un mateix nivell d'abstracció, a tots els elements del mateix objecte: propietats i mètodes.
Modularitat
Característica que permet dividir una aplicació en diverses parts més petites (mòduls), independents una de l'altra.
Ocultació(Aïllament)
Els objctes estan aïllats de l'exterior (visibilitat), protegint a les seves propietats de no ser modificades per elements externs que no haurien de tenir accés.
Polimorfisme
Capacitat que es dona a diferents objectes, la possibilitat de poder tenir o usar amb propietats i mètodes d'igual nom, sense que un interferexi en l'altra. Això sobretot quan treballem amb herència.
Herència És la relació existent entre dues o més classes. On una és la principal (mare) i l'altra secundàries (filles) que hereden les propietats i mètodes.
Per exemple:
Tenim una classe Elements Propietats: Nom Ubicació
Tenim una classe Ordinador que hereda Elements Propietats: IP RAM
La classe ordinador podrà usar i accedir a les propietats nom i ubicació per herència.
Com ho fem amb PHP¶
Usarem la paraula clau 'class' per definir el nom d'una classe. Recordem que una classe és com si fos la definició del tipus que usarem per definir l'objecte.
Notació CamelCase
Utilitzarem la regla de CamelCase, on paraules compostes eliminant els espais i posant en majúscula la primera lletra de cada paraula. El nom ve de la semblança d'aquestes majúscules, entre les altres lletres, amb els geps d'un camell.
Exemple: NomPersona
Declaració d'una classe abstracta
Una classe abstracta és aquella que no cal que la instanciem a un objecte. Però si que podrem heredar-les en algun moment.
Ho fem afegint al davant abstract
Aquest tipus de classes serà la que tindrà mètodes abstractes i servirà per declarar classes genèriques.
nota
Les classes genèriques les farem servir per heredar propietats i mètodes abstractes genèrics a les classes que l'hereta.
Herència de classes
Els objectes poden heretar propietats i mètodes d'altres objectes.
Per això tenim el concepte d'herència de classes. Podrem definir una classe com a extensió d'una classe mare que utilitza la paraula clau 'extends'
<?php
class NomClasseFilla extends NomClasseMare
{
// heredem les propietats i mètodes de NomClasseMare
}
?>
Declaració de classes finals
Una classe final no pot ser heredada per una altra.
Es defineix amb final
Per tant, si volem definir i usar una classe:
Instanciable (declarada o heredada) | class | Crear una classe que podem declarar un objecte o pugui ser heredada |
Abstracta | abstract | Crear una classe que només serà model d'una altra classe i no podrà ser instanciada |
Heredada | extends | Crear una classe que podem heredar a una altra classe filla |
final | final | Crear una classe que podem declarar un objecte i no pugui ser heredada per cap altra classe |
Instanciar o declarar un objecte d'una classe
Per crear una instancia d'una classe hem de fer servir new
.
L'objecte que declarem serà la variable de tipus classe que definim. Cal declarar la classe primer i llavors l'objecte.
<?php
class Persona
{
// ...
}
//creem l'objecte(variable) de la classe Persona
$persona = new Persona();
?>
Note
Al definir la variable objecte de la classe Persona, usem Persona(), això activarà al constructor que li podrem enviar paràmetres, que observarem més endavant.
Propietats
Les propietats representen característiques del mateix objecte.
Les definim usant la paraula var
davant del nom de la propietat.
La visibilitat de les propietats poden ser:
- Públiques: Podran ser accessibles des de qualsoval part de l'aplicació. Usarem `public`
- Privades: Només podran ser accessibles des de la classe que les ha definit. Usarem `private`
- Protegides: Només podran ser accessibles des de la classe que les ha definit i les que l'hereden. Usarem `protected`
- Estàtiques: El valor serà estàtic i podran ser accedides des fora la classe sense necessitat de ser declarat l'objecte. Usarem 'static`
Note
Les propietats estàtiques s'usen per exemple per definir una classe de connexió a la BdD i a on tenim les dades de la cadena de connexió.
class DadesConnexióBdD
{
public static $usuari = "root";
public static $pass = "1234";
}
<?php
class Persona
{
// Propietats
public $nom;
public $cognoms;
private $dataneixament;
protected $ciutat;
public static $tipus = "Persona";
}
?>
Accedir a les propietats
De manera bàsica i directe, des de dins la classe:
Si la propietat és estàtica, usarem ::
i la paraula clau self
o parent
segons es tracta d'ella mateixa de la classe heredada:
Des de fora de la classe, de manera bàsica:
Només podrem accedir a variable públiques i no estàtiques.
Per accedir a una variable pública i estàtica, ho fare directament, sense haver-la de declarar.
Mètodes
El mètode en una classe ens permetrà crear funcions per accedir a les propietats de manera segura i modificar, calcular, ... o aplicar una lògica que ens faci falta.
Per declarar un mètode usarem function
.
<?php
class Persona
{
// Propietats
// Mètodes
function Caminar()
{
// codi del mètode. Podrem accedir a les propietats.
]
}
?>
Podem tenir paràmetres en la crida dels mètodes, a dins del parèntesis.
<?php
class Persona
{
// Propietats
private kms;
// Mètodes
function Caminar($km)
{
$this->kms = $this->kms + $km;
]
}
?>
Públic, privat, protegit o estàtic
Igual que les propietats, els mètodes poden ser:
- públics: disponibles des de fora la classe
- privats: només accessibles des de dins la classe
- protegits: I podrà accedir si hi ha herència
- estàtics: si és públic no caldrà declarar un objecte per accedir-hi
Mètodes màgics
Tenim una llista de mètodes màgics que podem usar i que tenen una funcionalitat predefinida per PHP.
__construct()
Serà executat de manera automàtica al moment d'instanciar o declarar una variable objecte d'una classe.
La seva funcionalitat és la d'executar unes instruccions al moment de declarar-la i abans de ser utilitzada.
__destruct
S'executa quan es destrueix l'objecte. Això passa quan s'arriba al final de l'execució del PHP o bé es fa un unset(). Entre altres coses s'allibera memòria.
Es pot aprofitar per fer algunes tasques de l'estil desar informació a $_SESION[]
, guardar alguna cosa a la BdD o similar.