sábado, 10 de julio de 2010

PHP Orientado a objetos II

Continuando… aunque algo demorado por compromisos laborales

De la larga lista de términos que se emplean o aparecen cuando se habla de OPP se detallan los siguientes:

AOO - DOO
La Programación Orientada a Objetos debe estar soportada de antemano por un adecuado Análisis Orientado a Objetos(AOO) y un Diseño Orientado a Objetos(DOO) . El no tener en cuenta estos aspectos nuestros desarrollos serán inestables, inseguros y su costo de mantenimiento será excesivo. Por tal motivo es básico definir estos dos conceptos y pretender aclarar el panorama.
Aunque dentro del Desarrollo de Software Orientado a Objetos existe una gran cantidad de opiniones y métodos sobre AOO y DOO, donde cada uno posee su proceso de análisis, diseño y notación o esquema para brindar un mejor acercamiento a un modelo eficaz, se ha tratado de unificar algunos conceptos pretendiendo fortalecer el Desarrollo de SW.
Explicación general AOO y DOO
El  AOO investiga y construye un modelo del dominio del problema, identificando las clases y objetos del sistema, cómo se relacionan estos objetos y como se comportan dentro del dominio, este modelo busca dar una solución lógica desde el punto de vista de los objetos.
El DOO es el paso siguiente del AOO donde transforma el análisis realizado en una especie de borrador o anteproyecto de la solución del dominio del problema. Desde aquí las clases identificadas serán creadas desde cero o reutilizadas según el contexto del problema.
Dentro del DOO el diseño de los objetos es más especifico hacia el interior de las clases, se definen sus atributos o propiedades, sus operaciones o métodos y cómo responder a mensajes o estímulos.

En el DOO aparecen los llamados Patrones de Diseño, estos dan solución a problemas de diseño que se repiten una y otra vez. Históricamente proceden de modelos de arquitectura donde se pretendían reutilizar modelos de diseño ya aplicados, posteriormente W. Cunningham y Kent Beck vinculan esta idea  a la OPP. Para estudiarlos y manejarlos es básico tener conceptos de UML. En la Siguiente URL se encuentra una grafica con los patrones utilizados, describiendo su nombre y utilización.

“Los patrones de diseño proponen una forma reutilizar la experiencia de los desarrolladores, para ello clasifica y describe formas de solucionar problemas que ocurren de forma frecuente en el desarrollo. Por tanto está basado en la recopilación del conocimiento de los expertos en desarrollo de software.
No debe verse los Patrones de Diseño como una teoría o una corriente. No trata de tomar partido por una u otra alternativa. Es una experiencia real, probada y que funciona. Es Historia y nos ayuda a no cometer los mismos errores. ”

UML
de Wikipedia
“Lenguaje Unificado de Modelado (LUM) o (UML, por sus siglas en inglés, Unified Modeling Language) es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad; está respaldado por el OMG (Object Management Group). Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables.”

UML mediante sus diagramas  facilita el aprendizaje de OPP, es más fácil ubicarse dentro del “plano” del sistema a realizar.

ORM (Object Relational Mapping), es una técnica en la OPP que permite convertir  nuestros datos de una  Base de Datos Relacional en una Base de Datos Orientada a Objetos Virtual. Facilitando la persistencia.

De estos temas en mención recomiendo grandes autores o ‘gurus’ como Martin Fowler, Kent Beck,  Ivar Jacobson , James Rumbaugh ,Grady Booch , Craig Larman, Coad/Yourdon, ellos con conceptos han liderado bases solidas para mejorar la calidad del Software. En la actualidad hay nuevas tendencias de metodologías llamadas agiles (Scrum, XP) que pretenden dar un giro en cuanto a la rapidez en el desarrollo de Software. De mi parte y apoyándome en mucha información encontrada en Internet me he dedicado a profundizar sobre metodologias agiles y abordando "la programación extrema o XP()". aquí entra en cuestionamiento el uso de UML, según los eruditos en la materia el hecho de realizar proyectos con XP exime el uso de UML como ayuda para el análisis y el diseño orientado a objetos. Kent Beck el gran ‘guru’ sobre este tema difícilmente hace graficas de sus estructuras, otros como Martin Fowler sostiene que el diseño desde UML debería hacerse según las circunstancias, cada programador debe apoyarse o ayudarse según el contexto de la situación a resolver.

martes, 16 de febrero de 2010

PHP Orientado a objetos I

Con la nueva versión del motor Zend Engine 2.0, PHP 5.3.1 trae consigo muchas ventajas respecto a su antecesor PHP 4 respecto al manejo de la Programación Orientada a Objetos (POO o OOP de Object Oriented Programming en ingles). Si todavía Usted programa en forma estructurada, sometiéndose a largas jornadas para realizar modificaciones a su código o ampliando sus funciones a estructuras cada vez más complejas, La POO sin lugar a dudas se convertirá en un aliado importante, ahorrando tiempo, reutilizando código y mejorando el rendimiento de sus sitios o aplicaciones Web.

PROGRAMACIÓN ORIENTADA A OBJETOS

La POO es un paradigma de programación o una forma especial y particular de desarrollar software donde el eje principal lo determina la construcción de objetos y sus relaciones. Esta forma de programación, facilita la reutilización y mantenimiento de código. Se puede ampliar este concepto en Wikipedia

Según Grady Booch reconocido diseñador de software la programación orientada a objetos (POO) es, "un método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase, y cuyas clases son, todas ellas, miembros de una jerarquía de clases unidas mediante relaciones de herencia".

Con esta definición queda claro que al realizar un proyecto de software con programación orientada a objetos se debe tener especial atención a las relaciones entre objetos por medio de herencia. De lo contrario caeríamos en la programación basada en objetos.

Para comprender y adentrarnos en el mundo de la POO se debe tener claro algunos conceptos básicos que son fundamentales para un mejor aprendizaje

Clase: la clase se define como la estructura básica de los objetos, las clases contienen un conjunto de variables llamadas propiedades o atributos y funciones llamadas métodos o comportamientos, además las clases pueden heredar de otras ciertos comportamientos.

Objeto: un objeto es básicamente una instancia de una clase, es una abstracción que tiene información por medio de sus propiedades o atributos y comportamientos o acciones, por medio de sus métodos; cada objeto posee identidad que lo diferencia de los demás objetos, así sea instancia de una misma clase .

Mensajes: para que la POO sea funcional y eficiente entre los diferentes objetos debe existir un medio de comunicación que facilite la interacción entre ellos, estos son los mensajes, estos hacen que los objetos tengan estados y comportamientos diferentes.

Herencia: esencialmente consiste en la creación de nuevas clases a partir de otras ya existentes. Estas nuevas clases pueden invocar comportamientos de la clase padre cumpliendo con uno de los pilares de la POO

Polimorfismo: característica que permite a un objeto responder a un mensaje o evento en relación al numero de parámetros enviados al método de la clase.

Abstracción: esta es una de las fundamentales de la POO, donde se trabaja con las características de funcionamiento de un objeto, más se desconoce su implementación interna. El ejemplo de esta característica se evidencia cuando se desarrolla una aplicación utilizando una Base de Datos MySQL y necesitamos que esta misma aplicación funcione en PostgreSQL o cualquier otra BD sin realizar cambios complejos en el código actual. Esto es conocido como capa de Abstracción de acceso a BD y PHP 5 facilita este trabajo con PDO(PHP Data Objects) .

Ejemplos

$db = new PDO(‘mysql:host=localhost; dbname=mibasedatos’, ‘usuario’, ‘password’);

$db = new PDO(‘pgsql:dbname=miBD host=localhost’, $user, $pass);

Encapsulamiento: característica que permite a los atributos o propiedades de un objeto no ser visibles desde otros objetos, protegiendo el ESTADO o el cambio de valor de estos. Los cambios de estado solo serán factibles desde métodos o comportamientos propios del objeto.

Cohesión en OOP es el grado de unión o relación de las funciones de una clase para la ejecución de una tarea, sin depender de otras, entre mas alta sea la cohesión mejor se trabajará OPP. La contraparte es el Acoplamiento indicando la dependencia de otras clases para poder realizar un función específica, esta dependencias hacia otras clases hace que un sistema sea difícil de cambiar, actualizar o reutilizar. El acoplamiento debe ser lo más bajo posible

En la POO encontramos una gran variedad de palabras o siglas que se deben conocer o entender para así tener unas mejores bases y profundizar en conceptos más complejos.