Sunday, July 16, 2006

Object Design (Wirts-Brock/McKean) – Capitulo 3

Las abstracciones que se elijen afectan en gran medida a todo el diseño.
Concebir objetos es una actividad altamente creativa.Encontrar buenos objetos quiere decir identificar abstracciones que son parte del dominio de la aplicación y su maquinaria de ejecución.Para inspirarse al momento de diseñar se puede utilizar el conocimiento del dominio de la aplicación, las nociones acerca de las necesidades de la maquinaria de la aplicación, las lecciones aprendidas y las experiencias del pasado.
Los primeros candidatos a encontrar deben representar cosas importantes, conceptos y mecanismos.Típicamente estos son inteligentes: hacen cosas.
Las abstracciones vienen luego cuando se entiende las relaciones con otros objetos.Primero identificar objetos que tienen roles claros, luego decidir que candidatos deben saber y hacer sus responsabilidades y con cuales deben trabajar (sus colaboradores),Cuando se realiza la transición de candidatos a clases e interfaces, se puede emplear herencia, abstracción, interfaces y colaborations para construir un buen y flexible diseño.Se sugiere tratar de contar una historia acerca del sistema para entenderlo rapidamente.

--Los candidatos generalmente representan:
-El trabajo que el sistema realiza.
-Cosas directamente afectadas por la aplicación o algo conectado a la misma
-Información que fluye a traves del sistema
-Actividades de toma de desiciones, control y coordinación.
-Estructuras y grupos de objetos.
-Representaciones de cosas del mundo real de las cuales la aplicación necesita tener info.

What`s in a Name?
-Elegir los nombres cuidadosamente.Cuando el nombre de un objeto es escuchado, los diseñadores infieren algo acerca de de sus roles y responsabilidades.
-Incluir solo las cosas mas importantes en un nombre.
-Elegir un nombre que no limite el comportamiento.
-Elegir un nombre que dure toda la vida del objeto.
-Elegir un nombre que se adapte al contexto del diseño actual.
-No sobrecargue los nombres
-Eliminar los conflictos en nombres utilizando adjetivos

Describing Candidates
Escribe la definición del objeto en una CRC Card.Agregar hechos especificos de la aplicación a la definición generica.Distinguir candidatos por como se comportan en la aplicaciónCharacterizing Candidates
Podemos caracterizar candidatos de acuerdo a sus:Habitos de trabajo
-Relaciones con otros
-Obligaciones Comunes
-Ubicación en la arquitectura de la aplicación
-Nivel de Abstracción.

Para explorar los habitos preguntamos:”que hace y como encaja?”.

Connecting Candidates
Por su limitado espacio, solo se puede contar con un resumen en las tarjetas CRC. Pero estas son mucho mas que un espacio compacto para guardar ideas de diseño. Son reales y tangibles. Se puede elegir una y hablar acerca de ella como el objeto en si mismo. Pero como se relacionan, que objetos hacen cosas similares? Una forma util de agrupar candidatos es la siguiente:
-Por la capa de aplicación
-Por casos de uso
-Por el role estereotipado
-Por el vecindario
-Por el nivel de abstracción
-Por el tema de la aplicación
-No hay una forma estándar de completar las CRC cards, se debe encontrar la mejor para uno mismo.

En conclusión, quedarse con un candidato cuando se puede:
-Ponerle un buen nombre
-Definirlo
-Estereotiparlo
-Ver que se puede usar para soportar un caso de uso en particular
-Ver que es un elemento importante de la arquitectura
-Asignarle una o dos responsabilidades iniciales
-Entender como los otros objetos lo ven
-Ver que es importante
-Diferenciarlo de los otros candidatos similares

Descartar un candidato cuando:
Tiene responsabilidades que se superponen con otros candidatos que gustan mas.
Parecen vagos
Parecen estar afuera de los limites del sistema
NO agregan valor
Parecen insignificantes, muy inteligentes o demasiado para lo que se necesita realizar

No comments: