El modelo C4, creado por Simon Brown, es una forma sencilla, jerárquica y amigable para desarrolladores de visualizar la arquitectura de software. Utiliza cuatro niveles de abstracción (de ahí el «C4») para describir un sistema desde una visión de alto nivel hasta detalles a nivel de código:
- Contexto del sistema (Nivel 1) – La visión general: el sistema y sus usuarios/dependencias externas.
- Contenedores (Nivel 2) – Elecciones tecnológicas de alto nivel y responsabilidades.
- Componentes (Nivel 3) – Principales bloques lógicos dentro de un contenedor.
- Código (Nivel 4) – Detalles opcionales a nivel de clase o estructura de código.
Está respaldado por tres tipos adicionales de diagramas:
- Mapa del sistema
- Dinámico
- Despliegue
El modelo es independiente de notación (puedes usar cualquier herramienta de diagramación) y se centra en la claridad, la consistencia y los detalles adecuados para el público objetivo. Es ampliamente adoptado porque evita los diagramas de arquitectura de tipo «bola de lodo» y escala desde bocetos en pizarra hasta documentación automatizada.
Para este estudio de caso dirigido, utilizamos el ejemplo canónico del sitio web oficial de C4: Sistema de banca en línea para la ficticia «Big Bank plc». El objetivo comercial es permitir a los clientes personales ver sus cuentas y realizar pagos en línea, al tiempo que se integra con los sistemas centrales existentes del banco.
Revisaremos cada nivel con:
- Propósito y público objetivo
- Elementos clave + responsabilidades
- Relaciones
- Un diagrama C4 de PlantUML listo para usar diagrama C4 de PlantUML (PlantUML admite la sintaxis C4 y se representa magníficamente en la mayoría de los visores de Markdown)
- Razón y decisiones clave
- Cómo ayuda el diagrama a los interesados
Paso 1: Definir el alcance y crear el diagrama de contexto del sistema (Nivel 1)
Propósito: Mostrar cómo se integra el nuevo Sistema de Banca por Internet en el mundo. Público objetivo: interesados del negocio, personas no técnicas y nuevos miembros del equipo.
Elementos (desde el ejemplo oficial):
- Cliente de Banca Personal (Persona) – Un cliente con una o más cuentas bancarias personales.
- Sistema de Banca por Internet (Sistema de software) – El nuevo sistema que estamos construyendo.
- Sistema de Banca Principal (Sistema de software, existente) – Mainframe que gestiona los datos del cliente, las cuentas y las transacciones.
- Sistema de correo electrónico (Sistema de software, externo) – Servicio Simple de Correo Electrónico de Amazon Web Services (AWS SES) para enviar confirmaciones.
Relaciones:
- Cliente → utiliza → Sistema de Banca por Internet (para ver cuentas y realizar pagos)
- Sistema de Banca por Internet → utiliza → Sistema de Banca Principal (para datos de cuentas y pagos)
- Sistema de Banca por Internet → envía correo electrónico a través de → Sistema de correo electrónico
Aquí está el Diagrama de contexto C4 de PlantUML:

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()
title Diagrama de contexto del sistema (Nivel 1) para el Sistema de Banca por Internet
Person(cliente, "Cliente de Banca Personal", "Un cliente con una o más cuentas bancarias personales.")
System(sistema_banca_internet, "Sistema de Banca por Internet", "El nuevo sistema para ver cuentas y realizar pagos.")
System(sistema_banca_principal, "Sistema de Banca Principal", "Mainframe existente que gestiona datos del cliente, cuentas y transacciones.")
System_Ext(sistema_correo, "Sistema de correo electrónico", "Servicio Simple de Correo Electrónico de Amazon Web Services (AWS SES) para enviar confirmaciones.")
Rel(cliente, sistema_banca_internet, "Utiliza")
Rel(sistema_banca_internet, sistema_banca_principal, "Utiliza")
Rel(sistema_banca_internet, sistema_correo, "Envía correo electrónico a través de")
Lay_D(cliente, sistema_banca_internet)
Lay_D(sistema_banca_internet, sistema_banca_principal)
Lay_U(sistema_correo, sistema_banca_internet)
@enduml Razón y valor: Este único diagrama responde de inmediato a «¿Qué estamos construyendo y con quién se comunica?». Evita el crecimiento de alcance al hacer explícitas las dependencias externas. A los interesados del negocio les encanta porque aún no hay detalles tecnológicos.
Paso 2: Diagrama de contenedores (Nivel 2)
Propósito: Amplíe el Sistema de Banca en Línea y muestre las unidades principales desplegables/ejecutables (contenedores) y sus opciones tecnológicas. Público objetivo: arquitectos, desarrolladores principales, operaciones.
Contenedores dentro del Sistema de Banca en Línea:
- Aplicación de página única (Navegador web – JavaScript + Angular) – Interfaz de usuario completa de banca en línea.
- Aplicación móvil (Dispositivo móvil – nativo iOS/Android o React Native) – Funcionalidad limitada para uso en movimiento.
- Aplicación de API (Lado del servidor – Java + Spring Boot) – API de JSON/HTTPS utilizada por ambos front-ends.
- Base de datos (Base de datos relacional – PostgreSQL) – Almacena datos de sesión, preferencias del usuario y resúmenes de cuentas en caché (los datos principales permanecen en el mainframe heredado).
Relaciones clave (mismos sistemas externos que en el Nivel 1):
- SPA y Aplicación móvil → llaman → Aplicación de API
- Aplicación de API ↔ Base de datos
- Aplicación de API → Sistema de banca central y Sistema de correo electrónico
Diagrama de contenedores C4 de PlantUML:
@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/angular.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/java.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/postgresql.puml
LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()
title Diagrama de contenedores C4 para el Sistema de Banca en Línea
Person(customer, "Cliente de banca personal", "Un cliente con una o más cuentas bancarias personales.")
System_Boundary(internet_banking_system, "Sistema de Banca en Línea", "El nuevo sistema para ver cuentas y realizar pagos.") {
Container(spa, "Aplicación de página única", "JavaScript + Angular", "Interfaz de usuario completa de banca en línea", $sprite="angular")
Container(mobile_app, "Aplicación móvil", "iOS/Android (React Native)", "Funcionalidad limitada para uso en movimiento", $sprite="react")
Container(api_app, "Aplicación de API", "Java + Spring Boot", "API de JSON/HTTPS utilizada por ambos front-ends", $sprite="java")
ContainerDb(database, "Base de datos", "PostgreSQL", "Almacena datos de sesión, preferencias del usuario y resúmenes de cuentas en caché", $sprite="postgresql")
}
System(core_banking_system, "Sistema de banca central", "Mainframe existente que maneja datos de clientes, cuentas y transacciones.")
System_Ext(email_system, "Sistema de correo electrónico", "Servicio Simple de Correo de Amazon Web Services (AWS SES) para enviar confirmaciones.")
' Relaciones
Rel(customer, spa, "Utiliza", "HTTPS")
Rel(customer, mobile_app, "Utiliza", "HTTPS")
Rel(spa, api_app, "Llama", "JSON/HTTPS")
Rel(mobile_app, api_app, "Llama", "JSON/HTTPS")
Rel(api_app, database, "Lee y escribe en", "JDBC/SQL")
Rel(api_app, core_banking_system, "Consulta / Actualiza", "JSON/HTTPS")
Rel(api_app, email_system, "Envía correo mediante", "HTTPS")
' Sugerencias de disposición (opcionales – ayuda a PlantUML a organizar mejor los elementos)
Lay_D(customer, internet_banking_system)
Lay_D(internet_banking_system, core_banking_system)
Lay_U(email_system, internet_banking_system)
@enduml
Razonamiento: Elegimos un patrón moderno de SPA + backend de API para web, una aplicación móvil nativa para rendimiento, y mantuvimos la base de datos ligera (la mayoría de los datos residen en el mainframe heredado). Este diagrama es la única fuente de verdad para las decisiones tecnológicas de alto nivel y ayuda a DevOps a planificar la infraestructura.
Paso 3: Diagrama de componentes (Nivel 3)
Propósito: Amplíe un contenedor (normalmente el más complejo – la Aplicación de API) y muestre sus componentes lógicos principales. Público objetivo: equipos de desarrollo.
Ejemplo: Componentes dentro de la Aplicación de API:
- Controlador de cuentas (Spring MVC)
- Controlador de autenticación
- Controlador de restablecimiento de contraseña
- Componente de seguridad (gestiona autenticación, JWT, etc.)
- Componente de gestión de cuentas (orquesta llamadas al sistema de banca central)
- Componente de notificación por correo electrónico
Diagrama de componentes C4 de PlantUML (enfocado en la aplicación de API):

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
LAYOUT_WITH_LEGEND()
title Diagrama de componentes para el sistema de banca en línea - Aplicación de API
Container(spa, "Aplicación de página única", "javascript y angular", "Proporciona todas las funcionalidades de banca en línea a los clientes a través de su navegador web.")
Container(ma, "Aplicación móvil", "Xamarin", "Proporciona un subconjunto limitado de las funcionalidades de banca en línea a los clientes a través de su dispositivo móvil.")
ContainerDb(db, "Base de datos", "Esquema de base de datos relacional", "Almacena información de registro de usuarios, credenciales de autenticación cifradas, registros de acceso, etc.")
System_Ext(mbs, "Sistema informático principal de banca", "Almacena toda la información central de banca sobre clientes, cuentas, transacciones, etc.")
Container_Boundary(api, "Aplicación de API") {
Component(accounts, "Controlador de cuentas", "Spring MVC", "Proporciona resúmenes y saldos de cuentas a los clientes.")
Component(auth, "Controlador de autenticación", "Spring MVC", "Gestiona el inicio de sesión de usuarios, la gestión de sesiones y la generación de tokens.")
Component(reset, "Controlador de restablecimiento de contraseña", "Spring MVC", "Permite a los usuarios restablecer su contraseña mediante correo electrónico.")
Component(security, "Componente de seguridad", "Bean de Spring", "Gestiona la autenticación, la generación de tokens JWT y el cifrado de contraseñas.")
Component(accountmgmt, "Componente de gestión de cuentas", "Bean de Spring", "Orquesta las llamadas al sistema de banca central para operaciones de cuentas.")
Component(email, "Componente de notificación por correo electrónico", "Bean de Spring", "Envía correos electrónicos para restablecer contraseñas y verificar cuentas mediante SMTP.")
Rel(accounts, security, "Utiliza")
Rel(auth, security, "Utiliza")
Rel(reset, security, "Utiliza")
Rel(accountmgmt, mbs, "Utiliza", "XML/HTTPS")
Rel(email, db, "Lee", "JDBC")
}
Rel(spa, accounts, "Utiliza", "JSON/HTTPS")
Rel(spa, auth, "Utiliza", "JSON/HTTPS")
Rel(spa, reset, "Utiliza", "JSON/HTTPS")
Rel(ma, accounts, "Utiliza", "JSON/HTTPS")
Rel(ma, auth, "Utiliza", "JSON/HTTPS")
Rel(ma, reset, "Utiliza", "JSON/HTTPS")
@enduml
Razón: Este nivel muestra cómo se distribuyen las responsabilidades (separación de preocupaciones) y hace que la incorporación de nuevos desarrolladores sea mucho más rápida. Solo dibujas diagramas de componentes para contenedores lo suficientemente complejos como para justificarlo.
Paso 4: Diagrama de código (Nivel 4) – Opcional
Propósito: Mostrar la estructura interna de un componente único (diagrama de clases, secuencia, etc.). Público objetivo: desarrolladores que trabajan en ese código.
Ejemplo para el Controlador de autenticación componente – un diagrama de clases UML simple en PlantUML:
@startuml
classDiagram
skinparam {
roundcorner 8
ArrowColor #444444
ArrowFontColor #444444
BorderColor #444444
Class {
BorderColor #1A237E
BackgroundColor #E8EAF6
FontColor #1A237E
}
}
class "ControladorDeAutenticación" {
+login(credenciales)
+refreshToken()
}
class "ProveedorDeTokenJwt" {
+generateToken(usuario)
+validateToken(token)
}
class "RepositorioDeUsuario" {
+findByUsername()
}
ControladorDeAutenticación ..> ProveedorDeTokenJwt : "utiliza"
ControladorDeAutenticación ..> RepositorioDeUsuario : "utiliza"
@enduml
En proyectos reales, a menudo se salta el Nivel 4 y se apunta directamente al código fuente real.
Paso 5: Diagramas de apoyo
Diagrama dinámico (ejemplo: flujo de “Ver resumen de cuenta”)

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
title Diagrama dinámico para Vista Resumen de Cuenta
Persona(cliente, "Cliente de Banca Personal") {
Contenedor(spa, "Aplicación de página única") {
Contenedor(api, "Aplicación de API") {
ContenedorDb(db, "Base de datos") {
Sistema_Ext(sistemaNúcleo, "Sistema de banca central")
}
}
}
}
Rel(cliente, spa, "1. Hace clic en 'Cuentas'", "")
Rel(spa, api, "2. GET /accounts", "JSON/HTTPS")
Rel(api, db, "3. Leer resumen en caché", "")
Rel(api, sistemaNúcleo, "4. Obtener datos más recientes", "")
Rel(api, spa, "5. Devolver JSON", "")
MOSTRAR_LEGENDA()
@enduml Diagrama de despliegue (mapeo físico de alto nivel):

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
title Diagrama de despliegue para Sistema de Banca en Línea
Nodo_Despliegue(aws, "Amazon Web Services", "Nube") {
Nodo_Despliegue(ec2, "Grupo de escalado automático EC2", "Linux") {
Contenedor(api, "Aplicación de API", "Java Spring Boot")
}
Nodo_Despliegue(rds, "RDS", "PostgreSQL") {
ContenedorDb(db, "Base de datos")
}
}
Nodo_Despliegue(dispositivoCliente, "Dispositivo del cliente", "Web/Móvil") {
Contenedor(spa, "Aplicación de página única")
Contenedor(mobile, "Aplicación móvil")
}
Sistema_Ext(sistemaNúcleo, "Sistema de banca central (mainframe local)")
Rel(spa, api, "Realiza llamadas a la API", "HTTPS")
Rel(mobile, api, "Realiza llamadas a la API", "HTTPS")
Rel_U(api, spa, "Entrega al navegador web del cliente")
Rel_U(api, mobile, "Entrega a la aplicación móvil")
MOSTRAR_LEGENDA()
@enduml
Cómo utilizar este caso de estudio en la práctica
- Comience con un taller: dibuje el contexto en una pizarra.
- Itere hacia Contenedores y Componentes utilizando PlantUML C4.
- Mantenga los diagramas en el repositorio de código (como código!) para que permanezcan actualizados.
- Genere documentación viva automáticamente.
Este ejemplo exacto del Sistema de Banca en Línea es la referencia oficial creada por Simon Brown y se utiliza en miles de organizaciones en todo el mundo. Al seguir estos pasos, ahora tiene una descripción completa y lista para producción de la arquitectura que cualquiera—desde el CEO hasta un nuevo desarrollador junior—puede entender al nivel adecuado de detalle.
Artículos sobre diagramas C4
- Guía definitiva para la visualización del modelo C4 utilizando las herramientas de IA de Visual Paradigm: Esta guía explica cómo aprovechar herramientas impulsadas por IA para automatizar y mejorar la visualización del modelo C4, con el fin de diseñar arquitecturas de software más rápidas.
- Aprovechando el Estudio C4 de IA de Visual Paradigm para una documentación de arquitectura simplificada: Este artículo detalla el uso de un estudio mejorado con IA para crear documentación de arquitectura de software limpia, escalable y mantenible.
- La guía definitiva para el Estudio C4-PlantUML: revolucionando el diseño de arquitectura de software: Este recurso explora la combinación de la automatización impulsada por IA, la claridad del modelo C4 y la flexibilidad de PlantUML en una sola herramienta poderosa.
- Una guía completa sobre el Estudio C4 PlantUML impulsado por IA de Visual Paradigm: Esta guía describe una herramienta especializada lanzada a finales de 2025 que transforma las solicitudes de lenguaje natural en diagramas C4 con capas.
- Estudio C4-PlantUML | Generador de diagramas C4 impulsado por IA: Esta descripción de características destaca una herramienta impulsada por IA diseñada para generar diagramas de arquitectura de software C4 a partir de descripciones de texto simples.
- Generación y modificación de diagramas de componentes C4 con el chatbot de IA de Visual Paradigm: Esta guía muestra cómo usar un chatbot impulsado por IA para crear y refinar iterativamente la arquitectura a nivel de componentes para sistemas complejos.
- Generador de diagramas C4 impulsado por IA: niveles principales y vistas de apoyo: Esta página explica cómo el generador de IA apoya los cuatro niveles principales del modelo C4—Contexto, Contenedor, Componente y Despliegue—para proporcionar documentación completa.
- Generador de diagramas de IA: lanzamiento con soporte completo para el modelo C4: Esta actualización detalla la integración de funciones impulsadas por IA para la creación automática de diagramas jerárquicos del modelo C4.
- Generador de IA para el modelo C4: Automatización del ciclo de vida completo de modelado: Este recurso destaca cómo un chatbot de IA especializado utiliza indicaciones conversacionales para garantizar la consistencia en la documentación de arquitectura para equipos de DevOps.
- Revisión completa: chatbots de IA genéricos frente a las herramientas C4 de Visual Paradigm: Esta comparación explica por qué herramientas especializadas como el C4 PlantUML Studio ofrecen resultados más estructurados y de calidad profesional que los modelos de lenguaje de propósito general.






