MM allows object specifications to be extended with extra attributes as well as with extra equations:
object company_and_workers { inherits( company ) < workforce : integer average_salary: real > outgoings[t] = workforce[t]*average_salary[t] } object parkinsons { inherits( company_and_workers ) workforce[0] = 100 & (t>0) workforce[t] = workforce[t-1]*2 & average_salary[0] = 12000 & (t>0) average_salary[t] = average-salary[t-1]*1.5 & incomings[0] = 1000 & (t>0) incomings[t] = incomings[t-1] * 1.1 }
In this example, we have two stages
of inheritance. The first adds two new attributes, workforce
and
average_salary
, and an equation relating them, to create a new
object, company_and_workers
. (This is a naïve way to
handle salary costs: we do so for simplicity.)
Like the original company
, company_and_workers
is underdetermined: it's a generic object that could be useful
in modelling a range of different companies.
In the second stage, we create a specific, fully-determined, company
from company_and_workers
by adding initial values and some
growth laws.
It would be possible to combine these stages, creating parkinsons
directly from company
. In practice though, it could well
be useful to have company_with_workers
as a separate object
for use in a number of different models.