Aprendre plegats
dimarts, de març 29, 2005
 
ES2(40) El patró observador i el principi Obert-Tancat
El principi Obert-Tancat, establert per en Bertrand Meyer diu que "Els mòduls haurien de ser alhora oberts i tancats". En el disseny orientat a objectes, les classes són la forma bàsica dels mòduls. Per tant, també podem dir que "Les classes haurien de ser alhora obertes i tancades".

La pregunta és: hi ha alguna relació entre aquest principi i el patró observador?. Argumenteu-ho i exemplifiqueu-ho.

 
ES2(40) Pla de la cinquena setmana
Aquesta setmana farem:
Dimarts dia 29 de març: Patró observador (amb exercici).
Dijous dia 31: Recollirem l'exercici anunciat. Es demanaran voluntaris per explicar la seva solució.
Divendres dia 1: Patró mètode plantilla (amb exercici).

dijous, de març 24, 2005
 
ES2(40) Exercici per al dia 31 de març
Considereu el diagrama de classes següent:

Diagrama de classes


Suposeu que el sistema inclou (entre d’altres) els dos casos d’ús (operacions del sistema) següents:
novaSessió (títol:String, sala:Sala, dia:Date, hora:Hora)

pre: --en el cinema fan la pel·lícula
sala.cinema.pel·lícula.títol -> includes(títol)
post: --creem una sessió
let peli:Pel·lícula = Pel·lícula.allInstances ()-> any (p p.títol = títol)
in
s.oclIsNew() and s.oclIsTypeOf(Sessió) and
s.entradesDisponibles = sala.capacitat and s.dia = dia and s.hora = hora and s.sala = sala and s.pel·lícula = peli


OnLaFan (títol: String, dia:Date, preuMàxim:Diner) : Set(String)

body: -- dóna els noms dels cinemes (amb preu de les entrades inferior a preuMàxim) on fan la pel·lícula del títol indicat en el dia indicat i amb sessions on encara hi ha entrades
Pel·lícula.allInstances()->
select(p p.títol = títol).sessió -> select(s s.hiHaEntrades() and s.dia = dia).sala.cinema -> select(c preuMàxim > c.preuEntrada).nom ->asSet()

(Observeu que aquests contractes provenen de l’especificació del sistema i, per tant, no tenen en compte els aspectes propis del disseny com són la navegabilitat de les associacions o la visibilitat de les operacions, atributs i rols).

Es demana:

1. Dissenyeu dos controladors del tipus transacció per a aquestes dues operacions del sistema.
2. Analitzeu la responsabilitat de les operacions executar dels dos controladors anteriors. Decidiu quins altres objectes intervindran en la seva execució. Documenteu amb diagrames de seqüència l’execució de les operacions executar. Aquests diagrames han de mostrar tots els objectes que intervenen directament o indirecta en l’execució, i les operacions que s’invoquen dels objectes que intervenen.
3. Completeu el diagrama de classes de disseny, mostrant totes les operacions que heu decidit en el punt anterior. Hi heu d’incloure les operacions constructores que hagueu definit (si és el cas), amb els seus paràmetres.

Notes:
Per fer aquest exercici es pot usar com a màxim un diccionari (per a les pel·lícules).
Les quatre associacions indicades al diagrama de classes tenen doble navegabilitat.

El dia 31 recollirem aquest exercici i en comentarem les solucions a la classe.
dijous, de març 17, 2005
 
ES2(40) Disseny clar o provable?
No fa gaire, Michael Feathers ha publicat un article a IEEE Software sobre la importància de la claredat en el disseny. Presenta un cas de disseny clar, però que és poc provable (en anglès "testable"). Conclou que la claredat és important, però que encara ho és més la capacitat de ser provable.
Us proposo que estudieu l'article i que comenteu quin és exactament el problema que descriu, per què es produeix el problema i com el resol. Esteu d'acord en la solució al problema concret?. Esteu d'acord en les conclusions generals que en treu l'autor?.

dimarts, de març 15, 2005
 
ES2(40) Pla de la quarta setmana
Aquesta setmana començarem el tema dels patrons de disseny. Estudiarem els patrons Iterador, Controlador i Assignació de responsabilitats a objectes. També estudiarem la normalització de l'esquema conceptual. Farem diversos exercicis. El divendres (dia 18) farem un exercici a classe que recollirem. Serà el segon dels exercicis que es recullen.
dijous, de març 10, 2005
 
ES2(40) Anem al cinema?
Considereu l'exemple següent (totes les associacions tenen doble navegabilitat):

Diagrama de classes


amb l'operació que, de moment, té el contracte:
Context Sessió::novaEntrada():Diner
pre: hiHaEntrades()
post: entradesDisponibles = entradesDisponibles@pre-1
post: return = sala.dónaCinema().dónaPreuEntrada()

En el futur, és possible que alguns cinemes vulguin que el preu de l’entrada no sigui el mateix per a totes les sessions, sinó que depengui de la pel·lícula que es projecta a la sessió. Alguns cinemes voldran continuar venent a preu únic, mentre que d'altres voldran vendre a preu diferent, segons quina pel·lícula s'emeti a la sessió.


1. Redissenyeu el sistema aplicant el principi Obert-Tancat (respecte d’aquest possible canvi). Especifiqueu les operacions que siguin noves, o que hagin canviat. Naturalment, no heu d'introduir encara el canvi indicat.


2. Indiqueu quin canvi caldrà introduir en el futur si és que, efectivament, algun dia algun cinema vol començar a vendre entrades amb preu diferent per pel·lícula.


dimarts, de març 08, 2005
 
ES2(40) Una mica d'OCL
Considereu el mateix exemple del dia anterior:

Diagrama de classes


amb les operacions:
context Persona::onVius():String
body: llocDeResidència.dónaNom()

context Persona::onTreballes():String
body: empresa.onSituada().dónaNom()

context Població::dónaNom():String
body: nom

context Empresa::onSituada():Població
body: població

Comenteu, si voleu, la resposta a almenys una (no és imprescindible totes) de les preguntes següents
.
(Nota: En algun cas, potser s'han de fer canvis en el diagrama (o afegir-hi altres operacions) per tal de respectar les regles de navegabilitat i visibilitat, i la llei de Demeter. Indiqueu quins són)



1- Suposeu que les poblacions s'identifiquen pel seu nom. Com s'expressa això en OCL?.


2- Considereu l'operació: Empresa::hiTreballaGentDeFora():Boolean, que dóna True si l'empresa té un o més treballadors que viuen en una població diferent de la d'on està situada l'empresa. Com s'expressaria en OCL la postcondició d'aquesta operació?.


3- Considereu l'operació: Empresa::hiTreballaTotElPoble():Boolean, que dóna True si totes les persones que viuen a la població de l'empresa, treballen en l'empresa (hi pot haver també treballadors d'altres poblacions). Com s'expressaria en OCL la postcondició d'aquesta operació?.


4- Considereu l'operació: quantesPersonesViuenOnTreballen():Natural, que dóna el nombre de persones (pot ser zero) que tenim al sistema i que viuen i treballen a la mateixa població, sigui quina sigui aquesta població. Indiqueu en quina classe definiríeu aquesta operació, si seria operació de classe o d'instància, i com s'expressaria en OCL.



 
ES2(40) Pla de la tercera setmana
Aquesta setmana ens dedicarem a fer exercicis sobre els quatre primers temes de l'assignatura.
El divendres (dia 11) farem un exercici a classe que recollirem (de qui el vulgui donar), i en comentarem les solucions. Aquest serà el primer exercici que recollirem, d'un total de 10 durant el quadrimestre (uns cinc fets a casa, i els altres a classe). Recordeu que per poder ser avaluats de participació cal presentar un mínim de cinc problemes.

divendres, de març 04, 2005
 
ES2(40) La llei de Demeter i l'acoblament
Considereu l'exemple següent
Diagrama de classes
amb les operacions:
context Persona::onVius():String
body: llocDeResidència.dónaNom()

context Persona::onTreballes():String
body: empresa.onSituada().dónaNom()

context Població::dónaNom():String
body: nom

context Empresa::onSituada():Població
body: població

Les preguntes són:
1. Alguna d'aquestes operacions vulnera la llei de Demeter?.
2. Si és així, quines modificacions caldria fer per evitar-ho?.
3. (Si hi ha hagut modificacions) El disseny resultant té menys acoblament que l'original?

dijous, de març 03, 2005
 
ES2(40) Mètriques per mesurar l'acoblament
A classe expliquem què és l'acoblament (coupling), però no proposem una manera concreta de mesurar-lo. Podria ser interessant veure quines mètriques s'han proposat per mesurar l'acoblament. Mireu de trobar-ne almenys una i digueu-nos:
- Qui la proposa?. Doneu les referències bibliogràfiques.
- En què consisteix?.
- Es pot calcular automàticament?.
- Us sembla útil mesurar l'acoblament d'aquesta manera?. Per què?


dimarts, de març 01, 2005
 
ES2(40) Principi de constant simbòlica
Un dels (molts) principis de disseny proposats per en Bertrand Meyer és el Principi de constant simbòlica. Us proposo que trobeu una resposta a les preguntes següents:
  1. Què diu aquest principi?.
  2. Què vol dir exactament?.
  3. Quina és la justificació del principi?.
  4. Té alguna relació amb algun principi de disseny que hem vist a classe?.
  5. Podeu donar algun exemple on es respecti aquest principi?.
  6. Podeu donar algun exemple on no es respecti el principi?.
  7. Esteu d'acord en seguir-lo en els vostres dissenys?.

 
ES2(40) Pla de la segona setmana
Aquesta setmana farem:
- L'exercici 3.2
- El tema 4 (Principis de disseny)
- Diversos exercicis sobre els temes vistos fins ara.


Powered by Blogger