# Arquitectura Software para Estrategia
<!-- Put the link to this slide here so people can follow -->
slide: https://hackmd.io/@ogarcia/arquitectura
---
La arquitectura de software se refiere al diseño y organización de los **componentes** de un sistema de software, incluyendo sus **estructuras**, **módulos**, **interfaces** y **relaciones**, con el objetivo de cumplir con los **requisitos** funcionales y no funcionales del sistema.
---
## Requisitos Funcionales
- Objetivos y necesidades del usuario
- Qué hace el sistema, cómo se comporta y qué resultados produce
---
## Requisitos no funcionales
- Características del sistema no relacionadas con su funcionalidad
- Seguridad, la escalabilidad, la usabilidad, la fiabilidad, el rendimiento y la accesibilidad
---
## Pero los requisitos son complejos...
- Están vinculados al **dominio** de aplicación
- El dominio es complicado, específico, especializado...
- Para entender los requisitos es necesario entender el dominio :wink:
---
## ¿Cómo abordar la complejidad?
- Descomposición Top-Down: descomponer un problema grande en varios pequeños
- Abstracción: considerar una pieza como una caja cerrada que proporciona uno o varios servicios
Piensa cómo describes lo que un coche puede hacer
---
## Bajando el nivel de abstracción
> Vamos a describir la estructura de cada una de las moléculas que componen el coche
:-1: Descripción demasiado exhaustiva, impracticable
---
## Subiendo el nivel de abstracción
> Es una caja metálica que se desplaza y con ella su contenido
:-1: Descripción demasiado ambigüa
---
## ¿Cómo seleccionar el nivel adecuado?
Hay innumerables formas de descomponer un sistema complejo :fearful:
:::success
Imagina que quieres construir un sitio para que vivan seres humanos
:::
---
## Existen abstracciones típicas
... que dependen del dominio
> piso, casa, edificio, cabaña, choza, chalet ...
... incluso podemos bajar un poco más
> ventana, puerta, lavabo, cocina
---
## Los arquitectos usan abstracciones
Abstracciones que funcionaron bien en el pasado
> Estaría bien tener un sitio donde preparar comidas, otro para dormir, otro para asearse, otro para ..
---
## Los arquitectos reutilizan patrones
Patrones que se repiten una y otra vez
> Todas las viviendas tienen ventanas. ¿Por qué? porque una vez las puse y resultaron útiles y agradables.
Para cumplir con los requisitos, tanto funcionales como no funcionales
---
## La abstracción de una `ventana`
:thinking_face: ventana :thinking_face:
:::info
No sientes la necesidad de decir más; escondes los detalles, que tienen uno varios cristales, aislante, capacidad de abrirse de varias formas.
:::
---
## ¿Bajamos el nivel de abstracción de `ventana`?
> Buscamos qué tipo de cristales son los más adecuados, analizamos si hacemos la ventana con hierro, aluminio, con plastilina, con cemento? ¿Pensamos como hacer que se puedan abrir y cerrar?
:tired_face:
Pues nos va a salir barata de ventana
---
## Mejor nos quedamos en este nivel
Mejor buscamos un fabricante de ventanas, y elegimos una del catálogo de ese fabricante.
:smiley: cost-effective, entrega inmediata, calidad estandarizada ...
:unamused: pero no hay ventanas con forma de PepaPig, ¡yo quiero una ventana con forma de PepaPig :cry:!
---
## Abstracciones típicas
{width=10}
{"metaMigratedAt":"2023-06-17T19:47:54.535Z","metaMigratedFrom":"YAML","title":"Arquitectura Software para Estrategia","breaks":true,"description":"Arquitectura Software para Estrategia","contributors":"[{\"id\":\"93855254-5bcf-438a-b2d1-f9f805e036e4\",\"add\":3865,\"del\":334}]"}