Monografias.com > Computación > Programación
Descargar Imprimir Comentar Ver trabajos relacionados

El paradigma de la Programación Orientada a Objetos en PHP y el patrón de arquitectura de Software MVC




Enviado por Eugenia Bahit



Partes: 1, 2

  1. Antes de comenzar
    con el libro
  2. Introducción
    a la programación orientada a objetos
    (POO)
  3. Programación
    orientada a objetos en PHP 5
  4. Introducción
    al patrón arquitectónico MVC
  5. El patrón
    MVC en PHP

Monografias.com

Monografias.com

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
    objetos

  • Se 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 FDW

  • y 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ón

  • programación real (ejemplos con
    códigos fuente reales)

  • preguntas a respuestas frecuentes

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.

Monografias.com

  • 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.

Monografias.com

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
de una clase (la abstracción de Juan, Pedro, Ana y
María), cuyo comportamiento puede ser caminar,
correr, estudiar, leer, etc. Puede estar en estado
despierto, dormido, etc. Sus características
(propiedades) pueden ser el color de ojos, color de pelo,
su estado civil, etc.

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
definición de clase:

class NombreDeMiClase
{

#…

}

Reglas de Estilo
sugeridas

Utilizar CamelCase para el
nombre de las clases.

La llave de apertura en la misma
línea
que el nombre de la clase, permite una
mejor legibilidad del código.

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
heredada

X

Crear una clase cuyo objeto guarda relación
con los métodos y propiedades de otra
clase

X

Crear una clase que solo sirva de modelo para otra
clase, sin que pueda ser instanciada

X

Crear una clase que pueda instanciarse pero que no
pueda ser heredada por ninguna otra clase

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
clase

class Persona {

#…

}

# creo el objeto instanciando la
clase

$persona = new Persona();

Reglas de Estilo
sugeridas

Utilizar nombres de variables
(objetos) descriptivos, siempre en letra minúscula,
separando palabras por guiones bajos. Por ejemplo si el
nombre de la clase es NombreDeMiClase como variable
utilizar $nombre_de_mi_clase. Esto permitirá
una mayor legibilidad del código.

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
constantes, aquellas que mantienen su valor de forma
permanente y sin cambios
. A diferencia de las
propiedades estáticas, las constantes solo pueden
tener una visibilidad pública
.

Puede declararse una constante de clase como
cualquier constante normal en PHP 5. El acceso a constantes
es exactamente igual que al de otras
propiedades.

Reglas de Estilo
sugeridas

Utilizar NOMBRE_DE_CONSTANTE
en letra MAYÚSCULA, ayuda a diferenciar
rápidamente constantes de variables, haciendo
más legible el código.

const MI_CONSTANTE = 'Este es el valor
estático de mi constante';

Métodos en PHP 5

Cabe recordar, para quienes vienen de la
programación estructurada, que el método de
una clase, es un algoritmo igual al de una función.
La única diferencia entre método y
función, es que llamamos método a las
funciones de una clase
(en la POO), mientras que
llamamos funciones, a los algoritmos de la
programación estructurada.

Reglas de Estilo
sugeridas

Utilizar
nombres_de_funciones_descriptivos, en letra
minúscula, separando palabras por guiones bajos,
ayuda a comprender mejor el código fuente
haciéndolo más intuitivo y
legible.

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.

Monografias.com

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

Monografias.com

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 POO

  • Los métodos mencionados ¿no son a caso
    métodos de un nuevo objeto llamado Usuario?

Partes: 1, 2

Página siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter