Você está na página 1de 0

Lenguaje PHP 5

POO: Clases y Objetos


Profesor: Andrs Guzmn F.
Nuestros Principios como
Desarrolladores
Peor que usar un mal estndar o un estndar
incorrecto es no seguir ninguno, de la misma forma,
no tener ningn criterio para enfrentar los desarrollos.
Para aumentar la productividad, tanto individualmente
como en equipo, debemos siempre seguir estndares
y fijar criterios.
La sencillez es la mejor
arquitectura
Los objetos como concepto -fuera de la informtica- existen desde
antes de la programacin (obviamente).
Qu es lo que intenta hacer entonces la Programacin Orientada a
los Objetos (POO)?
Lisa y llanamente intentar simplificar la complejidad (simplificar las
abstracciones) y tratar de representar de forma simple lo que vemos y
manejamos todos los das los objetos que nos rodean.
Entonces, la Programacin Orientada a Objetos no es ms que eso,
detectar los objetos existentes en nuestro contexto y construirlos,
dndoles un comportamiento y que estos sepan solos cmo reaccionar
ante la interaccin con otros objetos (ms adelante a esa actividad le
llamaremos diseo).
Nada ms y nada menos... y hemos logrado empezar a hablar del
tema sin mostrar -hasta el momento - una sola lnea de cdigo
Nuestros Principios
RTFM: Lee el Maldito Manual
RTFM es una sigla que significa lee el maldito manual, algo muy
usado en los foros como respuesta hacia los novatos que lo ltimo que
hacen es leerlos (lamentablemente *todo* se encuentra ah)
http://es.wikipedia.org/wiki/RTFM
Nuestros Principios
DRY: No Te Repitas
No te repitas significa algo muy simple: si cuando desarrollas ves que
al programar copias un cdigo para pegarlo en otro lado, es muy
probable que ests haciendo algo mal, ya que ese cdigo debera
estar aislado y ser usado de a travs de parmetros.
Generalmente no existe razn para tener que duplicar el cdigo, si
estamos muy apurados, seguro, lo pagaremos muy caro dentro de
poco
http://es.wikipedia.org/wiki/DRY
Nuestros Principios
KISS: Mantenlo Simple
Hay una frase que dice la mejor arquitectura es la sencillez. La
sencillez es escalable, si resolvemos pequeos problemas y luego los
unimos, ser ms fcil que hacer un sistema complejo de entrada.
http://es.wikipedia.org/wiki/Principio_KISS
Nuestros Principios
ZEND: Estndar de Codificacin PHP
El lenguaje PHP y su comunidad, por aos, no ha tenido ningn
referente nico para seguir un estndar, por consiguiente los
desarrolladores usan o inventan el que ms le quede cmodo.
En la actualizada la empresa Zend Technologies, creadora de PHP y
Zend Framework, ha tomado cada vez ms protagonismo
(principalmente por su framework), por lo que debera ser de ahora en
ms nuestra referencia a seguir.
Evita crear un estndar propio, usa el definido por Zend.
http://framework.zend.com/manual/en/coding-standard.html
Simplicidad
"Un sistema complejo que funciona resulta
invariablemente de la evolucin de un sistema simple
que funcionaba. Un sistema complejo diseado
desde cero nunca funciona y no puede ser arreglado
para que funcione. Tienes que comenzar de nuevo
con un sistema simple que funcione." John Gall
Caractersticas de la POO
Abstraccin
Encapsulamiento
Principio de ocultacin
Polimorfismo
Herencia

Caractersticas de la POO
Abstraccin
Denota las caractersticas esenciales de un objeto, donde se capturan
sus comportamientos.
Cada objeto en el sistema sirve como modelo de un "agente" abstracto
que puede realizar trabajo, informar y cambiar su estado, y
"comunicarse" con otros objetos en el sistema sin revelar cmo se
implementan estas caractersticas.
Se refiere al nfasis en el "qu hace?" ms que en el "cmo lo
hace?"

Caractersticas de la POO
Encapsulamiento
Significa reunir a todos los elementos que pueden considerarse
pertenecientes a una misma entidad, al mismo nivel de abstraccin.
Cada objeto es nico y diferenciable de los dems.
Esto permite aumentar la cohesin de los componentes del sistema.
Algunos autores confunden este concepto con el principio de
ocultacin, principalmente porque se suelen emplear conjuntamente.

Caractersticas de la POO
Principio de ocultacin
Cada objeto est aislado del exterior.
Cada tipo de objeto expone una interfaz a otros objetos que especifica
cmo pueden interactuar con los objetos de la clase.
El aislamiento protege a las propiedades de un objeto contra su
modificacin por quien no tenga derecho a acceder a ellas, solamente
los propios mtodos internos del objeto pueden acceder a su estado.
Esto asegura que otros objetos no pueden cambiar el estado interno
de un objeto de maneras inesperadas, eliminando efectos secundarios
e interacciones inesperadas.

Caractersticas de la POO
Polimorfismo
Comportamientos diferentes, asociados a objetos distintos
Muchas formas posibles en la jerarqua de objetos
Lo vemos en la herencia e interfaces
Sobre escritura de mtodos.

Caractersticas de la POO
Herencia
Las clases no estn aisladas, sino que se relacionan entre s,
formando una jerarqua de clasificacin.
Los objetos heredan las propiedades y el comportamiento de todas las
clases a las que pertenecen.
La herencia facilita el polimorfismo y el encapsulamiento permitiendo a
los objetos ser definidos y creados como tipos especializados de otros
objetos.
Estos pueden compartir (y extender) su comportamiento sin tener que
volver a implementarlo..
Cuando un objeto hereda de ms de una clase se dice que hay
herencia mltiple
Tipos de entidades OO
Clases y Objetos
Interfaces
Tipos de entidades
Clases y Objetos

La POO es un paradigma que tiene sus orgenes desde antes de 1990
(a partir de este ao se empieza a popularizar).
Por lo tanto no es ninguna excusa (menos como Desarrollador PHP)
seguir a la fecha desconociendo cmo trabajar con POO.
La programacin orientada a objetos expresa un programa como un
conjunto de estos objetos, que colaboran entre ellos para realizar
tareas.
Esto permite hacer los programas y mdulos ms fciles de escribir,
mantener y reutilizar.

Tipos de entidades
Clases y Objetos

Una CLASE es un proyecto, o prototipo, que define las variables y los
mtodos comunes a un cierto tipo de objetos.
Son las plantillas de las que luego se pueden crear mltiples objetos
del mismo tipo
Cada objeto tendr sus propios valores y compartirn las mismas
funciones.
Los objetos son entidades que combinan estado (los datos),
comportamiento e identidad nica que lo diferencia del resto.
De esta forma, un objeto contiene toda la informacin que permite
definirlo e identificarlo frente a otros objetos pertenecientes a otras
clases e incluso frente a objetos de una misma clase
Primero deberemos crear una clase antes de poder crear objetos o
ejemplares de esa clase.
Tipos de entidades
Declarar una Clase
Como mnimo, la declaracin de una clase debe
contener la palabra clave class y el nombre de la clase
que est definiendo.
El nombre de la clase no puede llamarse igual que una
palabra reservada del lenguaje.
La implementacin de una clase comprende dos
componentes: la declaracin y el cuerpo de la clase.
Por convencin, deben empezar por una letra
mayscula y debe ser llamada igual que el nombre de su
archivo.

Complejidad
"La complejidad es destructiva. Absorbe la sangre de los
desarrolladores, hace que los productos sean difciles de
planificar, construir y probar, introduce problemas de
seguridad y provoca la frustracin de usuarios finales y
administradores" -- Ray Ozzie
Tipos de entidades
Declarar una Clase
Muchas veces, todo lo que se necesitar ser una
declaracin mnima.
Sin embargo, la declaracin de una clase puede decir
ms cosas sobre la clase.
En PHP, todas las clases pueden tener una superclase.
Una clase puede heredar mtodos y miembros de otra
clase utilizando la palabra reservada extends en su
declaracin
Ms especficamente, dentro de la declaracin de la
clase se puede.
declarar cual es la superclase de la clase.
listar los interfaces implementados por la clase
declarar si la clase es abstracta o final
Tipos de entidades
Modificadores de las Clase
Se puede utilizar uno de estos dos modificadores en una declaracin
de clase para declarar que esa clase es abstracta o final.
Los modificadores van delante de la palabra clave class y son
opcionales.
El modificador abstract declara que la clase es una clase abstracta.
Una clase abstracta podra contener mtodos abstractos (mtodos sin
implementacin).
Una clase abstracta est diseada para ser una superclase y no
puede ejemplarizarse.
Utilizando el modificador final se puede declarar que una clase es
final, que no puede tener subclases.
Existen (al menos) dos razones por las que se podra querer hacer
esto: razones de seguridad y razones de diseo.

Tipos de entidades
Sumario de la Declaracin de una Clase
En suma, una declaracin de clase se parecera a esto:


Modificadores declaran si la clase es abstracta o final.
NombredeClase selecciona el nombre de la clase que est
declarando comenzando con mayscula
NombredeSuperClase es el nombre de la superclase de
NombredeClase
NombredeInterface es una lista delimitada por comas de los
interfaces implementados por NombredeClase
De todos estos tems, slo la palabra clave class y el nombre de la
clase son necesarios. Los otros son opcionales
Tipos de entidades
Cuerpo de una Clase
La pgina anterior describe todos los componentes de la declaracin de una
clase. Esta pgina describe la estructura general y la organizacin del cuerpo de
la clase.
El cuerpo de la clase compone la implementacin de la propia clase y contiene
dos secciones diferentes:
la declaracin de variables
y la de mtodos
Una variable miembro de la clase representa un estado de la clase
Sus mtodos implementa el comportamiento de la clase.
Deficiencias
"Hay dos maneras de disear software:
una es hacerlo tan simple que sea obvia
su falta de deficiencias, y la otra es hacerlo
tan complejo que no haya deficiencias
obvias" -- C.A.R. Hoare
Tipos de entidades
Cuerpo de una Clase
Dentro del cuerpo de la clase se definen todas las variables miembro y los
mtodos soportados por la clase.
Tpicamente, primero se declaran las variables miembro de la clase y luego se
proporcionan las declaraciones e implementaciones de los mtodos, aunque este
orden no es necesario.
Tpicamente, y como un estndar en Zend los nombres de los mtodos y
miembros/variables comienzan con minscula.
En las Clases el tag ?>de cierre no va (Estndar Zend)
Tipos de entidades
Cuerpo de una Clase
Como estndar en PHP5 y Zend los nombres de clase siempre comienzan con
mayscula, mientras que los nombre de variables y mtodos comienzan en
minscula.
Cuando son nombres compuesto se debe separar con una letra Mayscula en la
primera letra de la palabra compuesta
El estilo de escritura de palabra compuesta se le conoce con el nombre
CamelCase
De esta forma el nombre de una clase podra ser MiClaseDeUpperCamelCase y
de un mtodo o variable miMetodoDeLowerCamelCase()
El nombre del archivo php de la clase se tiene que llamar de la misma manera
que el nombre de la misma clase que la contiene.
Siempre debe haber una clase por archivo.
Tipos de entidades
Cuerpo de una Clase
Los atributos son siempre protegidos o privados y se acceden/modifican mediante
los mtodos getter/setter. Ej getNombre(). Uno de los principios bsico de
Programacin orientada a objetos "Principio de ocultacin
Adems de las variables miembro y los mtodos que se declaran explcitamente
dentro del cuerpo de la clase, una clase puede heredar algo de su superclase.
Tipos de entidades
Declarar Variables de una Clase
Como mnimo, una declaracin de variable miembro tiene dos componentes: el
modificador de acceso y el nombre de la variable
Por convencin empieza con una letra minscula
J unto con el nombre, se pueden especificar la visibilidad de la variable, tipos de
acceso son public, private o protected
En general los atributos private y protected siempre inician con "_" (underscore)
Adems especificar si la variable es una variable de clase o una variable de
ejemplar, y si la variable es una constante.
Una declaracin de variable miembro define los siguientes aspectos de la variable
especificadordeAcceso define si otras clases tienen acceso a la variable
static indica que la variable es una variable miembro de la clase en oposicin
a una variable miembro del ejemplar
const indica que la variable es una constante
Tipos de entidades
Declarar Variables de una Clase
Piramide
"Mucho software hoy da es en cierta
medida como una pirmide egipcia con
millones de piedras apiladas una encima
de otra, sin integridad estructural,
construido por fuerza bruta y miles de
esclavos."
Por Alan Kay (cientfico de la computacin)
Tipos de entidades
Implementar Mtodos
La implementacin de un mtodo consiste en dos partes, la declaracin y el
cuerpo del mtodo.
Los nicos elementos necesarios para una declaracin de mtodo son el nombre
y el tipo de modificador de acceso o visibilidad
Respecto a la visibilidad del mtodo, los tipos de acceso son public, private o
protected
J unto con el nombre del mtodo y el modificador, la declaracin lleva informacin
como el nmero y el tipo de los argumentos
Los mtodos utilizan el operador return para devolver un valor. Todo mtodo que
no sea declarado como void debe contener una sentencia return
Por convencin empieza con una letra minscula
En general los mtodos private y protected siempre inician con "_" (underscore)


Tipos de entidades
Mtodos Abstractos y Finales
Una clase abstracta puede contener mtodos abstractos, esto es, mtodos que no
tienen implementacin
De esta forma, una clase abstracta puede definir un interface de programacin
completo, incluso porporciona a sus subclases la declaracin de todos los
mtodos necesarios para implementar el interface de programacin
Tipos de entidades
El Cuerpo de un Mtodo
J unto a los elementos normales del lenguaje, se puede utilizar this en
el cuerpo del mtodo para referirse a los miembros del objeto actual.
Tambin se puede utilizar parent para referirse a los miembros y
mtodos de la superclase que el objeto actual haya ocultado mediante
la sobre escritura.
Un cuerpo de mtodo tambin puede contener declaraciones de
variables que son locales de ese mtodo
Tambin se puede utilizar this para llamar a uno de los mtodos del
objeto actual.
Tipos de entidades
Constructor
Los constructores se utilizan para inicializar el objeto.
Cuando se crea un objeto (se instancia una clase) es posible definir un proceso de
inicializacin que prepare el objeto para ser usado.
Esta inicializacin se lleva a cabo invocando un mtodo especial denominado
constructor.
El constructor en PHP5 se escribe como : __construct
Esta invocacin es implcita y se realiza automticamente cuando se utiliza el
operador new.
Los constructores slo pueden ser llamados con el operador new
Puede recibir cualquier nmero de argumentos de cualquier tipo, como cualquier
otro mtodo.
No devuelve ningn valor (void).
El constructor no es un miembro ms de una clase. Slo es invocado cuando se
crea el objeto (con el operador new).
No puede invocarse explicitamente en ningn otro momento.
Si no se define explcitamente uno, PHP5 crea uno por defecto, sin argumentos.
Tipos de entidades
Constructor
Cuando se instancia
un objeto, se tienen
que realizar varios
pasos en su
inicializacin, por
ejemplo dar valores
a sus atributos, abrir
una conexin a la
base de datos etc.
Tipos de entidades
Destructor
Tambin tenemos a los destructores: __destruct
Los destructores son funciones que se encargan de realizar las tareas que se
necesita ejecutar cuando un objeto deja de existir.
Cuando un objeto ya no est referenciado por ninguna variable, deja de tener
sentido que est almacenado en la memoria, por tanto, el objeto se debe destruir
para liberar su espacio.
En el momento de su destruccin se llama a la funcin destructor, que puede
realizar las tareas que el programador estime oportuno realizar.
La creacin del destructor es opcional.
Slo debemos crearlo si deseamos hacer alguna cosa cuando un objeto se
elimine de la memoria.
Depurar Cdigo
"Depurar cdigo es dos veces ms difcil que escribir
cdigo, por lo tanto si escribes el cdigo tan
inteligentemente como te sea posible, por definicin
no sers lo suficientemente inteligente como para
depurarlo"
Tipos de entidades
Sobrescritura
Una clase puede sobrescribir un mtodo de sus superclases.
El mtodo que sobrescribe debe tener el mismo, nombre, tipo de retorno y lista de
parmetros que el mtodo al que ha sobrescrito
La sobrescritura de mtodos es algo bastante comn en mecanismos de herencia,
puesto que los mtodos que fueron creados para una clase "padre" no tienen por
qu ser los mismos que los definidos en las clases que heredan.
Polimorfismo puro, comportamientos diferentes, asociados a objetos distintos.
Regla
"Medir el progreso de programacin en
lneas de cdigo es como medir el
progreso de construccin de un avin en
peso"
Bill Gates
Modificadores
De acceso
Uno de los benficos de las clases es que pueden proteger sus variables y
mtodos miembros frente al acceso de otros objetos.
En PHP5 se pueden utilizar los especificadores de acceso para proteger
tanto las variables como los mtodos de la clase cuando se declaran.
Soporta tres niveles de acceso para las variables y mtodos miembros:
private, protected y public.
Public: Todo el mundo puede acceder al elemento. Si es un un dato
miembro todos pueden ver el elemento, usarlo y modificarlo.
Private: Solo se puede acceder desde los mtodos de la clase, es decir,
solo puede invocarse el mtodo desde otro mtodo de la clase.
Protected: Slo se puede acceder la misma clase y sus hijas, las que la
heredan.
Modificadores
De acceso
La primera columna indica si la propia clase tiene acceso al miembro
definido por el especificador de acceso.
La segunda columna indica si las subclases de la clase tienen acceso a
los miembros.
La cuarta columna indica si todas las clases tienen acceso a los miembros.
Modificadores
Los mtodos "getter / setter" o "accesores"
Ahora bien, si queremos que el "estudiante" no pueda modificar nuestros
datos, podemos pasar a colocar todos los atributos como "private":





Listo, ahora cuando el "estudiante" quiera ver o modificar un atributo, el
sistema le enviar un error. El problema ahora es que nosotros
queremos que:
1. La edad se pueda saber y cambiar en todo momento.
2. Se pueda saber el nombre del usuario, pero no modificarlo
3. No nos interesa que se sepa el nombre real del mismo
4. Pero queremos que pueda colocar una nueva clave si el usuario se la
olvida, pero no saber la que existe actualmente
Cmo se hace entonces?




VEAMOS UN EJ EMPLO
Modificadores
Los mtodos "getter / setter" o "accesores"
Por un tema de principios de la POO los atributos de los objetos deben ser
siempre "privados" (concepto "encapsulacin": no son accesibles desde
fuera del objeto, solo el objeto tiene la potestad de usarlos directamente) y
se debern crear mtodos pblicos que sustituya una u otra operacin, o
ambas, cada vez que la situacin lo amerite:
un mtodo " setter" para " cargar un valor" (asignar un valor a una
variable)
un mtodo " getter" para " retornar el valor" (solo devolver la
informacin del atributo para quin la solicite).
Veamos cmo se resuelve, paso a paso.



Modificadores
Los mtodos "getter / setter" o "accesores"
La edad se puede acceder y modificar en todo momento, por consiguiente
se deben agregar los dos mtodos, un "get" y un "set" para ese atributo
Poder saber el nombre del usuario pero no modificarlo, para eso hay que
agregar solo un mtodo get para ese atributo
No nos interesa que se sepa el nombre real del usuario. Lo dejamos como
est y queda inaccesible desde fuera del objeto.
Queremos que pueda colocar una nueva clave si el usuario se la olvida,
pero no saber la que existe actualmente. Para eso, hacemos lo contrario
que con el atributo nombre, agregamos un mtodo "set" pero no el "get"


Modificadores
Los mtodos "getter / setter" o "accesores"
Pronto, usando simples mtodos podemos reforzar el diseo de nuestro
objeto, restringiendo segn nuestra necesidad el acceso a sus atributos.

Modificadores
Final, Static, Abstract
Final: En un atributo: no modificable->Contante. En un mtodo no se
puede sobrescribir en un heredero. En una clase no se puede heredar
Static: Pertenece a la clase no a la instancia. Se puede acceder a el sin
necesidad de crear un objeto concreto
Abstract: Permite declarar una clase abstracta. Si la clase contiene al
menos un metodo abstracto, ella se debe declarar como abstracta

VEAMOS UN EJ EMPLO DE MIEMBRO ESTATICO
Modificadores
Final, Static, Abstract
CLASE USUARIO
Deficiencias II
"Hay dos formas de disear software: la
primera es hacerlo tan simple que
obviamente no hay deficiencias y la
segunda es hacerlo tan complicado que no
hay deficiencias obvias. La primera forma
es mucho ms difcil.".
C.A.R. Hoare
Estndar PHP Class
stdClass
stdClass es una clase que como su propio significado dice, nos
permite crear objetos estndar
De tal modo que podamos tratar una variable como un objeto y
asignarle valores, borrarlos (unset).
No tiene atributos ni mtodos propios, tampoco hereda alguna clase ni
implementa interfaces.
Se puede definir una clase que extiende stdClass, pero no tiene ningn
beneficio, ya que stdClass no hace nada.
VEAMOS UN EJ EMPLO
Estndar PHP Class
Ejemplo

Você também pode gostar