Introducció a l’Enginyeria del Programari
Pas de la barrera: peatge central
Què hi ha en aquest material
2
Segona variant de l’exercici Pas de la barrera
Suposicions semàntiques analítiques
Suposicions semàntiques que les condicions del problema converteixen en requeriments
Presa de decisions
Anàlisi iterativa
Valor vs concepte
Restriccions semàntiques
Enunciat
3
Volem capturar les dades dels cotxes que passen per
un peatge
4
Anàlisi prèvia
Delimitació del problema
5
Cal un detector/capturador
No n’hi ha prou en saber que passa un vehicle; cal saber-ne les seves dades per tal de poder fer la imputació bancària
Codi del ViaT
Lector de matrícules
Lector de targetes
Aquest capturador queda fora de l’abast del nostre problema
Detector/capturador
nouVehicle(vehicle)Anotador
Alguns comentaris
6
L’argument vehicle no és un vehicle, ans el model d’aquest en el missatge nouVehicle()
L’únic que cal és conèixer quin vehicle és
Exemples
Número viaT
Número matrícula
Número targeta de crèdit o dèbit
Anotació és la informació rellevant del problema
Indica quin vehicle ha passat, quin dia, i a quina hora
Anotador o Enregistrador
Crea una anotació per cada detecció, i la manté
Suposicions semàntiques
7
Assumim que cada cop que passa un vehicle,
l’apuntem. Però no fusionem diverses anotacions d’un mateix vehicle
Cada anotació és un parell <vehicle, moment de pas>
Podem tenir anotacions diferents amb el mateix vehicle
En aquest sentit, el vehicle no és un element
substancial del problema. Com a molt és una dada associada a l’anotació
Hi tornarem més endavant
8
Uns moments de reflexió
Una restricció obligada
9
Podem tenir anotacions distintes però en el mateix moment?
Si assumim que tenim un únic peatge o barrera, això no és possible
A no ser que per moment entenguem un espai de temps ampli com el dia o l’hora
Exigir que no hi hagi dues anotacions per la barrera en el mateix instant no és cap supòsit afegit
El context del problema ja obliga a què les coses siguin així: la cua del peatge és seqüencial
Ei, que torno a passar
10
Podem tenir dues anotacions pel mateix vehicle però en instants molt propers?
Podem suposar que ningú es dedica a donar voltes com si el peatge fos una rotonda
Potser algú s’equivoca, surt a la primera sortida i torna a passar el peatge en sentit contrari
Si no tenim en compte el sentit, les dues anotacions, la d’anada i la de tornada, només es distingeixen per l’hora
O potser algú surt, torna enrere a fer un encàrrec, torna a entrar a l’autopista, i repeteix el peatge
En tots els casos suposats com a factibles hi ha un
cert temps, afitable, entre una anotació i una altra
Una possible SS
11
Té sentit la següent SS?
Donades dues anotacions qualssevol del mateix vehicle, la diferència de temps entre una i l’altra ha de ser superior a un cert valor
Caldria fer una anàlisi per determinar quin és aquest valor
Semànticament té sentit
Evitem que algú circuli amb matrícula falsa, per exemple
Els casos que captura són ínfims
La majoria d’anotacions necessàriament estan a una distància força més gran que el valor llindar definit
Paga la pena?
Per assegurar que es compleix la SS, cada cop que arriba un vehicle caldria cercar la darrera anotació del mateix vehicle
Si les anotacions estan agrupades per vehicle això és simple. Però hem suposat que no volem aquesta agrupació
També podríem fer un recorregut seqüencial en totes les anotacions a la
Decisió sobre la RS
12
RS
Donades dues anotacions qualssevol del mateix vehicle, la diferència de temps entre una i l’altra ha de ser superior a un cert valor
Podem exigir-la
Però llavors cal assumir el cost de mantenir-la
Podem obviar-la
Els errors que es produeixen són minsos i segurament assumibles
Si algú ha duplicat una matrícula, llavors si el propietari es queixa li tornem els diners i aquí no ha passat res
Simplicitat
Per simplicitat, de moment, ens decantem per no considerar la RS i assumir els errors que se’n puguin derivar
Un petit resum
13
Tot seguit resumim totes les suposicions que hem fet durant l’anàlisi del problema
A cada suposició li hem donat un nom per tal de
facilitar-ne la referència futura
Suposicions semàntiques
14
Límit. Assumim que ens donen el capturador
Hem d’anotar les captures
El capturador detecta el vehicle i en captura les seves dades
També assumim l’existència d’algú que gestiona la barrera i el semàfor
Sense sentit. En les captures no distingim el sentit de pas
Totes les captures les anotem d’una mateixa manera
A efectes d’implementació, tenim un únic registre on acumular la informació de cada vehicle que passa la barrera. Aquesta informació no incorpora el sentit
Sense simultaneïtat. Les condicions del context
impossibiliten dues anotacions amb la mateixa marca de temps
SS obligada pel context, i per tant és més un requeriment que una SS
Com que és un requeriment que no ens han donat, l’expressem com a suposició obligada
Sense agrupació. Les anotacions no s’agrupen per vehicle
Canvis respecte el problema de la Carretera
15
Problema de la carretera
Pas de la barrera on l’objectiu és comptar els cotxes que passen
Suposicions semàntiques
Les suposicions que defineixen el Límit del problema, i les
que ens diuen que aquest és Sense sentit, són les mateixes en el problema de la Carretera i en el del Peatge
Canvia el context: enlloc de detector (hi ha o no hi ha vehicle) ara tenim un detector/capturador (el vehicle que hi ha és el 123)
Com a novetat tenim les suposicions Sense simultaneïtat i Sense agrupació
16
Glossari
Entenem el que portem entre mans?
17
Vehicle
Element del context del problema que pot passar múltiples cops
Anotació
Element del problema que indica que un determinat vehicle ha passat a determinada hora
No és el model del vehicle, ja que un mateix vehicle pot tenir moltes anotacions
Un mateix vehicle pot passar múltiples cops pel mateix peatge
El model del vehicle pròpiament és el codi ViaT o similar
Aquesta informació és part de la informació associada a una captura
Model de vehicle: un incís
18
La suposició Sense agrupació diu que el model del vehicle és un valor
Codi ViaT, número targeta, ...
Aquest valor no és un element rellevant de problema
Donat un codi de ViaT no ens interessa saber quants cops el vehicle en qüestió ha passat pel peatge, o en quins dies i hores
El fet que dues anotacions diferents tinguin el mateix valor de vehicle no és una informació que ens sigui útil per a res
No passa res si no ho acabeu d’entendre. Hi tornarem més extensament
Acció vs informació
19
La captura és el resultat d’una acció
Un vehicle (en el sentit del context del problema) travessa la barrera
L’anotació és la informació generada per aquesta acció
Qui ha passat i quan
En el problema de la Carretera, l’acció és
la detecció; i la informació associada és el
sol fet que s’ha produït la detecció
Nou enunciat
20
Enregistrem, per cada cop que un vehicle passa pel peatge, una anotació
Enregistrem anotacions
Glossari
Vehicle
Informació que permet associar cadascuna de les captures (acció) ofertes pel sistema detector/capturador a un compte de pagament
Codi ViaT, número targeta bancària, ....
Anotació
Informació associada a cadascuna de les captures
És el parell <vehicle, temps>
21
Especificació
Conceptes
22
Anotació
N’hi ha diverses. Totes elles amb les mateixes propietats.
És rellevant pel problema
El problema és enregistrar anotacions
Vehicle
La suposició Sense agrupació ens diu que només l’hem de considerar com un valor
Model conceptual
23
Casos d’ús
24
CU arribadaVehicle
Responsable d’indicar que s’ha detectat un altre vehicle, que cal anotar
DS
nouVehicle(vehicle)
CU inicialitza
Responsable de deixar el sistema en les condicions necessàries per al seu funcionament
DS
ini()
Contractes ES
25
ES nouVehicle(vehicle)
Arguments
vehicle: Informació (ViaT, ...) del vehicle capturat
PRE: ∅
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors a == <vehicle, h>
ES ini()
PRE: ∅
POST: No tenim cap anotació
26
Múltiples barreres: anàlisi
Múltiples barreres: enunciat
27
Un peatge té moltes barreres
Volem anotar tots els passos de vehicles per totes les
barreres d’un mateix peatge
Anàlisi prèvia
28
Per tal d’entendre què ens estan demanant ens hem de fer algunes preguntes:
1. Distinció de la barrera
Cal distingir, quan capturem un vehicle, per quina barrera del peatge ha passat?
2. Importància de la barrera
Donada una barrera del peatge, ens interessa saber quines són les anotacions que li corresponen?
Dues preguntes dependents
29
Evidentment la segona pregunta (la importància de la barrera) només té sentit si responem
afirmativament a la primera
Només si distingim quina és la barrera que ha traspassat el vehicle podem plantejar-nos si ens interessa saber quins vehicles han passat per una barrera determinada
Supòsit: La barrera ens és indiferent
30
Tenim múltiples sistemes detectors/capturadors que treballen en paral·lel
Però tots ells envien el missatge de captura al nostre sistema nouVehicle(vehicle)
És possible dues anotacions en el mateix instant?
Depèn de qui capturi l’instant
Si ho fa el detector és possible, però llavors l’ES ha de ser nouVehicle(vehicle,instant)
Si ho fa l’enregistrador no és possible: els ES rebuts dels diferents capturadors s’han d’encuar per tal de poder-los processar
Decisió sobre la barrera indiferent
31
Si la barrera ens és indiferent, el més simple és que sigui l’enregistrador qui capturi l’instant
No cal modificar el contracte dels capturadors
No cal modificar el contracte de l’enregistrador
N’hi ha prou en assegurar, amb una cua, que l’enregistrador no perd cap dels missatges dels capturadors
Supòsit: Volem distingir la barrera
32
Suposem que volem distingir la barrera que ha generat una anotació
Necessàriament el capturador ens n’ha de donar la informació
nouVehicle(vehicle, barrera)
Per a què volem conèixer la barrera?
33
Exemples:
Donada una anotació, volem saber quina barrera l’ha generada
Donada una barrera volem saber quines anotacions ha generat
Donada una barrera volem saber quins vehicles l’han traspassada
Barrera on s’ha fet l’anotació
34
Suposem que donada una anotació volem saber quina és la barrera que l’ha generada
Possible solució:
Un dels valors d’una anotació és la barrera que l’ha generada
Anotació = <vehicle, instant, barrera>
A tots els efectes la barrera és un valor
Que dues anotacions tinguin o no el mateix valor per la barrera ens és del tot indiferent
No hi ha abstracció possible
Barrera no és un concepte
Anotacions d’una barrera
35
Suposem que donada una barrera volem conèixer les anotacions que ha generat
La barrera és significativa pel problema
En concret, per cadascuna d’elles volem saber quines són les seves anotacions
La barrera ha de ser un concepte
N’hi ha moltes; amb les mateixes propietats; són rellevants
Vehicles d’una barrera
36
Suposem que donada una barrera volem conèixer els vehicles de les anotacions que ha generat
La barrera és significativa pel problema
En concret, per cadascuna d’elles volem saber quines són les seves anotacions, i a partir d’aquestes extreure’n els vehicles
La barrera ha de ser un concepte
N’hi ha moltes; amb les mateixes propietats; són rellevants
Això és independent de la naturalesa del vehicle:
valor o concepte
37
Múltiples barreres:
especificació
Casos considerats
38
1.
Sense distinció de la barrera
El nombre de capturadors (barreres) és indeterminat
Per cada captura d’un nou vehicle s’envia un missatge a l’enregistrador
Tant li fa quina és la barrera que l’ha enviat 2.
Barrera com a valor
En les captures, l’enregistrador rep informació de la barrera que ha fet la detecció/captura
La barrera és una propietat de l’anotació, però no és rellevant de cara al problema
3.
Barrera com a concepte
En les captures, l’enregistrador rep informació de la barrera que ha fet la detecció/captura
La barrera és rellevant pel problema
Elements comuns
39
Suposicions semàntiques
Tenim les mateixes suposicions que el cas de barrera simple
Cal afegir la suposició de qui determina el temps de l’anotació
CU
arribadaVehicle
Responsable d’introduir una nova anotació
inici
Prepara les condicions per a l’emmagatzematge de les anotacions
Per simplificar no el presentem
Suposicions semàntiques comunes
40
Límit. Assumim que ens donen el capturador
Hem d’anotar les captures
El capturador detecta el vehicle i en captura les seves dades
També assumim l’existència d’algú que gestiona la barrera i el semàfor
Sense sentit. En les captures no distingim el sentit de pas
Totes les captures les anotem d’una mateixa manera
A efectes d’implementació, tenim un únic registre on acumular la informació de cada vehicle que passa la barrera. Aquesta informació no incorpora el sentit
Sense simultaneïtat. Les condicions del context impossibiliten que dues anotacions amb el mateix temps
RS obligada pel context, i per tant és més un requeriment que una RS
Com que és un requeriment que no ens han donat, l’expressem com a suposició
Sense agrupació. Les anotacions no s’agrupen per vehicle
Captura sense temps. Les captures no indiquen l’instant de la captura. És l’enregistrador qui plasma l’instant en el moment de fer l’anotació
Sense distinció de la barrera
41
CU arribadaVehicle
Responsable d’indicar que s’ha detectat un altre vehicle, que cal anotar
DS
nouVehicle(vehicle)
ES nouVehicle(vehicle)
Arguments
vehicle: Informació (ViaT, ...) del vehicle capturat
PRE: ∅
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors
a == <vehicle, h>
Barrera com a valor
42
CU arribadaVehicle
Responsable d’indicar que s’ha detectat un altre
vehicle, que cal anotar
DS
nouVehicle(vehicle, barrera)
ES nouVehicle(vehicle, barrera)
Arguments
vehicle: Informació (ViaT, ...) del vehicle capturat
barrera: Barrera on s’ha detectat el vehicle
PRE: ∅
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors
a == <vehicle, h, barrera>
Barrera com a concepte
43
CU arribadaVehicle
Responsable d’indicar que s’ha detectat un altre
vehicle, que cal anotar
DS
nouVehicle(vehicle, barrera)
ES nouVehicle(vehicle, barrera)
Arguments
vehicle: Informació (ViaT, ...) del vehicle capturat
barrera: Barrera on s’ha detectat el vehicle
PRE: ∅
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors
a == <vehicle, h>
3. pas(barrera, a)
44
Múltiples peatges: anàlisi
Múltiples peatges: enunciat
45
Admetem que hi ha múltiples punts de peatge
Cada punt pot tenir més d’una barrera
Anàlisi prèvia
46
En el cas de múltiples barreres tenia sentit plantejar la situació on la barrera era indiferent
En el cas de múltiples peatges no
Per exemple, cada peatge té un preu diferent
El preu depèn del peatge, no pas de la barrera
El peatge és un concepte
N’hi ha molts; tots tenen les mateixes propietats
És rellevant
Canvis en l’ES
47
En indicar la captura cal indicar el peatge
Així, segons com considerem el fet que un peatge tingui múltiples barreres, tindrem:
nouVehicle(vehicle, peatge)
nouVehicle(vehicle, barrera, peatge)
Si el peatge es pot obtenir de la barrera, llavors tenim:
nouVehicle(vehicle,barrera)
Això només és possible si la barrera és un concepte, no pas un valor
Per simplicitat de cara a l’usuari, sempre que el peatge es pugui obtenir de la barrera, no el demanem pas
Supòsit: Barrera com a valor
48
Supòsit: Barrera com a concepte
49
Quan no consideràvem el peatge, les anotacions les lligàvem a la barrera
Ara però, les anotacions de qui són, de la barrera o del peatge?
En la següent projecció presentem els dos possibles DMC
Quin considerem com a correcte?
Dos possibles DMC
50
Anotacions de la barrera
Anotacions del peatge
Anàlisi de les alternatives
51
Si les anotacions són de la barrera, no podem saber quines anotacions són d’un mateix peatge
En l’especificació diem allò que és rellevant. El que no diem, és perquè no ens interessa
Així, com que no lliguem les anotacions al peatge estem dient que aquesta informació no és rellevant, no ens interessa
Si les anotacions són del peatge, no podem saber quines anotacions són d’una mateixa barrera
Segurament el que ens interessa són ambdues coses
Tot seguit presentem el DMC resultant
DMC del peatge amb barreres
52
El DMC és correcte com a MC?
53
El diagrama diu tot el que ha de dir? O permet coses que no ens interessen?
Observeu que d’anotació a peatge hi ha dos camins
Donat un peatge qualsevol, obtenim les mateixes anotacions tant si anem per un camí com si anem per l’altre camí?
El DMC no en diu res
Quina interrelació volem que hi hagi entre els dos camins?
En aquest cas volem que siguin equivalents
Com que el DMC no en diu res, ho hem de dir nosaltres
MC del peatge amb barreres
54
Restricció semàntica
enregistrament = ubicació ∘ pas
55
Múltiples peatges: especificació
Suposicions semàntiques comunes
56
Límit. Assumim que ens donen el capturador
Hem d’anotar les captures
El capturador detecta el vehicle i en captura les seves dades
També assumim l’existència d’algú que gestiona la barrera i el semàfor
Sense sentit. En les captures no distingim el sentit de pas
Totes les captures les anotem d’una mateixa manera
A efectes d’implementació, tenim un únic registre on acumular la informació de cada vehicle que passa la barrera. Aquesta informació no incorpora el sentit
Sense simultaneïtat. Les condicions del context impossibiliten que dues anotacions amb el mateix temps
RS obligada pel context, i per tant és més un requeriment que una RS
Com que és un requeriment que no ens han donat, l’expressem com a suposició
Sense agrupació. Les anotacions no s’agrupen per vehicle
Captura sense temps. Les captures no indiquen l’instant de la captura. És l’enregistrador qui plasma l’instant en el moment de fer l’anotació
Barrera com a valor, amb peatge
57
CU arribadaVehicle
Responsable d’indicar que s’ha detectat un altre
vehicle, que cal anotar
DS
nouVehicle(vehicle, barrera, peatge)
ES nouVehicle(vehicle,barrera,peatge)
Arguments
vehicle: Informació (ViaT, ...) del vehicle capturat
barrera: Barrera on s’ha detectat el vehicle
peatge: Peatge al qual pertany la barrera
PRE: ∅
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors
a == <vehicle, h, barrera>
3. enregistrament(peatge, a)
1
Barrera com a concepte, amb peatge (1)
58
CU arribadaVehicle
Responsable d’indicar que s’ha detectat un altre
vehicle, que cal anotar
DS
nouVehicle(vehicle, barrera, peatge)
ES nouVehicle(vehicle,barrera,peatge)
Arguments
vehicle: Informació (ViaT, ...) del vehicle capturat
barrera: Barrera on s’ha detectat el vehicle
peatge: Peatge al qual pertany la barrera
PRE: ubicació(barrera,p)
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors
a == <vehicle, h>
3. pas(barrera, a)
4. enregistrament(a, p)
Restricció semàntica enregistrament =
pas ∘ ubicació
2
Barrera com a concepte, amb peatge (2)
59
CU arribadaVehicle
Responsable d’indicar que s’ha detectat un altre
vehicle, que cal anotar
DS
nouVehicle(vehicle, barrera)
ES nouVehicle(vehicle,barrera)
Arguments
vehicle: Informació (ViaT, ...) del vehicle capturat
barrera: Barrera on s’ha detectat el vehicle
peatge: Peatge al qual pertany la barrera
PRE: ASS. ∃ un Peatge, de nom p, tal que:
ubicació(barrera,p)
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors
a == <vehicle, h>
3. pas(barrera, a)
4. enregistrament(a, p)
Restricció semàntica enregistrament =
•
Suposem que es pot obtenir el peatge a partir de la barrera3
D’on surt el peatge
60
Si la barrera és un valor, d’ella no podem obtenir cap informació
En concret, no en podem obtenir el peatge
És el model 1
Les coses canvien si la barrera és un concepte
La obligatorietat de la ubicació permet obtenir el peatge a partir de la barrera
Això però només és possible si tenim l’entitat barrera
I si només tenim l’identificador de barrera?
Identificació local. Admetem que tant el peatge A3 com el B14, per exemple, tinguin una barrera 3
L’identificador de la barrera no és suficient per saber de quina barrera es tracta
Necessitem també el peatge (sigui en forma d’entitat, sigui en forma d’identificador)
És el model 2
Identificació global. Només hi ha una barrera 3
A partir de l’identificador podem trobar la barrera. I a partir d’ella, el peatge
És el model 3
Lectura dels contractes
61
Model 2
Passem dues entitats: barrera i peatge
Aquestes dues entitats no poden ser independents
Cal que la barrera sigui del peatge
D’aquí la necessitat de la PRE
Cal observar que la PRE es comporta com un filtre
Si l’usuari envia una barrera que no es correspon al petge indicat, no es compleix la PRE
Model 3
Només passem la barrera. Però sabem (per l’obligatorietat d’ubicació) que segur que és d’un peatge
Necessitem la PRE per batejar aquest peatge que sabem que existeix
A diferència del Model 2, aquesta PRE no és un filtre
Sempre es complirà!! L’usuari no té manera d’enviar uns valors dels arguments que falsegin la PRE
Es tracta d’una asserció assegurada. La necessitem només per batejar entitats; no pas per imposar unes condicions
62
El vehicle com a concepte
Supressió d’una suposició
63
Fins ara hem treballat amb la següent suposició semàntica:
Sense agrupació. Les anotacions no s’agrupen per vehicle
Què passa si volem agrupar les anotacions per vehicle?
El vehicle es converteix en important pel problema
Esdevé un concepte
Fins ara era un valor que era mantingut per l’anotació
Vehicle com a concepte
Refeu tota l’anàlisi, considerant el vehicle un concepte
Heu de considerar els casos:
Barrera única
Múltiples barreres
Barrera com a valor i com a concepte
Múltiples peatges
64
Barrera única
CU arribadaVehicle
DS
nouVehicle(vehicle)
Contractes
ES nouVehicle(vehicle)
PRE:∅
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors a.instant == h
3. imputació(vehicle, a)
65
Múltiples valors barrera
CU arribadaVehicle
DS
nouVehicle(vehicle,barrera)
Contractes
ES nouVehicle (vehicle,barrera)
PRE:∅
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors a.instant == h
a.Barrera == barrera 3. imputació(vehicle, a)
66
Múltiples barrera concepte
CU arribadaVehicle
DS
nouVehicle(vehicle,barrera)
Contractes
ES nouVehicle(vehicle,barrera)
PRE:
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors a.instant == h
3. imputació(vehicle, a) 4. pas(a,barrera)
67
Múltiples valors barrera amb peatges
CU arribadaVehicle
DS
nouVehicle(vehicle,barrera,peatge)
Contractes
ES nouVehicle (vehicle,barrera,peatge)
PRE: ∅
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors a.instant == h
a.barrera == barrera 3. imputació(vehicle, a)
4. enregistrament(a,peatge) 68
Múltiples barrera concepte amb peatges
CU arribadaVehicle
DS
nouVehicle(vehicle, barrera)
Contractes
ES nouVehicle (vehicle, barrera)
PRE: ∃ un Peatge, de nom p, tal que:
ubicació(barrera,p)
POST:
1. Existeix una nova anotació de nom a
2. Si h és l’hora en què s’ha rebut l’ES nouVehicle(...) llavors a.instant == h
3. imputació(vehicle, a) 4. pas(a,barrera)
5. enregistrament(a,p)
69
La RS es manté en el contracte perquè sempre que afegim un enllaç per un camí també l’afegim per l’altre
Comptador de vehicles
Especifiqueu el següent problema:
Volem comptar el nombre de cops que cada vehicle passa per un determinat punt
Pista
Anàlisi similar a Pas de la Barrera: Carretera
Ara però tenim tants comptadors com vehicles
És el vehicle un concepte?
70
Comptador de vehicles
CU arribadaVehicle
DS
nouVehicle(vehicle)
Contractes
ES nouVehicle(vehicle)
PRE:∅
POST:
• vehicle.#copsQueHaPassat++
71