El paradigma de la Programación Orientada a Objetos en PHP y el patrón de arquitectura de Software MVC
- Antes de comenzar
con el libro - Introducción
a la programación orientada a objetos
(POO) - Programación
orientada a objetos en PHP 5 - Introducción
al patrón arquitectónico MVC - El patrón
MVC en PHP
Antes de comenzar con la lectura puntual sobre POO y MVC
en PHP, hago meritorio notar ciertas cuestiones que considero
deben contemplarse a fin de lograr un mejor entendimiento de lo
expuesto.
Objetivo del libro
El objetivo de este libro, es dar una
introducción general a conceptos básicos de la
programación como lo son, el paradigma de la
programación orientada a objetos y el patrón
arquitectónico MVC (modelo, vista, controlador), a la
vez de intentar introducir estos conceptos, en la
programación específica del lenguaje
PHP.
Requisitos previos
Para poder entender este libro, los requisitos previos
que debe tener el lector, no son muchos. Recomiendo que se tengan
conocimientos básicos del lenguaje PHP así
como la facilidad para entender código HTML
básico (se utilizará HTML Transitional 4.0 en
algunos ejemplos, evitando el uso de XHTML, a fin de que
programadores sin experiencia en el diseño y maquetado de
sitios Web, puedan comprender más fácilmente los
ejemplos utilizados).
¿A quiénes está dirigido este
libro?
Este libro está dirigido principalmente, a
programadores PHP que quieran salir de la
programación estructurada para insertarse en la
programación orientada a objetos y, a programadores de
otros lenguajes que quieran comenzar a insertarse en la POO
en PHP y que cuenten con mínimos conocimientos de este
lenguaje.
El ¿por qué? de este libro y Mi
Dedicatoria
Mi frase de cabecera es "el por qué de las
cosas es relativo ya que no tiene forma de ser
comprobado". Así que se me hace muy
difícil explicar un "por qué". Solo puedo decir
"cómo" fue que se me ocurrió
escribirlo.
Perdí la cuenta de la cantidad de programadores
con los que he trabajado. Han sido muchísimos en los
últimos 15 años de mi vida. Me ha tocado trabajar
con excelentes programadores y con unos pocos no tan
buenos. Pero hay algo, que he notado en una gran parte de
progrmadores, con los que tal vez, no me ha tocado trabajar en
forma directa, pero sí, tener que continuar desarrollando
algo ya empezado por ellos o modificarlo. Y ésto que he
notado y me ha llamado mucho la atención, es
que:
Se usan elementos de la programación
orientada a objetos, con la falsa creencia de que escribiendo
una "clase" ya se está programando orientado a
objetosSe desconoce por completo o no se logra entender del
todo, la diferencia entre "estilo arquitectónico",
"patrón arquitectónico" y "patrón de
diseño", provocando en consecuencia, el
desaprovechamiento o mal uso, de patrones
arquitectónicos como MVC desencadenando así, en
una arquitectura de software deficiente
Las alternativas que me quedaban eran dos:
No hacer nada
Transmitir a otros programadores, todo lo que
había aprendido, para que pudiesen implementarlo si
ese fuese su deseo
Por lógica y sin dudarlo ni tener que pensarlo
demasiado, elegí la segunda opción. Porque estoy
segura que el conocimiento debe ser transmitido y no se
debe escatimar en su difusión. Pues no me interesa
hacerme eco de la competitividad que invade varios
ámbitos de la vida. Por el contrario, prefiero seguir
el ejemplo de aquellos, mis colegas, que lo han brindado todo al
saber general. Y es por ello, que este libro, lo dedico a
todos ellos, a los creadores de
MastrosDelWeb.com[1]y
ForosDelWeb.com y en especial, a mis dos grandes
colegas, de quienes he aprendido gran parte de lo que hoy
se:
a la barcelonesa Helena Heidenreich (aka:
tunait[2]gran colaboradora del foro
JavaScript de FDWy al madrileño Miguel Ángel
Álvarez, fundador y director del portal de
programación,
DesarrolloWeb.com[3]
Contenido del libro
A fin de lograr cumplir con los objetivos propuestos,
este libro ha sido diseñado con una estructura
esquemática y seguiendo normas de estilo a fin de
diferenciar su contenido.
Estructura del libro
Este libro se encuentra dividido en 4
capítulos donde dos de ellos, introducen a conceptos
básicos de la POO y el patrón MVC (en general) y
los otros dos, colocan a la POO y al patrón MVC en el
contexto del lenguaje PHP.
Entender el contenido diferenciado
Este libro no pretende ser un compendio de conceptos
meramente teóricos. A fin de alcanzar un abordaje
más preciso y fácilmente entendible, se ha divido
el libro en 7 tipificaciones de contenido
diferenciadas:
marco teórico (contenido propio y
citas de terceros)ejemplo práctico (código fuente
de ejemplo)metáforas (comparación con
ejemplos de la vida real – tomando esta técnica
de un principio básico de Extreme
Programming)sugerencias de estilo (reglas de estilo
sugeridas para la programación en PHP)ejercicios de
autoevaluaciónprogramación real (ejemplos con
códigos fuente reales)preguntas a respuestas frecuentes
- Marco teórico (contenido propio)
Texto general del libro.
- Marco teórico (cita de terceros)
Las citas presentan el siguiente formato:
"Esto es una cita textual de terceros. La fuente se
encuentra al pie de página."
- Ejemplo práctico (código fuente)
El código fuente se encuentra con una
tipografía monoespaciada y con la sintaxis del
lenguaje coloreada[4]
class Usuario {
# Propiedades
public $nombre;
# Métodos
public function set_usuario()
{
$this->nombre =
'Juan';
}
}
- Metáforas (comparación con la vida
real)
A fin de ejemplificar con facilidad un concepto
netamente teórico, se darán ejemplos utilizando
hechos de la vida cotideana, que puedan asemejarse al concepto
que se esté explicando. Estas metáforas, se
presentarán con un diseño como el
siguiente:
Esto es una
metáfora.
Si no tengo el ícono, soy un
ejemplo de la vida real, pero no soy una
metáfora.
- Sugerencias de estilo
A diferencia de otros lenguajes de programación
como Python, por ejemplo, PHP no tiene una guía de
prácticas recomendadas o sugerencias de estilo. Esto, hace
que muchas veces, cada programador le de al código fuente
un "toque" característico. Si bien es un rasgo de
personalidad tal vez admirable, en la práctica, provoca
que sea difícil modificar el código fuente escrito
previamente por otro programador.
A fin de proponer una alternativa para solucionar este
inconveniente y basándome en el principio de "propiedad
colectiva" de Extreme Programming así como en la
técnica de establecimiento de pautas de estilo que hagan
un código homogéneo, a lo largo del libro
iré sugiriendo algunas reglas de estilo
según surjan, cuyo finalidad tiende a:
hacer los códigos fuente más
intuitivos;escribir códigos fuente fácilmente
legibles.
Las Sugerencias de Estilo presenta un formato
similar al siguiente:
Reglas de estilo
sugeridas
Esto es una regla de estilo sugerida en
referencia al tema que se está tratando.
- Ejercicios de autoevaluación
Al final de los capítulos II y IV, hay una breve
serie de ejercicios, cuya finalidad, es la de asimilar los
conocimientos adquiridos en los capítulos anteriores. Las
soluciones a dichos ejercicios, se encuentran al final de cada
uno de ellos.
- Programación real
Tras los ejercicios presentados al finalizar los
capítulos II y IV, se podrá encontrar código
fuente de casos reales. Dichos códigos, pretenden dar al
lector, una noción más práctica de los temas
que se han tratado, aplicándola a la vida cotideana de un
desarrollador. Los encontrarás fácilmente
identificando el ícono de PHP como el que se muestra a la
izquierda de este párrafo.
- Respuestas a preguntas frecuentes
Aquí encontrarás todas las preguntas sobre
los códigos fuente que se encuentren en la sección
"programación real". Dicha sección, se encuentra
identificada con el icono que se muestra a la derecha de este
párrafo.
Hecha estas aclaraciones,
ahora…
¡A programar!
CAPÍTULO I
Introducción a la programación orientada a
objetos (POO)
La POO es un paradigma de programación (o
técnica de programación) que utiliza objetos e
interacciones en el diseño de un sistema.
Elementos de la POO
La POO está compuesta por una serie de elementos
que se detallan a continuación.
Clase
Una clase es un modelo que se utiliza para crear
objetos que comparten un mismo comportamiento, estado e
identidad.
Metáfora Persona es la metáfora | class Persona { # Propiedades # Métodos } |
Objeto
Es una entidad provista de métodos o
mensajes a los cuales responde (comportamiento); atributos con
valores concretos (estado); y propiedades (identidad).
$persona = new Persona();
/*
El objeto, ahora, es
$persona,
que se ha creado siguiendo el modelo de
la clase Persona
*/
Método
Es el algoritmo asociado a un objeto que indica
la capacidad de lo que éste puede hacer.
function caminar() {
#…
}
Evento y Mensaje
Un evento es un suceso en el sistema mientras que
un mensaje es la comunicación del suceso dirigida
al objeto.
Propiedades y atributos
Las propiedades y atributos, son variables que
contienen datos asociados a un objeto.
$nombre = 'Juan';
$edad = '25 años';
$altura = '1,75 mts';
Características conceptuales de la POO
La POO debe guardar ciertas características que
la identifican y diferencian de otros paradigmas de
programación. Dichas características se describen a
continuación.
Abstracción
Aislación de un elemento de su contexto. Define
las características esenciales de un objeto.
Encapsulamiento
Reúne al mismo nivel de abstracción, a
todos los elementos que puedan considerarse pertenecientes a una
misma entidad.
Modularidad
Característica que permite dividir una
aplicación en varias partes más pequeñas
(denominadas módulos), independientes unas de
otras.
Ocultación (aislamiento)
Los objetos están aislados del exterior,
protegiendo a sus propiedades para no ser modificadas por
aquellos que no tengan derecho a acceder a las mismas.
Polimorfismo
Es la capacidad que da a diferentes objetos, la
posibilidad de contar con métodos, propiedades y atributos
de igual nombre, sin que los de un objeto interfieran con el de
otro.
Herencia
Es la relación existente entre dos o más
clases, donde una es la principal (madre) y otras son secundarias
y dependen (heredan) de ellas (clases "hijas"), donde a la vez,
los objetos heredan las características de los objetos de
los cuales heredan.
Recolección de basura
Es la técnica que consiste en destruir aquellos
objetos cuando ya no son necesarios, liberándolos de la
memoria.
CAPÍTULO II
Programación Orientada a Objetos en PHP
5
En este capítulo veremos como aplicar los
conceptos de la POO en el entorno del lenguaje PHP 5+.
Clases y Objetos en PHP 5
Definición de Clases
Según el Manual Oficial de PHP, una
Clase es:
[…] "una colección de variables y
funciones que trabajan con estas variables. Las variables se
definen utilizando var y las funciones utilizando
function" […][5]
Para definir una clase, el Manual Oficial de PHP,
continúa diciendo:
[…] "La definición básica de
clases comienza con la palabra clave class, seguido por un nombre
de clase, continuado por un par de llaves que encierran las
definiciones de las propiedades y métodos pertenecientes a
la clase. El nombre de clase puede ser cualquier etiqueta
válida que no sea una palabra reservada de PHP. Un nombre
válido de clase comienza con una letra o un guión
bajo, seguido de la cantidad de letras, números o guiones
bajos que sea." […][6]
Veamos un ejemplo de class NombreDeMiClase #… } | Reglas de Estilo Utilizar CamelCase para el La llave de apertura en la misma |
Declaración de Clases abstractas
Las clases abstractas son aquellas que no necesitan
ser instanciadas pero sin embargo, serán heredadas
en algún momento. Se definen anteponiendo la palabra
clave abstract a class:
abstract class
NombreDeMiClaseAbstracta {
#…
}
Este tipo de clases, será la que contenga
métodos abstractos (que veremos más
adelante) y generalmente, su finalidad, es la de declarar clases
"genéricas" que necesitan ser declaradas pero a las
cuales, no se puede otorgar una definición precisa (de
eso, se encargarán las clases que la hereden).
Herencia de Clases
Los objetos pueden heredar propiedades y
métodos de otros objetos. Para ello, PHP permite la
"extensión" (herencia) de clases, cuya
característica representa la relación existente
entre diferentes objetos. Para definir una clase como
extención de una clase "madre" se utiliza la palabra clave
extends.
class NombreDeMiClaseMadre
{
#…
}
class NombreDeMiClaseHija
extends NombreDeMiClaseMadre {
/* esta clase hereda todos los
métodos y propiedades de
la clase madre
NombreDeMiClaseMadre
*/
}
Declaración de Clases finales En PHP
PHP 5 incorpora clases finales que no pueden ser
heredadas por otra. Se definen anteponiendo la palabra clave
final.
final class NombreDeMiClaseFinal
{
#esta clase no podrá ser
heredada
}
¿Qué tipo de clase declarar?
Hasta aquí, han quedado en claro, cuatro tipos de
clases diferentes: Instanciables, astractas,
heredadas y finales. ¿Cómo saber
qué tipo de clase declarar? Todo dependerá, de lo
que necesitemos hacer. Este cuadro, puede servirnos como
guía básica:
Necesito… | Instanciable | Abstracta | Heredada | Final | |||||
Crear una clase que pueda ser instanciada y/o | X | ||||||||
Crear una clase cuyo objeto guarda relación | X | ||||||||
Crear una clase que solo sirva de modelo para otra | X | ||||||||
Crear una clase que pueda instanciarse pero que no | X |
Objetos en PHP 5
Una vez que las clases han sido declaradas, será
necesario crear los objetos y utilizarlos, aunque hemos visto que
algunas clases, como las clases abstractas son solo modelos para
otras, y por lo tanto no necesitan instanciar al
objeto.
Instanciar una clase
Para instanciar una clase, solo es necesario utilizar la
palabra clave new. El objeto será creado,
asignando esta instancia a una variable (la cual, adoptará
la forma de objeto). Lógicamente, la clase debe haber sido
declarada antes de ser instanciada, como se muestra a
continuación:
# declaro la class Persona { #… } # creo el objeto instanciando la $persona = new Persona(); | Reglas de Estilo Utilizar nombres de variables |
Propiedades en PHP 5
Las propiedades representan ciertas
características del objeto en sí mismo. Se definen
anteponiendo la palabra clave var al nombre de la
variable (propiedad):
class Persona {
var $nombre;
var $edad;
var $genero;
}
Las propiedades pueden gozar de diferentes
características, como por ejemplo, la visibilidad: pueden
ser públicas, privadas o protegidas. Como
veremos más adelante, la visiblidad de las propiedades, es
aplicable también a la visibilidad de los
métodos.
Propiedades públicas
Las propiedades públicas se definen anteponiendo
la palabra clave public al nombre de la variable.
Éstas, pueden ser accedidas desde cualquier parte de la
aplicación, sin restricción.
class Persona {
public $nombre;
public $genero;
}
Propiedades privadas
Las propiedades privadas se definen anteponiendo la
palabra clave private al nombre de la variable.
Éstas solo pueden ser accedidas por la clase que las
definió.
class Persona {
public $nombre;
public $genero;
private $edad;
}
Propiedades protegidas
Las propiedades protegidas pueden ser accedidas por
la propia clase que la definió, así como por las
clases que la heredan, pero no, desde otras partes de la
aplicación. Éstas, se definen anteponiendo la
palabra clave protected al nombre de la
variable:
class Persona {
public $nombre;
public $genero;
private $edad;
protected $pasaporte;
}
Propiedades estáticas
Las propiedades estáticas representan una
característica de "variabilidad" de sus datos, de gran
importancia en PHP 5. Una propiedad declarada como
estática, puede ser accedida sin necesidad de
instanciar un objeto. y su valor es estático (es
decir, no puede variar ni ser modificado). Ésta, se define
anteponiendo la palabra clave static al nombre de
la variable:
class PersonaAPositivo
extends Persona {
public static $tipo_sangre =
'A+';
}
Accediendo a las propiedad de un objeto
Para acceder a las propiedad de un objeto, existen
varias maneras de hacerlo. Todas ellas, dependerán del
ámbito desde el cual se las invoque así como de su
condición y visibilidad.
Acceso a variables desde el ámbito de la
clase
Se accede a una propiedad no estática
dentro de la clase, utilizando la pseudo-variable
$this siendo esta pseudo-variable una referencia
al objeto mismo:
return $this->nombre;
Cuando la variable es estática, se accede
a ella mediante el operador de resolución de
ámbito, doble dos-puntos :: anteponiendo la palabra
clave self o parent según
si trata de una variable de la misma clase o de otra de la cual
se ha heredado, respectivamente:
print
self::$variable_estatica_de_esta_clase;
print
parent::$variable_estatica_de_clase_madre;
Acceso a variables desde el exterior de la
clase
Se accede a una propiedad no estática con
la siguiente sintáxis: $objeto->variable
Nótese además, que este acceso
dependerá de la visibilidad de la variable. Por lo tanto,
solo variables públicas pueden ser accedidas desde
cualquier ámbito fuera de la clase o clases
heredadas.
# creo el objeto instanciando la
clase
$persona_a_positivo = new
PersonaAPositivo();
# accedo a la variable NO
estática
print
$persona_a_positivo->nombre;
Para acceder a una propiedad pública y
estática el objeto no necesita ser
instanciado, permitiendo así, el acceso a dicha
variable mediante la siguiente sintáxis:
Clase::$variable_estática
# accedo a la variable
estática
print
PersonaAPositivo::$tipo_sangre;
Constantes de Clase
Otro tipo de "propiedad" de una clase, son las Puede declararse una constante de clase como | Reglas de Estilo Utilizar NOMBRE_DE_CONSTANTE |
const MI_CONSTANTE = 'Este es el valor
estático de mi constante';
Métodos en PHP 5
Cabe recordar, para quienes vienen de la | Reglas de Estilo Utilizar |
La forma de declarar un método es anteponiendo la
palabra clave function al nombre del
método, seguido por un par paréntesis de apertura y
cierre y llaves que encierren el algoritmo:
# declaro la clase
class Persona {
#propiedades
#métodos
function donar_sangre() {
#…
}
}
Al igual que cualquier otra función en PHP, los
métodos recibirán los parámetros necesarios
indicando aquellos requeridos, dentro de los
paréntisis:
# declaro la clase
class Persona {
#propiedades
#métodos
function donar_sangre($destinatario)
{
#…
}
}
Métodos públicos, privados, protegidos y
estáticos
Los métodos, al igual que las propiedades, pueden
ser públicos, privados, protegidos o
estáticos. La forma de declarar su visibilidad
tanto como las características de ésta, es
exactamente la misma que para las propiedades.
static function a() { }
protected function b() {
}
private function c() { }
# etc…
Métodos abstractos
A diferencia de las propiedades, los métodos,
pueden ser abstractos como sucede con las
clases.
El Manual Oficial de PHP, se refiere a los
métodos abstractos, describiéndolos de la siguiente
forma:
[…] "Los métodos definidos como
abstractos simplemente declaran la estructura del método,
pero no pueden definir la implementación. Cuando se hereda
de una clase abstracta, todos los métodos definidos como
abstract en la definición de la clase parent deben ser
redefinidos en la clase child; adicionalmente, estos
métodos deben ser definidos con la misma visibilidad (o
con una menos restrictiva). Por ejemplo, si el método
abstracto está definido como protected, la
implementación de la función puede ser redefinida
como protected o public, pero nunca como private."
[…][7]
Para entender mejor los métodos abstractos,
podríamos decir que a grandes rasgos, los
métodos abstractos son aquellos que se declaran
inicialmente en una clase abstracta, sin especificar el algoritmo
que implementarán, es decir, que solo son declarados
pero no contienen un "código" que específique
qué harán y cómo lo harán.
Tal vez, te preguntes ¿Cuál es la
utilidad de definir métodos abstractos y clases
abstractas? Para responder a esta pregunta, voy enfocarme en
un caso de la vida real, en el cual estuve trabajando hace poco
tiempo.
Ejemplo
Se trataba de hacer un sistema de gestión
informática, para las farmacias de los Hospitales del
Gobierno de la Ciudad de Buenos Aires. Un punto fundamental, era
pensar en los insumos farmacéuticos como "un todo
abstracto". ¿Por qué? Fundamentalmente, porque si
bien existen insumos farmacéuticos de todo tipo y especie,
cada uno de ellos, comparte características comunes, que
por sí solas no pueden definirse con precisión. Por
ejemplo, todos los insumos farmacéuticos requieren de un
tipo de conservación especial. Algunos requieren
refrigeración a determinada temperatura que solo puede ser
satisfecha conservándolos en una heladera; otros requieren
conservarse en un ambiente seco; otros, no pueden tomar contacto
con el exterior, a fin de conservar su capacidad estéril;
etc. ¿Podía definirse con exactitud una clase
Insumo? La respuesta a esa pregunta, es justamente su pregunta
retórica ¿irías a la farmacia a pedirle al
farmacéutico "deme un insumo de 500 mg"? Insumo,
representa la entidad "abstracta" y para eso, sirven las clases
abstractas. Con ellas declaramos aquellos "objetos" que no pueden
ser definidos con presición pero aseguramos allí,
todas aquellas características que dichos objetos,
guardarán entre sí. Declarar un método
conservar_insumo() como abstracto, serviría para luego
definir con exactitud, en una clase heredada, el algoritmo exacto
que determinado insumo necesitaría para procesar su
conservación. Es así entonces, que una clase
InsumoRefrigerado heredaría de Insumo, y
redefiniría el método conservar_insumo() indicando
un algoritmo que solicitara la temperatura a la cual debía
conservarse en heladera, etc.
Métodos mágicos en PHP 5
PHP 5, nos trae una gran cantidad de auto-denominados
"métodos mágicos". Estos métodos,
otorgan una funcionalidad pre-definida por PHP, que pueden
aportar valor a nuestras clases y ahorrarnos grandes cantidades
de código. Lo que muchos programadores consideramos, ayuda
a convertir a PHP en un lenguaje orientado a objetos, cada vez
más robusto.
Entre los métodos mágicos, podemos
encontrar los siguientes:
- El Método Mágico __construct()
El método __construct() es aquel que será
invocado de manera automática, al instanciar un objeto. Su
función es la de ejecutar cualquier inicialización
que el objeto necesite antes de ser utilizado.
# declaro la clase
class Producto {
#defino algunas
propiedades
public $nombre;
public $precio;
protected $estado;
#defino el método
set_estado_producto()
protected function
set_estado_producto($estado) {
$this->estado = $estado;
}
# constructor de la
clase
function __construct() {
$this->set_estado_producto('en
uso');
}
}
En el ejemplo anterior, el constructor de la clase se
encarga de definir el estado del producto como "en uso", antes de
que el objeto (Producto) comience a utilizarse. Si se agregaran
otros métodos, éstos, podrán hacer
referencia al estado del producto, para determinar si ejecutar o
no determinada función. Por ejemplo, no podría
mostrarse a la venta un producto "en uso por el sistema", ya que
a éste, se le podría estar modificando el
precio.
- El método mágico __destruct()
El método __destruct() es el encargado de liberar
de la memoria, al objeto cuando ya no es referenciado. Se puede
aprovechar este método, para realizar otras tareas que se
estimen necesarias al momento de destruir un objeto.
# declaro la clase
class Producto {
#defino algunas
propiedades
public $nombre;
public $precio;
protected $estado;
#defino el método
set_estado_producto()
protected function
set_estado_producto($estado) {
$this->estado = $estado;
}
# constructor de la
clase
function __construct() {
$this->set_estado_producto('en
uso');
}
# destructor de la
clase
function __destruct() {
$this->set_estado_producto('liberado');
print 'El objeto ha sido
destruido';
}
}
- Otros métodos mágicos
PHP nos ofrece otros métodos mágicos tales
como __call, __callStatic, __get, __set, __isset, __unset,
__sleep, __wakeup, __toString, __invoke, __set_state y
__clone.
Puede verse una descripción y ejemplo de su uso,
en el sitio Web oficial de PHP:
http://www.php.net/manual/es/language.oop5.magic.php
Ejercicios Prácticos
Para practicar lo que hemos visto hasta ahora, les
propongo hacer algunos ejercicios, a fin de asimilar los
conocimientos de los capítulos I y II.
Ejercicio Nº1: Sobre la programación
orientada a objetos
1.1) ¿Qué es la Programación
Orientada a Objetos?
a) Un patrón de diseño de
software
b) Un paradigma de
programación
c) La única forma en la que se puede
programar en PHP
d) Ninguna de las anteriores
1.2) ¿Cuál de las
siguientes opciones, responde mejor a los elementos que forman
parte de la POO?
a) Clases, objetos, métodos, atributos y
propiedades
b) Atributos, eventos y funciones
c) Métodos, inmutabilidad,
abstracción, funciones y prototipos
e) Variables, constantes y funciones
1.3) ¿Cuál de las
siguientes afirmaciones es FALSA con respecto a las
características de la POO?
a) La abstracción y el
polimorfismo son característica esenciales de la
programación orientada a objetos
b) Encapsulamiento es sinónimo
de aislamiento
c) En la POO, la modularidad, es la
característica que permite dividir una aplicación,
en partes más pequeñas, con independencia unas de
las otras
Ejercicio Nº2: Sobre la POO en
PHP
2.1) Dado el siguiente
código:
¿Qué crees que fallaría al
intentar ejecutarlo?
a) ItemProducto fallará ya que
está heredando de otra clase
b) No fallaría
nada
c) Producto no puede heredar de
ItemProducto ya que esta clase ha sido declarada como clase
final
2.2) ¿Cuál crees que será la
salida del siguiente código?
a) Cliente desconocido
1001
b) Cliente desconocido
c) Se imprimiría Cliente
desconocido pero fallaría luego el acceso a $id ya que es
una propiedad protegida
2.3) ¿Cuál crees que será la
salida del siguiente código?
a) Cliente desconocido
b) Juan Pérez
Explica porqué has elegido
esa respuesta:
2.4) Teniendo en cuenta el siguiente
código:
¿Cuál de las
siguientes opciones, estimas que sería la apropiada para
imprimir en pantalla, la propiedad
"nombre_completo"
a) print
Cliente::nombre_completo;
b) print
Cliente::$nombre_completo;
c) $cliente = new
Cliente();
print
$cliente->nombre_completo;
d) $cliente = new
Cliente();
print
$cliente->$nombre_completo;
Soluciones a los ejercicios 1 y 2
Ejercicio Nº1
Pregunta 1.1: respuesta b
Pregunta 1.2: respuesta a
Pregunta 1.3: respuesta b
Ejercicio Nº2
Pregunta 2.1: respuesta c
Pregunta 2.2: respuesta c
Pregunta 2.3: respuesta a
porque a las propiedades estáticas no se les
puede modificar su valor
Pregunta 2.4: respuesta b
Programación Real Orientada a Objetos en
PHP
Veremos ahora, un ejemplo basado en la
realidad de un programador.
En este caso, se trata de un ABM de
usuarios.
Nótese que los
métodos respectivos han sido resumidos no
encontrándose en éstos, algoritmos de
validación de datos. Se ejemplifica todo aquello que es
relevante en la POO.
Archivos fuente del ABM de Usuarios
Archivo db_abstract_model.php
Archivo usuarios_model.php
Archivo abm_example.php
Explicando el código en el contexto de la POO: La
mejor forma de aprender y comprender
En principio tenemos 3 archivos:
2 archivos son "clases" de dos modelos de
objetos.1 archivo, es el que realiza las
instancias creando la cantidad de objetos
necesaria.
Respuestas a Preguntas Frecuentes sobre el
código
- 1. Respuestas a preguntas frecuentes de la clase
DBAbstractModel
1.1 ¿Por qué la clase
está definida como abstracta?
Una base de datos, puede tener varios métodos,
como insertar datos, editar datos, eliminar datos o
simplemente consultar datos. El algoritmo de cada
uno de esos métodos no puede definirse con
exactitud ¿por qué? Porque cada dato que se
inserte, modificque, elimine o consulte, variará en
infinidad de aspectos: desde los tipos de datos hasta las tablas
y los campos a los que se deba acceder, etc.
Basados en el principio de modularidad de la POO,
es necesario tener en cuenta, que HOY, necesito un ABM de
usuarios, pero mañana, este requisito puede ampliarse y,
debo dejar todo preparado para que el sistema pueda ser
escalable y modular (otros módulos pueden
ser requeridos en el futuro).
Si solo contemplara los métodos de
inserción, edición, consulta y eliminación
de usuarios en esta clase, estaría cometiendo dos
errores imperdonable:
No estaría respetando el principio de
modularidad de la POOLos métodos mencionados ¿no son a caso
métodos de un nuevo objeto llamado Usuario?
Página siguiente |