Programa informático

De Wikipedia, la enciclopedia libre
(Redirigido desde «Programa (computación)»)
Saltar a: navegación, búsqueda

Un programa informático es un conjunto de instrucciones que una vez ejecutadas realizarán una o varias tareas en una computadora. Sin programas, estas máquinas no pueden funcionar.[1] [2] Al conjunto general de programas, se le denomina software, que más genéricamente se refiere al equipamiento lógico o soporte lógico de una computadora digital.

En informática, se los denomina comúnmente binarios, (propio en sistemas Unix, donde debido a la estructura de este último, los ficheros no necesitan hacer uso de extensiones; posteriormente, los presentaron como ficheros ejecutables, con extensión .exe, en los sistemas operativos de la familia Windows) debido a que una vez que han pasado por el proceso de compilación y han sido creados, las instrucciones que se escribieron en un determinado lenguaje de programación, han sido traducidas al único idioma que la máquina comprende, combinaciones de ceros y unos llamado código máquina. El mismo término, puede referirse tanto a un programa ejecutable, como a su código fuente, el cual es transformado en un binario una vez que es compilado.

Generalmente el código fuente lo escriben profesionales conocidos como programadores. Este código se escribe en un lenguaje que sigue uno de los siguientes dos paradigmas: imperativo o declarativo, y que posteriormente puede ser convertido en una imagen ejecutable a través de un programa-compilador. Cuando se pide que el programa sea ejecutado, el procesador ejecuta instrucción por instrucción.

De acuerdo a sus funciones, los programas informáticos se clasifican en software de sistema y software de aplicación. En los computadores actuales, al hecho de ejecutar varios programas de forma simultánea y eficiente, se le conoce como multitarea.

Programación[editar]

#include <stdio.h>

int main()
{

printf("Hello world!\n");
return 0;

}

El código fuente de un programa escrito en el lenguaje de programación C

La programación de computadoras es el proceso iterativo de escribir o editar código fuente. Dicha edición de código fuente implica probar, analizar y perfeccionar, y, a veces, coordinar con otros programadores, en el caso de un programa desarrollado en conjunto. Una persona que practica esta técnica se la conoce como programador de computadoras, desarrollador de software, o codificador. El proceso, a veces a largo plazo, de programación de computadoras normalmente se lo conoce como desarrollo de software. El término ingeniería de software se está convirtiendo en muy popular, ya que esta actividad es vista como una disciplina de ingeniería.

Paradigmas[editar]

Los programas de ordenador se pueden clasificar según el paradigma del lenguaje de programación utilizado para producirlos. Dos de los principales paradigmas son imperativos y declarativos.

Los programas escritos con un lenguaje imperativo especifican un algoritmo utilizando declaraciones, expresiones e informes.[3] Una declaración asocia un nombre de variable a un tipo de datos. Por ejemplo: var x: integer; . Una expresión produce un valor. Por ejemplo: 2 + 2 produce 4. Por último, una declaración puede asignar una expresión a una variable o usar el valor de una variable para alterar las estructuras de control del programa. Por ejemplo: x := 2 + 2; if x = 4 then hacer_algo(); Una crítica de los lenguajes imperativos es el efecto secundario de una sentencia de asignación en una clase de variables llamadas variables no locales.[4]

Los programas escritos en un lenguaje declarativo especifican las propiedades que tienen o que deben cumplirse para la salida. No especifican detalles expresados ​​en términos de flujo de control de la máquina de ejecución pero sí de las relaciones matemáticas entre los objetos declarados y sus propiedades. Los lenguajes funcionales y lógicos son dos amplias categorías de lenguajes declarativos. El principio detrás de los lenguajes funcionales (como Haskell) es el de no permitir efectos secundarios, lo que hace que sea más fácil para razonar sobre los programas como si se tratasen de funciones matemáticas.[4] El principio detrás de los lenguajes lógicos (como Prolog) es definir el problema a ser resuelto - la meta - y dejar la solución detallada al propio sistema Prolog.[5] El objetivo se define proporcionando la lista de sub-objetivos. Luego, cada subobjetivo se define más arriba, proporcionando la lista de sus sub-objetivos, etc. Si la ruta de sub-objetivos no encuentra una solución, entonces ese subobjetivo se retrocede y otra vía se intenta sistemáticamente.

La forma en que se crea el programa puede ser textual o visual. En un programa de lenguaje visual, los elementos en vez de ser textualmente especificados son manipulados gráficamente.

Ejecución[editar]

Una vez escritos, pueden ser ejecutados de diversas formas[6] :

  • Mediante un programa que va adaptando las instrucciones conforme son encontradas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como intérpretes. Ejemplos de esto son bash, clásico en estaciones Unix y que fue escrito para el proyecto GNU o Python, cuya peculiaridad además de ser multipropósito, está en su facilidad de uso y productividad y de hecho, es usado en parte de los proyectos Google y YouTube.[7]
  • Traduciendo el código escrito del programa (lo que se denomina código fuente), a su equivalente en lenguaje máquina. A este proceso se le llama compilar y al programa traductor se le denomina compilador. Ejemplos de esto son: El lenguaje C, que combina en su sintaxis características de medio y bajo nivel y el compilador gcc usado en el proyecto GNU.

Programas que se auto-modifican[editar]

Un programa informático en ejecución normalmente es tratado como algo diferente de los datos con los cuales opera. Sin embargo, en algunos casos ésta distinción es ambigua, especialmente cuando un programa se modifica a sí mismo. El programa modificado es secuencialmente ejecutado como parte del mismo programa. El código que se auto-modifica es posible para programas escritos en código máquina, Lenguaje ensamblador, Lisp, C, COBOL, PL/1 y Prolog y JavaScript (la función eval), entre otros.

Ejecución y almacenamiento de los programas[editar]

Típicamente, los programas se almacenan en una memoria no volátil (por ejemplo un disco), para que luego el usuario de la computadora, directa o indirectamente, solicite su ejecución. Al momento de dicha solicitud, el programa es cargado en la memoria de acceso aleatorio o RAM del equipo, bajo el control del software llamado sistema operativo, el cual puede acceder directamente al procesador. El procesador ejecuta (corre) el programa, instrucción por instrucción hasta que termina. A un programa en ejecución se le suele llamar también proceso. Un programa puede terminar su ejecución en forma normal o por causa de un error, dicho error puede ser de software o de hardware.

Programas empotrados en hardware[editar]

El microcontrolador a la derecha de la Memoria USB está controlada por un firmware empotrado.

Algunos programas están empotrados en el hardware. Una computadora con arquitectura de programas almacenados requiere un programa inicial almacenado en su ROM para arrancar. El proceso de arranque es para identificar e inicializar todos los aspectos del sistema, desde los registros del procesador, controladores de dispositivos hasta el contenido de la memoria RAM.[8] Seguido del proceso de inicialización, este programa inicial carga al sistema operativo e inicializa al contador de programa para empezar las operaciones normales. Independiente de la computadora, un dispositivo de hardware podría tener firmware empotrado para el control de sus operaciones. El firmware se utiliza cuando se espera que el programa cambie en raras ocasiones o nunca, o cuando el programa no debe perderse cuando haya ausencia de energía.[9]

Programas cargados manualmente[editar]

Interruptores para la carga manual en una Data General Nova 3.

Los programas históricamente se cargaron manualmente al procesador central mediante interruptores. Una instrucción era representada por una configuración de estado abierto o cerrado de los interruptores. Después de establecer la configuración, se ejecutaba un botón de ejecución. Este proceso era repetitivo. También, históricamente los programas se cargaban manualmente mediante una cinta de papel o tarjetas perforadas. Después de que el programa se cargaba, la dirección de inicio se establecía mediante interruptores y el botón de ejecución se presionaba.[10]

Programas generados automáticamente[editar]

La programación automática es un estilo de programación que crea código fuente mediante clases genéricas, prototipos, plantillas, aspectos, y generadores de código para aumentar la productividad del programador. El código fuente se genera con herramientas de programación tal como un procesador de plantilla o un IDE. La forma más simple de un generador de código fuente es un procesador macro, tal como el preprocesador de C, que reemplaza patrones de código fuente de acuerdo a reglas relativamente simples.

Un motor de software da de salida código fuente o lenguaje de marcado que simultáneamente se vuelve la entrada de otro proceso informático. Podemos pensar como analogía un proceso manejando a otro siendo el código máquina quemado como combustible. Los servidores de aplicaciones son motores de software que entregan aplicaciones a computadoras cliente. Por ejemplo, un software para wikis es un sevidor de aplicaciones que permite a los usuarios desarrollar contenido dinámico ensamblado a partir de artículos. Las Wikis generan HTML, CSS, Java, y Javascript los cuales son interpretados por un navegador web.

Ejecución simultánea[editar]

Muchos programas pueden correr simultáneamente en la misma computadora, a lo cual se le conoce como multitarea y puede lograrse a través de mecanismos de software o de hardware. Los sistemas operativos modernos pueden correr varios programas a través del planificador de procesos — un mecanismo de software para conmutar con frecuencia la cantidad de procesos del procesador de modo que los usuarios puedan interactuar con cada programa mientras estos están corriendo.[11] También se puede lograr la multitarea por medio del hardware; las computadoras modernas que usan varios procesadores o procesadores con varios núcleos pueden correr muchos programas a la vez.[12]

Categorías funcionales[editar]

Los programas se pueden categorizar según líneas funcionales. Estas categorías funcionales son software de sistema y software de aplicación. El software de sistema incluye al sistema operativo el cual acopla el hardware con el software de aplicación.[13] El propósito del sistema operativo es proveer un ambiente en el cual el software de aplicación se ejecuta de una manera conveniente y eficiente.[13] Además del sistema operativo, el software de sistema incluye programas utilitarios que ayudan a manejar y configurar la computadora. Si un programa no es software de sistema entonces es software de aplicación. El middleware también es un software de aplicación que acopla el software de sistema con la interfaz de usuario. También son software de aplicación los programas utilitarios que ayudan a los usuarios a resolver problemas de aplicaciones, como por ejemplo la necesidad de ordenamiento.

Véase también[editar]

Referencias[editar]

  1. Stair, Ralf M., et al (2003). Principles of Information Systems, Sixth Edition. Thomson Learning, Inc.. pp. 132. ISBN 0-619-06489-7.  (en inglés).
  2. Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley. pp. 58. ISBN 0-201-50480-4.  (en inglés).
  3. Wilson, Leslie B. (1993) (en inglés). Comparative Programming Languages, Second Edition. Addison-Wesley. pp. 75. ISBN 0-201-56885-3. 
  4. a b Wilson, Leslie B. (1993) (en inglés). Comparative Programming Languages, Second Edition. Addison-Wesley. pp. 213. ISBN 0-201-56885-3. 
  5. Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition. Addison-Wesley. pp. 244. ISBN 0-201-56885-3. 
  6. Q33 NY .
  7. [Mark] (2010). O'Reilly Media, Inc. (ed.): «Learning Python, Fourth Edition» (libro). O'Reilly. Consultado el 11 de febrero de 2010.
  8. Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley. pp. 30. ISBN 0-201-50480-4.  (en inglés).
  9. Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. pp. 11. ISBN 0-13-854662-2.  (en inglés).
  10. Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley. pp. 6. ISBN 0-201-50480-4.  (en inglés).
  11. Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley. pp. 100. ISBN 0-201-50480-4.  (en inglés).
  12. Akhter, Shameem (2006). Multi-Core Programming. Richard Bowles (Intel Press). pp. 11-13. ISBN 0-9764832-4-6.  (en inglés).
  13. a b Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley. pp. 1. ISBN 0-201-50480-4.  (en inglés).

Bibliografía[editar]

  • Knuth, Donald E. (1997). The Art of Computer Programming, Volume 1, 3rd Edition. Boston: Addison-Wesley. ISBN 0-201-89683-4.  (en inglés).
  • Knuth, Donald E. (1997). The Art of Computer Programming, Volume 2, 3rd Edition. Boston: Addison-Wesley. ISBN 0-201-89684-2.  (en inglés).
  • Knuth, Donald E. (1997). The Art of Computer Programming, Volume 3, 3rd Edition. Boston: Addison-Wesley. ISBN 0-201-89685-0.  (en inglés).