abstract
Feature
cost
:
integer
mass
:
integer
abstract
ComfortFeature
:
Feature
comfort
:
integer
abstract
FuelFeature
:
ComfortFeature
fuel
:
integer
abstract
Car
ABS
:
ComfortFeature
?
[
cost
= 2
]
[
mass
= 1
]
[
comfort
= 1
]
xor
Transmission
:
Feature
[
cost
= 0
]
[
mass
= 0
]
Automatic
:
FuelFeature
[
fuel
= 2
]
[
mass
= 1
]
[
comfort
= 2
]
[
cost
= 4
]
Manual
:
FuelFeature
[
fuel
= 0
]
[
mass
= 1
]
[
comfort
= 1
]
[
cost
= 3
]
FCA
:
FuelFeature
?
[
fuel
= 2
]
[
mass
= 2
]
[
comfort
= 4
]
[
cost
= 5
]
xor
Sensor
:
Feature
[
cost
= 0
]
[
mass
= 0
]
Radar
:
Feature
[
cost
= 3
]
[
mass
= 1
]
Lidar
:
Feature
[
cost
= 5
]
[
mass
= 1
]
xor
Alert
:
Feature
?
[
cost
= 0
]
[
mass
= 0
]
Haptic
:
ComfortFeature
[
comfort
= 4
]
[
cost
= 2
]
[
mass
= 1
]
Audible
:
ComfortFeature
[
comfort
= 2
]
[
cost
= 1
]
[
mass
= 1
]
CC
:
FuelFeature
?
[
fuel
= 1
]
[
mass
= 1
]
[
comfort
= 3
]
[
cost
= 4
]
ACC
:
FuelFeature
?
[
fuel
= 2
]
[
mass
= 2
]
[
comfort
= 6
]
[
cost
= 3
]
[
ACC
=>
FCA
]
total_cost
:
integer
=
sum
Feature
.
cost
total_comfort
:
integer
=
sum
ComfortFeature
.
cost
total_fuel
:
integer
=
sum
FuelFeature
.
cost
total_mass
:
integer
=
sum
FuelFeature
.
mass
aCar
:
Car
<<
min
aCar
.
total_cost
>>
<<
min
aCar
.
total_fuel
>>
<<
max
aCar
.
total_comfort
>>
<<
min
aCar
.
total_mass
>>