# Programa informàtic

Un programa informàtic o programa d'ordinador és una seqüència d'instruccions, escrites per fer una tasca específica en una computadora. Aquest dispositiu requereix programes per funcionar, en general, executant les instruccions del programa en un processador central. El programa té un format que l'ordinador pot utilitzar directament per executar les instruccions. El mateix programa en el seu format de codi font llegible per humans, del qual es deriven els programes executables (per exemple, compilats), li permet a un programador estudiar i desenvolupar els seus algoritmes. Una col·lecció de programes d'ordinador i dades relacionats rep el nom de programari.
Generalment, el codi font l'escriuen professionals coneguts com a programadors d'ordinador. Aquest codi s'escriu en un llenguatge de programació que segueix un dels següents dos paradigmes: imperatiu o declaratiu, i que posteriorment pot ser convertit en un arxiu executable (usualment anomenat un programa executable o binari) per un compilador i més tard executat per una unitat central de processament. D'altra banda, els programes d'ordinador es poden executar amb l'ajuda d'un intèrpret, o poden ser encastats directament al maquinari.
D'acord amb les seves funcions, els programes informàtics es classifiquen en programari de sistema i programari d'aplicació. En els ordinadors de 2015, al fet d'executar diversos programes de manera simultània i eficient, de l'anomena multitasca.

## Programació

La programació d'ordinadors és el procés d'escriure o editar codi font. Aquesta edició implica provar, analitzar i perfeccionar, i, de vegades, coordinar amb altres programadors, en el cas d'un programa desenvolupat en conjunt. Una persona que practica aquesta tècnica se l'anomena programador d'ordinadors, desenvolupador de programari, o codificador. El procés, de vegades a llarg termini, de programació d'ordinadors normalment es coneix com desenvolupament de programari o quan hi ha una sistematització del procés creatiu se l'anomena enginyer de programari.

### Paradigmes

Els programes d'ordinador es poden classificar segons el paradigma del llenguatge de programació utilitzat per a produir-los. Dos dels principals paradigmes són imperatius i declaratius.
Els programes escrits amb un llenguatge imperatiu especifiquen un algoritme utilitzant declaracions, expressions i informes. Una declaració associa un nom de variable a un tipus de dades. Per exemple: var x: integer;. Una expressió produeix un valor. Per exemple: 2 + 2 produeix 4. Finalment, una declaració pot assignar una expressió a una variable o usar el valor d'una variable per alterar les estructures de control del programa. Per exemple: x := 2 + 2; if x = 4 then fer_alguna_cosa; Una crítica dels llenguatges imperatius és l'efecte secundari d'una sentència d'assignació en una classe de variables anomenades variables no locals.
Els programes escrits en un llenguatge declaratiu especifiquen les propietats que tenen o que s'han de complir. No s'especifiquen detalls expressats en termes de flux de control de la màquina d'execució però sí de les relacions matemàtiques entre els objectes declarats i les seves propietats. Els llenguatges funcionals i lògics són dues àmplies categories de llenguatges declaratius. El principi darrere dels llenguatges funcionals (com Haskell) és el de no permetre efectes secundaris, el que fa que sigui més fàcil per raonar sobre els programes com si es tractessin de funcions matemàtiques. El principi darrere dels llenguatges lògics (com Prolog) és definir el problema que s'ha de resoldre - l'objectiu - i deixar la solució detallada al propi sistema Prolog. L'objectiu es defineix proporcionant la llista de sub-objectius. Després, cada subobjectiu es defineix més amunt, proporcionant la llista dels seus sub-objectius, etc. Si la ruta de sub-objectius no troba una solució, llavors aquest subobjectiu retrocedeix i una altra via s'intenta sistemàticament.
La forma en què es crea el programa pot ser textual o visual. En un programa de llenguatge visual, els elements en comptes de ser textualment especificats són manipulats gràficament.

### Compilat o interpretant

Un programa d'ordinador sota la forma de llenguatge de programació d'ordinadors llegible per un humà, se l'anomena codi font. Aquest codi font es pot convertir en una imatge executable per un compilador o executar-se immediatament amb l'ajuda d'un intèrpret.
Qualsevol dels programes compilats o interpretats poden ser executats en un procés per lots sense intervenció humana, però els programes interpretats li permeten a l'usuari escriure ordres en una sessió interactiva. En aquest cas, els programes són els comandaments separats, l'execució es produeix seqüencialment i, per tant, simultàniament. Quan s'utilitza un llenguatge per donar ordres a una aplicació de programari (com un shell d'Unix o una altra interfície de línia d'ordres), se l'anomena un llenguatge de scripts.
Els compiladors s'utilitzen per traduir el codi font d'un llenguatge de programació, ja sigui en codi objecte o codi màquina. El codi objecte necessita processament addicional per a convertir-se en codi màquina, i el codi màquina és el codi natiu de la unitat central de processament, que està preparat per a la seva execució. Els programes d'ordinador compilats es coneixen comunament com executables, imatges binàries, o simplement com binaris, una referència al format de fitxer binari utilitzat per emmagatzemar el codi executable.
Els programes d'ordinador -interpretats en un conjunt o una sessió interactiva- o bé es descodifiquen i després son executats immediatament o es descodifiquen en alguna representació intermèdia eficient per a l'execució futura. BASIC, Perl i Python són exemples de programes d'ordinador executats immediatament. D'altra banda, els programes d'ordinador de Java es compilen abans d'hora i s'emmagatzema com un codi independent de la màquina anomenat bytecode. Llavors, aquest bytecode s'executa a petició d'un intèrpret anomenat màquina virtual.
El principal desavantatge dels intèrprets és que els programes d'ordinador van més lents que quan són compilats. La interpretació de codi resulta més lenta que l'execució de la versió compilada perquè l'intèrpret ha de descodificar cada declaració cada vegada que es carrega i després realitzar l'acció desitjada. No obstant això, el desenvolupament de programari pot ser més ràpid usant un intèrpret perquè la prova és immediata quan s'omet el pas de la compilació. Un altre desavantatge dels intèrprets és que almenys un ha d'estar present a l'ordinador durant l'execució del programa d'ordinador. Per contra, els programes d'ordinador compilats no necessiten compilador present durant l'execució.
No calen propietats d'un llenguatge de programació si s'està compilat exclusivament o interpretant-se exclusivament. En general, la classificació reflecteix el mètode més popular d'execució del llenguatge. Per exemple, BASIC es considera un llenguatge interpretat i C un llenguatge compilat, tot i l'existència de compiladors de BASIC i intèrprets de C. Alguns sistemes utilitzen compilació en temps d'execució (JIT) mitjançant la qual les seccions de la font es compilen 'sobre la marxa' i s'emmagatzemen per execucions posteriors.

### Programes que s'automodifiquen

Un programa informàtic en execució, normalment és tractat com una cosa diferent de les dades amb els quals opera. No obstant això, en alguns casos aquesta distinció és ambigua, especialment quan un programa es modifica a si mateix. El programa modificat és executat seqüencialment com a part del mateix programa. En el cas de programes escrits en codi màquina, llenguatge d'assemblador, Lisp, d, COlOL, PL / 9 i Prolog i JavaScript (la funció eval), entre d'altres, es pot tenir codi que s'automodifica.

## Execució i emmagatzematge dels programes

Típicament, els programes s'emmagatzemen en una memòria no volàtil (per exemple un disc), perquè després l'usuari de l'ordinador, directament o indirectament, sol·liciti la seva execució. A l'hora de la sol·licitud, el programa es carrega en la memòria d'accés aleatori o RAM de l'equip, sota el control del programari anomenat sistema operatiu, el qual pot accedir directament al processador. El processador executa el programa, instrucció per instrucció fins que acaba. A un programa en execució se l'acostuma a anomenar procés. Un programa pot acabar la seva execució en forma normal o per causa d'un error, aquest error pot ser de programari o de maquinari.

### Programes encastats en maquinari

Alguns programes estan encastats en el maquinari. Un ordinador amb arquitectura de programes emmagatzemats requereix un programa inicial emmagatzemat en el seu ROM per arrencar. El procés d'arrencada és per identificar i inicialitzar tots els aspectes de sistema, des dels registres del processador, controladors de dispositius fins al contingut de la memòria RAM. Després del procés d'inicialització, aquest programa inicial es carrega al sistema operatiu i inicialitza al comptador de programa per començar les operacions normals. Independent de l'ordinador, un perifèric podria tenir firmware encastat per al control de les seves operacions. El firmware s'utilitza quan s'espera que el programa canviï poc o mai, o quan el programa no s'ha de perdre amb absència d'energia.

### Programes carregats manualment

Històricament, els programes eren carregats al processador central de forma manual mitjançant interruptors. Una instrucció es representava per una configuració d'estats d'interruptors per obrir o tancar. Després d'establir la configuració, s'executava un botó d'execució. Aquest procés era repetitiu. Així mateix, els programes es carregaven manualment mitjançant una cinta de paper o targetes perforades. Després de carregar el programa, s'establia la direcció d'inici mitjançant interruptors i es pressionava el botó d'execució.

### Programes generats automàticament

La programació automàtica és un estil de programació que crea codi font mitjançant classes genèriques, prototips, plantilles, aspectes, i generadors de codi per augmentar la productivitat del programador. El codi font es genera amb eines de programació com ara un processador de plantilla o IDE. La forma més simple d'un generador de codi font és un processador macro, com el preprocessador de C, que reemplaça patrons de codi font d'acord amb regles relativament simples.
Un motor de programari dona de sortida codi font o llenguatge de marcat que simultàniament esdevé l'entrada d'un altre procés informàtic. És com un procés que condueix un altre procés cremant el codi màquina cremat com a combustible. Els servidors d'aplicacions són motors de programari que lliuren aplicacions a computadores client. Per exemple, un programari wiki és un sevidor d'aplicacions que permet als usuaris desenvolupar contingut dinàmic acoblat a partir d'articles. Les wikis generen HTML, CSS, Java, i Javascript que són interpretats per un navegador web.

### Execució simultània

Molts programes poden executar-se simultàniament en la mateixa computadora, el que es coneix com a multitasca, i es pot aconseguir amb programari o maquinari. Els sistemes operatius moderns poden executar diversos programes a través del planificador de processos - un mecanisme de programari per canviar el context de manera que els usuaris puguin interactuar amb cada programa mentre aquests estan funcionant. També es pot aconseguir la multitasca per mitjà de maquinari; les computadores modernes que fan servir diversos processadors o processadors amb diversos nuclis poden fer funcionar molts programes alhora.

## Categories funcionals

Els programes es poden categoritzar aplicant criteris funcionals. Aquestes categories funcionals són programaris de sistema i programaris d'aplicació. El programari de sistema inclou el sistema operatiu que acobla el maquinari amb el programari d'aplicació. El propòsit de sistema operatiu és proveir un ambient en el qual el programari d'aplicació s'executi d'una manera eficient. A més de sistema operatiu, el programari de sistema inclou programes utilitaris que ajuden a manejar i configurar l'ordinador. Si un programa no és programari de sistema és programari d'aplicació. El programari intermediari també és un programari d'aplicació que acobla el programari de sistema amb la interfície d'usuari. També són programaris d'aplicació els programes utilitaris que ajuden els usuaris a resoldre problemes d'aplicacions, com ara la necessitat d'ordenament.

## Referències

* ↑ Stair, Ralph M., et al.. Principles of Information Systems, Sixth Edition (en inglés). Thomson Learning, Inc., 2003, p. 132. ISBN 0-619-06489-7.
* ↑ Silberschatz, Abraham. Operating System Concepts, Fourth Edition (en inglés). Addison-Wesley, 1994, p. 58. ISBN 0-201-50480-4.
* ↑ «Algorithms and Computer Programming» (en inglés). Arxivat de l'original el 2018-08-08. [Consulta: 8 setembre 2014].
* ↑ Wilson, Leslie B. Comparative Programming Languages, Second Edition (en inglés). Addison-Wesley, 1993, p. 75. ISBN 0-201-56885-3.
* 1 2 Wilson, Leslie B. Comparative Programming Languages, Second Edition (en inglés). Addison-Wesley, 1993, p. 213. ISBN 0-201-56885-3.
* ↑ Wilson, Leslie B. Comparative Programming Languages, Second Edition (en inglés). Addison-Wesley, 1993, p. 244. ISBN 0-201-56885-3.
* ↑ «What is a Compiler?» (en inglés). [Consulta: 10 enero 2012].
* ↑ Silberschatz, Abraham. Operating System Concepts, Fourth Edition (en inglés). Addison-Wesley, 1994, p. 30. ISBN 0-201-50480-4.
* ↑ Tanenbaum, Andrew S. Structured Computer Organization, Third Edition. Prentice Hall, 1990, p. 11. ISBN 0-13-854662-2. (en inglés).
* ↑ Silberschatz, Abraham. Operating System Concepts, Fourth Edition (en inglés). Addison-Wesley, 1994, p. 6. ISBN 0-201-50480-4.
* ↑ Silberschatz, Abraham. Operating System Concepts, Fourth Edition (en inglés). Addison-Wesley, 1994, p. 100. ISBN 0-201-50480-4.
* ↑ Akhter, Shameem. Multi-Core Programming (en inglés). Richard Bowles (Intel Press), 2006, p. 11-13. ISBN 0-9764832-4-6. .
* 1 2 Silberschatz, Abraham. Operating System Concepts, Fourth Edition (en inglés). Addison-Wesley, 1994, p. 1. ISBN 0-201-50480-4.

## Bibliografia

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