Fundamentos del Software: Tipos, Conceptos y Proceso de Compilación

Software: Conceptos Fundamentales

  • Conjunto de programas que el **hardware** puede ejecutar para la realización de las tareas de **computación** a las que se destina.
  • Conjunto de **instrucciones** que permite la utilización de la **computadora** (PC, Estación de trabajo, Mainframe, etc.).
  • Es la parte **intangible** de la computadora, es decir, **sistemas operativos**, **aplicaciones**, **documentos**, etc.

Tipos de Software: Libre, Propietario y Abierto

Software Libre

  • Un **software** será **libre** cuando permita a los usuarios que adquirieron el producto **ejecutarlo**, **copiarlo**, **estudiarlo**, **distribuirlo** e incluso **modificarlo**.
  • **Libre** no significa **gratuito**; no es una cuestión de precio, sino de **libertad**.

Un software libre garantiza las siguientes **libertades**:

  • La libertad de **usar** el programa, con cualquier propósito.
  • La libertad de **estudiar** cómo funciona el programa y adaptarlo a sus necesidades.
  • La libertad de **distribuir** copias, con lo que puedes ayudar a otra persona.
  • La libertad de **mejorar** el programa y hacer públicas las mejoras a los demás, de modo que toda la comunidad se beneficie.

Para hacer efectivas estas libertades, se debe poder acceder al **código fuente**.

Código Fuente

Conjunto de líneas de texto que son las **instrucciones** que debe seguir la computadora para ejecutar un programa.

En él está **descrito** por completo el aspecto y funcionamiento del programa.

Es el resultado del trabajo mental del **programador** junto con la **sintaxis** del **lenguaje de programación** que esté utilizando.

Luego que el programador lo escribe, debe ser traducido al **lenguaje máquina** (**código binario**). Estas traducciones las realizan los llamados **compiladores**, **ensambladores**, **intérpretes** y otros **sistemas de traducción**.

Analogía del Código Fuente

El **software** es como las **recetas de cocina**: tienes apuntada en un papel una receta, haces el plato (muy bueno) y se lo das a probar a alguien. Para que esa persona pueda hacer el mismo plato, le debes dar la receta; con el sabor del plato no es suficiente.

En el campo del software, existe el **código fuente** (la receta) y el **programa** (el plato cocinado). Para poder modificar el programa (el plato cocinado) o hacerlo con tus propios medios (ingredientes), alguien te ha tenido que dar el código fuente (la receta).

Tipos de Software Libre

  • **Software de dominio público**: significa que no está protegido por el **Copyright***; por lo tanto, podrían generarse versiones no libres del mismo.
  • **Software libre protegido con Copyleft***: impide a los redistribuidores incluir algún tipo de restricción a las libertades propias del software así concebido, es decir, garantiza que las modificaciones seguirán siendo software libre (**Código Abierto**).

* **Copyright**: Solamente su autor puede utilizar, modificar y distribuir su contenido.

* **Copyleft**: Licencia que permite la libre distribución de copias y versiones modificadas, exigiendo que los mismos derechos sean preservados.

Software Abierto

Diferencias con el Software Libre

  • La idea del **código abierto** se centra en la premisa de que, al compartir el código, el programa resultante tiende a ser de **calidad superior** al **software propietario**. Se enfoca en cómo «mejorar» el software, en un sentido meramente práctico.
  • El **software libre** no busca ser práctico a nivel de desarrollo (cosa que también consigue), sino que tiene que ver con la **moral** y la **ética**: defiende un derecho fundamental, la **libertad**.
  • Ambos movimientos comparten que el software debe ser libremente **modificable** y **distribuible**, con o sin cambios o mejoras. Sin embargo, el **código abierto** marca la diferencia en que, si bien el código debe ser también accesible, pueden existir **restricciones** sobre su uso o modificación.

Software Propietario

  • Es el **software no libre**, también llamado **privativo** o **privado**.
  • Se refiere a cualquier **programa informático** en el que los usuarios tienen **limitadas** las posibilidades de **usarlo**, **modificarlo** o **redistribuirlo**, o que su **código fuente** no está disponible o el acceso a este se encuentra restringido.
  • En el **software no libre**, una persona física o jurídica posee los **derechos de autor** sobre un software, negando o no otorgando los derechos de usar el programa con cualquier propósito. Es decir, se le permite a un **desarrollador** o **empresa** controlar a sus usuarios.
  • **Windows** y **Mac OS** son los mejores ejemplos de software propietario.

Sintetizando Diferencias

Clasificación del Software por su Fin

El software también puede clasificarse de acuerdo a su fin:

Software de Sistema (o Base)

  • Vienen incorporados o **preinstalados** con la computadora.
  • Es **esencial** para la computadora; sin él, no podría funcionar.
  • Le otorgan al usuario una **interfaz**.
  • Es el software que nos permite tener una **interacción** con nuestro **hardware**.
  • Da **soporte** a los demás programas.

Software de Aplicación

  • Permiten al usuario realizar una **tarea específica**. Por ejemplo, si quieres dibujar, utilizas un **graficador**; si quieres escribir, utilizas un **procesador de texto**; si quieres realizar unas cuentas numéricas, utilizas una **planilla de cálculo**, etc.

Software de Programación

  • Son las **herramientas** que el **programador** utiliza para desarrollar **programas informáticos**. Para ello, se vale de distintos **lenguajes de programación**.

Algunos ejemplos:

  • Editores de texto
  • Compiladores
  • Intérpretes
  • Enlazadores
  • Depuradores
  • Entorno de desarrollo integrado (IDE)

El Proceso de Compilación: Del Código Fuente al Código Máquina

Un programa escrito en un **lenguaje de alto nivel** (**código fuente**) no puede ser ejecutado directamente por la computadora, sino que debe ser traducido a **lenguaje máquina**.

Las etapas por las que debe pasar un programa escrito en un **lenguaje de programación** hasta poder ser ejecutable son:

  1. **Programa fuente**: Programa escrito en un **lenguaje de alto nivel**.
  2. **Compilador**: Programa encargado de traducir los **programas fuente** a **lenguaje máquina** y de comprobar que las llamadas a las **funciones de librería** se realizan correctamente.
  3. **Programa (o código) objeto**: Es el programa fuente traducido (por el compilador) a **código máquina**. Aún no es directamente ejecutable.
  4. **Programa Ejecutable**: Traducción completa a **código máquina** (realizada por el **enlazador**) del programa fuente y que ya es directamente ejecutable.

**Enlazador**: Programa encargado de insertar al **programa objeto** el **código máquina** de las funciones de las **librerías** (**archivos de biblioteca**) usadas en el programa y realizar el proceso de montaje, que producirá un **programa ejecutable** (.exe).

Las **librerías** son una colección de código (**funciones**) ya programado y traducido a **código máquina**, listo para utilizar en un programa y que facilita la labor del **programador**.

  • Como cada **lenguaje de programación** tiene unas reglas especiales (**sintaxis**), debe existir un **compilador específico** para cada lenguaje de programación.
  • Si el **programa fuente** es sintácticamente correcto, el **compilador** generará el **código objeto**; en caso contrario, mostrará una lista con los **errores** encontrados, no generándose ningún programa objeto, para que procedamos a su **depuración**.

Un **depurador** es un programa diseñado específicamente para la **detección**, **verificación** y **corrección de errores**.

Los **depuradores** nos permiten **trazar** el programa (ejecutarlo sentencia a sentencia) y **visualizar** el contenido de las **variables** y **direcciones de memoria** durante la ejecución del programa. Además, permiten **alterar el flujo de ejecución** del mismo, **cambiar los valores de las variables** e introducir **puntos de parada**.

Pasos para la Elaboración y Ejecución de un Programa

  1. Escribir el **código fuente** en el **editor**.
  2. Compilar el **fichero fuente**.
  3. Si se producen **errores de sintaxis**, volver al editor y corregirlos.
  4. Si no hay errores, se obtendrá el **código objeto** y el **enlazador** construirá el **archivo ejecutable**.
  5. Una vez tengamos el **archivo ejecutable**, será el **sistema operativo** el encargado de colocar el programa en la **memoria central** y ejecutarlo.
  6. Comprobar el **funcionamiento del programa**.
  7. Si se detectan **errores** o un **mal funcionamiento** del programa, activar el **depurador** para trazar el programa y ejecutarlo sentencia a sentencia.
  8. Una vez que hayamos encontrado la causa del **error**, volveremos al editor y lo corregimos.
  9. El proceso de **compilar**, **enlazar** y **ejecutar** el programa lo repetiremos hasta que no se produzcan errores.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.