Acoplamiento y Cohesión en El Software

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 22

<!

--Diseño Detallado de Software-->

Acoplamiento,
Cohesión y SOLID {
<Por="Angela Maria Acosta y
Juan Pablo Caro"/>
}
Qué es Acoplamiento {

Acoplamiento de Contenido

El acoplamiento es la Acoplamiento Común

forma y nivel de Acoplamiento de Control


interdependencia entre Acoplamiento Stamp
módulos de software. Acoplamiento de Datos

}
Tipos de Acoplamiento {

Acoplamiento de Contenido Ejemplo:

Se da cuando un modulo utiliza Componente A: Obtiene la hora actual.


propiedades, funcionalidades o métodos
internos de otro modulo diferente. Componente B: Calcula los minutos que
han pasado en el día. Utiliza el
componente A para conseguir la hora
actual.

}
Tipos de Acoplamiento {

Acoplamiento Común Ejemplo:

Componente A: Calcula el peso ideal de


Cuando se tienen dos componentes y una persona. Necesita la estatura de la
estos dependen de una variable global persona.
(Comparten datos a través de elementos
globales). Componente B: Calcula el nivel de
sobrepeso de una persona. Necesita la
estatura de la persona.

}
Tipos de Acoplamiento {

Acoplamiento de Control Ejemplo:

Componente A: Define que operacion


Cuando un módulo pasa datos que le
matemática debe hacer.
indican a otro qué hacer (El primer
módulo tiene que conocer detalles
Componente B: Hace un calculo
internos del segundo).
matemático. Llama el componente A para

definir que operación hacer.

}
Tipos de Acoplamiento {

Acoplamiento Stamp Ejemplo:

Componente A: Define las propiedades de


una persona: Nombre, Apellido, Fecha
Cuando dos componentes dependen de una
Nacimiento, Altura.
estructura de datos en común, como
cuando se tiene una serie de objetos y
Componente B: Calcula la edad. Utiliza
cada uno de los módulos dependen de una
el componente A para obtener la fecha
parte de dichos objetos.
de nacimiento.

}
Tipos de Acoplamiento {

Acoplamiento de Datos Ejemplo:

Cuando los módulos o componentes Componente A: Obtiene las notas de una


comparten datos primitivos como persona.
enteros, números reales, booleanos. Un
modulo se comunica con otro modulo, Componente B: Calcula el promedio
enviando valores primitivos. ponderado de una persona. El componente
A les pasa las notas.

}
Tipos de Acoplamiento {

Acoplamiento de Mensajes Ejemplo:

Hay una comunicación entre componentes, Componente A: Crea un registro de una


pero no intercambian datos, un método persona en la base de datos. utiliza el
de un modulo o componente llame un componente B para validar que la base
método de otro modulo, Solo lo llama de datos este activa.
conociendo el nombre, pero no manda
parámetros para que se genere un mayor Componente B: Valida que la base de
acoplamiento. datos este activa.

}
Qué es Cohesión {
Cohesión Coincidente
La cohesión es una medida de la Cohesión Lógica
proximidad de la integración entre los Cohesión Temporal
distintos componentes de un módulo.
Cuanto más estrecha sea la combinación Cohesión Procedimental
de los elementos constitutivos del Cohesión Comunicativa
módulo, mayor será la cohesión del
Cohesión Secuencial
módulo y mayor la independencia del
módulo. Cohesión Funcional

}
Tipos de Cohesión {

Cohesión Coincidente Ejemplo:

Cuando un modulo o en una clase se Uso de registros de clientes,


tienen muchas operaciones, sin ninguna visualización de registros de clientes,
relación entre sí. cálculo de ventas totales, lectura de
registros de transacciones, etc.

}
Tipos de Cohesión {

Cohesión Lógica Ejemplo:

Cuando un modulo contiene operaciones Utilice el tipo de registro como


cuya ejecución depende de un parámetro: registro.
el flujo de control del módulo es lo Si el tipo de registro es estudiante.
único que une a las operaciones que lo después,
forman. Mostrar el registro del estudiante.

De lo contrario, si el tipo de registro
es personal, entonces
Mostrar el registro del personal.

}
Tipos de Cohesión {

Cohesión Temporal Ejemplo:

Cuando las operaciones se incluyen en Modulo que tiene como tarea inicializar
un modulo porque han de realizarse al las tareas de un programa.
mismo tiempo. los elementos están
cohesionados en base a un hecho que
sucede en un determinado espacio de
tiempo. Es habitual encontrar este tipo
de cohesión en métodos de
inicialización o finalización.

}
Tipos de Cohesión {

Cohesión Procedimental Ejemplo

·Un módulo continente operaciones que Modulo A: Tiene como funciones, recibir
se realizan en un orden concreto, la información de un usuario, validar
aunque sean independientes. la información, convertirla a un
formato especifico, registrar la
información en la base de datos.

}
Tipos de Cohesión {

Ejemplo:
Cohesión Comunicativa
Modulo A: Obtiene la información de un
Un modulo contiene un conjunto de usuario, calcula la edad, calcula peso
operaciones que se realizan sobre los ideal de la persona, calcula cuantos
mismos datos. años bisiestos ha vivido.

}
Tipos de Cohesión {

Ejemplo:
Modulo A:

Cohesión Secuencial Función A: Recibe año de


nacimiento
Función B: recibe año de nacimiento
Un modulo contiene acciones que han de de función A y calcula la diferencia
realizarse en un orden en particular entre las fechas.
sobre unos datos concretos para Función C: Recibe diferencia entre
completar la tarea. las fechas de la función B y calcula
los años.

}
Tipos de Cohesión {

Cohesión Funcional Ejemplo:

Modulo A:

Cuando las operaciones de un módulo Función A: Calcula el seno de un


están altamente relacionadas y triángulo
contribuyen a una única tarea bien Función B: Calcula el coseno de un
definida. triangulo.
Función C: Obtiene la función A y B
para calcular la tangente.

}
Principios SOLID { S - Single Responsability Principle
O - Open/Closed Principle
L - Liskov Substitution Principle
I - Interface Segretation Principle
D - Dependency Inversion Principle

Representan los principios básicos de la programación orientada a objetos. La intención de


seguir estos principios es eliminar malos diseños, evitar la refactorización y construir un
código más eficiente y fácil de mantener

Objetivos:
Crear un software eficaz: que cumpla con su cometido y que sea robusto y estable.
Escribir un código limpio y flexible ante los cambios: que se pueda modificar fácilmente
según necesidad, que sea reutilizable y mantenible.
Permitir escalabilidad: que acepte ser ampliado con nuevas funcionalidades de manera
ágil.
¡Crear Software de Calidad!

}
Single Responsability
Principle {
void enviarEmail(Usuario usuario, String
mensaje) {
Este principio establece que un
componente o clase debe tener una enviarMail;
responsabilidad única, sencilla y
concreta. }

}
public class CarroCarreras extends Carro {
Open/Closed Principle {
@Override
void acelerar() {
inyectarExtraGas();
Este principio establece que los super.acelerar();
componentes del software deben estar }
abiertos para extender a partir de private void inyectarExtraGas() {
ellos, pero cerrados para evitar que
se modifiquen. }
}

}
public class ElectricCar implements ICar {

private int battery;

@Override
public void accelerate() {
Liskov Substitution if (hasBattery()) {
Principle { System.out.println("Acelerando");
} else {
System.out.println("No puede acelerar");
}
Este principio establece que una }
subclase puede ser sustituida por su

superclase. public class CarDrive {


public static void main(String[] args) {
ICar car;
car.accelerate();
}
} }
public interface IProduct {

String getType();
}

Interface Segretation public interface IRestrictedProduct {


int getAge();
Principle { }

class Shoes implements IProduct {

Este principio establece que los


@Override
clientes no deben ser forzados a
public String getType() {return "shoes";}
depender de interfaces que no
}
utilizan. Es importante que cada clase
implemente las interfaces que va a class Games implements IProduct, IRestrictedProduct{
utilizar. De este modo, agregar nuevas private int age;
funcionalidades o modificar las
existentes será más fácil. @Override
public String getType() {return "game";}

@Override }
public int getAge() {return age;}// get and set..
}
interface Persistence {
void save(Product product, PaymentType paymentType);
}

class MySqlDatabase implements Persistence {


Dependency Inversion public void save(Pood product, PayTy payTy){
Principle { System.out.println("Save product ");
}
}

class Cash {
Este principio establece que los
módulos de alto nivel no deben de
Persistence persistence;
depender de los de bajo nivel. En
public Cash(Persistence persistence) {
ambos casos deben depender de las
this.persistence = persistence;
abstracciones.
}
public void pay(Prod product, PayTy payTy) {

persistence.save(product, paymentType);
} }
}

También podría gustarte