....
....
martes, 29 de marzo de 2011
lunes, 28 de marzo de 2011
Identificación de patrones de diseño
¿Qué son los patrones de diseño?
Es una solución repetible a un problema recurrente en el diseño de software. Es una plantilla para resolver un problema la cual se puede implementar en muchas maneras.
¿Cuáles son las categorías principales de los patrones de diseño?
Los patrones creacionales, patrones estructurales y los patrones de comportamiento.
Los siguientes patrones tratan acerca de la instanciación de clases.
Abstract Factory
Builder
Factory Method
Object Pool
Prototype
Singleton
Los siguientes patrones son sobre la composición de clases y objetos.
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Private Class Data
Proxy
Los siguientes patrones son para la comunicación de clases.
Chain of responsibility
Command
Interpreter
Iterator
Mediator
Memento
Null Object
Observer
State
Strategy
Template method
Visitor
Nota: Los patrones de diseño son altamente alabados y criticados.
Es una solución repetible a un problema recurrente en el diseño de software. Es una plantilla para resolver un problema la cual se puede implementar en muchas maneras.
¿Cuáles son las categorías principales de los patrones de diseño?
Los patrones creacionales, patrones estructurales y los patrones de comportamiento.
Los siguientes patrones tratan acerca de la instanciación de clases.
Abstract Factory
Builder
Factory Method
Object Pool
Prototype
Singleton
Los siguientes patrones son sobre la composición de clases y objetos.
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Private Class Data
Proxy
Los siguientes patrones son para la comunicación de clases.
Chain of responsibility
Command
Interpreter
Iterator
Mediator
Memento
Null Object
Observer
State
Strategy
Template method
Visitor
Nota: Los patrones de diseño son altamente alabados y criticados.
Etiquetas:
diseño,
objetos,
orientada,
patrones,
programación
jueves, 17 de marzo de 2011
Diagramas de clase y secuencia de UML
Para un simulador multiagente necesito la clase más importante que es Agente, la cual puede contener más agentes que interactúan entre ellos.
Así la clase Plano donde actúan los agentes puede ser un agente con la propiedad de poseer un arreglo geométrico, por ejemplo, una matríz cuadrada, triangular o pentagonal y cualquiera de estas puede ser una superficie cerrada en la cual si se mueve en la misma dirección se regresa al punto de inicio, en resúmen, Plano hereda de la clase Agente.
La clase Mundo solamente la uso como un puente entre todo lo que voy a mostrar en el "Lienzo", y la API (application programming interface) de Android.
Las acciones son el conjunto de reglas que señalan como debe de actuar un agente, pueden existir las mismas reglas para distintos tipos de agentes. Si quiero que el usuario me escriba las reglas de comportamiento en una manera fácil, le muestro las situaciones que pueden surgir y las acciones posibles a realizar, el usuario solo las liga.
Registro es algún objeto que recibe los datos y dependiendo el contexto de orígen los guarda en algún buffer apegado a un formato (ejemplo: XML) y luego puede regresar la información según se requiera.
El simulador es el motor de todo, lee las reglas, analiza la situación y realiza las acciones, después registra los datos para futuros análisis y gráficas y actualiza el Mundo para mostrar alguna animación.
Aquí está mi diagrama de clase de UML
(me falta más)
El diagrama de clases lo hice con Umbrello y genera el código automáticamente en Java en el botón Code > Generate All Code.
Las secuencias comienzan con la creación de un Mundo, este contendrá distintos agentes como el agente tipo Plano, se llama a la creación de por lo menos un Plano para ordenar a los agentes, después se agregan los agentes al Plano ó matríz y para cada uno se asignan las reglas, con toda la información se corre la simulación, es la etapa que decide por cuantos pasos ó segundos se hace, y en cada paso ó x segundos se pasan los datos al Registro y al final se actualiza el Mundo para mostrar la animación.
Aquí está mi diagrama de secuencia de UML
Así la clase Plano donde actúan los agentes puede ser un agente con la propiedad de poseer un arreglo geométrico, por ejemplo, una matríz cuadrada, triangular o pentagonal y cualquiera de estas puede ser una superficie cerrada en la cual si se mueve en la misma dirección se regresa al punto de inicio, en resúmen, Plano hereda de la clase Agente.
La clase Mundo solamente la uso como un puente entre todo lo que voy a mostrar en el "Lienzo", y la API (application programming interface) de Android.
Las acciones son el conjunto de reglas que señalan como debe de actuar un agente, pueden existir las mismas reglas para distintos tipos de agentes. Si quiero que el usuario me escriba las reglas de comportamiento en una manera fácil, le muestro las situaciones que pueden surgir y las acciones posibles a realizar, el usuario solo las liga.
Registro es algún objeto que recibe los datos y dependiendo el contexto de orígen los guarda en algún buffer apegado a un formato (ejemplo: XML) y luego puede regresar la información según se requiera.
El simulador es el motor de todo, lee las reglas, analiza la situación y realiza las acciones, después registra los datos para futuros análisis y gráficas y actualiza el Mundo para mostrar alguna animación.
Aquí está mi diagrama de clase de UML
(me falta más)
El diagrama de clases lo hice con Umbrello y genera el código automáticamente en Java en el botón Code > Generate All Code.
Las secuencias comienzan con la creación de un Mundo, este contendrá distintos agentes como el agente tipo Plano, se llama a la creación de por lo menos un Plano para ordenar a los agentes, después se agregan los agentes al Plano ó matríz y para cada uno se asignan las reglas, con toda la información se corre la simulación, es la etapa que decide por cuantos pasos ó segundos se hace, y en cada paso ó x segundos se pasan los datos al Registro y al final se actualiza el Mundo para mostrar la animación.
Aquí está mi diagrama de secuencia de UML
lunes, 14 de febrero de 2011
Documentación y herramientas de desarrollo
Actividades de semana 4
La documentación es la información que ayuda a reducir la dependencia entre software y el programador, sin la documentación se tendría que releer el código y mantener la esperanza de entender lo que hace cada sección, algo no muy eficiente.
En otras palabras, la documentación es lo que señala cómo operar un sistema o software, nos permite interpretar errores, y construir sobre lo ya hecho, rápidamente.
Sin la documentación no se sabe cuál será el comportamiento del resto del sistema aún cuando se hayan descubierto el funcionamiento de ciertos métodos o acciones.
Existen distintos tipos de documentación y distintas formas de documentar, entre los tipos de documentación están los manuales, el manual técnico, que ayuda a los programadores, y el manual de usuario, que se enfoca en los usuarios finales y la información debe de estar expresada en una manera clara y concisa.
Mi proyecto será documentado automáticamente con el uso de un programa llamado javadoc, el cuál leerá el código fuente del programa, identificara e interpretará el formato de los comentarios del lenguaje y generará a partir de eso una página html de fácil navegación con la información de los archivos.
Javadoc identifica cierto formato en los comentarios del código fuente del programa, reconoce las líneas iniciadas con el sígno "at" (@), seguido del nombre del tag o etiqueta que se desea.
Las etiquetas son:
Así documentaría mi proyecto, comentando con las etiquetas y usando el comando javadoc ../*.java
Guía de uso de Javadoc
Ejemplos con Javadoc
Descargar Javadoc
Bibliografía
http://www.elcodigok.com.ar/2009/02/la-importancia-de-la-documentacion-en-nuestros-sistemas/
http://riie.com.ar/?a=31420
http://www.desarrolloweb.com/articulos/importancia-documentacion.html
http://download.oracle.com/javase/1.3/docs/tooldocs/solaris/javadoc.html
http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html
La documentación es la información que ayuda a reducir la dependencia entre software y el programador, sin la documentación se tendría que releer el código y mantener la esperanza de entender lo que hace cada sección, algo no muy eficiente.
En otras palabras, la documentación es lo que señala cómo operar un sistema o software, nos permite interpretar errores, y construir sobre lo ya hecho, rápidamente.
Sin la documentación no se sabe cuál será el comportamiento del resto del sistema aún cuando se hayan descubierto el funcionamiento de ciertos métodos o acciones.
Existen distintos tipos de documentación y distintas formas de documentar, entre los tipos de documentación están los manuales, el manual técnico, que ayuda a los programadores, y el manual de usuario, que se enfoca en los usuarios finales y la información debe de estar expresada en una manera clara y concisa.
Mi proyecto será documentado automáticamente con el uso de un programa llamado javadoc, el cuál leerá el código fuente del programa, identificara e interpretará el formato de los comentarios del lenguaje y generará a partir de eso una página html de fácil navegación con la información de los archivos.
Javadoc identifica cierto formato en los comentarios del código fuente del programa, reconoce las líneas iniciadas con el sígno "at" (@), seguido del nombre del tag o etiqueta que se desea.
Las etiquetas son:
Etiqueta Introducido en JDK/SDK @author1.0 {@docRoot}1.3 @deprecated1.0 @exception1.0 {@link}1.2 @param1.0 @return1.0 @see1.0 @serial1.2 @serialData1.2 @serialField1.2 @since1.1 @throws1.2 @version1.0
Así documentaría mi proyecto, comentando con las etiquetas y usando el comando javadoc ../*.java
Guía de uso de Javadoc
Ejemplos con Javadoc
Descargar Javadoc
Bibliografía
http://www.elcodigok.com.ar/2009/02/la-importancia-de-la-documentacion-en-nuestros-sistemas/
http://riie.com.ar/?a=31420
http://www.desarrolloweb.com/articulos/importancia-documentacion.html
http://download.oracle.com/javase/1.3/docs/tooldocs/solaris/javadoc.html
http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html
Herencia y polimorfismo: modularidad y reutilización de código
Actividades de semana 3.
¿Qué es herencia?
Según Timothy A. Budd en su libro An Introduction to Object-Oriented Programming, al principio que señala que el conocimiento acerca de una categoría más general también es aplicable a una categoría más específica es llamado herencia.
Esto quiere decir que si conocemos algún objeto que pertenece a alguna categoría, cuyo conocimiento o propiedades también lo posee una clase más general, entonces el objeto de la categoría más específica hereda de la categoría más general.
Un ejemplo es el monoclonius, un dinosaurio herbívoro de la familia Ceratopsidae que poseía un cuerno mediano [1], sabemos que es un herbívoro pero aún así sigue siendo un dinosaurio, tiene 4 patas y vivió en el cretaceo como muchos otros, aquí la clase general a la que pertenece son todos los dinosaurios que vivieron en esa época mientras que la categoría ó clase específica es su mismo género.
Ejemplos más comunes son los vehículos, existen muchos objetos de categorías específicas, por nombrar algunos, de dos llantas, de tres llantas, sin llantas, impulsados con gasolina, impulsados con hidrógeno, impulsados con energía solar, que también andan bajo el agua, que no andan bajo el agua, que vuelan, con gran protección, poco seguros, para muchos pasajeros, para pasajeros ó tripulantes sólo humanos, etc, todos estos caben perfectamente en la categoría general de "vehículos que sirven para transportar".
Así como estos ejemplos, existen muchos otros más que se adaptan al concepto de herencia, de hecho es más probable batallar para no encontrarse con uno. Quizás esto se debe a que la eficiencia al especializar ó mutar objetos y especies, a partir de sus contrapartes más generalizadas, es una ganancia gigantesca, y los humanos también lo reconocen al crear y usar la herencia en paradigmas como la programación orientada a objetos.
La programación orientada a objetos brinda la posibilidad de crear categorías ó clases de tal manera que nos permita crear código para acciones específicas rápidamente, es decir, usando la herencia sin llegar a la necesidad de reescribir gran parte del mismo otra vez, además la capacidad de herencia da lugar a una mayor modularidad, factor clave en la creación de programas grandes ó complejos.
¿Qué es el polimorfismo?
"La habilidad para aparecer en muchas formas", dicho de otro manera se refiere a la habilidad del lenguaje para procesar objetos de manera diferente entre ellos según el tipo de dato que son o su clase, como ejemplo real se refiere a la habilidad del lenguaje para sobreescribir los métodos de los objetos de clases o categorías heredadas de tal manera que respondan diferente de sus contrapartes más generales ante la petición de una acción, es decir, objetos que son de la misma clase pueden comportarse de manera diferente ante las mismas peticiones.
Un ejemplo rápido son los leopardos, los tiburones y los cocodrilos, todos ellos pertenecen a la clase animales, pero si se les pudiera dar órdenes y ellos obedecieran, entonces cuando se les pida que cazen (la misma petición) lo realizarán de manera muy específica según su tipo (ó en términos de p.o.o. según cómo tengan sobreescritos sus métodos).
Bibliografía.
[1] http://www.prehistory.com/monoclonius.htm, http://www.worldlingo.com/ma/enwiki/es/Monoclonius
¿Qué es herencia?
Según Timothy A. Budd en su libro An Introduction to Object-Oriented Programming, al principio que señala que el conocimiento acerca de una categoría más general también es aplicable a una categoría más específica es llamado herencia.
Esto quiere decir que si conocemos algún objeto que pertenece a alguna categoría, cuyo conocimiento o propiedades también lo posee una clase más general, entonces el objeto de la categoría más específica hereda de la categoría más general.
Un ejemplo es el monoclonius, un dinosaurio herbívoro de la familia Ceratopsidae que poseía un cuerno mediano [1], sabemos que es un herbívoro pero aún así sigue siendo un dinosaurio, tiene 4 patas y vivió en el cretaceo como muchos otros, aquí la clase general a la que pertenece son todos los dinosaurios que vivieron en esa época mientras que la categoría ó clase específica es su mismo género.
Ejemplos más comunes son los vehículos, existen muchos objetos de categorías específicas, por nombrar algunos, de dos llantas, de tres llantas, sin llantas, impulsados con gasolina, impulsados con hidrógeno, impulsados con energía solar, que también andan bajo el agua, que no andan bajo el agua, que vuelan, con gran protección, poco seguros, para muchos pasajeros, para pasajeros ó tripulantes sólo humanos, etc, todos estos caben perfectamente en la categoría general de "vehículos que sirven para transportar".
Así como estos ejemplos, existen muchos otros más que se adaptan al concepto de herencia, de hecho es más probable batallar para no encontrarse con uno. Quizás esto se debe a que la eficiencia al especializar ó mutar objetos y especies, a partir de sus contrapartes más generalizadas, es una ganancia gigantesca, y los humanos también lo reconocen al crear y usar la herencia en paradigmas como la programación orientada a objetos.
La programación orientada a objetos brinda la posibilidad de crear categorías ó clases de tal manera que nos permita crear código para acciones específicas rápidamente, es decir, usando la herencia sin llegar a la necesidad de reescribir gran parte del mismo otra vez, además la capacidad de herencia da lugar a una mayor modularidad, factor clave en la creación de programas grandes ó complejos.
¿Qué es el polimorfismo?
"La habilidad para aparecer en muchas formas", dicho de otro manera se refiere a la habilidad del lenguaje para procesar objetos de manera diferente entre ellos según el tipo de dato que son o su clase, como ejemplo real se refiere a la habilidad del lenguaje para sobreescribir los métodos de los objetos de clases o categorías heredadas de tal manera que respondan diferente de sus contrapartes más generales ante la petición de una acción, es decir, objetos que son de la misma clase pueden comportarse de manera diferente ante las mismas peticiones.
Un ejemplo rápido son los leopardos, los tiburones y los cocodrilos, todos ellos pertenecen a la clase animales, pero si se les pudiera dar órdenes y ellos obedecieran, entonces cuando se les pida que cazen (la misma petición) lo realizarán de manera muy específica según su tipo (ó en términos de p.o.o. según cómo tengan sobreescritos sus métodos).
Bibliografía.
[1] http://www.prehistory.com/monoclonius.htm, http://www.worldlingo.com/ma/enwiki/es/Monoclonius
Suscribirse a:
Entradas (Atom)



