miércoles, 6 de abril de 2011

~Semana 9. Patrones de Diseño

Semana 9
Materia: Programación Orientada a Objetos
Martes M1-M3

Hola a todos, en esta entrada les hablaré sobre los patrones de diseño.
Abstact Factory 
El propósito de este patron de diseño proporciona un contacto para crear familias de objetos relacionados o dependientes sin tener que especificar su clase concreta.

Por ejemplo. 
Si tienes que administrar información de contactos con sus respectivos teléfonos y direcciones, como se hace en una agenda. Se tendrían que crear clases para administrar direcciones, números de teléfono y nombre de contactos. Estas clases tendrán que almacenar información de los contactos con ciertos formatos. Por ejemplo en Norteamérica todos los números de teléfono están limitados a 10 dígitos y el código postal también tiene cierto formato. 

También puede ser que administrando los contactos, algún contacto tenga números de teléfono de otros países, por ejemplo Holanda, en Holanda tienen diferentes reglas para los números de teléfono o direcciones válidas por lo que se tienen que realizar validaciones. Cada vez que se agreguen más y más contactos esto se irá extendiendo de más y más reglas y se tendrá que estar modificando y recompilando el código. 

Abstact Factory es una solución a este problema ya que con este patrón se define una clase AdressFactory para generar objetos que siguen un patrón general pata Address y PhoneNumber. En tiempo de ejecución esto se asocia con un número de fábricas para distintos países y cada país tiene su propia versión de las clases Address y PhoneNumber.

Este patrón es aplicado cuando:

  • El cliente debe ser independiente del proceso de creación de los productos.
  • La aplicación debe configurarse con una o más familias de productos.
  • Es necesario crear los objetos como un conjunto, de forma que sean compatibles. 
  • Desea proporcionar una colección de clases y únicamente quiere revelar sus contratos y relaciones, no sus implementaciones.
Ventajas y desventajas

Una Abstact Factory ayuda a incrementar la flexibilidad general de una aplicación. Durante el diseño, no se tiene que predecir todos los usos futuros de la aplicación, se crea un framework general y se desarrollan implementaciones independientes del resto de la aplicación. En tiempo de ejecución, la aplicación puede integrar fácilmente nuevas características y recursos.

Otra ventaja es que se puede simplificar la comprobación del resto de la aplicación. Implementando unas clases TestConcreteFactory y TestConcreteProduct puede servir para simular el comportamiento esperado de los recursos.

Si el producto abstracto no está definido apropiadamente, puede resultar difícil o incluso imposible generar productos concretos deseados.



Abstact Factory en mi Proyecto.  
Según lo que entendí y con este ejemplo que puse creo que podría utilizar este patrón de diseño en Dietas, ya que habrá diferentes tipos de dietas con diferentes formatos ya que algunas dietas tendrán ciertas excepciones, pienso que en la cuestión de los alimentos se puede utilizar este tipo de patrón. 


Prototype
Este patrón de diseño facilita la creación dinámica al definir clases las cuales sus objetos pueden crear copias de si mismos.

Aplicado a mi Proyecto.
Cuando se necesite copiar algún objeto con el fin de que el usuario no tenga que introducir manualmente toda la información cuando se crea un nuevo paciente por ejemplo. Una solución a este problema es.
Crear un nuevo objeto Paciente y copiar los valores del objeto Paciente existente.

La desventaja de este patrón es que viola el principio de encapsulación de la orientación a objetos, esto me hace estar un poco indecisa en usar o no usar este patrón. Para poder llegar a esta solución se tienen que hacer llamadas a métodos para copiar la información necesaria. Esto quiere decir que es más difícil mantener el código de la clase Paciente porque se extenderá en todo el proyecto. Además que también dificulta la reutilización de la clase Paciente.



Ventajas
El patrón de diseño Prototype es muy útil porque permite que los sistemas generen una copia de un objeto, con variables ya establecidas a un valor significativo.


Adapter
Este patron de diseño es de tipo estructural, sirve como intermediario entre dos clases, convirtiendo las interfaces de una clase para que pueda ser utilizada por otra.

Una de las ventajas de la programación orientada a objetos citada con mayor frecuencia es que permite la reutilización del código. Como los datos y el comportamiento se centralizan en una clase, puede mover una clase de un proyecto a otro y reutilizar su funcionalidad.

Por ejemplo, si estas realizando un gestor de información personal y un amigo de otro país decide cooperar contigo ya que tu amigo ha estado trabajando en un proyecto similar y puedes proporcionarle una implementación comercial de un sistema. Pero al momento de recibir los ficheros, la interfaz no corresponde con las interfaces que el ha estado utilizando en su aplicación y también puede que el código esté en otro idioma que el no conoce.

Tendrías dos soluciones posibles.

  • La primera opción sería reescribir el componente para que implemente todas las interfaces requeridas. Reescribir el nuevo componente es algo menos recomendable porque tendrías que hacer esto mismo cada vez que recibas la última versión de tu amigo.
  • La segunda opción es reescribir su propia aplicación y empezar a utilizar nuevas interfaces. La desventaja es que tendrías que recorrer todo su código para cambiar todas las ocurrencias de la interfaz antigua.
Lo que se necesita es un traductor -un componente que traduzca las llamadas de una interfaz en llamadas a otra interfaz distinta.
La verdad no se si esto aplique en mi proyecto, aunque si lo voy a comercializar sería bueno pensar en este tipo de patrón de diseño. 

Bueno, esto es todo de patrones de diseño, cualquier comentario ya saben pueden hacerlo :D saludos

viernes, 25 de marzo de 2011

Demostraciones de avance parcial

Semana 8
Materia: Taller de Programación Orientada a objetos
Hora: Jueves M1-M2

Hola a todos, en este video que grabé mi intención es mostrarles como compile mi código y explicarles un poco de lo que hace así como también la ejecución del código. Me falta modificarle muchas cosas pero solo es para que vean que compila sin errores. 






jueves, 24 de marzo de 2011

~Semana 8. Presentaciones de diagrama de proyectos

Semana 8
Materia: Programación Orientada a Objetos
Hora: Martes M1-M3

Hola a todos, en esta entrada les pongo un pequeño video sobre mis diagramas UML donde explico mas o menos mis diagramas tanto el diagrama de clases como el de secuencia.



jueves, 17 de marzo de 2011

~Semana 6. Código autogenerado y comparación

Semana 6
Materia: Taller de Programación Orientado a Objetos
Hora: Jueves M1-M2

Hola a todos, en esta entrada les mostraré el código autogenerado por el programa que utilicé para hacer mis diagramas, en este caso hice mis diagramas otra vez en Umbrello, los de la entrada pasada están en Bouml pero tuve problemas para generar el código y decidí hacerlo en Umbrello.

Aquí está la imagen de mi diagrama que generé.

 Como pueden ver este diagrama tiene más operaciones que el diagrama de Bouml. en la imagen siguiente mostraré como agregue en la clase Domicilio algunos métodos y atributos y también modifiqué algunas otras clases. 



Después de hacer esto generé el código ya con todo lo que agregué y modifiqué. Para esto primero tenemos que cambiar el lenguaje porque por default viene el C++ entonces tienen que cambiar a Java, también si tienes atributos o métodos privado Umbrello no te los mostrará, así que tienes que modificar las propiedades del diagrama de clases y desmarcar la opcion de Show only Public.



/**
 * Class Domicilio
 */
public class Domicilio {

  //
  // Fields
  //

  private String calle;
  private String colonia;
  private String municipio;
  private String estado;
  private String pais;
  private int numero;
  private int cP;
  private String calleF;
  private String coloniaF;
  private String municipioF;
  private String estadoF;
  private int numeroF;
  private int cPF;
  
  //
  // Constructors
  //
  public Domicilio () { };
  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  /**
   * Set the value of calle
   * @param newVar the new value of calle
   */
  private void setCalle ( String newVar ) {
    calle = newVar;
  }

  /**
   * Get the value of calle
   * @return the value of calle
   */
  private String getCalle ( ) {
    return calle;
  }

  /**
   * Set the value of colonia
   * @param newVar the new value of colonia
   */
  private void setColonia ( String newVar ) {
    colonia = newVar;
  }

  /**
   * Get the value of colonia
   * @return the value of colonia
   */
  private String getColonia ( ) {
    return colonia;
  } 
 

* Class Dieta
 */
public class Dieta {

  //
  // Fields
  //

  private String alimentos;
  private int porcion;
  
  //
  // Constructors
  //
  public Dieta () { };
  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  /**
   * Set the value of alimentos
   * @param newVar the new value of alimentos
   */
  private void setAlimentos ( String newVar ) {
    alimentos = newVar;
  }

  /**
   * Get the value of alimentos
   * @return the value of alimentos
   */
  private String getAlimentos ( ) {
    return alimentos;
  }

  /**
   * Set the value of porcion
   * @param newVar the new value of porcion
   */
  private void setPorcion ( int newVar ) {
    porcion = newVar;
  }

  /**
   * Get the value of porcion
   * @return the value of porcion
   */
  private int getPorcion ( ) {
    return porcion;
  }

  //
  // Other methods
  //

  /**
   */
  public void Dieta(  )
  {
  }


  /**
   */
  public void setPorcion(  )
  {
  }


  /**
   */
  public void getPorcion(  )
  {
  }


Este código fue el que generó el programa Umbrello. Como pueden ver agregó los métodos que yo agregué directamente en el diagrama. También en este código se agregaron automáticamente comentarios en cada uno de los métodos y también en los atributos. 

Bueno eso es todo, cualquier comentario ya saben que son recibidos. Saludos:)

miércoles, 16 de marzo de 2011

~Semana 6. Diagramas de clase y secuencia de UML

Semana 6
Materia:Programación Orientada a Objetos
Hora: Martes M1-M3

Hola a todos, en esta entrada les mostraré los diagramas de clase y secuencia que realicé con respecto a mi proyecto.

Diagrama de clase

El diagrama de clase es un tipo de diagrama que describe la estructura de un sistema agregando clases, atributos y métodos que se utilizan. Estos diagramas se utilizan durante el desarrollo de análisis de sistemas en el cuál se crea un diagrama conceptual de los datos que estaremos utilizando en dicho sistema. También se muestran las relaciones de las clases como herencia, composición y asociación.

Las clases se representan con un rectángulo que tiene 3 divisiones:
Una de la relación entre clases como mencioné pueden ser:

  • Herencia (Especialización o Generalización)

    Se representa con 
    una flecha como la siguiente:

        Significa que una clase hereda a otra, o sea que una subclase tiene los métodos y   atributos de una super clase.
 
 Hay otras relaciones que se utilizan en estos diagramas si quieren información de cada una de las relaciones vayan a este link.
 
Para realizar mi diagrama utilicé la herramienta Bouml que se instala desde el Ubuntu Software Center, también esta disponible para Windows.

Les dejo la imagen de mi diagrama de clases (denle click para agrandar).




En este diagrama que les muestro anteriormente como pueden ver es un diagrama de las clases que implementa mi proyecto. Como pueden ver existen también relaciones entre las clases por ejemplo las clases FRUTAS, VERDURAS, LECHE, ACEITES, ETC heredan los métodos y atributos de la clase Dieta que en este caso contiene los alimentos de cada una de estas clasificaciones. También hay otra relación que no estoy segura que sea con ese tipo de flecha, la relación que tienen estas clases es que tanto la clase Domicilio como la clase FechaNac las contiene la clase Paciente, o sea son parte de paciente Paciente tiene domicilio y tiene fecha de nacimiento.


Diagrama de secuencia

Ahora hablemos sobre los diagramas de secuencia, para mi son un poco más complicados batallé mas para realizar este diagrama.

Estos diagramas muestran como se relacionan las clases y métodos con todo el proceso que lleva a cabo el programa.




En este diagrama se representa el proceso que se sigue en mi proyecto, entra primero al menú para ver que es lo que deseas realizar, luego depende si quieres dar de alta un paciente entonces se pasa a la clase paciente y obtiene todos los datos personales del paciente y todo lo relacionado con él para después realizar la dieta correspondiente a este paciente. Para dar de baja al paciente se tienen que borrar los datos y al final guardar los cambios que realizamos para que al volver a entrar todo quede como lo habíamos dejado. Cuando se crean las dietas se tienen que obtener los alimentos de cada clasificación en este caso lo generalice como Alimento pero en realidad esta clase lleva todos las clasificaciones de frutas, verduras, leguminosas, etc. Se crea una lista de los alimentos que se escogieron para posteriormente crear la dieta.

 Bueno cualquier duda, aclaración o correción son bienvenidas. Saludos:)

jueves, 24 de febrero de 2011

~Semana 5. Especificación técnica de proyectos individuales

Semana 5
Materia: Taller de programación Orientada a Objetos
Jueves M1-M2

Hola a todos, en esta entrada les pongo la documentación técnica de mi proyecto restante.







jueves, 17 de febrero de 2011

~Semana 5. Presentación del Proyecto

Semana 5
Materia: Programación orientada a objetos
Martes M1-M3

Hola a todos, bueno esta semana tocó la presentación de la explicación de nuestro proyecto.Mi proyecto como ya saben trata de un sistema de consultorio donde contiene los expedientes del paciente y las dietas de cada uno de estos.

Les dejo la presentación, si quieren verla en pantalla completa solo piquen menu y luego full view, si tienen dudas o comentarios ya saben que pueden comentar. También si tienen alguna idea o alguna sugerencia son bienvenidas. Saludos:)