Revision d7752714a7aeb0e7e60ac0b76ef68f205eff993a (click the page title to view the current version)

Behavioral Modeling - Power Window

Modeling variability and structures with variability

Feature modeling

Metamodel

abstract final Feature
abstract final FeatureModel

Model

WinFeatures : FeatureModel
manualUpDown : Feature
express : Feature ?
pinchProtection : Feature ?

Structural modeling

Metamodel

abstract final Component
abstract Port
abstract final Command
abstract State
abstract StateMachine

Model

Commands and requests.

motorUp : Command
motorStop : Command
motorDown : Command
abstract final UserRequest
expressUp : UserRequest ?
stop : UserRequest
down : UserRequest

Window motor

WinMotor : Component
cmd : Port -> Command

Window controller

abstract WinController : Component
final motor -> WinMotor
pinchDetector : Component ?
req : Port -> UserRequest ?
endOfTravel : Port ?
objectDetected : Port ?
final xor WinStates : StateMachine
xor movingUp : State
[ req = down --> movingDown ]
[ req = up --> movingUp ]
initial basic : State
[ req = stop --> stopped ]
movingUpX : State
[ this -[objectDetected]--> stopped ]
initial xor stopped : State
closed : State
[ req = down --> movingDown ]
[ req = up || req = stop --> closed ]
partlyOpen : State
[ req = up --> movingUp ]
[ req = down --> movingDown ]
[ req = stop --> partlyOpen ]
open : State
[ req = up --> movingUp ]
[ req = down || req = stop --> open ]
movingDown : State
[ req = up --> movingUp ]
[ endOfTravel --> open ]
[ req = stop --> stopped ]
[ req = down --> movingDown ]

Variability in structural models

Linking the feature with the optional component (structural variability)

The component pinchDetector is only required if we support the feature pinchProtection.

Disabling objectDetected port

Without the feature pinchProtection, the port objectDetected should be inactive. Having the feature will allow receiving the signal objectDetected.

Alphabet variability

The user request expressUp is only available when the feature express is present.

Variability in Behavior Using Inheritance

Two kinds of window controllers:

With continuous chime

WinCtrWithContChime : WinController ?
chime : Port ?
[ movingUpX <=> chime ]

With intermittent chime

WinCtrWithChime : WinController ?
chime : Port ?
[ no movingUpX => no chime ]
[ chime --> no chime ]
[ no chime && movingUpX --> movingUpX => chime ]