M3 - Programació estructurada / Continguts UF2: Classes i biblioteques

De wikiserver
La revisió el 20:48, 11 març 2018 per Rsort (Discussió | contribucions) (Estructura d’un programa modular en Java)
Dreceres ràpides: navegació, cerca

Programes amb múltiples classes

  • La manera més directa de fer un programa modular és establir una correspondència un a un entre mòduls i fitxers on està escrit el codi font d’un programa.
  • Cada mòdul es representa amb un fitxer de codi font diferent.
  • En el cas de Java, un programa modular està compost de l’agregació de múltiples classes.

Què és una classe?

Tres consideracions des d'una perspectiva pràctica:

  • Un programa en Java. Els fitxers dels programes, pròpiament, són classes (al cap i a la fi, s’inicien amb la declaració public class...). En aplicar disseny descendent, el seu codi queda distribuït en un mètode principal (main), que indica la seva primera instrucció i el punt d’inici del seu flux de control, junt amb diferents mètodes addicionals que poden ser invocats directament.
  • Un repositori de mètodes. També s'usa el terme classe per referir-se a biblioteques de mètodes, que actuen com extensions en les instruccions disponibles per defecte en el llenguatge. Abans de poder fer-ho, però, cal inicialitzar-les correctament.
-L’exemple més clar és la classe Scanner, que ofereix un repertori de mètodes per controlar la lectura de dades des del teclat (nextLine(), nextInt(),hasNextFloat(), etc.).
  • Un tipus compost. Aquest mateix terme s'usa com a sinònim de tipus compost.
- l’exemple per antonomàsia és la classe String, utilitzada per referir-se a cadenes de text dins de Java. Els tipus compostos de Java permeten manipular dades complexes mitjançant la invocació de mètodes (charAt(...), indexof(...), etc.).

Semblences

- Els tres casos són exactament el mateix en darrera instància: codi font dins un fitxer anomenat NomClasse.java, amb la declaració public class NomClasse..., i estructurat com un seguit de mètodes declarats dins seu.
- Per tant, la classe Scanner ha estat desenvolupada per algú altre, dins d’un fitxer anomenat Scanner.java i que conté diferents mètodes.

Estructura d’un programa modular en Java

  • Totes les classes es codifiquen de la mateixa manera (com fitxers que contenen un seguit de mètodes que poden ser invocats).
  • Un programa és una seqüència ordenada d’instruccions que es van executant d’inici a fi.
- Mitjançant les estructures de control (selecció i repetició), és possible crear bifurcacions o bucles a la seqüència.
- Es poden trobar invocacions a mètodes, fent possible distribuir les instruccions en blocs diferents, que poden ser executats repetides vegades en diferents moments del procés.
- Tots els mètodes estan escrits dins un mateix fitxer, que conté el codi font de tot el programa.
- main és el mètode principal, el qual indica quina és la primera instrucció.
  • L’única diferència d’un programa modular en Java és que els mètodes, en lloc d’estar escrits tots en el mateix fitxer, estan distribuïts dins de diferents fitxers (diferents classes). tal com es contrasta a la figura 1.1.
  • Exemple, el programa modular es composa de tres fitxers diferents, anomenats Principal.java, Modul1.java i Modul2.java.
Classes i biblioteques

Normalment, l’escriptura de mètodes en fitxers separats no és arbitrària, sinó que se sol fer d’acord a algun criteri d’ordre, com agrupar mètodes per funcionalitats semblants (una classe amb els mètodes relacionats amb operar amb arrays, una altra amb els que llegeixen dades des del teclat, etc.). Per tant, el quid de la qüestió per fer un programa modular és ser capaç de decidir amb criteri com distribuir els diferents mètodes en diferents classes (i en quantes) i saber com invocar mètodes declarats a altres classes. D’entre totes les classes que composen un programa modular en Java, hi ha d’haver una d’especial, a la qual se sol referir com a classe principal (Main class). Aquesta és l’única, d’entre totes, que disposa d’un mètode principal declarat en el seu codi (la resta no el tenen). A la figura, Principal.java seria la classe principal. Per executar un programa modular en Java, només cal executar aquesta classe principal. A partir d’aquí, l’execució de les diferents instruccions segueix el flux de control habitual, partint del mètode principal d’aquesta classe, tal com s’ha mostrat a la figura. Les classes addicionals dins un programa modular, que no són la principal, normalment tenen dos orígens. Poden ser classes creades per vosaltres mateixos, o bé creades per altres desenvolupadors. En qualsevol dels dos casos, totes estan declarades i codificades en fitxers .java per separat.

Definició de classes addicionals

Per dividir un programa en classes diferents, només cal crear tants fitxers com classes es vol, cadascun amb el seu nom i definició pròpia, tal com heu fet fins ara. D’entre totes elles alguna haurà de ser la classe principal (en aquest cas, que contingui com a mínim els mètodes main i inici). La resta contindrà els mètodes que es vulgui distribuir. Fora de la manca d’un mètode principal a les classes addicionals, totes les classes són exactament iguals a nivell de sintaxi. Tot el que heu après es pot aplicar per a qualsevol d’elles (definició i ús de constants, variables globals, àmbit de variables, etc.).

Ús de classes addicionals

Un cop declarats en una classe a part, els mètodes poden ser eliminats de la classe original , ja que en cas contrari tindríeu codi repetit. Precisament, en un programa modular, el que succeeix és que des d’una classe s’invoquen mètodes declarats a una classe diferent. Però cada mètode només està escrit un únic cop entre totes les classes del programa. La invocació de mètodes que no estan escrits en el mateix fitxer és diferent del cas que heu vist fins ara, on totes estan escrites dins el fitxer d’una mateixa classe. Ja no es pot dur a terme simplement escrivint el nom del mètode (junt amb els seus paràmetres, si escau). Primer cal un pas previ d’inicialització, a partir del qual es permet la invocació dels mètodes externs. En dur a terme aquest procés, s’assigna un identificador a partir del qual és possible invocar els mètodes d’aquella classe, usant-lo com a prefix a la invocació. Sense aquest pas previ, és impossible invocar mètodes escrits a altres classes. La sintaxi per fer-ho és la següent: NomClasse identificador = new NomClasse(); identificador.nomMètode(paràmetres); El comportament de la invocació del mètode és idèntica a quan es fa sobre un mètode escrit a la mateixa classe (ús de paràmetres, avaluació d’acord al seu valor de retorn). Només canvia la sintaxi, ja que es requereix aquest prefix producte de la inicialització. Cal dir que, donades diverses invocacions a mètodes d’una mateixa classe externa, només és necessari fer la inicialització una única vegada. L’àmbit i la validesa de l’identificador és el mateix que una variable.

Biblioteques de classes: paquets

Definició de paquets

Ús de classes d’altres paquets

L’API del llenguatge Java

Mètodes estàtics

La classe Math

La classe Arrays

Javadoc

Sintaxi general

Paraules clau