Está en la página 1de 3

UNIVERSIDAD NACIONAL DE COLOMBIA

FACULTAD DE INGENIERÍA
INGENIERÍA DE SISTEMAS Y COMPUTACIÓN
INGENIERÍA DE SOFTWARE 2

Desarrollo Tarea: Principios SOLID


Sebastian Camilo Casas Rojas

DEFINICIONES

Principio
DIP- Principio de Inversión de Dependencias (Dependency Inversion Principle)

Definición dada originalmente por Robert C. Martin (Uncle Bob):

“1. Los módulos de alto nivel no deberían depender de los módulos de bajo nivel. Ambos
deberían depender de abstracciones.
2.Las abstracciones no deberían depender de los detalles. Los detalles deben depender de
abstracciones.”

Para entender la definición anterior es necesario entender

 Módulo de alto nivel


Objetos donde se encuentra la lógica de negocio, es decir contiene el qué hace el
software y como interactúa entre sí.
 Módulo de bajo nivel
Objetos que no se relacionan de manera directa con la lógica de negocio del
software. (Ejemplo: mecanismos de persistencia de datos(CoreData, MySQL, etc.)
 Abstracciones
Tipos de datos que nos son las implementaciones concretas, si no definen una
interfaz o clase abstracta.
 Detalles
Son las implementaciones concretas.

Lo que se quiere con este principio es que no exista una dependencia entre módulos, si no
que dependan de abstracciones. De esta forma, los módulos pueden ser más fácilmente
reutilizados.

También permite ganar flexibilidad, ya que permite ocultar la implementación, gracias a


esto se pueden reemplazar componentes sin que los clientes que los consumen se vean
afectados, ya que dependen de la abstracción y no de la implementación.
EJEMPLO
Una aplicación de venta online desea implementar diferentes métodos de pago en su
proceso, ya que actualmente solo manejan el pago por PayPal, para esto contratan un
servicio con un banco, quienes le proporcionan toda la infraestructura del servicio.
El equipo de desarrollo de la aplicación tiene que realizar esta conexión a este nuevo
servicio de pago externo.

HISTORIA DE USUARIO
GOAL
SMART
SOLUCION

#Importamos funcionalidad de clase abstracta

from abc import ABC, abstractmethod

#Creacion clase abstracta que define el método process_payment()

class PaymentService(ABC):

@abstractmethod

def process_payment(self, amount):


pass

class ExternalPaymentService(PaymentService):

def process_payment(self, amount):

# Lógica para procesar el pago con el servicio externo de pagos

print(f"Se ha procesado un pago de ${amount} usando el servicio externo de pagos")

class ShoppingCart:

def __init__(self, payment_service):

self.payment_service = payment_service

def checkout(self, amount):


# Lógica para calcular el total de la compra

total = amount

# Procesar el pago con el servicio de pagos

self.payment_service.process_payment(total)

# Crear una instancia del servicio de pagos externo

external_payment_service = ExternalPaymentService()

# Crear una instancia del carrito de compras, pasando el servicio de pagos como
dependencia

shopping_cart = ShoppingCart(external_payment_service)

# Realizar el pago
shopping_cart.checkout(100)

También podría gustarte