Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROFESOR:
ALUMNO:
PRACTICA:
El término diseño admite varias significados. Así, el “diseño” puede ser una actividad, la
“actividad de diseñar”, puede ser un producto, el “resultado de la actividad de diseñar”, o puede
ser un calificativo, y en este sentido es muy común referirse a algo como “de diseño”, cuando
aporta una geometría, una forma o unas cualidades diferenciadoras que implican un aire de
calidad y distinción.
El término “diseño” viene de “diseñar”, que a su vez tiene su origen en el latín, designare, que en
origen significa en trazar (un surco en la tierra) y también dibujar, marcar o designar. De hecho,
la primera acepción del término diseño, en español, es “traza o delineación de una figura o un
edificio”.
Pero el término admite también un significado amplio: “ordenación de los elementos básicos,
tangibles e intangibles, de un objeto o estructura con el fin de aumentar su belleza o utilidad”.
Se debe notar que, de acuerdo con esta significación, el diseño aborda los “elementos básicos”,
esto es, los más relevantes o fundamentales. La ordenación de los detalles correspondería a una
parte del “diseño”, que sería el “diseño detallado”. También se debe apuntar que el diseño no
conlleva necesariamente unas tareas de “cálculo” o de “dimensionamiento preciso”, tareas que sí
formarían parte de un diseño detallado o de las propias de una ingeniería.
Por otro lado, el término “ingeniería”, del latín ingenium, se define como: “el arte de aplicar los
conocimientos científicos a la invención, utilización o perfeccionamiento de la técnica en todas
sus determinaciones”.
La ingeniería del diseño abarca un conjunto de principios, conceptos y prácticas que conducen al
desarrollo de un sistema o producto de alta calidad. Los principios del diseño establecen una
filosofía primordial que guían al diseñador en el trabajo que desempeña. Es necesario
comprender los conceptos del diseño antes de que se aplique las mecánicas de la práctica del
diseño, y la práctica del diseño mismo conduce a la creación de varias representaciones del
software, el cual sirve como guía para la actividad de construcción que sigue.
La ingeniería del diseño no es una frase común dentro del contexto de la ingeniería del software.
Sin embargo debería serlo. El diseño es una actividad primordial de la ingeniería. A principios de
la década de 1990, Mitch Kapor, presento un “manifiesto sobre el diseño de software” en Dr.
Dobbs jornual. Ahí afirma.
¿Qué es el diseño? Es el lugar en donde una persona se puede parar con un pie en dos
mundos, el mundo de la tecnología y el de la gente y los propósitos humanos, e intenta unirlos.
El crítico de la arquitectura romana Vitruvius aporto la noción de que las construcciones bien
diseñadas eran aquellas que mostraban firmeza, comodidad y placer. Lo mismo debe decirse del
buen software. Firmeza: el programa no debe tener ningún error que inhiba su función.
Comodidad: un programa debe cumplir con los propósitos para los que fue creado. Placer: la
experiencia de usar el programa debe ser agradable. Aquí se presentan los principios de una
teoría de diseño de software.
El diseño del software es un proceso iterativo mediante el cual los requerimientos se traducen en
un “plano” para construir el software. Para lograr que un diseño sea presentable se deben seguir
ciertas pautas.
1. Un diseño debe presentar una estructura arquitectónica que se halla creado mediante
patrones de diseño reconocibles, la integren componentes que exhiban buenas
características de diseño y que pueda implementarse de manera evolutiva para que de
estar forma facilite la implementación y las pruebas.
2. Un diseño debe ser modular.
3. Un diseño debe contener distintas representaciones de los datos, la arquitectura, las
interfaces y los componentes.
4. Un diseño debe conducir a estructuras de datos que sean apropiadas para las clases
que habrán de implementarse y que procedan de patrones de datos reconocibles.
5. Un diseño debe conducir a componentes que representan características funcionales
independientes.
6. Un diseño debe conducir a interfaces que reduzcan la complejidad de las conexiones
entre los componentes y el ambiente externo.
7. Un diseño debe obtenerse por medio de un método repetible que se base en la
información obtenida durante el análisis de requisitos del software.
8. Un diseño debe representarse por medio de una notación que comunique de manera
eficaz su significado.
Características
1. La funcionalidad.
2. La facilidad.
3. La confiabilidad.
4. El desempeño.
5. La so portabilidad, la adaptabilidad y la servicialidad.
Se inicia con el enunciado de una función o descripción de los datos que se define como
un alto grado de abstracción.
Este describe los datos o función de manera conceptual pero no proporciona información
acerca de los trabajos internos de la función o estructura interna de los datos.
El refinamiento hace que el diseñador trabaje sobre el enunciado original y que
proporcione más y más detalles conforme se realiza cada refinamiento sucesivo.
Tipos de patrones
ABSTRACCIÓN
Cuando se considera una solución modular a cualquier problema se pueden exponer muchos
grados de abstracción. En un alto grado de abstracción una solución se establece en términos
generales con el lenguaje del entorno del problema. En los grados de menor abstracción se
proporciona una descripción más detallada de la solución.
“la abstracción es una de las formas fundamentales en las que el humano se enfrente a la
complejidad”.
En la medida en que cambian los diferentes grados de abstracción se trabaja para crear
abstracciones procedimentales y de datos. Una abstracción procedimental se refiere a una
secuencia de instrucciones que tiene una función específica y limitada. El nombre de abstracción
procedimental implica estas funciones, pero se omiten detalles específicos. Un ejemplo de
abstracción procedimental sería la palabra abrir para una puerta. Abrir implica una larga
secuencia de pasos procedimentales (por ejemplo, caminar a la puerta, alcanzar la manija, darle
vuelta a la manija y empujar la puerta, hacerse a un lado para abrir paso a la puerta que se abre,
etc.).
Una abstracción de datos es una colección nombrada de datos que describe un objeto de datos.
En el contexto de abstracción procedimental, abrir se puede definir como una abstracción de
datos llamada puerta. Como cualquier objeto de datos, la abstracción de datos para puerta
abarcaría una serie de atributos que la describan (por ejemplo, puerta, tipo, dirección de
apertura. mecanismo de apertura, peso, dimensiones). Se puede decir que la abstracción
procedimental abrir emplearía la información contenida en los atributos de la abstracción de
datos. Puerta.
ARQUITECTURA.
La arquitectura del software alude a “la estructura general del software y las formas en que la
estructura proporciona una integridad conceptual para un sistema”. En su forma más simple, la
arquitectura es la estructura u organización de los componentes del programa (módulos), la
manera en que estos componentes interactúan, y la estructura de datos que utilizan los
componentes. En un sentido más amplio, sin embargo, los componentes pueden generalizarse
para representar elementos importantes del sistema y sus interacciones.
“Una arquitectura del software es el producto del trabajo de desarrollo que ofrece el mayor
rendimiento de la inversión con respecto a la calidad, el tiempo y el costo.”
Una de las metas del diseño de software es derivar una representación arquitectónica de un
sistema. Esta representación sirve como el marco de trabajo a partir del cual se conducen
actividades de diseño más detalladas. Un conjunto de patrones arquitectónicos permite que un
ingeniero de software reutilice conceptos en el nivel de diseño.
El diseño arquitectónico puede representarse al usar uno o más de muchos modelos diferentes.
Los modelos estructurales representan la arquitectura como una colección organizada de
componentes del programa. Los modelos del marco de trabajo incrementan el grado de
abstracción del diseño al intentar identificar marcos de trabajo repetibles del diseño
arquitectónico que se encuentran en tipos de aplicaciones similares. Los modelos dinámicos
abordan los aspectos conductuales de la arquitectura del programa, al indicar cómo puede
cambiar la configuración de la estructura o el sistema, como función de los eventos externos. Los
modelos del proceso se centran en el diseño del proceso técnico o de negocios que el sistema
debe contener. Por último, los modelos funcionales pueden utilizarse para representar la
jerarquía funcional de un sistema.
“Cada patrón describe un problema que ocurre uno y otra vez en nuestro entorno, y después
describe la esencia de la solución a dicho problema, de tal formo que puedas usar esta solución
un millón de veces más, sin nunca hacerlo dos veces de la misma forma.”
3) si el patrón puede servir como guía para desarrollar un patrón similar, pero diferente en
cuanto a la funcionalidad o estructura.
MODULARIDAD
Se ha establecido que la “modularidad es el atributo particular del software que permite que un
programa sea manejable de manera intelectual.” El software monolítico (es decir, un programa
grande compuesto por un módulo sencillo) no puede entenderlo con facilidad un ingeniero de
software. El número de rutas de control, la amplitud de las referencias, el número de variables y
la complejidad general imposibilitaría comprenderlo. Este punto se ilustra con el siguiente
argumento, basado en observaciones de solución de problemas humanos.
También se deduce que la complejidad observada de dos problemas, cuando están combinados,
con frecuencia es mayor que la suma de las complejidades observadas cuando cada una de
ellas se toma por separado: esto conduce a una estrategia de “divide y vencerás” (es más fácil
resolver un problema complejo cuando éste se divide en piezas más manejables). Esto tiene
implicaciones importantes con respecto a la modularidad y al software. De hecho, es un
argumento para la modularidad.
El refinamiento ayuda al diseñador a revelar los detalles de grado menor mientras se realiza el
diseño
CLASES DE DISEÑO
1. Las clases de interfaz con el usuario definen las abstracciones necesarias para la
interacción humano-computadora.
2. Las clases del dominio de negocios proceso de refinamiento de las clases anteriores,
donde se identifican los atributos y servicios necesarios para implementar algún
elemento del dominio de negocios.
3. Las clases del proceso implementan abstracciones del negocio en un nivel más bajo, las
cuales se requieren para el manejo de las clases del dominio de negocio.
4. Las clases persistentes representan almacenamientos de datos que persistirán más allá
de la ejecución el software.
5. Las clases de sistema implementan las funciones que permite que el sistema opere y se
comunique dentro de su entorno de computación y con el mundo exterior.
Las clases de interfaz con el usuario definen todas las abstracciones necesarias para la
interacción humano-computadora (IHC). En muchos casos, la (IHC). En muchos casos,
la IHC ocurre dentro del contexto de una metáfora (por ejemplo, un libro de verificación,
un formato de orden, una máquina de fax) y las clases de diseño para la interfaz pueden
ser representaciones visuales de los elementos de la metáfora.
• Las clases del dominio de negocios a menudo son refinamientos de las clases de análisis.
Las clases identifican los atributos y servicios (métodos) necesarios para implementar algún
elemento del dominio de negocios.
• Las clases de proceso implementan abstracciones del negocio en un nivel más bajo, las
cuales se requieren para manejar por completo las clases del dominio de negocios.
• Las clases persistentes representan almacenamientos de datos (por ejemplo, una base de
datos) que persistirán más allá de la ejecución del software.
1. Completa y suficiente una clase de diseño debe ser la encapsulación completa de todos
los atributos y métodos que se pueden esperar, en forma razonable, que existan para la
clase, es decir, que debe contener los métodos aquellos que sean suficientes para lograr
el objetivo ni más ni menos.
2. Primitivismo, los métodos asociados a una clase de diseño deben enfocarse en el
cumplimiento de un servicio para la clase. Una vez que el servicio ha sido implementado
con un método, la clase no debe proporcionar otra forma de complementar la misma.
3. Cohesión alta, una clase de diseño cohesiva tiene un conjunto de responsabilidades
pequeño y enfocado, y aplica atributos y métodos de manera sencilla para implementar
dichas responsabilidades.
4. Acoplamiento bajo dentro del modelo de diseño es necesario que las clases de diseño
colaboren con alguna otra. Sin embargo, la colaboración se debe mantener en un
mínimo aceptable. Si un modelo de diseño tiene un acoplamiento alto, el sistema es
difícil de implementar, probar y mantener a través del tiempo. En general las clases de
diseño dentro de un subsistema deben tener solo un conocimiento limitado de las clases
en otros subsistemas. Esta restricción, llamada la Ley de Deméter, sugiere que un
método solo debe enviar mensajes a métodos de clases vecinas.
BIBLIOGRAFÍA
Libros:
Booch G.
1996.
2° Edición.
Editorial Adison Wesley Longman.
Análisis y Diseño Orientado a Objetos con Aplicaciones.
México, Edo. de México.
Pressman R.G.
1995.
3° Edición.
Editorial McGraw Hill.
Ingeniería del Software. Un Enfoque Práctico.
México, DF.