Archive for the ‘Orientación a objetos’ Category

Aplicación Jobeet de Symfony

Miércoles, Junio 16th, 2010

Quiero recomendar a los programadores de PHP el uso de Symfony desde estas líneas.

Habría mucho que hablar para explicar Symfony, pero me voy a limitar a decir que es un framework para desarrollo de aplicaciones Web en PHP, mediante el cual ya heredas arquitectura y patrones de programación adecuados.



Symfony



Digo que me voy a limitar a explicar solo eso, porque desde la página web de Symfony se tiene acceso a un ejercicio práctico llamado Jobeet que te lleva a construir una aplicación compleja tras 24 sesiones de una hora. Es decir, invirtiendo una hora diaria (siendo realista, en algún caso algo más) durante los días laborables, das un repaso a los extremos más significativos de Symfony y creo que te convierte en un programador bastante aceptable de Symfony.

Jobeet

En realidad yo no he realizado este curso práctico, realicé hace un par de años el que había colgado entonces, que se llama Askeet, y puedo asegurar que se construía una aplicación muy avanzada y realmente sorprendente.

Volviendo a Jobeet, incluyo a continuación el programa de trabajo de estos 24 días:

  • Day 1: Starting up the Project
  • Day 2: The Project
  • Day 3: The Data Model
  • Day 4: The Controller and the View
  • Day 5: The Routing
  • Day 6: More with the Model
  • Day 7: Playing with the Category Page
  • Day 8: The Unit Tests
  • Day 9: The Functional Tests
  • Day 10: The Forms
  • Day 11: Testing your Forms
  • Day 12: The Admin Generator
  • Day 13: The User
  • Day 14: Feeds
  • Day 15: Web Services
  • Day 16: The Mailer
  • Day 17: Search
  • Day 18: AJAX
  • Day 19: Internationalization and Localization
  • Day 20: The Plugins
  • Day 21: The Cache
  • Day 22: The Deployment
  • Day 23: Another Look at symfony
  • Day 24: Appendix B – License

Realmente me parece brillante esta ídea, y hace que esta forma de aprender sea muy motivante, te engancha desde el primer día, ya que ves los avances rápidamente, y me parece que es una técnica que se debería imitar …

Si quieres tener una idea gráfica de la aplicación resultante desde aquí puedes acceder a la demo de Jobeet que Symfony pone a disposición de los visitantes.

Principio de Single Responsibility

Jueves, Febrero 15th, 2007
¿Qué sucede cuando tenemos alguna classe y unos de sus métodos no "suena bien"?, pues es tiempo de aplicar los principios de la orientación a objetos.

En esta oportunidad mostraré un ejemplo del Principio de Single Responsability(SRP).

Supongamos que tenemos una classe Almacen de un sistema de Inventario de Productos, el diagrama de Classes inicial se muestra en la figura 1.


Figura 1: Diagrama de Clases Rev 1.

Pues bien, vamos a aplicar "elegancia" al Diagrama de Classes aplicando el SRP llenando la siguiente tabla:

Classe: Almacén

El almacén __________________

En el espacio vamos agregando los métodos y acomodando el lenguage a ver si tiene sentido en las reglas del negocio de nuestra aplicación.

Classe
: Almacén
  • En el almacén se puede agregar un Item.
  • Del almacén se puede remover un Item.
  • El almacén imprime el Inventario.
  • El almacén puede despachar envíos.

¿Hay alguna frase que no tenga sentido con lo que entendemos que hace un almacén? Claro que si:

  1. El almacén no imprime un inventario, lo que hace es devolver la información de todos los items que están en él o sea el Inventario; o mejor aún una lista de Items(List, Collection o array, lo que sea.).
  2. El almacén no despacha envíos, lo que si despacha envíos es un Despachador que solicita ciertos items al almacén.
Con esto, reconocemos los sustantivos y acciones y actualizamos nuestro Diagrama.

Figura 2: Diagrama de Clases Rev 2.

Bueno, ahora revisemos si esto tiene sentido:

Classe: Almacén
  • En el almacén se puede agregar un Item.
  • Del almacén se puede remover un Item.
Classe: Despachador
  • El despachador puede despachar envíos.
Classe: Inventario
  • El Inventario se imprime.

Si, tiene sentido!.

Ahora pseudo codifiquemos un test para ver si funciona:

Caso de Prueba: Imprimir el Inventario actual.

inventario = new Inventario();
inventario.imprimirInventario();
inventario = null;

Si funcionará , pues con UML definimos que el método imprimirInventario depende del método getItems del Almacén y recibirá correctamente el contenido actual del almacén.

¿Comentarios?.