Aplicaciones en Ambientes Propietarios 1 7
Aplicaciones en Ambientes Propietarios 1 7
Aplicaciones en Ambientes Propietarios 1 7
PROPIETARIOS
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE SISTEMAS
INGENIERÍA EN SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN
11/07/2021 1
1. Principios de diseño de software
1.1 Niveles de abstracción: diseño arquitectónico
11/07/2021 2
1. Principios de diseño de software
1.1 Niveles de abstracción: diseño arquitectónico
11/07/2021 3
1. Principios de diseño de software
1.1 Niveles de abstracción: diseño arquitectónico
11/07/2021 4
1. Principios de diseño de software
1.1 Niveles de abstracción: diseño arquitectónico
11/07/2021 5
1. Principios de diseño de software
1.1 Niveles de abstracción: diseño arquitectónico
11/07/2021 6
1. Principios de diseño de software
1.1 Niveles de abstracción: diseño arquitectónico
11/07/2021 7
1. Principios de diseño de software
1.1 Niveles de abstracción: diseño arquitectónico
11/07/2021 8
ARQUITECTURA DE UN SISTEMA PARA UN ROBOT EMPACADOR
Sistema de visión
Sistema de
Controlador Controlador
identificación de
de brazo de sujetador
objetos
Sistema de
selección de
empaque
Sistema de Controlador de
empacado transportadora
11/07/2021 9
1. Principios de diseño de software
1.1 Niveles de abstracción: diseño arquitectónico
11/07/2021 10
1. Principios de diseño de software
1.2 Niveles de abstracción: diseño detallado
11/07/2021 11
1. Principios de diseño de software
1.3 Separación de aspectos
11/07/2021 12
1. Principios de diseño de software
1.4 Ocultamiento de información
11/07/2021 13
1. Principios de diseño de software
1.5 Cohesión y acoplamiento
11/07/2021 14
1. Principios de diseño de software
1.6 Reutilización de estructuras estándares
• Algunas de las más usadas actualmente se denominan
frameworks.
• Framework es una estructura genérica que se extiende
para crear una aplicación o un subsistema más específico.
• Según Schmidt (2004) framework es un conjunto
integrado de artefactos de software (tales como clases,
objetos y componentes) que colaboran en la facilitación
de una arquitectura de reutilización para una familia de
aplicaciones relacionadas.
11/07/2021 15
1. Principios de diseño de software
1.6 Reutilización de estructuras estándares
• Brindan soporte para características genéricas que
puedan ser utilizadas en todas las aplicaciones de un
tipo similar.
• Ejemplo: un framework de interfaz de usuario da
soporte para manejo de evento de interfaz e incluirá
un conjunto de artilugios que pueden usarse para
construir despliegues.
• El desarrollador especializa éstos agregando
funcionalidad específica para una aplicación particular.
11/07/2021 16
1. Principios de diseño de software
1.6 Reutilización de estructuras estándares
• Los frameworks ofrecen una arquitectura que sirve de
esqueleto para la aplicación.
• Permite reutilizar clases específicas.
• La arquitectura se define por las clases de objetos y sus
interacciones.
• Las clases se reutilizan directamente y pueden
extenderse utilizando la herencia, por ejemplo
• Los frameworks son específicos del lenguaje: Java, C#,
C++, Ruby, Phyton.
11/07/2021 17
1. Principios de diseño de software
1.6 Reutilización de estructuras estándares
• Fayad y Schmidt (1997) definen 3 clases de frameworks:
1. Frameworks de infraestructura de sistema.
- Apoyan el desarrollo de infraestructuras de sistema, como comunicaciones, interfaces de usuario y
compiladores.
2. Frameworks de integración de middleware.
• Conjunto de estándares y clases de objetos asociados que soportan comunicación de componentes
e intercambio de información. Ejemplos: .NET de Microsoft y EJB (Enterprise Java Beans).
3. Frameworks de aplicación empresarial.
• Se ocupan de dominios de aplicación específicos: Sistemas de telecomunicaciones o financieros.
• El conocimiento del dominio de la aplicación integra y apoya el desarrollo de aplicaciones de usuario
final.
4. Frameworks de aplicación Web (WAF).
• Son más recientes y apoyan la construcción de sitios Web dinámicos.
• La arquitectura de un WAF se basa por lo general en el patrón compuesto Modelo-Vista-Controlador
(MVC).
11/07/2021 18
2. Paradigmas de diseño
2.1 Diseño estructurado
- Es orientado a procesos
- Se basa en la descomposición top-down (de arriba hacia abajo) de los
sistemas
- Propone 3 diagramas:
- DFD (Diagrama de Flujo de Datos): modela los procesos como círculos o elipses,
los flujos con líneas con flechas y los depósitos como 2 líneas paralelas.
- DER (Diagrama Entidad Relación): modela los datos como rectángulos, los
atributos como elipses conectadas a los datos y las relaciones entre datos como
rombos.
- DTE (Diagramas de Transición de Estados): usados básicamente para sistemas de
tiempo real. Permite modelar los estados como rectángulos y las transiciones
como líneas con flechas.
11/07/2021 19
2. Paradigmas de diseño
2.2 Análisis y diseño orientado a objetos
- Es orientado a datos
- Se basa en la identificación de objetos del mundo real para
representarlos en software.
- Actualmente se usa un proceso muy conocido como UP (Unified
Process o Proceso Unificado) y UML (Unified Modeling Language –
Lenguaje de Modelamiento Unificado) como metodología de
desarrollo.
- Siguiendo el proceso y UML, se empieza con la identificación de
casos de uso y se sigue el proceso apoyado de varios diagramas
propuestos por UML, como clases, objetos, actividades, estado,
secuencia, colaboración, componentes y despliegue.
11/07/2021 20
2. Paradigmas de diseño
2.3 Diseño orientado a eventos
• Muestra cómo un sistema responde a eventos externos e
internos.
• Base: un sistema tiene un número finito de estados.
• Los eventos (estímulos) pueden causar una transición de
un estado a otro.
• Es útil particularmente para sistemas de tiempo real.
• Estos métodos de diseño en tiempo real fueron
propuestos por Ward y Mellor (1985) y Harel (1987, 1988)
• Se usan los diagramas de estado en UML.
11/07/2021 21
2. Paradigmas de diseño
2.4 Diseño a nivel de componentes
• Se basa en la reutilización de componentes de software.
• Se motiva porque el desarrollo OO no conducía a un
reutilización extensa.
• Los componentes son abstracciones de alto nivel y se
definen mediante sus interfaces.
• Son más grandes que los objetos individuales.
• Todos los detalles de implementación se ocultan a otros
componentes.
11/07/2021 22
2. Paradigmas de diseño
2.4 Diseño a nivel de componentes
• Se sigue un proceso de definir, implementar e integrar o
componer los componentes independientes e
imprecisos en los sistemas.
• Ayuda a enfrentar la complejidad y a entregar un
software con mayor rapidez.
• Fundamentos:
1. Componentes independientes que se especifican por
completo mediante sus interfaces.
• Debe existir separación clara entre la interfaz y su implementación.
11/07/2021 23
2. Paradigmas de diseño
2.4 Diseño a nivel de componentes
• Fundamentos:
2. Estándares de componentes que facilitan la integración de éstos.
– Definen, a un nivel mínimo, cómo deben especificarse las
interfaces y cómo se comunican los componentes.
– Algunos modelos definen las interfaces que deben
implementarse por todos los componentes integrantes.
– Al usar estándares, su ejecución es independiente del lenguaje
de programación utilizado.
– Componentes escritos en diferentes lenguajes pueden integrarse
en el mismo sistema.
11/07/2021 24
2. Paradigmas de diseño
2.4 Diseño a nivel de componentes
• Fundamentos:
3. Middleware que brinda soporte de software para integración de
componentes.
– Permiten que componentes independientes distribuidos trabajen
en conjunto, porque el middleware soporta las comunicaciones
de componentes.
– El middleware maneja eficientemente los conflictos de bajo nivel
y permite enfocarse en problemas relacionados con la aplicación.
– Asigna recursos, gestiona transacciones, seguridad y
concurrencia.
11/07/2021 25
2. Paradigmas de diseño
2.4 Diseño a nivel de componentes
• Fundamentos:
4. Un proceso de desarrollo que se engrana con la
ingeniería de software basada en componentes.
• Principios de diseño orientado a componentes:
1. Los componentes son independientes:
• Sus ejecuciones no interfieren entre sí.
• Se ocultan los detalles de la implementación.
• Se puede cambiar la implementación sin afectar al resto
del sistema.
11/07/2021 26
2. Paradigmas de diseño
2.4 Diseño a nivel de componentes
• Principios de diseño orientado a
componentes:
2. Los componentes se comunican a través de
interfaces bien definidas:
– Si las interfaces se mantienen, es posible sustituir
un componente por otro.
– Se ofrece entonces funcionalidad adicional o
mayor.
11/07/2021 27
2. Paradigmas de diseño
2.4 Diseño a nivel de componentes
• Principios de diseño orientado a
componentes:
3. Las infraestructuras de componentes ofrecen
varios servicios estándar que pueden usarse en
sistemas de aplicación.
– Esto reduce la cantidad de código nuevo que debe
desarrollarse.
11/07/2021 28
2. Paradigmas de diseño
2.5 Diseño centrado en la estructura de datos
• Permite diseñar el sistema basado en una perspectiva
estructural.
• Se modela la organización de un sistema o la estructura
de datos que procese el sistema.
• Los datos son la abstracción más importante.
• Son la base para desarrollar sistemas de información o
empresariales.
• Se basan en los modelos ER o en los diagramas de clases
y objetos en desarrollo OO.
11/07/2021 29
2. Paradigmas de diseño
2.6 Diseño orientado a aspectos
• Identifica los aspectos del sistema.
• Los aspectos implementan los requerimientos no
funcionales del sistema.
• Los aspectos son transversales al software.
• Usan lenguajes orientados a aspectos y lenguajes
funcionales.
• Los lenguajes funcionales pueden ser desde
ensamblador, pasando por lenguajes estructurados,
hasta orientados a objetos.
11/07/2021 30
2. Paradigmas de diseño
2.7 Diseño orientado a la función
• Se determina como abstracción fundamental la funcionalidad que se
incluirá en el sistema.
• También implica determinar cuál es la funcionalidad que ofrece el
entorno del sistema.
• Unos procesos podrán implementarse, mientras que otros podrán ser
manuales o soportados por sistemas diferentes.
• Se determinan posibles traslapes en la funcionalidad con los sistemas
existentes.
• También se determina dónde tiene que implementarse nueva
funcionalidad.
• Se determina siempre cuál es la frontera entre el sistema y su entorno.
11/07/2021 31
2. Paradigmas de diseño
2.8 Diseño orientado a los servicios
• Los servicios son un desarrollo natural de los
componentes de software, donde el modelo de
componentes es, en esencia, un conjunto de estándares
asociados con servicios web.
• Servicio:
– Un componente de software de reutilización, debidamente
ajustado, que ofrece discreta funcionalidad, la cual puede
distribuirse y a la que se accede de manera programática. Un
servicio Web es un servicio al que se accede mediante
protocolos estándar de Internet y basados en XML.
11/07/2021 32
2. Paradigmas de diseño
2.8 Diseño orientado a los servicios
• Los servicios deben ser independientes y ajustarse debidamente.
• Los servicios siempre deben operar en la misma forma, sin importar su
entorno de ejecución.
• Sus interfaces son una interfaz «proporciona» que permite el acceso a la
funcionalidad del servicio.
• Los servicios tienen la intención de ser independientes y utilizables en
diferentes contextos.
• Por tanto, no tienen una interfaz «requiere» que, en diseño orientado a
componentes, define a los otros componentes del sistema que deben estar
presentes.
• Los servicios se comunican mediante el intercambio de mensajes, expresados
en XML, y dichos mensajes se distribuyen con protocolos estándar de
transporte de Internet como HTTP y TCP/IP.
11/07/2021 33
2. Paradigmas de diseño
2.8 Diseño orientado a los servicios
• Se basa en la ingeniería del servicio, que es el proceso de
desarrollo de servicios para reutilización en aplicaciones
orientadas a servicios.
• El servicio debe representar una abstracción de reutilización
que podría ser útil en diferentes sistemas.
• Se debe diseñar funcionalidad generalmente útil asociada con
dicha abstracción.
• Se debe garantizar que el servicio es robusto y fiable.
• Deben documentar el servicio de modo que puedan descubrir
y comprender los usuarios potenciales.
11/07/2021 34
2. Paradigmas de diseño
2.8 Diseño orientado a los servicios
• Etapas lógicas en el proceso de ingeniería del servicio:
1. Identificación de candidatos a servicio, donde se identifican
los posibles servicios que se podrían implementar y se
definen los requerimientos del servicio.
2. Diseño del servicio, donde se diseñan las interfaces lógica y
de servicio WSDL.
3. Implementación y despliegue del servicio, donde el servicio
se implementa, se prueba y se pone a disposición del
usuario.
11/07/2021 35
2. Paradigmas de diseño
2.8 Diseño orientado a los servicios
• El punto de partida es un servicio existente o un
componente que ser convertirá a servicio.
• El proceso de diseño implica generalizar el
componente existente de manera que se eliminen
características específicas de la aplicación.
• Implementar significa adaptar el componente al
agregar interfaces de servicio e implementar las
generalizaciones requeridas.
11/07/2021 36
3. Modelos estructurales
• Muestran la organización de un sistema, en términos de
los componentes que constituyen dicho sistema y sus
relaciones.
• Pueden ser:
– Modelos estáticos: muestran la estructura del diseño del
sistema.
– Modelos dinámicos: revelan la organización del sistema cuando
se ejecuta.
– Se crean cuando se discute y diseña la arquitectura del sistema.
– En UML se usan los diagramas de componentes, de paquete y
de implementación para realizar los modelos arquitectónicos.
11/07/2021 37
3. Modelos estructurales
3.1 Diagramas de clase
• Se usan para desarrollar un modelo de sistema
orientado a objetos.
• Muestran las clases en un sistema y sus
relaciones.
• Las clases se consideran como la definición
general de un tipo de objeto del sistema.
• La relación es un vínculo entre clases.
11/07/2021 38
3. Modelos estructurales
3.1 Diagramas de clase
• Los objetos representan algo en el mundo real:
paciente, receta, médico, etc.
• En la implementación se definen objetos de
implementación adicionales que se usan para dar
la funcionalidad requerida del sistema
• El enfoque a usarse será el de modelar objetos del
mundo real, como parte de los requerimientos o
como procesos de diseño del software.
11/07/2021 39
3. Modelos estructurales
3.1 Diagramas de clase
• El proceso empieza identificando objetos del mundo real que
sean relevantes para la solución del problema.
• Se los representa como clases dentro de un rectángulo
dividido en tres partes:
– Nombre de la clase, que debe empezar en mayúscula.
– Atributos, que incluyen el nombre con minúscula, su tipo y
opcionalmente su valor inicial.
– Operaciones: que contiene el nombre, paréntesis y opcionalmente
dentro de los paréntesis los argumentos con tipo, y luego del
paréntesis derecho el tipo de valor devuelto, si la operación
devuelve algún valor.
11/07/2021 40
Paciente
11/07/2021 41
3.1 Diagramas de clase
• Herencia: permite definir una sola vez atributos y operaciones
comunes a varias clases, denominadas subclases, y heredar sin
volverlas a definir, a partir de una clase denominada superclase.
• Se usa el símbolo de una línea con flecha ancha que apunta a la
superclase.
• Las subclases quedan del otro lado de la línea.
• Las subclases deben agregar por lo menos un atributo y/o una
operación propia, adicional a lo que heredan y, que deben ser
diferentes a las de las demás subclases.
• El nombre de la relación es: «es un tipo de»
• Ejemplo: Desktop «es un tipo de» Computador.
11/07/2021 42
Cuenta
número : String
saldo : float
CuentaCorriente CuentaAhorros
sobregiro : float interés : float
11/07/2021 43
3.1 Diagramas de clase
• Agregación: muestra una relación en donde hay
objetos que representan el todo y otros que
representan las partes.
• El nombre de la relación es: «es parte de». Ejemplo:
Monitor «es parte de» Desktop.
• Si el todo depende de las partes, se llama
«agregación».
• Si las partes dependen de la existencia del todo se
denomina «composición».
• El símbolo es el «brillo» o «diamante».
11/07/2021 44
Desktop
marca : String
modelo : String
Desktop()
Monitor Teclado
resolución : String númeroTeclas : int
11/07/2021 45
3.2 Diagramas de objetos
• Es similar al diagrama de clases, pero con los
nombres de los objetos involucrados.
• Los atributos ya no se muestran como tales
sino se colocan los valores de los mismos.
• No deben aparecer operaciones, pero se estila
mostrarlas por motivos de entendimiento.
• Permiten validar los diagramas de clases.
11/07/2021 46
aap : Materia
Aplicaciones en Ambientes Propietarios
SIC554
victoria : Estudiante 4
Karla obligatoria
Victoria toma Ingeniería de Software
Yánez
Escarabay
Av. El Inca y Nogales
2430337
s toma inteligencia artificial : Materia
22-06-1994 Inteligencia Artificial
f SIC524
fe 4
0984061747 obligatoria
Inteligencia - Artificial
11/07/2021 47
3.3 Diagramas de componentes
• Son diagramas que se muestran en la etapa de
implementación.
• Permiten agrupar clases y objetos en
componentes que puedan ser implementados
en el sistema.
• Se usan los estándares de UML, que se
muestran a continuación.
11/07/2021 48
Diagrama de componentes a nivel de
subsistemas
Subsistema de Subsistema de
Matrículas Inscripciones
Subsistema de
Notas
11/07/2021 49
Diagrama de componentes a nivel de
componentes dentro de subsistemas
Ejemplo: Subsistema de Matrículas
Estudiante.cs Materia.cs
11/07/2021 50
4. Modelos de comportamiento
• Son diagramas que muestran la parte
dinámica del sistema.
• Muestran la interacción del sistema con el
medio externo.
• Muestran la secuencia de actividades que
realiza un caso de uso.
• Muestran los objetos involucrados en un caso
de uso y la interacción entre ellos.
11/07/2021 51
4.1 Diagramas de casos de uso
• Muestran los actores, los casos de uso y la asociación
entre estos.
• Los actores son elementos externos al sistema y se
comunican con él por medio de asociaciones que
representan eventos de entrada/salida.
• Los casos de uso indican los procesos que hace el sistema.
• Los casos de uso están al servicio y resuelven las
necesidades de los actores.
• Un caso de uso contiene varias secuencias de actividades.
11/07/2021 52
Diagrama de casos de uso
ingresarAlSistema
coMa, numPar | horario, "No existe materia" OR "No existe paralelo" <<include>>
<<include>>
consultarPrerrequisitoDeMateria verificarMateria
Estudiante
(from Logical View) <<include>>
primerNombre : String
segundoNombre : String
primerApellido : String
segundoApellido : String
direcciónDelDomicilio : String
teléfonoDelDomicilio : String registrarInscripciónEnUnaMateria
estadoCivil : char
fechaDeNacimiento : Date
sexo : char
género : char
teléfonoCelular : String
11/07/2021 53
4.2 Diagramas de Actividad
• Representan las secuencias de actividades de un caso de uso.
• Cada actividad es un tipo de estado.
• Contienen estados inicial y final.
• Se muestran las secuencias de las actividades.
• Se usan elementos que representan:
– Estado
– Actividad o acción
– Decisión
– Secuencia
– Calles (swimlanes)
– Barras para división y unión de actividades o acciones
11/07/2021 54
Diagrama de actividad
ingresarLogin
ingresarPassword
validarLogin
true false
¿login correcto?
validarPassword mostrarMensaje"Creden
ciales incorrectas"
false
true ¿password correcto?
mostrarMensaje"Bienve
nido al sistema"
11/07/2021 55
4.3 Diagramas de Secuencia
• Son un tipo de diagramas de interacción.
• Muestran de manera temporal los objetos y los
mensajes que intercambian los objetos dentro
de una secuencia de eventos de un caso de uso.
• Se representan objetos verticalmente y
mensajes entre objetos horizontalmente.
• Los mensajes poseen argumentos y son
llamados a funciones de otros objetos.
11/07/2021 56
Diagrama de secuencia para ingresar al
sistema con login y password correctos
: Usuario
: Estudiante
1: ingresarLogin(log:String)
2: ingresarPassword(pass:String)
3: verificarLogin():boolean
4: true
5: verificarPassword(String)
6: true
7: mostrarMensaje("Bienvenido al Sistema")
11/07/2021 57
Diagrama de secuencia para ingresar al
sistema con login incorrecto
: Usuario
: Estudiante
1: ingresarLogin(log:String)
2: ingresarPassword(pass:String)
3: validarLogin():boolean
4: false
5: mostrarMensaje("Credenciales incorrectas")
11/07/2021 58
4.4 Diagramas de Colaboración
• También son un tipo de diagramas de
interacción.
• Muestran, de manera estructural, los objetos y
los mensajes que intercambian los objetos en
un caso de uso.
• Son iguales a los diagramas de secuencia, con la
diferencia de que los de secuencia muestran los
mensajes en el tiempo, mientras que los de
colaboración los muestran en el espacio.
11/07/2021 59
Diagrama de colaboración para login y
password correctos
1: ingresarLogin(log:String)
2: ingresarPassword(pass:String)
3: verificarLogin():boolean
5: verificarPassword(String)
: Usuario
4: true
: Estudiante 6: true
7: mostrarMensaje("Bienvenido al Sistema")
11/07/2021 60
5. Reutilización de software
• Se estudian tres tipos de elementos
ampliamente usados en reutilización de
software:
– Patrones de diseño
– Componentes
– Refactorización
• La reutilización permite desarrollar software
más rápido, a menor costo y con mayor
confiabilidad y calidad.
11/07/2021 61
5.1 Patrones de diseño - Design Patterns
• El patrón es una descripción del problema y la esencia de
su solución, por lo que la solución puede reutilizarse en
diferentes configuraciones.
• El patrón no es una especificación detallada.
• Se la puede considerar como una descripción de sabiduría
y experiencia acumuladas: una solución bien probada a un
problema común.
• Los patrones y los lenguajes de patrón son formas de
describir mejores prácticas, buenos diseños, y captan la
experiencia de tal manera que es posible que otros
reutilicen esta experiencia.
11/07/2021 62
5.1 Patrones de diseño
• Se puede explicar el diseño al describir los
patrones que se utilizaron.
• Los patrones más conocidos los hicieron la
“Banda de los cuatro” en su libro de patrones.
• También constan en publicaciones realizadas
por autores de la compañía Siemens.
• Se asocian con el diseño orientado a objetos.
• Se apoyan en herencia y polimorfismo.
11/07/2021 63
5.1 Patrones de diseño
• Los cuatro elementos esenciales de los patrones de diseño, definidos
por la “Banda de los cuatro” en su libro son:
1. Un nombre que sea una referencia significativa al patrón.
2. Una descripción del área problemática que enuncie cuándo puede
aplicarse el patrón.
3. Una descripción de la solución de las partes de la solución del diseño,
sus relaciones y responsabilidades. Es una plantilla para que una
solución de diseño se instale en diferentes formas. Se expresa
gráficamente y muestra las relaciones entre los objetos y las clases de
objetos en la solución.
4. Un estado de las consecuencias, los resultados y las negociaciones al
aplicar el patrón. Ayuda a los diseñadores a entender si es factible usar
o no un patrón en una situación particular.
11/07/2021 64
5.2 Componentes
• Para desarrollar software orientado a componentes, se usa la
Ingeniería de Software Basada en Componentes (CBSE –
Component Based Software Engineering).
• Se basa en la reutilización de componentes de software.
• La CBSE es el proceso de definir, implementar e integrar o
componer los componentes independientes e imprecisos de
sistemas.
• La única forma de enfrentar la complejidad y entregar un mejor
software con mayor rapidez es reutilizar en lugar de implementar
una vez más componentes de software.
• La siguiente tabla muestra las características esenciales de un
componente como se usa en CBSE.
11/07/2021 65
Característica del componente Descripción
Estandarizado Estandarización de componentes significa que
un componente utilizado durante un proceso
CBSE debe ajustarse a un modelo de
componentes estándar. Este modelo puede
definir interfaces de componentes, metadatos
de componentes, documentación, composición
e implementación.
Un componente debe ser independiente; debe
Independiente ser factible componerlo e implementarlo sin
usar otros componentes específicos. En
situaciones en que el componente necesita
brindar servicios externos, esto debería
plantearse claramente en una especificación
de interfaz de “requiere”.
Para que un componente sea componible,
Componible todas las interacciones externas deben tener
lugar mediante interfaces definidas
públicamente. Además, debe permitir acceso
externo a información acerca de sí mismo, así
como a sus métodos y atributos.
11/07/2021 66
Característica del componente Descripción
Implementable Para que sea implementable, un componente
debe estar autocontenido. Debe ser capaz de
ejecutarse como entidad independiente en una
plataforma de componente que permita una
implementación del modelo de componentes.
Por lo general, esto significa que el
componente es binario y no tiene que
compilarse antes de su implementación. Si un
componente se implementa como servicio, no
tiene que implementarse por parte de un
usuario de un componente. En vez de ello, se
implementa por parte del proveedor del
servicio.
11/07/2021 67
5.3 Refactorización
• Es el mejoramiento de la estructura y organización de un
programa.
• Permite evitar la degeneración del código y la integración continua
de nueva funcionalidad.
• Ayuda en la reutilización puesto que la refactorización de
componentes en respuesta a los cambios suele ser relativamente
fácil.
• Ejemplos:
– reorganización de una jerarquía de clases para remover código duplicado.
– Ordenamiento y cambio de nombre de atributos y métodos
– Sustitución de código con llamadas a métodos definidos en la libraría de
un programa.
11/07/2021 68
6. Relación entre requerimientos, diseño y
arquitectura
6.1 Transformación de modelos, diseño de
contratos e invariantes.
- Transformación de modelos
- Los modelos que se elaboran van siendo
transformados conforme se avanza en el ciclo de
vida de desarrollo de software
- Los modelos iniciales tienen alta abstracción y
bajo detalle, mientras que los finales tendrán baja
abstracción y mayor nivel de detalle.
11/07/2021 69
6.1 Diseño de contratos
• Los «contratos» determinan lo que se debe
hacer conforme se avanza en el desarrollo del
sistema.
• Habrá ocasiones en que los contratos
determinen que los modelos no cambien, pero
habrá ocasiones en que se acepten cambios e
inclusive inclusiones o exclusiones de los
artefactos elaborados durante el proceso.
11/07/2021 70
6.1 Invariantes
• Las «invariantes» son elementos o componentes del software que
no cambian en el tiempo.
• Deben mantenerse para preservar principios fundamentales del
producto a elaborar.
• Pueden ser desde constantes hasta pre o pos condiciones que se
mantienen antes o después de un proceso.
• Ejemplo:
– antes de retirar dinero de una cuenta, el saldo de la cuenta debe ser mayor
o igual a cero
– después de retirar dinero de la cuenta, también el saldo debe ser mayor o
igual a cero.
– La invariante es que el saldo siempre debe ser mayor o igual a cero, tanto
antes como después de retirar dinero de una cuenta.
11/07/2021 71
6.2 Definición de arquitectura de software
11/07/2021 73
6.3 Arquitecturas estándares
• El estilo y la estructura arquitectónica que se
elijan para un sistema dependerán de los
requerimientos no funcionales del sistema:
1. Rendimiento:
– si es crítico, la arquitectura debe diseñarse para
localizar operaciones críticas dentro de un
pequeño número de componentes desplegados
en la misma computadora y no distribuidos por la
red.
11/07/2021 74
6.3 Arquitecturas estándares
1. Rendimiento:
– Se debería usar algunos componentes
relativamente grandes, en vez de componentes
de grano fino, lo cual reduce el número de
comunicaciones entre componentes.
– También se puede considerar organizaciones del
sistema en tiempo de operación que lo permitan
ser replicable y ejecutable en diferentes
procesadores.
11/07/2021 75
6.3 Arquitecturas estándares
2. Seguridad: capacidad del sistema para
protegerse contra intrusión accidental o
deliberada:
– Si es crítica, será necesario usar una estructura
en capas para la arquitectura, con los activos
críticos protegidos en las capas más internas, y
con un alto nivel de validación de seguridad
aplicado a dichas capas.
11/07/2021 76
6.3 Arquitecturas estándares
3. Protección: capacidad del sistema para ejecutar sin
fallas catastróficas; es un juicio de cuán probable es que
el sistema causará daños a las personas o su ambiente:
– Si es crítico, la arquitectura debe diseñarse de modo que
las operaciones relacionadas con la protección se ubiquen
en algún componente individual o en un pequeño número
de componentes.
– Así se reducen los costos y problemas de validación de la
protección, y hace posible ofrecer sistemas de protección
relacionados que, en caso de falla, desactiven con
seguridad el sistema.
11/07/2021 77
6.3 Arquitecturas estándares
4. Disponibilidad:
– Si es crítica, la arquitectura tiene que diseñarse
para incluir componentes redundantes de manera
que sea posible sustituir y actualizar componentes
sin detener el sistema.
– Se usan arquitecturas de sistemas tolerantes a
fallas en sistemas de alta disponibilidad.
11/07/2021 78
6.3 Arquitecturas estándares
5. Mantenibilidad:
– Si es crítica, la arquitectura del sistema debe
diseñarse usando componentes autocontenidos
de grano fino que puedan cambiarse con facilidad.
– Los productores de datos tienen que separarse de
los consumidores y hay que evitar compartir las
estructuras de datos.
11/07/2021 79
6.3 Arquitecturas estándares
• Existe conflicto potencial entre algunas de estas
arquitecturas.
• Por ejemplo, usar componentes grandes mejora el
rendimiento, pero utilizar componentes pequeños de
grano fino aumenta la mantenibilidad.
• Si tanto el rendimiento como la mantenibilidad son
requerimientos importantes, debe encontrarse algún
compromiso.
• Esto en ocasiones se logra usando diferentes patrones o
estilos arquitectónicos para distintas partes del sistema.
11/07/2021 80
7. Construcción de software
• Esta actividad combina la generación de
código (ya sea manual o automatizada) y las
pruebas que se requieren para descubrir
errores en éste.
11/07/2021 81
7.1 Prácticas de codificación
• Costumbres, hábitos, prácticas que utilizamos
cuando desarrollamos SW
– Al alcance de todos
– No ligadas a tecnologías concretas
• ¿Cuál es su finalidad?
– Mejorar el desarrollo de software
Código ofuscado
• Si nunca pensaríamos leer un titular como el
siguiente…
Código ofuscado (II)
• Porque codificamos del siguiente modo:
Fuente: New Language Features for Ease of Development in the Java 2 Platform, Standard Edition 1.5
http://java.sun.com/features/2003/05/bloch_qa.html
Código ofuscado (III)
• ¿Por ahorrar tiempo?
– El tiempo tecleando código es insignificante frente
al tiempo depurando
• Buscamos un código fácil de leer
– Los nombres deben de ser descriptivos
– Se debe emplear tiempo
• Escogiendo buenos nombres
• Tecleándolos
• Renombrando los existentes
“The candy machine interface”
61 65
Interfaces de los métodos
• Apliquemos esta metáfora a las interfaces
que ofrecen las funciones/métodos
– Ejemplo: Función realloc() de ANSI C