1. Concepto y Clasificación del Software
Definiciones Clave
- Definición RAE: Conjunto de programas, instrucciones y reglas informáticas para ejecutar ciertas tareas en una computadora.
- Definición IEEE: Conjunto de programas, procedimientos, reglas, documentación y datos asociados que forman parte de las operaciones de un sistema de computación.
1.1 Tipos de Software Según su Función
- Software de Sistema: Permite que el ordenador funcione. Incluye sistemas operativos, controladores (*drivers*) y utilidades del sistema. Ejemplo: Windows, Linux, macOS.
- Software de Aplicación: Diseñado para realizar tareas específicas para el usuario. Ejemplo: Procesadores de texto, hojas de cálculo, navegadores web, editores de imagen.
- Software de Desarrollo: Proporciona herramientas para crear otros programas. Ejemplo: Compiladores, intérpretes, editores de código, IDEs como Visual Studio o IntelliJ.
1.2 Tipos de Software Según su Licencia
- Software Propietario: Protegido por derechos de autor y propiedad intelectual. Su copia o distribución sin permiso es ilegal. Se distribuye bajo contrato o licencia.
- Software Libre: Permite usar, estudiar, modificar y distribuir el código. No siempre es gratuito. Ejemplo: Linux, LibreOffice, Firefox.
2. Relación Hardware – Software
El software necesita del hardware para poder ejecutarse. Los componentes principales involucrados son:
- CPU: Interpreta y ejecuta las instrucciones.
- RAM: Guarda temporalmente código y datos mientras el programa se ejecuta.
- Almacenamiento Secundario: Conserva los programas y los datos de forma permanente.
- Periféricos: Permiten la entrada y salida de información (teclado, ratón, pantalla, impresora).
Compatibilidad
Hardware y software deben ser compatibles. Un programa no funcionará correctamente si requiere más recursos de los que el hardware puede ofrecer.
3. Lenguajes de Programación
Definición: Conjunto de símbolos, reglas y sintaxis que permiten construir programas informáticos.
3.1 Componentes de un Lenguaje de Programación
- Alfabeto: Símbolos permitidos (letras, números, operadores, caracteres especiales).
- Sintaxis: Reglas que determinan cómo combinar los símbolos.
- Semántica: Significado de las estructuras sintácticas.
3.2 Lenguajes de Programación vs. Lenguajes de Marcas
- Lenguaje de Programación: Permite crear algoritmos y controlar el flujo de ejecución (ej. Java, Python).
- Lenguaje de Marcas: Estructura o presenta información, pero no ejecuta instrucciones (ej. HTML, XML).
3.3 Clasificación de los Lenguajes
Según Nivel de Abstracción:
- Bajo Nivel: Cercano al lenguaje máquina (0 y 1) o ensamblador (nemotécnicos).
- Alto Nivel: Cercano al lenguaje humano, independiente del hardware (C++, Java, Python).
Según Propósito:
- General: Sirve para cualquier tipo de programa (Java, Python).
- Específico: Orientado a un área concreta (SQL para bases de datos).
Según Forma de Ejecución:
- Compilado: Se traduce todo el programa antes de ejecutarse (C, C++).
- Interpretado: Se traduce línea por línea (Python, JavaScript).
- Mixto: Java genera bytecode, que se interpreta después.
Según Paradigma:
- Estructurado: Uso de secuencias, selecciones y bucles.
- Modular: Programa dividido en módulos reutilizables.
- Orientado a Objetos (POO): Se basa en objetos y clases con atributos y métodos (Java, C++).
- Visual: Se programa mediante elementos gráficos (Scratch, App Inventor).
4. Ciclo de Vida del Software
Proceso que se sigue desde la idea inicial hasta la puesta en marcha y mantenimiento del programa.
Fases Principales
Análisis:
- Se identifican los requerimientos funcionales (qué hace el sistema) y los no funcionales (cómo lo hace: rendimiento, seguridad, fiabilidad).
- Se elabora el Documento de Especificación de Requisitos del Software (ERS).
- Es la fase más importante, ya que errores aquí afectan a todo el proyecto.
Diseño:
- Se transforma el análisis en una estructura técnica que guiará la codificación.
- Se usan diagramas UML (casos de uso, clases, secuencia).
- Un buen diseño debe ser completo, claro y comprensible.
Codificación o Programación:
- Se convierte el diseño en código fuente.
- Etapas: Código fuente (escrito por el programador), Código objeto (tras la compilación), Código ejecutable (generado por el linker o enlazador).
- Reglas: Claridad, modularidad, eficiencia, portabilidad y uso de comentarios.
Pruebas:
- Detectar errores y verificar el funcionamiento.
- Tipos: Unitarias (módulos), Integración (conexión entre módulos), Sistema (con hardware), Aceptación (con el cliente).
Documentación:
Describe el uso y funcionamiento del software. La norma IEEE 1063-2001 regula la estructura de la documentación.
Explotación:
Instalación y configuración del software en el entorno real. Incluye verificación final (Beta test).
Mantenimiento:
Fase más larga.
- Correctivo: Corrige errores.
- Evolutivo: Añade funciones nuevas.
- Perfectivo: Adapta a nuevos entornos.
5. Traductores
Programas que convierten el código fuente en código ejecutable.
Tipos
Compilador:
- Traduce todo el programa antes de ejecutarlo.
- Ejecución rápida, pero requiere recompilar para cada plataforma.
Intérprete:
- Traduce y ejecuta línea por línea.
- Más lento, pero fácil de portar y depurar.
