Fundamentos de la programación y arquitecturas de software
Lenguajes de Programación
Un lenguaje de programación es un conjunto de símbolos y reglas que definen las tareas que realizará un ordenador.
Elementos de un Lenguaje de Programación
- Constantes: Posiciones de memoria cuyo valor no se puede cambiar durante la ejecución del programa. Cada constante se identifica con un nombre.
- Variables: Posiciones de memoria cuyo valor puede modificarse. Se definen con un tipo de dato que limita los valores que se le pueden asignar.
- Tipos de datos simples: Contienen un único valor (caracteres, números reales, números enteros, valores lógicos).
- Tipos de datos complejos: Compuestos por tipos de datos simples.
- Homogéneos: Todos los datos son del mismo tipo.
- Heterogéneos: Datos simples de diferente tipo.
- Operadores: Relacionan datos, generando un nuevo valor.
- Aritméticos: Realizan operaciones matemáticas.
- Lógicos: Comparan valores y devuelven verdadero o falso.
- De asignación: Guardan en una variable el resultado de una variable, una operación o una comparación.
- Palabras reservadas: Cadenas de caracteres con significado especial dentro del lenguaje. Solo se usan para su propósito definido.
- Estructuras condicionales: Ejecutan código según si una condición es verdadera o falsa.
- Estructuras iterativas (bucles): Repiten un bloque de código mientras una condición sea verdadera.
- Procedimientos y funciones: Bloques de código con nombre que se ejecutan desde otro punto del programa. Una función devuelve un valor, un procedimiento no.
- Recursividad: Cuando un bloque de código se llama a sí mismo.
- Bloques de código: Conjuntos de instrucciones que se ejecutan secuencialmente. Pueden estar anidados.
- Comentarios: Texto que ayuda a entender el código. El compilador los ignora.
Ejemplos de código fuente
- Cobol
- Lisp
Clasificación de los Lenguajes de Programación
Nivel de abstracción
- Bajo: Programación según las características del procesador (ej. código máquina).
- Medio: Mayor abstracción, pero con características de bajo nivel (ej. ensamblador).
- Alto: Manejan conceptos cercanos al pensamiento humano (ej. Pascal, Java).
Propósito
- General: Para todo tipo de tareas (ej. Pascal, Java).
- Específico: Para un objetivo concreto (ej. Csound para audio).
- De sistemas: Para sistemas operativos o drivers (ej. C).
- De script: Para tareas de control y auxiliares (ej. bash).
Evolución histórica
- 1GL: Código máquina.
- 2GL: Ensamblador.
- 3GL: Lenguajes modernos (ej. C, Java).
- 4GL: Diseñados con propósito concreto (ej. SQL).
Paradigma de programación
- Imperativo: Programas como una serie de órdenes secuenciales.
- Orientado a objetos: Sistemas de objetos que interactúan (ej. C++, Java).
- Funcional: Se basa en la evaluación de funciones, a menudo recursivas (ej. Haskell).
Arquitectura del Software
Define los componentes que realizan tareas de computación, sus interfaces y la comunicación entre ellos.
Modelos o vistas
Describen los aspectos del software usando lenguajes como el natural, diagramas de flujo o diagramas de estado. Tres vistas fundamentales:
- Estática: Describe los componentes de la arquitectura.
- Funcional: Describe la función de cada componente.
- Dinámica: Describe la interacción y comportamiento de los componentes.
Arquitecturas comunes
- Monolítica: Software estructurado en grupos funcionales ajustados.
- Cliente-servidor: Carga de cálculo repartida en dos partes independientes.
- Tres niveles: Especialización de cliente-servidor con capas de presentación, cálculo y almacenamiento.
- MVC (Modelo-Vista-Controlador):
- Modelo: Representa la información.
- Vista: Presenta el modelo al usuario.
- Controlador: Responde a eventos y actualiza el modelo.