Documente Academic
Documente Profesional
Documente Cultură
book
request
cancel
user
pickUp
<<extend>> <<extend>>
<<actor>>
PersistentStore
early return late return
billing clerk
6.2 Use Cases 223
Class Diagram
Customer
Car
Name : String <<structure>> <<enumeration>>
DateT CatET LicenceNo : String
create(n:String):Customer
Cat : CatET
book(s:DateT,e:DateT,ct:CatET) Day : Integer <<1..31>> E / economy
cancel(b:Booking) Month : Integer <<1..12>> S / standard create(l:String,ct:CatET):Car
pickUp(b:Booking):Car Year : Integer <<1900..2100>> L / luxus
return(cr:Car) 0..1 car
1 customer
Assignment
Registration
"only correct dates"
0..1 booking
0..* booking car : Car
searchAvailCar():Car car : Set(Car)
Booking
post Cat<=result.Cat and result.available
Start : DateT
Attention! many "returns": End : DateT Start<=End
Customer::return(cr:car) Cat : CatET car.notEmpty implies Cat<=car.Cat
Booking::Return:dateT PickedUp : Boolean
Booking::returnCar() Return : DateT
create(cs:Customer,s:DateT,e:DateT,ct:CatET):Booking
searchAvailCar():Car
assignCar(cr:Car)
returnCar()
6.3 Static Structure Diagrams 231
vw:Car
ada:Customer
LicenceNo="ABC123"
Name="Ada"
Cat=S
customer car
Registration Assignment
booking b:Booking
booking
Start="11/20"
End="11/23"
Cat=E
PickedUp=true
Return=undef
6.3 Static Structure Diagrams 232
Start="11/20"
End="11/23"
Cat=E
PickedUp=true booking
booking Return=undef
Registration Assignment
customer car
vw:Car
ada:Customer
LicenceNo="ABC123"
Name="Ada"
Cat=S
customer
Registration
booking b2:Booking
Start="11/16"
End="11/18"
Cat=L ford:Car
bob:Customer PickedUp=true
Return="11/17" LicenceNo="DEF456"
Name="Bob"
Cat=E
6.4 Static Structure Diagrams 233
Today="11/23" b1:Booking
Start="11/20"
End="11/23"
Cat=E
PickedUp=false booking
Return=undef
Assignment
car
1. Booking b1 without customer vw:Car
ada:Customer 2. Car vw has 2 bookings
3. Booking b2 has 2 cars LicenceNo="ABC123"
Name="Ada" 4. b2’s Cat is S, ford’s Cat is E Cat=S
customer car
Registration Assignment
booking b2:Booking
booking
Start="11/22"
End="11/30"
Cat=S booking
PickedUp=true Assignment
car ford:Car
Return=undef
LicenceNo="DEF456"
Cat=E
6.4 Static Structure Diagrams 234
booked
book()
create()
cancel()
noReturns
pickUp()
return()
mustReturn
6.4 Statechart Diagrams 236
booked
BOOK
create(n) /
createNewCustomer
cancel(b) [bookingBelongsToCustomer
and bookingOpenOrDue and
onlyOneBookingForCustomer] /
return(cr)
noReturns recordCancelation
PICKUP [onlyOneCurrentBookingForCustomer
and existsOpenDueBookingForCustomer
return(cr) [onlyOneCurrentBookingForCustomer and carBelongsToCustomer and
and noOpenDueBookingForCustomer carUnavailableOrDue] /
and carBelongsToCustomer and handleBooking
carUnavailableOrDue] /
handleBooking
mustReturn BOOK
return(cr) [moreThanOneCurrentBookingForCustomer
and carBelongsToCustomer and
carUnavailableOrDue] /
cancel(b) [bookingBelongsToCustomer
handleBooking
PICKUP and bookingOpenOrDue] /
recordCancelation
6.4 Statechart Diagrams 237
create(cs,s,e,ct) /
createNewBooking
customerCancels /
open recordCancelation
when(todayIsTheBookingsStartDay)
when(todayIsAfterTheBookingStartDay) /
recordCancelation
due closed
assignCar(cr) /
returnCar() /
linkBookingAndCarAndRecordPickUp
unlinkBookingAndCarAndRecordReturnDay
current
6.4 Statechart Diagrams 238
create(l,ct) / createNewCar
available
carAssigned
carReturned
carReturned
unAvailable due
when(todayIsTheBookingsEndDay)
6.4 Statechart Diagrams 239
RET2booked: ( booking->select(open)->size>0 or
booking->select(due)->size>0 ) and
booking->select(current)->size=1
return(cr)
[ RETOK and RET2noReturns ] / RET2mustReturn: booking->select(current)->size>1
RETACT
mustReturn
RETACT: cr.booking.returnCar()
booking->select(open)->size=0 and
booking->select(due)->size=0 and cancel(b)
booking->select(current)->size=0 [ CANOK ]
return(cr)
[ RETOK and RET2mustReturn ] /
PICKUP
RETACT
6.4 Statechart Diagrams 240
booking->select(current)->size>0
PICKUP
6.4 Statechart Diagrams 241
open customer.cancel(self) /
PickedUp=false
when(Today=Start) when(Today>Start) /
PickedUp=false;
customer.cancel(self)
due closed
current
6.4 Statechart Diagrams 242
available
booking.assignCar(self)
booking.returnCar()
booking.returnCar()
unAvailable due
when(Today=booking.End)
6.4 Statechart Diagrams 243
create("Ada") ada:Customer
noReturns
create("ABC123",S) vw:Car
available
book("11/20","11/23",E)
create(ada,"11/20","11/23",E) b:Booking
booked open
Today=b.Start due
pickUp(b)
searchAvailCar()
vw
assignCar(vw)
unAvailable current
vw
mustReturn
Today=b.End due
return(vw)
returnCar()
noReturns available closed
6.5 Statechart Diagrams 244
:User
noReturns
create("ABC123",S) vw:Car ada:Customer vw:Car
available
book("11/20","11/23",E)
create(ada,"11/20","11/23",E) b:Booking ada:Customer b:Booking vw:Car
booked open
Today=b.Start due
pickUp(b)
searchAvailCar()
vw
Today=b.End due
return(vw)
1. create("Ada")
3. book("11/20","11/23",E)
2. create("ABC123",S)
4. pickUp(b)
5. return(vw)
customer car
booking {new} car {transient}
ada:Customer {new} b:Booking {new} vw:Car {new}
3.1 create(ada,"11/20","11/23",E)
4.1 searchAvailCar()
4.2 assignCar(vw)
5.1 returnCar()
6.5 Collaboration Diagrams 247
create("Ada") ada:Customer
noReturns
book("11/20","11/23",E)
create(ada,"11/20","11/23",E) b:Booking
booked open
Today=b.Start due
pickUp(b)
searchAvailCar()
create("ABC123",S) vw:Car
available
vw
assignCar(vw)
unAvailable current
vw
mustReturn
Today=b.End due
return(vw)
returnCar()
noReturns available closed
6.5 Collaboration Diagrams 248
noReturns
book("11/20","11/23",E)
create(ada,"11/20","11/23",E) b:Booking ada:Customer b:Booking
booked open
Today=b.Start due
pickUp(b)
searchAvailCar()
available
vw
1. create("Ada")
2. book("11/20","11/23",E)
3.2 create("ABC123",S)
3. pickUp(b)
4. return(vw)
2.1 create(ada,"11/20","11/23",E)
3.1 searchAvailCar()
3.3 assignCar(vw)
4.1 returnCar()
6.5 Collaboration Diagrams 250
create("Ada") ada:Customer
noReturns
book("11/20","11/23",E)
create(ada,"11/20","11/23",E) b:Booking
booked open
Today=b.Start due
Today>b.Start
cancel(b)
noReturns closed
6.5 Collaboration Diagrams 251
create("Ada") ada:Customer
noReturns
book("11/20","11/23",E)
create(ada,"11/20","11/23",E) b:Booking
booked open
cancel(b)
noReturns closed
Today<b.Start
6.5 Collaboration Diagrams 252
create("Ada") ada:Customer
noReturns
create("ABC123",S) vw:Car
available
book("11/20","11/23",E)
create(ada,"11/20","11/23",E) b:Booking
booked open
Today=b.Start due
pickUp(b)
searchAvailCar()
vw
assignCar(vw)
vw unAvailable current
mustReturn
return(vw)
returnCar()
create("Ada") ada:Customer
noReturns
create("ABC123",S) vw:Car
available
book("11/20","11/23",E)
create(ada,"11/20","11/23",E) b:Booking
booked open
Today=b.Start due
pickUp(b)
searchAvailCar()
vw
assignCar(vw)
vw unAvailable current
mustReturn
Today>b.End due
return(vw)
returnCar()
available closed
assignCar(ford)
current unAvailable
6.5 Collaboration Diagrams 255
assignCar(vw)
unAvailable current mustReturn
Today=b1.End
due due
Today=b2.Start
assignCar(ford)
current unAvailable
return(vw)
available closed
6.6 Collaboration Diagrams 256
6.6 Closing
6.6 Closing 257
testAvailableCars
[carAvailable] [noCarAvailable]
result=b.searchAvailCar()
chooseAnAvailableCar purchaseANewCar
connectTheBookingToTheCar
b.assignCar(result)
indicateThatACarHasBeenPickedUp
returnTheCar return(result)
6.6 Closing 258
Car.allInstances->exists(cr|
testAvailableCars
cr.available and cr.Cat>=b.Cat)
[true]
[carAvailable] [else] [false]
result:=Car.allInstances->
result=someAvailableCar result=someNewCar select(cr|cr.available and result:=Car.create(newLicNo,b.Cat)
cr.Cat>=b.Cat)->any
link(Assignment,[b,result]) b.car:=b.car->including(result)
b.pickedUp=true b.pickedUp:=true
return(result) return(result)
6.6 Closing 259
[diagrams ok]
modify object modify class modify statechart modify sequence develop more sequence develop more object
diagram diagram diagram diagram diagrams diagrams
6.6 Closing 260