Resum

En aquesta unitat didàctica es presenten les primeres passes per poder dur a terme programes d’ordinador. Un programa no és cap altra cosa que una llista d’ordres on diem a l’ordinador què ha de fer per tal de processar un seguit de dades. Les ordres es van seguint de manera seqüencial, una darrere de l’altra. Normalment, totes estan vinculades a algun dels tres components en què es pot dividir un ordinador:

  • El processador, que permet transformar i manipular les dades.
  • La memòria, que permet emmagatzemar-les temporalment.
  • El sistema d’entrada/sortida, que permet intercanviar dades amb elements externs de l’ordinador mitjançant algun perifèric, ja sigui per obtenir-les (amb el teclat) o mostrar-les a l’usuari (amb la pantalla).

Per poder enumerar totes aquestes instruccions de manera que l’ordinador sigui capaç de comprendre-les i dur-les a terme correctament, no podeu usar el llenguatge humà. Aquest és massa ambigu i obert a interpretacions, i l’ordinador és una màquina que requereix ordres molt precises. Per especificar les ordres que ha de seguir un ordinador el que s’usa és un llenguatge de programació. Es tracta d’un llenguatge artificial dissenyat expressament per crear algorismes que puguin ser duts a terme per l’ordinador.

Hi ha molts llenguatges de programació diferents, igual que hi ha molts idiomes entre les persones, però tots sempre disposen d’un repertori de possibles ordres que es pot demanar a l’ordinador que faci, anomenat el conjunt d’instruccions. Aquestes instruccions són com les paraules dins un idioma. Depenent del llenguatge de programació triat, el procés per dur a terme un programa pot variar, ja que n’hi ha de diversos tipus.

El llenguatge de programació que implica menys passes entre la definició de quines instruccions cal usar per dur a terme una tasca i poder ser executat és el llenguatge de màquina específic per al processador de l’ordinador. En aquest llenguatge, les instruccions es codifiquen en llenguatge binari, mitjançant 0 i 1, de manera que cada dígit indica de manera molt precisa com ha d’actuar cada xip de l’ordinador. Malauradament, això vol dir que un programa escrit en llenguatge de màquina és específic per a un tipus de processador concret. No es pot executar sobre cap altre processador, tret que siguin compatibles. Un processador concret només entén directament el llenguatge de màquina especificat pel seu fabricant.

Fer programes usant el llenguatge màquina és molt complicat, ja que els humans no treballem a gust amb dades binàries, sinó que ens resulta més familiar usar paraules, tal com ho fem en les nostres llengües escrites o parlades. Per solucionar això, hi ha un recull de mnemotècnics que reemplacen els valors binaris del llenguatge de màquina a paraules, conegut com el llenguatge assemblador.

Ara bé, haver de controlar fins al darrer xip d’un ordinador és molta feina i faria els programes molt difícils d’entendre. Per això, normalment se solen usar llenguatges compilats d’alt nivell. Aquests es basen en una sintaxi que permet donar ordres complexes a un ordinador de manera molt més simple, mitjançant sentències. Una sentència és l’element, sovint identificat per una cadena de text especial, que serveix per descriure exactament una acció que el programa ha de fer.

Per escriure un programa amb un llenguatge d’aquestes característiques, només cal obrir un editor de text i escriure les sentències adients, seguint la sintaxi del llenguatge, de la mateixa manera que cal seguir una gramàtica si escriviu en català i voleu que d’altres us entenguin. Un cop s’ha acabat d’escriure el programa, el conjunt de fitxers de text resultant on es troben es diu que conté el codi font.

Donat el codi font d’un llenguatge d’alt nivell, l’ordinador és incapaç d’entendre’l, ja que només sap executar programes escrits en llenguatge de màquina. El que cal fer llavors és transformar totes les sentències escrites a les seqüències binàries equivalents en codi màquina. Aquest procés és el que s’anomena compilació, ja que el du a terme un programa especial anomenat compilador, que us cal tenir instal·lat si voleu programar. Si les sentències que heu escrit contenen algun error de sintaxi, serà en aquest moment quan es detectarà, ja que el compilador avortarà el procés i us informarà que ha succeït un error de compilació.

Entre els llenguatges de programació d’alt nivell, però, hi ha un tipus especial que no cal compilar. Aquests, en lloc de basar-se a transformar el codi font a llenguatge de màquina, el que fan és el següent. En lloc d’executar-se directament al vostre ordinador, el que es fa és executar un programa auxiliar anomenat intèrpret. Aquest llegeix el fitxer de codi font i, a mesura que va llegint les sentències, dóna ell mateix ordres a l’ordinador perquè faci allò que indica el vostre programa. Com el seu nom indica, fa de traductor entre les ordres tal com estan escrites al vostre programa i les que accepten cadascuna de les parts de l’ordinador. Per això, s’anomenen llenguatges interpretats.

Així doncs, com veieu, per poder desenvolupar un programa cal un bon editor i tot un seguit d’eines auxiliars. Per aquest motiu hi ha els IDE (entorn integrats de desenvolupament), programes que permeten generar codi font i compilar-lo o interpretar-lo de manera senzilla i còmoda.

El llenguatge triat per programar en aquests materials és el Java, que és un cas de llenguatge interpretat. Entre els seus punts forts es troba que és molt popular i disposa d’una gran quantitat de bibliografia i documentació. A més a més, els programes fets en Java es poden executar sobre qualsevol tipus de maquinari o sistema operatiu. Com a petita pega, és un cas atípic de llenguatge interpretat, ja que el seu codi font també s’ha de compilar prèviament, però el resultat del procés no és llenguatge màquina, sinó un codi binari especial anomenat bytecode. El seu intèrpret només sap processar bytecode. Tant el compilador com l’intèrpret de Java s’inclouen dins un paquet anomenat JDK (equip de desenvolupament de Java).

Quan es fa un programa en Java cal ser acurat en l’ús de la sintaxi del llenguatge i seguir un conjunt de convencions de codi que fan el codi font més fàcil d’entendre. El codi font d’un programa en Java normalment de divideix en diferents parts, especificades mitjançant diferents sentències:

  • Importació de biblioteques. Un mecanisme per afegir noves instruccions al repertori bàsic del llenguatge.
  • Un text que delimita on comença el codi font del programa.
  • Comentaris al codi, que permeten escriure lliurement anotacions sense que afectin el funcionament del programa.
  • Diferents llistes d’instruccions, englobades en blocs, que diuen les tasques que ha de dur a terme l’ordinador.
  • Un text que indica quin és el primer bloc d’instruccions que cal dur a terme en executar el programa. Aquest bloc s’anomena el mètode principal del programa.

Les instruccions de les quals disposa el llenguatge Java són moltes. Ja que el propòsit de tot programa és processar dades, un bon lloc per on començar l’estudi és veure com podem representar i manipular dades de manera molt senzilla dins el codi font d’un programa. La manera més simple de representar una dada en una instrucció d’un programa és escrivint un literal, que no és més que un text usat per representar un valor fix dins del codi font d’un programa.

El primer que cal tenir ben present a l’hora de fer un programa és que qualsevol dada amb la qual treballeu pertany a algun tipus. Un tipus de dada és la definició del conjunt de valors vàlids que poden prendre unes dades i el conjunt de transformacions que s’hi pot fer. Per exemple, en el vostre dia a dia sovint tracteu amb dades que tenen com a característica comuna el fet que es poden representar mitjançant nombres: una distància, una edat, un període de temps, etc. Es pot dir que una ciutat està a 8 km d’una altra, que algú té 30 anys o que han passat 15 dies des d’un esdeveniment. Per tant, els valors 8, 30 o 15 formarien part d’un mateix tipus de dada.

Cada llenguatge pot treballar amb molts tipus de dades diferents, però s’anomenen tipus primitius de dades els que ja estan incorporats directament dins d’un llenguatge de programació, i són usats com a peces bàsiques per construir-ne de més complexos. Cadascun està identificat amb una paraula clau pròpia. En el cas del Java, es disposa dels següents:

  • Booleà (paraula clau boolean), que representa si una condició es compleix o no. Per exemple: està encès un interruptor? Tens més de 20 anys? Només hi ha dos literals que representin dades booleanes: true (cert) o false (fals). No n’hi ha cap altre.
  • Enter (paraula clau int), que inclou qualsevol dada numèrica sense decimals. Per exemple: Els vostres anys o el dia del mes. Els seus literals es representen amb nombres com ho faríeu en un text normal: 8, 23, -5, 1024, etc.
  • Real (paraula clau double), que inclou qualsevol dada numèrica amb decimals. Per exemple: La temperatura d’avui o la nota d’un examen. Els seus literals es representen amb nombres, com ho faríeu en un text normal: 4.5, -10.41, 0.028, etc.
  • caràcter (paraula clau char), que inclou qualsevol dada que sigui un símbol d’un alfabet. Per exemple: la primera lletra del vostre nom, el símbol @. Els seus literals es representen posant un símbol entre cometes simples ('): ‘a’, '@', ‘2’, etc.

Les dades que pertanyen a un mateix tipus es poden combinar per a transformar-les en dades noves mitjançant l’aplicació d’operacions. Cadascuna d’aquestes operacions s’identifica amb un símbol especial, anomenat operador. Les dades sobre les quals s’aplica una operació en un moment donat són els operands. Només és possible aplicar operacions sobre dades d’un mateix tipus. Les operacions disponibles per a cada tipus són:

  • Booleà: operacions lògiques de negació, conjunció, disjunció, disjunció exclusiva. També les operacions de comparació d’igualtat.
  • Enter: tots els operadors matemàtics típics com la suma, resta, multiplicació, divisió entera i mòdul, i també operacions relacionals de comparació d’igualtat o major/menor que.
  • Real: igual que els enters, però la divisió resulta amb decimals i no hi ha mòdul.
  • caràcter: només operadors relacionals. Les comparacions de major/menor que preveuen l’ordre alfabètic.

Mitjançant la combinació de moltes operacions i operands es poden construir expressions, que permeten dur a terme transformacions complexes, en què participen molts operands. A l’hora d’avaluar-ne el resultat, com que hi ha molts operadors diferents, s’aplica un ordre de precedència, una regla usada per establir de manera no ambigua l’ordre com s’han de resoldre les operacions dins d’una expressió. Per exemple, no és el mateix 2*3+4, que 2*(3+4).

Un cop es disposa d’un valor resultat d’aplicar una expressió sobre certes dades, un punt important serà poder emmagatzemar-lo a la memòria de l’ordinador. Això es fa mitjançant una variable, un identificador associat a una dada dins el programa. Per desar-hi dades s’usa l’operador d’assignació ('='). Per poder usar una variable, però, abans cal que hagi estat declarada prèviament pel programador dins del codi font del programa. L’identificador amb el qual es reconeix una variable concreta pot ser qualsevol, mentre no pertanyi a una llista de paraules reservades del Java. Un cop disposen d’un valor, les variables també poden ser usades com a operadors dins de les expressions.

Hi ha casos en què resulta útil definir un tipus especial de variable que té la particularitat que dins del codi del programa el seu valor només pot ser llegit, però mai modificat. Aquestes s’anomenen constants i la seva funció sol ser la de reemplaçar l’ús de literals per etiquetes que facin més llegible el codi.

Un cop es disposa de mecanismes per fer operacions sobre dades i emmagatzemar-les en memòria, només quedaria poder mostrar els resultats a l’usuari, donant ordres a la pantalla. Per aquest fet, Java ofereix la instrucció System.out.println(x). Aquesta permet treballar amb un tipus de dades no primitiu, més complex, anomenat cadena de text (String). Aquest permet representar qualsevol seqüència de caràcters de longitud arbitrària i és molt més útil que no pas un caràcter individual. Les cadenes de text només accepten l’operador suma, que serveix per concatenar-ne diverses.

Finalment, també és habitual voler llegir valors per a les dades del programa mitjançant el teclat. Per dur a terme aquesta tasca hi ha un seguit d’instruccions basades en Scanner.

Anar a la pàgina següent:
Resultats d'aprenentatge