COBOL Y SUS INICIOS
¡Hola! Prepárate para conocer a uno de los veteranos del mundo de la programación: COBOL. Es un lenguaje que, aunque a muchos les suene a "historia antigua", sigue moviendo una parte gigantesca de la economía global. Es como el abuelo silencioso pero poderoso que maneja las finanzas de la familia.
1. ¿Qué es COBOL?
Imagina que quieres darle instrucciones muy claras y casi en inglés a una computadora para que gestione grandes volúmenes de datos, especialmente números y registros. Para eso se creó COBOL.
- ¿Qué significan sus siglas? COBOL significa COmmon Business Oriented Language (Lenguaje Común Orientado a Negocios). El propio nombre te dice mucho sobre su propósito: está diseñado específicamente para tareas comerciales y de negocios.
- ¿Qué tipo de lenguaje es (orientado a qué tipo de tareas)? COBOL es un lenguaje de programación de alto nivel, es decir, más cercano al lenguaje humano que al código de máquina. Es un lenguaje estructurado y procedural, lo que significa que los programas se organizan en secciones y subrutinas, y las instrucciones se ejecutan en un orden secuencial (como una receta de cocina paso a paso).Está fuertemente orientado al procesamiento de datos empresariales y financieros. Piensa en tareas como:
- Gestionar grandes bases de datos de clientes.
- Procesar millones de transacciones bancarias.
- Calcular nóminas.
- Manejar inventarios y contabilidad.
- Generar informes detallados.
No está diseñado para gráficos avanzados, videojuegos, inteligencia artificial o desarrollo web interactivo. Su fuerza está en la fiabilidad, la precisión numérica y la gestión eficiente de volúmenes masivos de datos estructurados.
2. Historia y Contexto de Creación
COBOL no nació de la inspiración de un solo genio, sino de un comité, en un momento crucial de la informática.
- ¿Cuándo y por qué fue creado? COBOL fue creado a finales de la década de 1950 (específicamente, el diseño comenzó en 1959). En esa época, las computadoras eran enormes y carísimas, y cada fabricante tenía su propio lenguaje de programación incompatible. Las empresas necesitaban una forma estandarizada de escribir programas para tareas comerciales que pudieran ejecutarse en diferentes máquinas.
- ¿Quiénes participaron en su diseño (Grace Hopper, comité CODASYL)? Su creación fue un esfuerzo de colaboración entre el gobierno de EE. UU., usuarios de computadoras y fabricantes de hardware. La figura más prominente asociada a COBOL es la almirante Grace Hopper.
- Grace Hopper: Una brillante matemática y pionera de la computación, que ya había desarrollado el lenguaje FLOW-MATIC (uno de los precursores de COBOL). Abogó incansablemente por la necesidad de lenguajes orientados a negocios y la importancia de que el código fuera legible en inglés. Se le atribuye la filosofía central de COBOL.
- CODASYL (Conference on Data Systems Languages): Fue el comité, formado por el Departamento de Defensa de EE. UU., empresas y universidades, que se reunió para desarrollar este lenguaje común. COBOL fue el resultado directo de sus deliberaciones.
- ¿Qué problema trataba de resolver en su momento? El problema principal era la falta de portabilidad y estandarización. En los años 50, si escribías un programa para una computadora IBM, no podías ejecutarlo en una UNIVAC sin reescribirlo por completo. Esto era costoso e ineficiente. COBOL buscaba ser un lenguaje universal para negocios, que permitiera a los programas ser transferidos entre diferentes tipos de computadoras (principalmente mainframes) con modificaciones mínimas. También buscaba ser "self-documenting" o autodocumentado gracias a su sintaxis cercana al inglés.
3. Características Principales de COBOL
COBOL tiene un estilo muy particular, diseñado para ser claro y robusto.
- Sintaxis orientada al lenguaje natural (similar al inglés): Esta es una de sus características más distintivas. COBOL usa muchas palabras clave del inglés y estructuras de oraciones. Por ejemplo, en lugar de if (x > y), puedes encontrar IF X IS GREATER THAN Y. Esto fue diseñado para que los programas fueran comprensibles no solo por programadores, sino también por gerentes y analistas de negocios sin experiencia en programación.Ejemplo:
ADD CANTIDAD TO TOTAL-VENTAS.
MOVE NOMBRE-CLIENTE TO CAMPO-IMPRESION.
Es casi como leer una frase. - Lenguaje estructurado y procedural: Como mencionamos, los programas COBOL se organizan en secciones lógicas y se ejecutan paso a paso. No es un lenguaje orientado a objetos (aunque hay extensiones posteriores para ello). Esto lo hace predecible y fácil de seguir.
- Altamente legible: Gracias a su sintaxis orientada al inglés, el código COBOL es a menudo muy detallado y verboso, lo que lo hace muy legible, incluso para personas que no son programadores expertos. Esto fue crucial en una época donde la documentación era a menudo deficiente y los equipos de desarrollo eran menos cohesionados que hoy.
- Enfocado en la entrada/salida de datos (I/O): COBOL tiene mecanismos muy potentes y detallados para definir y manipular estructuras de datos complejas, especialmente para archivos y registros. Es excelente para leer, procesar y escribir grandes volúmenes de datos tabulares. Define campos de datos con precisión (ej. números con decimales, cadenas de longitud fija).
- Uso extensivo en sistemas empresariales y financieros: Esta es su especialidad. COBOL es el caballo de batalla de los sistemas legacy (sistemas antiguos que siguen funcionando) en la banca, seguros, gobierno y grandes corporaciones, donde la precisión, la estabilidad y la capacidad de procesar volúmenes masivos de transacciones son primordiales.
4. Estructura General de un Programa en COBOL
Un programa COBOL está estrictamente organizado en cuatro divisiones principales. Imagina estas divisiones como los capítulos obligatorios de un libro, cada uno con un propósito específico.
IDENTIFICATION DIVISION.
PROGRAM-ID. MI-PRIMER-PROGRAMA.
AUTHOR. TU-NOMBRE.
DATE-WRITTEN. 07/07/2025.
* Este es un comentario
* ----------------------------------------------------
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-PC.
OBJECT-COMPUTER. IBM-PC.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ARCHIVO-ENTRADA ASSIGN TO 'datos.txt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD ARCHIVO-ENTRADA.
01 REGISTRO-ENTRADA.
05 CAMPO-NOMBRE PIC X(20). *> Alfanumerico de 20 caracteres
05 CAMPO-EDAD PIC 9(03). *> Numerico de 3 digitos
WORKING-STORAGE SECTION.
01 WS-SALUDO PIC X(30) VALUE 'Hola, mundo desde COBOL!'.
01 WS-NUMERO1 PIC 9(02) VALUE 10.
01 WS-NUMERO2 PIC 9(02) VALUE 20.
01 WS-SUMA PIC 9(03).
PROCEDURE DIVISION.
INICIO-PROGRAMA.
DISPLAY WS-SALUDO.
ADD WS-NUMERO1 TO WS-NUMERO2 GIVING WS-SUMA.
DISPLAY "La suma es: " WS-SUMA.
OPEN INPUT ARCHIVO-ENTRADA.
READ ARCHIVO-ENTRADA
AT END DISPLAY "Fin del archivo."
GO TO FIN-LECTURA.
DISPLAY "Nombre: " CAMPO-NOMBRE " Edad: " CAMPO-EDAD.
FIN-LECTURA.
CLOSE ARCHIVO-ENTRADA.
STOP RUN.
- IDENTIFICATION DIVISION:
- Propósito: Contiene información de identificación del programa. Es como la portada y la contraportada de un libro.
- Ejemplo: PROGRAM-ID. MI-PRIMER-PROGRAMA., AUTHOR. TU-NOMBRE., DATE-WRITTEN. 07/07/2025.. Aquí también puedes poner comentarios (* en la columna 7 indica un comentario).
- ENVIRONMENT DIVISION:
- Propósito: Describe el entorno donde el programa será compilado y ejecutado. Es donde el programa interactúa con el sistema operativo y el hardware. Aquí se "asignan" los nombres lógicos de los archivos a los nombres físicos en el disco.
- Ejemplo: SOURCE-COMPUTER. IBM-PC. (computadora donde se compila), OBJECT-COMPUTER. IBM-PC. (computadora donde se ejecuta). La sección FILE-CONTROL es crucial para la gestión de archivos.
- DATA DIVISION:
- Propósito: Define todas las variables y estructuras de datos que el programa usará. Es donde describes los "ingredientes" con los que va a trabajar tu programa. Se divide en secciones, siendo las más comunes FILE SECTION (para describir archivos externos) y WORKING-STORAGE SECTION (para variables internas).
- Ejemplo:
- PIC X(20): Define una variable alfanumérica (texto) de 20 caracteres.
- PIC 9(03): Define una variable numérica (dígitos) de 3 caracteres.
- Los números 01, 05 son "niveles" que indican la jerarquía de los datos, siendo 01 el nivel más alto (un registro completo) y los números más altos indican campos dentro de ese registro.
- PROCEDURE DIVISION:
- Propósito: Contiene las instrucciones ejecutables del programa, la lógica de negocio. Es donde le dices a la computadora qué hacer con los datos.
- Ejemplo: DISPLAY WS-SALUDO. (imprime un mensaje), ADD WS-NUMERO1 TO WS-NUMERO2 GIVING WS-SUMA. (suma dos números), READ ARCHIVO-ENTRADA (lee un registro de un archivo). Las instrucciones se agrupan en párrafos y secciones, y se ejecutan secuencialmente.
5. ¿Para qué se utiliza COBOL Actualmente?
Aunque parezca un lenguaje de otra era, COBOL sigue siendo sorprendentemente relevante. No se usa para aplicaciones nuevas desde cero, pero es el corazón de muchos sistemas críticos existentes.
- Sistemas bancarios: La inmensa mayoría de las transacciones bancarias diarias (cuentas corrientes, hipotecas, préstamos, transacciones con tarjetas de crédito) se procesan en sistemas COBOL en mainframes. Se estima que miles de millones de dólares en transacciones pasan por código COBOL cada día.
- Administración pública (gobiernos): Sistemas de impuestos, seguridad social, desempleo, registro civil y otros servicios gubernamentales esenciales en muchos países aún dependen de COBOL.
- Grandes mainframes en gobiernos y aseguradoras: Las compañías de seguros utilizan COBOL para gestionar pólizas, reclamaciones y datos de clientes. Las grandes infraestructuras gubernamentales confían en él por su estabilidad y capacidad para manejar enormes volúmenes de datos.
- Sistemas de procesamiento masivo de datos (Batch Processing): COBOL es insuperable en tareas de "batch" (procesamiento por lotes), donde grandes volúmenes de datos se procesan sin interacción humana en tiempo real (ej. ejecutar la nómina de una empresa con miles de empleados de una sola vez durante la noche).
En resumen, COBOL sigue siendo el "backend" silencioso de muchas de las operaciones económicas y gubernamentales más grandes y críticas del mundo.
6. Ejemplos de Código COBOL con Explicación Línea por Línea
Veamos algunos ejemplos más sencillos para entender mejor la sintaxis:
"Hola mundo"
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
AUTHOR. YO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MENSAJE PIC X(20) VALUE "Hola mundo COBOL!".
PROCEDURE DIVISION.
DISPLAY WS-MENSAJE.
STOP RUN.
Explicación línea por línea:
- IDENTIFICATION DIVISION.: Inicia la división de identificación.
- PROGRAM-ID. HELLO-WORLD.: Define el nombre del programa.
- AUTHOR. YO.: Indica el autor del programa.
- DATA DIVISION.: Inicia la división de datos.
- WORKING-STORAGE SECTION.: Sección para definir variables internas.
- 01 WS-MENSAJE PIC X(20) VALUE "Hola mundo COBOL!".: Declara una variable llamada WS-MENSAJE que es una cadena de 20 caracteres (X(20)) e inicializa su valor (VALUE) con "Hola mundo COBOL!".
- PROCEDURE DIVISION.: Inicia la división donde va la lógica del programa.
- DISPLAY WS-MENSAJE.: Muestra (imprime) el contenido de la variable WS-MENSAJE en la pantalla.
- STOP RUN.: Termina la ejecución del programa.
Suma de dos números
IDENTIFICATION DIVISION.
PROGRAM-ID. SUMA-NUMEROS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUMERO1 PIC 9(02) VALUE 15. *> Numero con 2 digitos
01 NUMERO2 PIC 9(02) VALUE 25. *> Numero con 2 digitos
01 RESULTADO PIC 9(03). *> Resultado con 3 digitos
PROCEDURE DIVISION.
ADD NUMERO1 TO NUMERO2 GIVING RESULTADO.
DISPLAY "El resultado de la suma es: " RESULTADO.
STOP RUN.
Explicación línea por línea:
- IDENTIFICATION DIVISION. y PROGRAM-ID. SUMA-NUMEROS.: Como antes, identificación.
- DATA DIVISION., WORKING-STORAGE SECTION.: Como antes, para definir variables.
- 01 NUMERO1 PIC 9(02) VALUE 15.: Declara NUMERO1 como un número de 2 dígitos (9(02)) y lo inicializa a 15.
- 01 NUMERO2 PIC 9(02) VALUE 25.: Similar para NUMERO2, inicializado a 25.
- 01 RESULTADO PIC 9(03).: Declara RESULTADO como un número de 3 dígitos (9(03)).
- PROCEDURE DIVISION.: Inicia la lógica.
- ADD NUMERO1 TO NUMERO2 GIVING RESULTADO.: Esta es la instrucción clave. Suma el valor de NUMERO1 al valor de NUMERO2 y el resultado lo guarda en la variable RESULTADO.
- DISPLAY "El resultado de la suma es: " RESULTADO.: Muestra el mensaje y el valor de RESULTADO.
- STOP RUN.: Termina el programa.
Registro simple de empleados (Solo estructura de datos)
COBOL es muy bueno definiendo registros complejos. Aquí un ejemplo de cómo se podría definir un registro de empleado en la DATA DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 REGISTRO-EMPLEADO.
05 EMP-ID PIC 9(5). *> ID 5 digitos
05 EMP-NOMBRE PIC X(30). *> Nombre,30 caracteres
05 EMP-DIRECCION PIC X(50). *> Dir, 50 caracteres
05 EMP-SALARIO PIC 9(7)V99. *> 7 dec. y 2 enteros
05 EMP-FECHA-NAC. *> DOB (grupo de campos)
10 EMP-ANIO PIC 9(4).
10 EMP-MES PIC 9(2).
10 EMP-DIA PIC 9(2).
Explicación: Aquí estamos definiendo una estructura llamada REGISTRO-EMPLEADO (nivel 01). Dentro de ella, hay varios campos (nivel 05), y uno de ellos, EMP-FECHA-NAC, es a su vez un grupo que contiene campos de nivel 10 para año, mes y día.
- PIC 9(5): Significa 5 dígitos numéricos.
- PIC X(30): Significa 30 caracteres alfanuméricos.
- PIC 9(7)V99: Significa 7 dígitos enteros, una coma decimal implícita (V) y 2 dígitos decimales. Es decir, un número con 2 decimales, hasta 9,999,999.99.
7. Ventajas y Desventajas del Lenguaje COBOL
|
Aspecto |
Ventajas |
Desventajas |
|
Estabilidad |
Extremadamente robusto y probado. Miles de millones de líneas de código han funcionado sin fallos durante décadas. |
Percepción de ser un "lenguaje antiguo" o "legacy". |
|
Madurez |
Muy maduro, con compiladores y herramientas altamente optimizadas. |
Código muy verboso (extenso), lo que puede hacer los programas largos. |
|
Mantenibilidad |
Su legibilidad (tipo inglés) facilita el mantenimiento del código existente, incluso por programadores que no lo escribieron. |
Dificultad para encontrar nuevos programadores con experiencia en COBOL. |
|
Procesamiento de datos |
Excelente para el procesamiento masivo de datos y aritmética de alta precisión. |
Curva de aprendizaje para algunos conceptos si vienes de lenguajes modernos (ej. manejo de datos). |
|
Fiabilidad |
Crucial para sistemas de misión crítica donde la precisión y el tiempo de actividad son vitales (banca, seguros). |
No es apto para desarrollo de aplicaciones modernas (web, móvil, IA, gráficos). |
|
Estandarización |
Se ha mantenido muy estandarizado a lo largo de los años, facilitando la portabilidad (aunque entre diferentes mainframes a veces había adaptaciones). |
Ecosistema de herramientas de desarrollo menos moderno que otros lenguajes. |
¿Por qué sigue vivo a pesar de los años? Principalmente por el enorme volumen de código existente y la confianza en su estabilidad y fiabilidad. Reemplazar millones de líneas de código COBOL probado en sistemas críticos sería un proyecto inmenso, extremadamente costoso, arriesgado y que llevaría décadas. La inversión en reescribir estos sistemas a menudo no se justifica, especialmente si el COBOL funciona perfectamente. Además, COBOL ha recibido actualizaciones y sigue siendo mantenido por grandes proveedores como IBM.
8. ¿Qué herramientas se usan para programar en COBOL hoy en día?
Aunque no verás COBOL en los cursos de "Programación para Principiantes", hay un ecosistema de herramientas para desarrollarlo y mantenerlo.
- Compiladores:
- IBM Enterprise COBOL for z/OS: El compilador líder para mainframes de IBM (z/OS), donde se ejecuta la mayor parte del código COBOL crítico.
- Micro Focus COBOL: Un proveedor importante que ofrece compiladores COBOL para entornos distribuidos (Windows, Linux, Unix) y herramientas de modernización para integrar COBOL con tecnologías más nuevas.
- GnuCOBOL (anteriormente OpenCOBOL): Un compilador de código abierto y gratuito que permite compilar y ejecutar COBOL en sistemas Linux, Windows y macOS. Es excelente para aprender y experimentar.
- Editores o entornos de desarrollo (IDEs):
- Tradicionalmente, los programadores de COBOL usaban editores de texto muy básicos en mainframes (como ISPF).
- Hoy en día, herramientas como Micro Focus Visual COBOL ofrecen entornos de desarrollo más modernos con funcionalidades de IDE (autocompletado, depuración gráfica, integración con control de versiones).
- Incluso editores como VS Code tienen extensiones para COBOL que proporcionan resaltado de sintaxis y otras ayudas.
- Ejecución en terminal o en emuladores de mainframes:
- Los programas COBOL compilados en mainframes se ejecutan directamente en esos entornos de alto rendimiento.
- Para aprendizaje y desarrollo en PC, GnuCOBOL permite compilar y ejecutar programas COBOL directamente desde la línea de comandos en Windows, Linux o macOS.
- Existen emuladores de mainframes (ej. Hercules) que permiten simular un entorno de mainframe en un PC, lo que es útil para probar código COBOL en un contexto más realista.
9. ¿Se puede aprender COBOL en la actualidad?
¡Sí, definitivamente se puede aprender COBOL en la actualidad! Y para algunas personas, puede ser una habilidad muy valiosa.
- ¿Dónde?
- Online Courses: Plataformas como Coursera o Udemy pueden ofrecer cursos introductorios (aunque son menos comunes que para Python o Java).
- Documentación Oficial y Libros Antiguos: Las especificaciones de COBOL son públicas, y hay muchos libros de texto clásicos de COBOL que siguen siendo relevantes.
- Comunidades Online: Existen foros y comunidades de programadores COBOL donde se comparte conocimiento.
- Repositorios de Código: GitHub tiene proyectos de código abierto en COBOL que puedes estudiar.
- Formación Empresarial: Muchas empresas con sistemas COBOL ofrecen capacitación interna a sus nuevos empleados, a menudo a programadores con experiencia en otros lenguajes.
- ¿Hay cursos, libros, simuladores gratuitos?
- GnuCOBOL: Como mencioné, es una excelente herramienta gratuita para aprender. Puedes descargarla e instalarla en tu PC y empezar a compilar tus propios programas COBOL.
- Hay numerosos tutoriales y manuales gratuitos de COBOL disponibles en línea buscando "COBOL tutorial" o "GnuCOBOL tutorial".
- Los emuladores de mainframe (como Hercules) suelen ser gratuitos, aunque configurarlos puede ser un reto para principiantes.
- ¿Qué conocimientos previos se requieren?
- Lógica de programación: Entender cómo funcionan los bucles, condicionales, variables y la lógica de un algoritmo.
- Conceptos de sistemas de datos: Una comprensión básica de cómo se organizan los archivos y los registros de datos es útil.
- Inglés: Dada su sintaxis, un buen manejo del inglés es una ventaja.
- Paciencia: COBOL tiene una sintaxis muy estricta y verbosa, lo que puede ser frustrante al principio si vienes de lenguajes más flexibles como Python.
10. ¿Cuál es el futuro de COBOL?
El futuro de COBOL es un tema de mucho debate, pero la realidad es que no desaparecerá pronto.
- ¿Hay demanda laboral todavía? Sí, hay una demanda laboral sorprendentemente constante para programadores COBOL. Las empresas que dependen de estos sistemas (bancos, seguros, gobiernos) necesitan mantenerlos, modernizarlos y, a veces, integrarlos con nuevas tecnologías. La mayoría de los programadores COBOL están cerca de la jubilación, creando una escasez de talento. Esto significa que un programador COBOL joven puede encontrar un nicho de mercado con buena remuneración, especialmente si combina COBOL con habilidades en desarrollo web o integración de sistemas.
- ¿Se está modernizando su uso (COBOL en la nube, APIs)? Absolutamente. Las empresas no están reescribiendo sus sistemas COBOL de la noche a la mañana, pero sí los están modernizando e integrando.
- COBOL en la Nube: Proveedores como Microsoft Azure y AWS ofrecen soluciones para ejecutar cargas de trabajo COBOL en la nube, aprovechando la escalabilidad y la infraestructura de la nube sin reescribir el código.
- APIs (Application Programming Interfaces): Se están creando APIs alrededor del código COBOL existente. Esto permite que las nuevas aplicaciones (móviles, web) puedan "hablar" y consumir datos de los sistemas COBOL sin necesidad de que el programador web conozca COBOL. Por ejemplo, una app bancaria moderna podría llamar a una API que, en segundo plano, ejecuta código COBOL para consultar el saldo de tu cuenta.
- Integración y Microservicios: Se buscan soluciones para encapsular partes de los sistemas COBOL como microservicios, facilitando la integración con arquitecturas modernas.
El futuro de COBOL no es solo mantener lo viejo, sino también permitirle vivir en armonía con lo nuevo.
11. Datos Curiosos y Casos Reales.
- ¿Qué grandes empresas todavía lo usan?
- Bancos y entidades financieras: JPMorgan Chase, Bank of America, Wells Fargo, Citi, y prácticamente cualquier banco grande del mundo tiene sistemas COBOL.
- Compañías de seguros: AIG, MetLife, y otras grandes aseguradoras.
- Gobiernos: Departamentos de Hacienda (IRS en EE. UU.), Seguridad Social, ministerios de defensa.
- Aerolíneas: Algunos sistemas de reserva de boletos y gestión de vuelos.
- ¿Qué pasó durante la pandemia con COBOL en sistemas estatales? Durante la pandemia de COVID-19 en 2020, hubo un claro recordatorio de la importancia de COBOL. En algunos estados de EE. UU., los sistemas de procesamiento de solicitudes de beneficios por desempleo se vieron abrumados por la repentina demanda. Estos sistemas, muchos de ellos escritos en COBOL hace décadas, necesitaban ser ajustados rápidamente, pero había una escasez crítica de programadores COBOL para hacerlo. Esto puso de manifiesto la dependencia persistente de este lenguaje en infraestructuras críticas y la necesidad de talento para mantenerlas.
- ¿Por qué sigue siendo esencial para millones de transacciones diarias? Por la combinación de estabilidad, precisión numérica y el costo/riesgo de su reemplazo. Estos sistemas han estado funcionando durante 40, 50 o 60 años con una fiabilidad asombrosa. Cada línea de código ha sido probada y depurada a lo largo de décadas de uso. El riesgo de introducir un error catastrófico al reescribir un sistema bancario que maneja miles de millones es inaceptablemente alto. Por lo tanto, el enfoque es mantener, modernizar e integrar, en lugar de reemplazar.
COBOL, a pesar de su antigüedad, es un testimonio de la durabilidad del software y la importancia de la fiabilidad en el mundo empresarial. Es un nicho, sí, pero un nicho crucial.
Comentarios
Publicar un comentario