abstract
Person
Name
->
string
Surname
->
string
DateOfBirth
->
string
or
Gender
Male
Female
xor
MaritalStatus
NeverMarried
Married
Divorced
Address
Street
->
string
UnitNo
->
string
?
City
->
string
Country
->
string
PostalCode
->
string
JohnDoe
:
Person
[
Name
= "John"
]
[
Surname
= "Doe"
]
[
DateOfBirth
= "01-02-1985"
]
[
Male
]
[
Married
]
[
Street
= "123 Main St."
]
[
City
= "Great Town"
]
[
Country
= "Canada"
]
[
PostalCode
= "A1B 2C3"
]
abstract
Student
:
Person
StudentId
->
string
abstract
WaitingLine
participants
->
Person
*
MaryJane
:
Student
[
Name
= "Mary Jane"
]
[
StudentId
= "MJ13421354"
]
BusLine
:
WaitingLine
[
JohnDoe
in
participants
]
[
MaryJane
in
participants
]
JohnAndMaryLine
:
WaitingLine
[
participants
=
JohnDoe
,
MaryJane
]
abstract
TwoPersonLine
:
WaitingLine
[
#
participants
= 2
]
abstract
OneToTenPersonLine
:
WaitingLine
[
#
participants
>= 1
]
[
#
participants
<= 10
]
enum
NorthAmericanCountry =
Canada
|
USA
|
Mexico
abstract
Person2
Country
->
NorthAmericanCountry
JohnDoe2
:
Person2
[
Country
=
Canada
]