GD3 - PHP

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 74

Diplomado virtual en

PROGRAMACIÓN EN PHP
Guía didáctica 3: Programación orientada a objetos [POO]

1
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Se espera que, con los temas abordados en la guía didáctica del módulo 3:
Programación orientada a objetos [POO], el estudiante logre la siguiente
competencia específica:
 Conocer los conceptos básicos, componentes y características de la
programación orientada a objetos en PHP.

El contenido temático, para desarrollar en la guía didáctica del módulo 3:


Programación orientada a objetos [POO], es:

Programación
orientada a
objetos [POO]

Ilustración 1: caracterización de la guía didáctica.


Fuente: autor1.

1
Todas las ilustraciones de esta guía son autoría propia del docente y tienen como
función mostrar la aplicación y práctica del contenido que se desarrolla, por ello solo se
enumerarán.

2
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Tema 1: Programación Orientada a Objetos [POO]

La programación orientada a objetos es un paradigma de la programación,


pero ¿qué es un paradigma en programación? Es una propuesta tecnológica
adoptada por una comunidad de programadores y desarrolladores, cuyo núcleo
central es incuestionable en cuanto que únicamente trata de resolver uno o varios
problemas claramente delimitados. Es decir, una forma que los programadores
emplean para resolver problemas a partir de clases y objetos; es una forma especial
de programar, más cercana a como se expresan las cosas en la vida real.
Se debe aclarar que la programación orientada a objetos, en adelante POO,
no se trata de nuevas características que adquiere el lenguaje de programación.
Con la POO se hace referencia a una nueva forma de pensar. Lo que se acostumbra
a ver es la programación estructurada, donde se tiene un problema y se
descompone en distintos subproblemas para poder llegar a tener soluciones más
pequeñas y simples.
Cómo se mencionó anteriormente, la POO busca ver la programación como
en la vida real. Donde los objetos son similares a los objetos en la vida real y de
manera frecuente se escucharán los conceptos de «clases» y «objetos». Pero ¿qué
es una clase y qué es un objeto?

Clases
Las clases son declaraciones de objetos, también se podrían definir como
abstracciones de objetos o moldes. Esto quiere decir que la definición de un objeto
es una clase. Cuando se programa un objeto y se definen sus características y
funcionalidades en realidad lo que se hace es programar una clase.
La definición básica de una clase comienza con la palabra reservada class,
seguida de un nombre de clase, y continuando con un par de llaves que encierran
las definiciones de las propiedades y métodos pertenecientes a dicha clase.

3
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 2.

Las clases, en PHP, son básicamente una plantilla que sirve para crear un
objeto. Si se imaginan las clases en el mundo en el que se vive, se podría decir que
la clase persona es una plantilla sobre cómo es un humano. Juan, Andrés, Evelin
y Nicol son objetos de la clase persona, ya que todos son personas.

Ilustración 3.

4
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
La clase persona contiene la definición de un ser humano, mientras que cada
ser humano es una instancia u objeto de dicha clase.
En el ejemplo de la clase persona hay varias características que se deben
tener en cuenta al momento de trabajar con clases y programación orientada a
objetos, dado que entran en juego términos cómo: atributos, métodos, objetos y
constructores. Todos a partir de una clase.

Ilustración 4.

En este ejemplo, la clase gato está compuesta de 4 atributos: raza, nombre,


edad y encargada o dueña; que son inicializados por medio del constructor de la
clase gato, además de contener dos métodos o funciones que describen dos
acciones: tomar leche y pasear.

Características de una clase

5
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Existe una estructura fundamental para todas las clases definidas en PHP
que se debe tener en cuenta al momento de construirlas:
- Nombre: identifica la clase de forma única en nuestro proyecto, debe ser claro
y descriptivo.
- Atributos: referencia los campos y variables de la clase que permiten definir
las características de una clase.
Los atributos hacen el papel de variables en las clases, tienen las mismas
características y restricciones, pero en algunos casos cuentan con variantes y
complementos.
En el ejemplo de la clase gato, los atributos que componen la clase son:

Ilustración 5.

Las características que se recomiendan para la implementación de los


atributos en Java son las siguientes:
 Una clase puede contener N atributos o ninguno.
 Se recomienda el uso de los modificadores de acceso para limitar el alcance
de este, en especial private.
 Nombres claros en relación con la clase.
 En la mayoría de los casos no se inicializan los atributos.
- Métodos: los métodos en PHP permiten describir esas acciones que va a
realizar la clase.
En el ejemplo de la clase gato, los métodos que describen las acciones que
puede realizar esta clase son muy sencillos: tomarLeche() y ladrar().
Una clase puede contener N cantidad de métodos, con la salvedad de que
deben contener nombres diferentes en su declaración, salvo en algunos casos
especiales.

6
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 6.

- Constructor: el constructor es un método especial dentro de una clase, que


se suele utilizar para darle valores a los atributos del objeto al crearlo.
Los constructores se crean a partir de la palabra reservada del lenguaje
__construct().
Es el primer método que se ejecuta al crear el objeto y se llama
automáticamente al crearlo.

Ilustración 7.

Ahora de forma rápida y saltando algunos conceptos que serán vistos más
adelante, veamos el uso de la clase gato en ejecución.
Para este ejemplo hay algunos cambios, el archivo que se llamaba clases
dentro del proyecto y del directorio POO, lo vamos a cambiar a Gato.php.
Vamos a crear un nuevo archivo dentro del directorio POO, con nombre
main.php, dado que las clases no se pueden ejecutar directamente dentro de sí, por
lo que siempre debe haber un archivo «auxiliar» y la estructura de ese archivo será
la siguiente para este caso.

7
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 8 y 9.

Getters y setters
Los setters y getters son métodos de acceso, generalmente son una interfaz
pública para cambiar atributos privados de las clases, dado que cuando se
determinan atributos privados no hay manera de acceder a ellos sin un método de
acceso:
Setters: hace referencia a la acción de establecer, sirve para asignar un valor
inicial a un atributo, pero de forma explícita, además el setter nunca retorna nada
(siempre asigna) y solo permite dar acceso público a ciertos atributos que el usuario
pueda modificar.

Ilustración 10.

Los métodos setters se componen de las siguientes características:


 Suelen ser públicos dado que dan acceso a los atributos privados.

8
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
 El nombre suele estar compuesto anteponiendo la palabra set y el nombre
del atributo.
 Contiene un parámetro que se pasa argumentado.
 La palabra this ayuda a diferenciar el atributo de la clase y el parámetro, dado
que sin este se estaría operando únicamente con el parámetro, dejando a un
lado los atributos.

Ilustración 11.

Un ejemplo de implementación sería el siguiente:

9
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 12 y13.

De esta forma el atributo de del objeto CorreoGmail toma el valor de


“diego@gmail.com”.
Ahora, si ese valor se desea recuperar hay que hacer uso de get().
Getters: hace referencia a la acción de obtener, sirve para obtener (recuperar
o acceder) el valor ya asignado a un atributo y ser utilizado.

Ilustración 14.

Los métodos getters se componen de las siguientes características:


 Suelen ser públicos, dado que dan acceso a los atributos privados.
 El nombre suele estar compuesto anteponiendo la palabra get y el nombre
del atributo.
 No recibe parámetros dado que únicamente cumple la función de retornar
valores ya establecidos en la clase.
 Retorna el valor del atributo que representa.
 Es necesario usar this, dado que se debe hacer referencia al atributo de la
clase.
 Usa la palabra reservada return que, como su nombre lo dice, es retornar.

10
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 15.

Un ejemplo de implementación sería el siguiente:

Ilustraciones 16, 17 y 18.

11
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
De esta forma el atributo de del objeto CorreoGmail retornará el valor que
fue seteado (set) previamente.
La clase correo tendría la siguiente estructura:
- Cuatro atributos
- Cuatro métodos set.
- Cuatro métodos get.

Ilustración 19.

El archivo de ejecución main.php tendría la siguiente estructura:


- El require_once de la clase correo.
- La creación del objeto CorreoGmail.
- La asignación de valores por medio de set.

12
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
- La obtención de valores por medio de get.

Ilustraciones 20 y 21.

This - Static - Self

This
La pseudovariable $this sirve para hacer referencia a un método, propiedad
o atributo del objeto actual. Se utiliza principalmente cuando existe sobrecarga de
nombres. La sobrecarga de nombres se da cuando hay una variable local de un
método o constructor, o un parámetro formal de un método o constructor, con un
nombre idéntico al que está presente en la clase al momento de relacionarse.

13
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 22.

En el constructor de la clase calculadora, this ayuda a diferenciar los


parámetros de los atributos, dado que estos contienen el mismo nombre.
Se hace uso en la clase calculadora dado que representa el objeto actual, al
codificar $this->numero1 (sin el signo peso en el atributo), le estamos indicando a
PHP que vamos a utilizar el atributo de la clase y no los parámetros del constructor.

Ilustración 23.

Aquí se observa de mejor forma el funcionamiento de this, el color rojo


representa los atributos y el color amarillo los parámetros. En ejecución el resultado
sería el siguiente:

14
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 24, 25 y 26.

En este caso por medio del constructor de la clase calculadora se inicializan


los atributos por medio de this, que estarán disponibles en toda la clase y objeto
actual.

15
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 27.

Y en el método suma, simplemente se debe realizar un llamado al mismo.


Dado que internamente, gracias a this, el método llama a los atributos que fueron
pasados como parámetros en el constructor.

Ilustraciones 28 y 29.

Static
Los elementos estáticos (o miembros de clase) son aquellos que pertenecen
a la clase, en lugar de pertenecer a un objeto en particular.
Declarar propiedades o métodos de clases como estáticos los hacen
accesibles sin la necesidad de instanciar la clase. Una propiedad declarada como
static no puede ser accedida con un objeto de clase instanciado (aunque un método
estático sí lo puede hacer).
Debido a que los métodos estáticos se pueden invocar sin tener creada una
instancia del objeto, la seudovariable $this no está disponible dentro de los métodos
declarados como estáticos.

16
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 30 y 31.

Como se observa en el ejemplo, el uso de this para acceder a propiedades


estáticas está prohibido, en esos casos se hace el uso de self. Pero ¿qué es self y
en qué se diferencia de this?

Self
En PHP, self y this se utilizan para referir miembros de clase dentro del
alcance de una clase. Los miembros de la clase pueden ser variables o métodos.
Estas palabras claves de PHP difieren con el comportamiento estático de los
miembros de la clase.
Cuando queramos acceder a una constante o método estático o un atributo
desde dentro de la clase, se usa la palabra reservada: self.

17
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 32, 33 y 34.

Parámetros - Argumentos
Los parámetros o argumentos son una forma de intercambiar información con
el método. Pueden servir para introducir datos para ejecutar el método (entrada) o
para obtener o modificar datos tras su ejecución (salida).
 Parámetros: uso en la declaración del método, son los valores que un método
recibe desde un objeto.

18
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 35.

 Argumentos: uso en el paso de datos a métodos desde un objeto. Son los valores
que un objeto recibe para operar un método.

Ilustración 36.

Paso por valor. Son argumentos que contienen el valor exacto de estos.

Ilustraciones 37 y 38.

El paso por valor se caracteriza por el uso de tipos de datos clásicos que
permiten el paso de valores exactos a los métodos. Ejemplos:
- Números.

19
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
- Cadenas.
Paso por referencia. Son argumentos de tipo objeto, array, entre otros, que
no contienen los valores de estos sino su respectiva dirección en memoria.

Ilustraciones 39 y 40.

El paso por referencia se caracteriza por el uso de tipos datos por referencia
que permiten el paso de la dirección de memoria del valor original, más no la copia
del valor.

Constructores
Es un método que contiene las acciones que se realizarán por defecto al
crear un objeto, en la mayoría de los casos se inicializan los valores de los atributos
en el constructor.

20
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
 No es obligatoria su creación.
 Se utiliza la palabra reservada __construct.
 No retorna ningún valor.
 Se recomienda el uso de modificadores de accesos.

Ilustración 41.

El constructor recibe todos los atributos de la clase en su inicialización. Desde


la declaración de la instancia u objeto, sería de la siguiente forma:

Ilustración 42.

El objeto debe recibir cuatro argumentos, en el mismo orden conforme se


declara dentro del constructor, la instrucción new Gato(..) se encarga de enviar los
argumentos al constructor para ser inicializados los atributos.
Para el uso correcto de los constructores debemos entender el uso y
aplicación de los argumentos y parámetros que ayudan a inicializar esos valores.
Véase:

21
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
22
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 43 y 44.

La clase calculadora es un ejemplo básico que permitirá describir


adecuadamente el funcionamiento del constructor. La clase cuenta con tres
atributos, todos privados y sin inicializar sus respectivos valores, dado que eso se
hará dentro del constructor.
Este, para ser un constructor, debe cumplir con unas caractetisticas básicas
para el correcto funcionamiento:
 Es público.
 El nombre es la palabra reservada __construct.
 Puede o no recibir párametros.
 No cuenta con retorno.
Entiéndase el funcionamiento dentro del constructor, este recibe unos
pámetros desde la instancia u objeto que lo invoca que permiten asignar a los
atributos privados unos valores en tiempo de ejecución. Véase los pámetros y
argumentos.

23
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 45 y 46.

En la archivo Main se creará las respectiva instancia de la clase calculadora,


por lo que se deben pasar respectivamente los tres argumentos.
Recuerda que los argumentos son los valores que se le asignan al método
llamado por el objeto, y los párametros son los valores que recibe el método en su
declaración. Más adelante se profundizará.
Estos argumentos son trasformados en párametros en el método de forma
de objeto y el constructor de la clase cuenta ahora con los siguientes valores:

Ilustración 47.

Puesto que el constructor le asignó los valores a los atributos del presente
objeto por medio de la siguiente operación:

24
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 48.

En esta operación de asignación convergen los argumentos y los


párametros, dado que los valores de los párametros los deben tomar dichos
argumentos que se desean inicializar.
this cumple el papel de diferenciar un atributo de un pámetro, dado que por
convención es ideal mantener los nombres, this permite hacer la referencia al objeto
actual (es decir la clase).
En el ejercicio anterior el constructor recibía todos los pámetros, ¿cómo
funcionan los constructores vacíos?

Ilustración 49.

Es admitible la declaración de un constructor vacío, pero ¿cómo se


inicializarán los valores? Aquí vuelven a aplicar los getters y setters, intenta
aplicarlos al ejercicios de la calculadora.

Destructores
El método destructor será llamado tan pronto como no haya otras referencias
a un objeto determinado, o en cualquier otra circunstancia de finalización.

25
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 50, 51 y 52.

Las características de este método son:

26
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
 El objetivo principal es liberar recursos que solicitó el objeto (conexión a la
base de datos, creación de imágenes dinámicas, etc.),
 Es el último método que se ejecuta de la clase.
 Se ejecuta en forma automática, es decir, no tenemos que llamarlo.
 Debe llamarse __destruct.
 No retorna datos.
 Es menos común su uso que el constructor, ya que PHP gestiona bastante
bien la liberación de recursos en forma automática.

Métodos
Son procesos o acciones disponibles para el objeto, creados a partir de una
clase.
Un método es una abstracción de una operación que puede hacer o
realizarse con un objeto. Una clase puede declarar cualquier número de métodos
que lleven a cabo operaciones de todo tipo con los objetos.
Algunas características que se encuentran dentro de los métodos son:
 Permiten reutilizar código.
 Pueden o no retornar valores, los métodos que no retornan valores son
conocidos como métodos de tipo void, a diferencia de los métodos que sí
retorna y son de un tipo en específico: int, string, entre otros, más adelante
ahondaremos en este tipo de métodos.
 Pueden existir N cantidades de métodos dentro de una clase.
 Puede contener o no parámetros.
 Un método puede contener N parámetros, aunque se recomienda no
sobrecargar los métodos.
 Los métodos deben retornar un tipo de dato del mismo tipo que está diseñado
el método, es decir, un método de tipo entero debe retornar un entero.
 Los nombres deben ser muy claros y descriptivos con la acción que van a
realizar.
 Se recomienda el uso de los modificadores de acceso, en especial diseñar
los métodos con el modificador de acceso public.

27
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
La estructura general para implementar los métodos dentro de las clases es
la siguiente:
 Modificador de acceso.
 Palabra reservada function.
 Nombre del método.
 Parámetros.
En el siguiente ejemplo vamos a simular el funcionamiento de un carro a partir
de métodos, teniendo en cuenta el estado del carro, los pasajeros y la velocidad,
además, podremos simular algunas funciones del carro, como frenar, apagar,
encender, etc.

28
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
29
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
30
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 53, 54, 55 y 56.

Otro ejemplo de los métodos en acción es el siguiente ejemplo de la clase


adivinar, hay muchos conceptos y es interesante prestar atención a su
funcionamiento.
Suponga que se debe generar una lotería a partir de un límite inferior y
superior, y acercar el número aleatorio que se genere. Hay que implementar una
clase y un método que realice todo el proceso.

31
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
32
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 57, 58, 59 y 60.

Métodos void. La utilidad de los métodos void radica en que son métodos
que no cuentan con ningún tipo de retorno.
Algunas características de este tipo de método son:
 Se centran en realizar acciones que no requieren retornar un valor en
específico, también suele ser usado para mostrar mensajes.
 Se caracterizan por no tener un tipo de dato asociado.
 El modificador de acceso más común es public.
 Puede o no recibir parámetros.
 Los nombres deben ser muy claros y descriptivos con la acción que van a
realizar.
Observa algunos ejemplos de métodos void.
El método encender () cumple la función de asignar un valor al atributo
estadoCarro, de la clase carro, a partir del objeto.

33
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 61 y 62.

El método cambiarEstado () cumple la función de asignar un nuevo valor al


atributo estadoCarro de la clase carro por medio del parámetro que recibe (recordar
el uso de this).

Ilustraciones 63 y 64.

Métodos de tipo. La utilidad de los métodos de tipo radica en que son


métodos que cuentan un retorno en base al tipo de dato que fue declarado.
Algunas características de este tipo de método son:
 Se centran en realizar acciones que deben contar con un retorno obligatorio
con base al tipo de dato definido.
 Se caracterizan por tener un tipo de dato asociado.
 El modificador de acceso más común es public.
 Puede o no recibir parámetros.
 Se debe tener en cuenta la correcta identificación de los nombres de los
métodos.

34
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
 Los nombres deben ser muy claros y descriptivos con la acción que van a
realizar.
Observa algunos ejemplos de métodos de tipo.

Ilustraciones 65, 66 y 67.

El método aumentarPrecio () cumple la función de incrementar y retornar el


atributo del precio de la clase casa con base al parámetro que recibe. En estos
momentos no se está realizando una tipificación estricta, donde se le obligue al
método a devolver un tipo estrictamente definido.

35
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
PHP 7 añade soporte para las declaraciones de tipo de devolución. De forma
similar a las declaraciones de tipo de argumento, las declaraciones de tipo de
devolución especifican el tipo del valor que serán devuelto desde una función. Están
disponibles los mismos tipos para las declaraciones de tipo de devolución que para
las declaraciones de tipo de argumento.
Los tipos de datos que se pueden usar para los métodos y para los
argumentos son los siguientes:
- String - int - bool - float - array - Self - objeto de clase - callable
Vamos a ondear principalmente en los tipos de:
 String
 Int
 Bool
 Float
 Array
Siguiendo el ejemplo de la clase casa y el método aumentarPrecio,
realicemos ahora una tipificación estricta.

Ilustración 68.

Por medio de la declaración int, PHP obliga al método a que el valor de


retorno sea sí o sí un número entero.

Ilustración 69.

Este sería el resultado esperado, ahora, por ejemplo, realicemos un cambio


en el retorno del método.

36
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 70.

En este caso estamos solicitando el retorno de un número entero, pero el


método está retornando una cadena de texto, un string; el error sería el siguiente:

Ilustración 71.

Informa claramente el error de TypeError en el retorno del método


aumentarPrecio con los tipos int y string.
Existe también la tipificación estricta en parámetros y con los mismos tipos
de datos, realicemos un ejemplo con la misma clase casa y método aumentarPrecio.

Ilustración 72.

Por medio de la declaración: int $precio, PHP obliga al parámetro $precio,


que el valor de retorno sea sí o sí un número entero.

Ilustración 73.

Ahora forzamos el error pasando al parámetro $precio una cadena de texto.

37
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 74.

El tipo de error es TypeError con el argumento que ha sido pasado al


parámetro $precio en el método aumentarPrecio y los tipos int a string.
Veamos ahora algunos ejemplos con otros tipos de datos y otros métodos
haciendo uso de varios conceptos, en especial las dos tipificaciones que acabamos
de ver.

38
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 75, 76 y 77.

Modificadores de acceso
Los modificadores de acceso introducen el concepto de encapsulamiento. El
encapsulamiento busca controlar el acceso a los datos que conforman un objeto o
instancia; de este modo una clase, y por ende sus objetos que hacen uso de
modificadores de acceso (especialmente privados), son objetos encapsulados.
Los modificadores de acceso permiten dar un nivel de seguridad mayor
restringiendo el acceso a diferentes atributos, métodos y constructores, asegurando
que el usuario deba seguir una «ruta» especificada para acceder a la información.
Implementando el uso de los modificadores de acceso se podrá asegurar que
un valor no será modificado incorrectamente. Generalmente el acceso a los
atributos se consigue por medio de los métodos get y set, es estrictamente
necesario que los atributos de una clase sean privados.
Existen cuatro modificadores de acceso:
Public - default: la propiedad o método podrá usarse en cualquier parte del
script.
Private: la propiedad o método solo podrá usarse en la clase a la que
pertenece.
Protected: la propiedad o método se podrá usar por la clase a la que
pertenece y por sus descendientes.

39
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 78.

Métodos mágicos
Los métodos mágicos en PHP permiten realizar acciones en objetos cuando
suceden determinados eventos que activan dichos métodos. Estos, denominados
con doble barra baja __nombreMetodo(), determinan cómo reaccionará el objeto.
Los métodos mágicos disponibles en PHP son los siguientes:
Métodos
__construct __sleep
__destruct __call
__get __callStatic
__set __clone
__isset __invoke
__unset

Ilustración 79.

Suponemos que tenemos una aplicación en la que queremos extraer tweets


de Twitter. Extraemos los tweets del usuario y queremos transformar cada tweet en
un objeto de PHP con el que trabajar. Hagamos uso de algunos métodos (Lázaro,
2018).

40
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
construct() y destruct(). El método mágico más utilizado en PHP es
___construct(), un método que es llamado automáticamente cuando se crea el
objeto. Permite adjuntar parámetros para construir el objeto.
Cuando creamos una nueva instancia del objeto tweet podemos pasarle
parámetros que se iniciarán en el método __construct(). No se puede llamar al
método ya que es llamado automáticamente al crear el objeto.
Al igual que podemos construir cosas cuando instanciamos un objeto,
también podemos destruirlas cuando el objeto se destruye. Si por ejemplo tenemos
una conexión a la base de datos en el objeto y queremos asegurarnos de que se
cierra al destruir el objeto, podemos hacer lo siguiente:

Ilustración 80.

__get() y __set(). Cuando se trabaja con objetos, las propiedades pueden


ser accedidas de esta forma si son public:

Ilustraciones 81 y 82.

41
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Pero en la práctica lo normal y aconsejable es que las propiedades sean
protected o private, por lo que no podemos acceder a ellas de esa forma.
El método mágico ___get() permite poder acceder a estas propiedades:

Ilustración 83.

El método acepta el nombre de la propiedad que estabas buscando como


argumento. No es necesario llamar al método __get(), ya que PHP lo llamará
automáticamente cuando trates de acceder a una propiedad que no es public.
También lo llamará cuando no existe una propiedad.
Ahora, con el método mágico y los atributos en privado, o protected, se puede
realizar el proceso normal para el llamado a los atributos.

Ilustraciones 84 y 85.

Funciona perfectamente para las propiedades declaradas, en caso de que no


exista opera de la siguiente forma:

42
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 86 y 87.

Si lo que quieres es establecer un valor a un atributo del objeto actual que no


es accesible, puedes insertar un método __set(). Este método toma el atributo al
que intentabas acceder y el valor que intentabas establecer como sus dos
argumentos.

43
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 88, 89 y 90.

En este último ejemplo, por medio del constructor inicializamos el objeto y


todos sus atributos, seguidamente establecimos un nuevo valor al atributo texto por
medio de set y obtuvimos el valor gracias a get.
__clone(). Cuando se hace una copia de un objeto en PHP mediante su
asignación a otra variable, esta variable sigue haciendo referencia al mismo objeto.
Esto significa que si cambias cualquier cosa en uno se cambiará en ambos dos:

Ilustración 91.

En el ejemplo anterior se crea un objeto de la clase tweet llamado «tweet» y


una variable llamada «tweet2», que contendrá el objeto anteriormente creado
(«tweet») y con la asignación de valora a «tweet2» también cambiará «tweet» por
la referencia existente.

Ilustración 92.

Para crear una copia del objeto, independiente uno de otro, se usa clone:

44
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 93.

Estos son algunos de los métodos mágicos más comunes, aunque


principalmente destacan get, set y construct.
Return. La palabra reservada return permite retornar valores dentro de los
métodos, además de detener la ejecución de este.
 Cualquier instrucción que se encuentre después de la ejecución de return NO
será ejecutada. Es común encontrar métodos con múltiples sentencias return
al interior de condicionales, pero una vez que el código ejecuta una sentencia
return lo que haya de allí hacia abajo no se ejecutará.
 Si un método con tipo estricto va a retornar, el tipo del valor que se retorna
debe coincidir con el del tipo estricto declarado del método, es decir, si se
declara int el método, el valor retornado debe ser un número entero.
 En el caso de los métodos void (sin retorno) se puede usar la sentencia
return, pero sin ningún tipo de valor, solo se usaría como una manera de
terminar la ejecución del método.

45
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 94, 95, 96 y 97.

46
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Objetos
Los objetos son ejemplares de una clase. Cuando se crea un objeto se debe
especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a
partir de una clase se llama instanciar.

Ilustraciones 98, 99 y 100.

47
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Los objetos tienen características fundamentales que nos permiten
conocerlos mediante la observación, identificación y el estudio posterior de su
comportamiento; estas características son:
Identidad. La identidad es la propiedad que permite diferenciar a un objeto y
distinguirse de otros. Generalmente esta propiedad es tal que da nombre al objeto.
Por ejemplo, el «verde» como un objeto concreto de una clase color; la propiedad
que da identidad única a este objeto es precisamente su «color», verde. Tanto es
así que no tiene sentido usar otro nombre para el objeto que no sea el valor de la
propiedad que lo identifica.
En programación, la identidad de todos los objetos sirve para comparar si dos
objetos son iguales o no. No es raro encontrar que en muchos lenguajes de
programación la identidad de un objeto esté determinada por la dirección de
memoria de la computadora en la que se encuentra el objeto, pero este
comportamiento puede ser variado redefiniendo la identidad del objeto a otra
propiedad.
Comportamiento. El comportamiento de un objeto está directamente
relacionado con su funcionalidad y determina las operaciones que este puede
realizar. La funcionalidad de un objeto está determinada, primariamente, por su
responsabilidad. Una de las ventajas fundamentales de la POO es la reusabilidad
del código; un objeto es más fácil de reutilizarse en tanto su responsabilidad sea
mejor definida y más concreta.
Una tarea fundamental a la hora de diseñar una aplicación informática es
definir el comportamiento que tendrán los objetos de las clases involucradas en la
aplicación, asociando la funcionalidad requerida por la aplicación a las clases
adecuadas.
Estado. El estado de un objeto se refiere al conjunto de atributos y sus
valores en un instante de tiempo dado. El comportamiento de un objeto puede
modificar el estado de este.
Para declarar un objeto de una clase específica el proceso es el siguiente:

48
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 101.

Con la declaración FacebookDiego se está reservando un espacio de


memoria para almacenar una referencia (dirección de memoria) a un objeto de la
clase Facebook. Al respecto, es importante comprender que FacebookDiego no
es un objeto, sino una variable que almacenará la referencia a un objeto (de la clase
Facebook) que todavía no existe. Seguidamente, mediante la sentencia
FacebookDiego = new Facebook (), el operador new creará un objeto de la clase
Facebook, reservando memoria para guardar sus atributos. Finalmente, con el
operador de asignación (=), la dirección de memoria donde esté creado el objeto es
asignada a FacebookDiego.
Hay otros aspectos para tener en cuenta en POO con los objetos:
- Se pueden instanciar N cantidad de objetos de una clase, siempre y cuando
tengan nombres diferentes.
- Un objeto puede acceder a todos métodos definidos en la clase de la cual
está generada la instancia a partir de los modificadores de acceso.
En programación orientada a objetos (POO), una instancia de programa (por
ejemplo, un programa ejecutándose en una computadora) es tratada como un
conjunto dinámico de objetos interactuando entre sí.
Los objetos en la POO extienden la noción más general descrita en secciones
anteriores para modelar un tipo muy específico que está definido fundamentalmente
por:
- Atributos: representan los datos asociados al objeto o, lo que es lo mismo,

49
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
sus propiedades o características. Los atributos y sus valores, en un
momento dado, determinan el estado de un objeto.
- Métodos: acceden a los atributos de una manera predefinida e implementan
el comportamiento del objeto.
Los atributos y métodos de un objeto están definidos por su clase, aunque
una instancia puede poseer atributos que no fueron definidos en su clase. Algo
similar ocurre con los métodos: una instancia puede contener métodos que no estén
definidos en su clase de la misma manera que una clase puede declarar ciertos
métodos como «métodos de clase», y estos (en dependencia del lenguaje) podrán
estar o no presentes en la instancia.
En el caso de la mayoría de los objetos, los atributos solo pueden ser
accedidos a través de los métodos; de esta manera es más fácil garantizar que los
datos permanecerán siempre en un estado bien definido.
En un lenguaje en el que cada objeto es creado a partir de una clase, un
objeto es llamado una instancia de esa clase. Cada objeto pertenece a un tipo y dos
objetos que pertenezcan a la misma clase tendrán el mismo tipo de dato.
Crear una instancia de una clase es entonces referido como instanciar la
clase.
En PHP, el operador «->» es usado para referirse o «llamar» a un método
particular de un objeto.
Considere como ejemplo una clase aritmética llamada Aritmética. Esta clase
contiene métodos como «sumar», «restar», »multiplicar», «dividir», etc., que
calculan el resultado de realizar estas operaciones sobre dos números.
Un objeto de esta clase puede ser utilizado para calcular el producto de dos
números, pero primeramente sería necesario definir dicha clase y crear un objeto.
Declaración de la clase aritmética:

50
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 102.

Creación del objeto operaciones:

Ilustración 103.

Ejecución de los métodos de la clase aritmética a partir del objeto


operaciones:

51
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 104.

Resultados de la ejecución de los métodos con base en los argumentos.

Ilustración 105.

Herencia
La herencia es un mecanismo que permite la definición de una clase a partir
de la definición de otra ya existente. La herencia permite compartir automáticamente
métodos y datos entre clases y objetos.
Esto proporciona una de las ventajas principales de la programación
orientada a objetos: la reutilización de código previamente desarrollado, ya que
permite a una clase más específica incorporar la estructura y comportamiento de
una clase más general.
Cuando una clase B se construye a partir de otra A mediante la herencia, la
clase B hereda todos los atributos, métodos y clases internas de la clase A. Además,
la clase B puede redefinir los componentes heredados y añadir atributos, métodos
y clases internas específicas.
Para indicar que la clase B (clase descendiente, derivada, hija o subclase)
hereda de la clase A (clase ascendiente, heredada, padre, base o superclase) se

52
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
emplea la palabra reservada extends en la cabecera de la declaración de la clase
descendiente. La sintaxis es la siguiente:

Ilustración 106.

Un ejemplo más claro de la aplicación de la herencia sería el siguiente:


Un programa donde se encuentre una clase taxi y autobús con
características similares, como encendido, apago, matrícula, modelo y potencia.
Podría resumirse esos elementos en común en una clase padre (vehículo) y las
clases hijos (taxi y autobús) heredar de la clase padre.

Ilustración 107.

La clase padre se encarga de englobar todas las características que ambas


clases hijas tengan en común para su posterior herencia. Las clases hijas tendrían
la siguiente estructura:

53
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Estructura de la clase autobús:

Ilustración 108.

Estructura de la clase taxi:

Ilustración 109.

Con la estructura jerárquica de las tres clases descritas, ahora se puede


operar entre ellas de la manera correcta y reutilizando código.

54
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 110, 111, 112 y 113.

55
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Por medio de la clase padre no hay necesidad de crear métodos y atributos
independientes en cada clase, dado que la herencia permite englobar aquellas
características que se comparten en cuanto a la estructura y simplificarlas para
ahorrar código posteriormente.
PHP permite múltiples niveles de herencia, pero no la herencia múltiple, es
decir, una clase solo puede heredar directamente de una clase ascendiente. Por
otro lado, una clase puede ser ascendiente de tantas clases descendiente como se
desee (un único padre, multitud de hijos). En la siguiente figura se muestra
gráficamente un ejemplo de jerarquía entre diferentes clases relacionadas mediante
la herencia.

Ilustración 114.

Como se ha comentado anteriormente, la clase descendiente puede añadir


sus propios atributos y métodos, pero también puede sustituir u ocultar los
heredados. En concreto:
Se puede declarar un nuevo método de instancia con la misma cabecera que
el de la clase ascendiente, lo que supone su sobreescritura. Por lo tanto, la
sobreescritura o redefinición consiste en que métodos adicionales declarados en la
clase descendiente con el mismo nombre, tipo de dato devuelto y número y tipo de
parámetros sustituyen a los heredados.

56
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
57
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 115, 116, 117 y 118.

De esta forma, la herencia se pierde al sobrescribir los métodos, en este caso


encenderVehiculo, que ignora el componente de la herencia y se dirige al ámbito de
la clase.
Se puede declarar un constructor de la subclase que llame al de la superclase
de forma implícita o mediante la palabra reservada parent::_construct. Con parent
hacemos el llamado a la clase padre y especificamos el método, en este caso el
constructor.

58
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 119, 120 y 121.

En general puede accederse a los métodos de la clase ascendiente que han


sido redefinidos empleando la palabra reservada parent delante del método. Este
mecanismo solo permite acceder al método perteneciente a la clase en el nivel
inmediatamente superior de la jerarquía de clases.

Parent
Puede encontrarse escribiendo código que se refiera a variables y funciones
en clases base (padres). En lugar de usar el nombre literal de la clase base en su
código, debe usar la palabra reservada parent, que se refiere al nombre de su clase
base como se indica en la declaración extendida de su clase. Al hacer esto, evita
usar el nombre de su clase base en más de un lugar. Si su árbol de herencia cambia
durante la implementación, el cambio se realiza fácilmente al cambiar la declaración
extendida de su clase.
De forma más clara, parent es una representación de una clase padre en
herencia, que, por la funcionalidad de heredar, permite realizar llamados a métodos
o variables de la clase padre sin usar el nombre la misma, de la siguiente forma:

Ilustración 122.

59
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
En esta instrucción se realiza un llamado al constructor de la clase padre,
pero si no se usase parent:

Ilustración 123.

El resultado es igual. Pero en caso de que la clase cambiara de nombre en


algún momento del proceso de codear, se tendría que cambiar en todos los lugares
donde se realicen llamados a las clases padres.

Sobrescritura de métodos - Polimorfismo


Es la forma por la cual una clase que hereda puede redefinir los métodos de
su clase padre, de esta manera puede crear nuevos métodos con el mismo nombre
de su superclase. Es decir, si existe una clase padre con el método saludar (), se
puede crear en la clase hija un método que también se llame saludar (), pero con la
implementación según la necesidad.
La característica principal que se debe tener muy presente cuando se trabaja
con sobreescritura de métodos es:
- La estructura de los métodos debe ser igual en ambas clases: mismos
parámetros, mismo tipo de retorno e implementación del mismo modificador
de acceso.
Obsérvese el siguiente ejemplo para entender el funcionamiento de la
sobrescritura de métodos:
Clase padre instrumento:

60
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 124.

Clase hija clarinete heredada de la clase padre instrumento:

Ilustración 125.

La clase padre implementa el método tocar, la clase hija lo sobrescribe, por


lo que ahora son dos métodos diferentes (recordar el uso de la anotación). La
estructura de ejecución sería la siguiente:

Ilustración 126.

Con base al objeto de tipo clarinete se accede al método tocar de la misma


clase (no al padre, dado que ha sido sobrescrita). Obsérvese la salida.

61
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 127.

Ya el objeto no accede al método de la superclase o clase padre, sino que


directamente accede al declarado en su propia estructura de clase. Si se quisiera
obtener la ejecución de ambos métodos, tanto el de la clase padre e hija,
simplemente se tendría que cambiar la siguiente estructura:

Ilustraciones 128 Y 129.

La palabra parent hace el llamado al método tocar de la superclase, haces


las veces de this, pero esta ya no hace referencia al objeto o clase actual, sino a su
clase padre, en este caso: instrumento.

Final

62
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
PHP introduce la nueva palabra clave final, que impide que las clases hijas
sobrescriban un método, antecediendo su definición con final. Si la propia clase se
define como final, entonces no se podrá heredar de ella.

63
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 130, 131, 132 y 133.

Clases abstractas
En PHP se dice que son clases abstractas aquellas clases base
(superclases) de las que no se permite la creación de objetos. Para ello, se utiliza
la palabra clave abstract.
En una clase abstracta es posible definir métodos abstractos, los cuales se
caracterizan por el hecho de que no pueden ser implementados en la clase base.
De ellos, solo se escribe su signatura en la superclase, y su funcionalidad —
polimórfica— tiene que indicarse en las clases derivadas (subclases).

64
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 134.

En la clase figura se ha definido un atributo (color), un constructor y dos


métodos (calcularArea y getColor), calcularArea es abstracto, por lo que no
cuenta con implementación.

65
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustración 135.

En la clase cuadrado se ha definido un atributo (lado), un constructor y un


método (calcularArea).

Ilustración 136.

En la clase triángulo se han definido dos atributos (base y altura), un


constructor y un método (calcularArea).
Como se puede observar, el método calcularArea ha sido definido abstracto
(abstract) en la superclase abstracta figura, indicándose solamente su signatura.
Por otro lado, véase que en cada una de las subclases (cuadrado y triángulo)
se ha implementado dicho método.

66
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 137, 138, 139 y 140.

Fíjese que en la ejecución de ambas clases se ha invocado al método


getColor, definido e implementado en la superclase figura. Sin embargo, el método
abstracto calcularArea únicamente se implementa en las subclases (cuadrado y
triángulo).

Interfaces
Las interfaces de objetos permiten crear código con el cual especificar qué
métodos deben ser implementados por una clase, sin tener que definir cómo estos
métodos son manipulados.
Las interfaces se definen de la misma manera que una clase, aunque
reemplazando la palabra reservada class por la palabra reservada interface, y sin
que ninguno de sus métodos tenga su contenido definido.

67
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Todos los métodos declarados en una interfaz deben ser públicos, ya que
esta es la naturaleza de una interfaz.

Ilustración 141.

Para implementar una interfaz se utiliza el operador implements. Todos los


métodos en una interfaz deben ser implementados dentro de la clase.

68
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 142, 143 y 144.

El no cumplir con esta regla resultará en un error fatal.

69
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 145 y 146.

El error especifica la ausencia de un método y además resalta cuál es el


método que no se encuentra.
Las clases pueden implementar más de una interfaz si se deseara,
separándolas cada una por una coma.

70
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
71
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Ilustraciones 147, 148, 149, 150 y 151.

En este ejemplo se realiza la implementación de dos interfaces en una sola


clase con los respectivos métodos que se adhieren en la implementación.
Es posible tener constantes dentro de las interfaces. Las constantes de
interfaces funcionan como las constantes de clases, excepto porque no pueden ser
sobrescritas por una clase/interfaz que las herede.
Las interfaces se suelen utilizar cuando se tienen muchas clases que tienen
en común un comportamiento, pudiendo asegurar así que ciertos métodos estén
disponibles en cualquiera de los objetos que queramos crear. Son especialmente
importantes para la arquitectura de aplicaciones complejas.

72
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Lázaro, D. (2018). Métodos mágicos en PHP. https://diego.com.es/metodos-
magicos-en-php

73
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP
Esta guía fue elaborada para ser utilizada con fines didácticos como
material de consulta de los participantes en el diplomado virtual en
PROGRAMACIÓN EN PHP del Politécnico de Colombia, y solo podrá
ser reproducida con esos fines. Por lo tanto, se agradece a los usuarios
referirla en los escritos donde se utilice la información que aquí se
presenta.

GUÍA DIDÁCTICA 3
M2-DV59-GU03
MÓDULO 3: PROGRAMACIÓN ORIENTADA A OBJETOS [POO]

© DERECHOS RESERVADOS - POLITÉCNICO DE COLOMBIA, 2023


Medellín, Colombia

Proceso: Gestión Académica Virtual


Realización del texto: Diego Palacio, docente
Revisión del texto: Comité de Revisión
Diseño: Comunicaciones

Editado por el Politécnico de Colombia.

74
DIPLOMADO VIRTUAL EN PROGRAMACIÓN EN PHP

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy