# Conceptes bàsics de &UML;

## Quant a &UML;

Aquest capítol us dóna una vista general ràpida dels conceptes bàsics de &UML;. Tingueu en compte que aquesta no és una guia d'aprenentatge global de &UML; sinó més aviat una breu introducció a &UML; que es pot llegir com a tutorial &UML;. Si voleu aprendre més quant al llenguatge de modelat unificat, o en general quant a l'anàlisi i disseny de programari, adreceu-vos a un dels molts llibres disponibles quant al tema. Hi ha també una gran quantitat de guies d'aprenentatge a Internet que podeu prendre com a punt de partida.

El llenguatge unificat de modelat (&UML;) és un llenguatge per fer diagrames o notació per especificar, visualitzar i modelar documents de sistemes de programari orientat a objectes. &UML; no és un mètode de desenvolupament, això significa que no us diu el que heu de fer primer i el que heu de fer a continuació o com heu de dissenyar el sistema, però us ajuda a visualitzar el vostre disseny i comunicar-vos amb els altres. &UML; és controlat pel grup Object Management (OMG) i és l'estàndard de l'industria per descriure gràficament el programari.

&UML; està dissenyat pel disseny de programari orientat a objectes i té un ús limitat per a altres paradigmes de programació.

&UML; es composa de molts elements de model que representen les diferents parts d'un sistema de programari. Els elements &UML; s'usen per crear diagrames, que representen una certa part, o un punt de vista del sistema. &umbrello; implementa els següents tipus de diagrames:

- Diagrames de casos d'ús mostra els actors (persones o altres usuaris del sistema), els casos d'ús (els escenaris quan usen el sistema), i les seves relacions

- Diagrames de classe mostra les classes i les relacions entre elles

- Diagrames de seqüència mostra objectes i una seqüència de crides a mètodes que fan a altres objectes.

- Diagrames de col·laboració mostra objectes i les seves relacions, posant l'accent en els objectes que participen en l'intercanvi de missatges

- Diagrames d'estat mostra els estats, els canvis d'estat i els esdeveniments en un objecte o una part del sistema

- Diagrames d'activitat mostra les activitats i els canvis d'una activitat a una altra amb els esdeveniments que ocorren en alguna part del sistema

- Diagrames de component mostra els components de programació d'alt nivell (com ara les KParts o els components reutilitzables (beans) de Java).

- Diagrames d'implementació mostra els casos dels components i les seves relacions.

- Diagrames de relació d'entitats mostren les dades i les relacions i les restriccions entre les dades.

## Elements &UML;

### Diagrama de casos d'ús

El diagrama de casos d'ús descriu les relacions i les dependencies entre un grup de casos d'ús i els actors que participen en el procés.

És important adonar-se que els diagrames de casos no són adequats per a representar el disseny, i no poden descriure les interioritats d'un sistema. Els diagrames de casos d'ús estan destinats a facilitar la comunicació amb els futurs usuaris del sistema, i amb el client, i són especialment útils per a determinar les característiques necessàries que ha de tenir el sistema. Els diagrames de casos d'ús diuen, què ha de tenir el sistema però no — i no poden — especificar com aconseguir-ho.

Un exemple de diagrama de casos d'ús. &umbrello; mostrant un diagrama de casos d'ús

&umbrello; mostrant un diagrama de casos d'ús

#### Cas d'ús

Un cas d'ús descriu — des del punt de vista dels actors — un grup d'activitats en un sistema que produeix un resultat concret i tangible.

Els casos d'ús són descripcions de les interaccions típiques entre els usuaris d'un sistema i el sistema en si mateix. Representen la interfície externa del sistema i especifica un forma dels requisits que ha de tenir el sistema (recordeu, només el que, no el com).

En treballar amb casos d'ús, és important recordar algunes regles simples:

- Cada cas d'ús és relatiu almenys a un actor

- Cada cas d'ús té un iniciador (&ead; un actor)

- Cada cas d'ús porta a un resultat pertinent (un resultat amb «valor comercial»)

Els casos d'ús també poden tenir relació amb altres casos d'ús. Els tres tipus de relacions més habituals entre casos d'ús són:

- <<inclou>> que especifica que un cas d'ús s'usa dins d'un altre cas d'ús

- <<amplia>> que especifica que en certes situacions, o en algun punt (anomenat punt d'ampliació) un cas d'ús serà ampliat per un altre.

- Generalització especifica que un cas d'ús hereta les característiques del cas d'ús «superior», i pot substituir-ne una part o afegir-ne de noves de manera similar a l'herència entre classes.

#### Actor

Un actor és una entitat externa (fora del sistema) que interactua amb el sistema participant (i a sovint iniciant) d'un cas d'ús. Els actors poden ser persones (per exemple, usuaris del sistema), altres sistemes informàtics o esdeveniments externs.

Els actors no representes les persones o sistemes físicament, però representen els seus rols. Això significa que quan una persona interactua amb el sistema de diverses maneres (assumint diferents rols) es representa amb diversos actors. Per exemple, una persona que dóna atenció al client per telèfon i agafa ordres del client en el sistema serà representat per un actor «Personal d'atenció al client» i un actor «Representant de vendes»

#### Descripció del cas d'ús

Les descripcions dels casos d'ús són narracions de text del cas d'ús. Normalment prenen la forma d'una nota o document enllaçat d'alguna manera al cas d'ús i expliquen els processos o activitats que es duen a terme en el cas d'ús.

### Diagrama de classes

Els diagrames de classes mostren les diferents classes que composen el sistema i com es relacionen amb cada una de les altres. Els diagrames de classes es diu que són «estàtics» perquè mostren les classes, juntament amb els seus mètodes i atributs així com les relacions estàtiques entre elles: quines classes «coneixen» a altres classes o quines classes «són part» d'una altra classe, però no mostren les crides a mètodes entre elles.

Un exemple d'un diagrama de classes &umbrello; mostrant un diagrama de classes

&umbrello; mostrant un diagrama de classes

#### Classe

Una classe defineix els atributs i els mètodes d'un grup d'objectes. Tots els objectes d'aquesta classe (instàncies d'aquesta classe) comparteixen el mateix comportament, i tenen el mateix conjunt d'atributs (cada objecte té el seu propi conjunt). A vegades s'usa el terme «tipus» en lloc de classe, però és important mencionar que no són el mateix, i tipus és un terme més general.

En &UML;, les classes es representen amb rectangles, amb el nom de la classe i també poden mostrar els atributs i les operacions de la classe en dos altres «compartiments» dintre del rectangle.

Una classe en &UML; Representació visual d'una classe en &UML;

Representació visual d'una classe en &UML;

##### Atributs

En &UML;, els atributs es mostren amb almenys el seu nom, i també poden mostrar el seu tipus, el valor inicial i altres propietats. Els atributs també es poden mostrar amb la seva visibilitat:

- `+` Suport per atributs públics

- `#` Suport per atributs protegits

- `-` Suport per atributs privats

##### Operacions

Les operacions (mètodes) també es mostren amb almenys el seu nom, i també poden mostrar els seus paràmetres i els tipus de retorn. Les operacions poden, com els atributs, mostrar la seva visibilitat:

- `+` Suport per operacions públiques

- `#` Suport per operacions protegides

- `-` Suport per operacions privades

##### Plantilles

Les classes poden tenir plantilles, un valor que s'utilitza per a una classe no especificada o tipus. El tipus de plantilla s'especifica quan s'inicia una classe (&ead; s'ha creat un objecte). Les plantilles existeixen en el C++ modern i s'introduiran en Java 1.5 on s'anomenaran genèrics.

#### Associacions de la classe

Les classes es poden relacionar (associar-se) unes amb les altres de maneres diferents:

##### Generalització

L'herència és un dels conceptes fonamentals de la programació orientada a objectes, en la que una classe «guanya» tots els atributs i operacions de la classe de la que hereta, i pot substituir/modificar alguna part de la mateixa, així com afegir més atributs i operacions a les seves pròpies.

En &UML; una generalització d'una associació entre dues classes les posa en una jerarquia que representa el concepte d'herència d'una classe derivada d'una classe base. En &UML;, les generalitzacions es representen per una línia connectant les dues classes, amb una fletxa del costat de la classe base. Generalització Representació visual d'una generalització en &UML;

Representació visual d'una generalització en &UML;

##### Associacions

Una associació representa una relació entre classes, i dóna la semàntica i estructura comunes per molts tipus de «connexions» entre objectes.

Les associacions són el mecanisme que permet als objectes comunicar-se entre ells, descriuen la connexió entre diferents classes (la connexió entre els objectes reals s'anomena connexió, o enllaç.

Les associacions poden tenir un rol que especifica l'ús de l'associació o pot ser uni- o bidireccional (indica que els dos objectes que participen en la relació poden enviar missatges l'un a l'altre, o si només un d'ells coneix de l'altre). Cada final de l'associació també conté un valor de multiplicitat, que dicta quants objectes d'aquesta banda de l'associació es poden relacionar amb un objecte de l'altra banda.

En &UML; les associacions es representen com línies que connecten les classes que participen en la relació, i també poden mostrar el rol i la multiplicitat de cada un dels participants. La multiplicitat es mostra com a un interval [min..màx] de valors no negatius, amb una estrella (`*`) en el costat del màxim es representa l'infinit. Associació &UML; Representació visual d'una associació en &UML;

Representació visual d'una associació en &UML;

##### Agregació

Les agregacions són un tipus d'associació especial en el que les dues classes que participen no tenen un estat igual, però fan una relació «sencera-part». Una agregació descriu com la classe que pren el rol de sencera, està composta (té) altres classes, que prenen el rol de les parts. Per les agregacions, la classe que actua com a sencera sempre té la multiplicitat d'u.

En &UML; les agregacions són representades per una associació que mostra un rombe del costat de la sencera. Agregació Representació visual d'una relació d'agregació en &UML;

Representació visual d'una relació d'agregació en &UML;

##### Composició

Les composicions són associacions que representen agregacions molt fortes. Això vol dir que, les composicions també formen relacions sencera-part, però la relació és tan forta que les parts no poden existir per si mateixes. Només existeixen dintre de la sencera, i si la sencera es destrueix també moren les parts.

En &UML; les composicions es representen per un rombe sòlid en el costat de la sencera.

Composició Representació visual d'una relació de composició en &UML;

#### Altres elements del diagrama de classes

Els diagrames de classes poden contenir altres elements a més de les classes.

##### Interfícies

Les interfícies són classes abstractes, el que significa que les instàncies no poden ser directament creades per elles. Poden contenir operadors però no atributs. Les classes poden heretar de les interfícies (a través de la realització d'una associació) i llavors es poden fer les instàncies des d'aquests diagrames.

##### Tipus de dades

Els tipus de dades són primitives que normalment estan construïdes en un llenguatge de programació. Els exemples comuns inclouen números sencers i booleans. No poden relacionar-se amb les classes però les classes poden relacionar-se amb elles.

##### Enumeracions

Les enumeracions són una simple llista de valors. Un exemple típic és una enumeració pels dies de la setmana. Les opcions d'una enumeració s'anomenen literal de l'enumeració. Com els tipus de dades no poden relacionar-se amb les classes per les classes poden relacionar-se amb elles.

##### Paquets

Els paquets representen un espai de noms en un llenguatge de programació. En un diagrama s'usen per a representar parts d'un sistema que conté més d'una classe, potser centenars de classes.

### Diagrames de seqüències

Els diagrames de seqüències mostren els missatges d'intercanvi (&ead; les crides a mètodes) entre diversos objects en una situació especifica en un temps delimitat. Els objectes són instàncies de les classes. Els diagrames de seqüències posen un èmfasi especial en l'ordre i els temps en els que s'han enviat els missatges als objectes.

En els diagrames de seqüències es representen a través de línies de traços verticals amb el nom de l'objecte en la part superior. L'eix del temps també és vertical, augmentant a mesura que baixa, per que els missatges s'envien des d'un objecte a un altre en la forma de fletxes amb l'operació i el nom del paràmetre.

Diagrama de seqüències
&umbrello; mostrant un diagrama de seqüències

&umbrello; mostrant un diagrama de seqüències

Els missatges poden ser o bé síncrons, el tipus normal de missatge de crida on es passa el control a l'objecte anomenat fins que el mètode s'hagi acabat d'executar, o asíncrons on es torna el control directament a l'objecte cridat. Els missatges síncrons tenen una caixa vertical al costat de l'objecte cridat per mostrar el flux de control del programa.

### Diagrames de col·laboració

Els diagrames de col·laboració mostres les interaccions que ocorren entre els objectes que participen d'una situació específica. Això és més o menys la mateixa informació mostrada pels diagrames de seqüències però aquí l'èmfasi es posa en com ocorren les interaccions en el temps mentre que en els diagrames de col·laboració es posen les relacions entre els objectes i la seva topologia en primer pla.

En un diagrama de col·laboració els missatges enviats des d'un objecte a un altre són representats per fletxes, mostrant el nom del missatge, els paràmetres, i la seqüència del missatge. Els diagrames de col·laboració són especialment útils per mostrar el flux o situació d'un programa específic i és un dels millors tipus de diagrames per demostrar o explicar ràpidament un procés en la lògica del programa.

Col·laboració
&umbrello; mostrant un diagrama de col·laboració

&umbrello; mostrant un diagrama de col·laboració

### Diagrama d'estats

Els diagrames d'estats mostren els diferents estats d'un objecte durant la seva vida i els estímuls que causen que l'objecte canvii el seu estat.

Els diagrames d'estats visualitzen els objectes com a màquines d'estat o autòmats finits que poden ser en un grup d'estats finits i poden canviar el seu estat a través d'un grup finit d'estímuls. Per exemple, un objecte de tipus ServidorXarxa pot tenir un dels següents estats durant la seva vida:

- Preparat

- Escoltant

- Treballant

- Aturat

i els esdeveniments que poden causar que l'objecte canvii el seu estat són

- L'objecte és creat

- L'objecte rep un missatge d'escolta

- Un client requereix una connexió sobre la xarxa

- Un client finalitza una petició

- La petició s'ha executat i finalitzat

- L'objecte rep un missatge d'aturada

- etc

Diagrama d'estats &umbrello; mostrant un diagrama d'estats

&umbrello; mostrant un diagrama d'estats

#### Estat

Els estats són els blocs de construcció dels diagrames d'estats. Un estat pertany exactament a una classe i representa un resum dels valors dels atributs que una classe pot prendre. Un estat &UML; descriu l'estat d'un objecte d'una classe particular

Tingueu en compte que no tots els canvis en un dels atributs d'un objecte han de ser representats per un estat, sinó únicament els canvis que poden afectar significativament la funcionament de l'objecte

Hi ha tipus especials d'estat: Inici i final. Són especials en que no hi ha cap esdeveniment que pugui fer que l'objecte retorni al seu estat d'inici, de la mateixa manera que no hi ha cap esdeveniment que pugui fer que un objecte surti del seu estat de final una vegada que l'ha assolit.

### Diagrama d'activitats

Els diagrames d'activitats descriuen la seqüència d'activitats en un sistema amb l'ajuda d'activitats. Els diagrames d'activitats són una forma especial dels diagrames d'estats, que únicament (o principalment) contenen activitats.

Un exemple d'un diagrama d'activitats. &umbrello; mostrant un diagrama d'activitats

&umbrello; mostrant un diagrama d'activitats

Es diagrames d'activitats són semblants als diagrames de flux de procediments, amb la diferència que totes les activitats estan clarament vinculades a objectes.

Els diagrames d'activitats sempre estan associats a una classe, una operació o un cas d'ús.

Els diagrames d'activitats implementen les activitats seqüencials així com també les paral·leles. L'execució en paral·lel es representa amb icones forquilla/espera, i per les activitat executant-se en paral·lel no és important l'ordre en que es duen a terme (poden executar-se a la mateixa vegada o una rere l'altra)

#### Activitat

Una activitat és un simple pas en un procés. Una activitat és un estat en el sistema amb activitat interna i, almenys, una transició sortint. Les activitats també poden tenir més d'una transició sortint, si tenen diferents condicions.

Les activitats poden formar jerarquies, això significa que una associació es pot composar de diverses activitats «detallades», en aquest cas, les transicions sortints i entrants han de coincidir amb les transicions del diagrama detallat.

### Elements d'ajuda

Hi ha uns pocs elements en &UML; que no tenen un valor semàntic real pel model, però ajuden a clarificar parts del diagrama. Els elements són

- Línies de text

- Notes de text i àncores

- Caixes

Les línies de text són útils per afegir texts curts d'informació a un diagrama. És text lliure i no té significat per al propi model.

Les notes són útils per afegir informació més detallada quant a un objecte o situació específica. Tenen un gran avantatge ja que les notes es poden ancorar a elements &UML; per mostrar que la nota «pertany» a un objecte o situació específica.

Les caixes són rectangles lliures que es poden usar per agrupar elements per fer els diagrames més llegibles. No tenen cap significat en el model.

### Diagrames de components

Els diagrames de components mostren els components de programari (ja sigui les tecnologies de components com les KParts, els components CORBA o els Beans de Java o simplement seccions del sistema que són clarament distingibles) i els estris que estan fets d'ells com ara fitxers de codi font, biblioteques de programació o les taules de les bases de dades relacionals.

Els components poden tenir interfícies (&ead; classes abstractes amb operacions) que permeten les associacions entre components.

### Diagrames de desplegament

Els diagrames de desplegament mostren les instàncies de components en temps d'execució i les seves associacions. Inclouen els nodes que són els recursos físics, típicament un sol equip. També es mostren les interfícies i objectes (instàncies de classe).

### Diagrames de relació d'entitats

Els diagrames de relació d'entitats (diagrames ER) mostren el disseny conceptual de aplicacions de base de dades. Descriuen les diferents entitats (conceptes) en el sistema d'informació i les relacions existents i les restriccions entre elles. Una extensió dels diagrames de relació d'entitats amb el nom «diagrama ampliat de relació reforçada» o «diagrama de relació d'entitats avançat» (EER), s'usen per incorporar tècniques de disseny orientades a objectes en els diagrames ER.

Un exemple de diagrama de relació d'entitats. Umbrello mostrant un diagrama de relació d'entitats

Umbrello mostrant un diagrama de relació d'entitats

#### Entitat

Una entitat és qualsevol concepte en el món real amb una existència independent. Poden ser un objecte amb existència física (per exemple un ordinador, robot) o poden ser un objecte amb una existència conceptual (p.ex. cursos de la universitat). Cada entitat té un conjunt d'atributs que descriuen les propietats de l'entitat.

Nota: No hi ha notacions estàndard per representar diagrames ER. Diferents textos sobre aquest tema utilitzen diferents notacions. Els conceptes i notacions per diagrames EER usats en Umbrello són del següent llibre: Elmasri R. i Navathe S. (2004). Fundamentals of Database Systems 4a edn. Addison Wesley

En un diagrama ER, les entitats es representen amb rectangles, amb el nom de l'entitat en la part superior, i també poden mostrar els atributs de l'entitat en un altre «compartiment» dintre del rectangle.

Una entitat en un diagrama ER; Representació visual d'una entitat en un diagrama ER

Representació visual d'una entitat en un diagrama ER

##### Atributs de l'entitat

En els diagrames ER, els atributs de les entitats es mostren amb el seu nom en un compartiment diferent de l'entitat a la que pertanyen.

##### Restriccions

Les restriccions en els diagrames ER especifiquen les restriccions en les dades en l'esquema d'informació.

Hi ha quatre tipus de restriccions permeses en Umbrello:

- Clau primària: el grup d'atributs declarats com a clau primària són únics a l'entitat. Pot ser només una clau primària en una entitat i cap dels atributs que la constitueixen pot ser NULL.

- Clau única: els grup d'atributs declarats com a únics són únics a l'entitat. Hi pot haver moltes restriccions úniques a l'entitat. Els atributs que la composen poden ser NULL. Les claus úniques i les claus primàries només identifiquen una fila en una taula (entitat)

- Clau externa: una clau externa és una restricció referencial entre dues taules. La clau externa identifica una columna o un grup de columnes en una (referència) taula que es refereix a una columna o conjunt de columnes en una altra (referenciada) taula. Les columnes a la taula referenciada han de formar una clau primària o clau única.

- Restricció de comprovació: una restricció de comprovació (també coneguda com a restricció de comprovació de taula) és una condició que defineix les dades vàlides en afegir o actualitzar una entrada en una taula d'una base de dades relacional. Una restricció de comprovació s'aplica a cada fila de la taula. La restricció ha de ser un predicat. Pot referir-se a una o múltiples columnes de la taula.

  Exemple: preu >= 0

### Conceptes del diagrama de relació ampliada d'entitats (EER)

#### Especialització

L'especialització és una manera de formar noves entitats usant entitats que ja s'han definit. Les noves entitats, conegudes com a entitats derivades, prenen (o hereten) atributs de les entitats pre-existents, que són referenciades com a entitats base. El seu objectiu és ajudar a la reutilització de les dades existents amb poca o cap modificació.

En Umbrello, es poden separar i superposar especialitzacions

##### Separat d'especialització

El separat d'especialitzacions especifica que les subclasses de l'especialització s'han de separar. Això vol dir que una entitat només pot ser membre d'una de les entitats derivades de l'especialització

Entitats prenent part d'un separat d'especialització Representació visual d'un separat d'especialització en un diagrama EER

Representació visual d'un separat d'especialització en un diagrama EER

##### Superposat d'especialització

Quan les entitats derivades no tenen restricció de separat, el seu conjunt d'entitats es diu que estan en l'especialització superposada. Això significa que la mateixa entitat del món real pot ser un membre de més d'una entitat derivada de l'especialització

Entitats prenent part d'una especialització superposada Representació visual d'una especialització superposada en un diagrama EER

Representació visual d'una especialització superposada en un diagrama EER

##### Categoria

Una entitat derivada es diu que és una categoria que representa una col·lecció d'objectes que és un subconjunt de la unió de diferents tipus d'entitats. Una categoria és modelada quan sorgeix la necessitat d'una única relació de superclasse/subclasse amb més d'una superclasse, on la superclasse representa diferents tipus d'entitats. (Com l'herència múltiple en la programació orientada a objectes).

Entitats prenent part en una relació de categoria Representació visual d'una categoria en un diagrama EER

Representació visual d'una categoria en un diagrama EER