PHP5-POO I

42
 Lenguaje PHP 5 POO I Profesor: Andrés Guzmán F.

Transcript of PHP5-POO I

Lenguaje PHP 5 POO I

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 PrincipiosRTFM: 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 PrincipiosDRY: 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 PrincipiosKISS: 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 PrincipiosZEND: 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 ocultacinPolimorfismo Herencia

Caractersticas de la POOAbstraccin

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 POOEncapsulamiento

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 POOPrincipio 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 POOPolimorfismo

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 POOHerencia

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 ObjetosInterfaces

Tipos de entidadesClases 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 entidadesClases 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 tipoCada 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 entidadesDeclarar 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 entidadesDeclarar 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 entidadesModificadores 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 entidadesSumario 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 entidadesCuerpo 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 entidadesCuerpo 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 entidadesCuerpo 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 entidadesCuerpo 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 entidadesDeclarar 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

Junto con el nombre, se pueden especificar la visibilidad de la variable, tipos de acceso son public, private o protectedEn 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 entidadesDeclarar 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 entidadesImplementar 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 Junto 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 entidadesMtodos 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 entidadesEl Cuerpo de un Mtodo

Junto 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 entidadesConstructor

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 newPuede 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 entidadesConstructorCuando 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 entidadesDestructor

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 entidadesSobrescritura

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.

Clase Abstracta

Algunas veces, una clase que se ha definido representa un concepto abstracto y como tal, no debe ser ejemplarizado.Es decir cuando se desarrolla un jerarqua de clases en que algn comportamiento est presente en todas ellas peo se materializa de distintas formas para cada una. Por ejemplo, la comida en la vida real. Has visto algn ejemplar de comida? No. Lo que has visto son ejemplares de manzanas, pan, y chocolate. Comida representa un concepto abstracto de cosas que son comestibles. No tiene sentido que exista un ejemplar de comida. Por ejemplo, la clase Number del paquete java.lang representa el concepto abstracto de nmero.

Otros ejemplos Clase ElementForm, Figuras Geomtricas, Personas, Mamferos, Automvil etc

Clase AbstractaEjemplo

Clase AbstractaEjemplo

Regla"Medir el progreso de programacin en lneas de cdigo es como medir el progreso de construccin de un avin en peso" Bill Gates