|
|
| Line 147: |
Line 147: |
| </math> | | </math> |
| #<math> | | #<math> |
| \mbox{id} \left( \mbox{dom} \left( \tau_2 \right) \right) = \left\{ f_2 \mapsto f_2, g_2 \mapsto g_2\right\}
| | \mbox{dom} \left( \tau_2 \right) = \left\{ f_2, g_2 \right\} |
| </math> | | </math> |
|
| |
|
| Line 155: |
Line 155: |
| \mbox {UNION} \ b \, \cdot \, \left(b \in \left\{ C_1 \right\} | | \mbox {UNION} \ b \, \cdot \, \left(b \in \left\{ C_1 \right\} |
| \ |\ | | \ |\ |
| \mbox{id}\left(\mbox{ran}\left( \beta_{ S_{1} } \left( b \mapsto b \right) \ll \eta_{2, b} \right)\right)\right) | | \mbox{ran}\left( \beta_{ S_{1} } \left( b \mapsto b \right) \ll \eta_{2, b} \right)\right) |
| = | | = |
| \mbox{id}\left(\mbox{ran}\left( \beta_{ S_{1} } \left( C_1 \mapsto C_1 \right) \ll \eta_{2, C_1} \right)\right)
| | \mbox{ran}\left( \beta_{ S_{1} } \left( C_1 \mapsto C_1 \right) \ll \eta_{2, C_1} \right) |
| </math> | | </math> |
| #<math> | | #<math> |
| Line 173: |
Line 173: |
| </math> | | </math> |
| #<math> | | #<math> |
| \mbox{id}\left(\mbox{ran}\left( \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2\right\} \right) \right) | | \mbox{ran}\left( \left\{ f_1 \mapsto f_2, g_1 \mapsto g_2\right\} \right) |
| = | | = |
| \left\{ f_2 \mapsto f_2, g_2 \mapsto g_2\right\} | | \left\{ f_2, g_2\right\} |
| </math> | | </math> |
|
| |
|
Author: Matthias Konrad
The system
In this example we are studying a simple system with three classes that contains both renaming and selects:
class
C1
feature
f1 do ... end
g1 do ... end
end
|
class
C2
inherit
C1
rename f1 as f2, g1 as g2
redefine f2, g2 end
feature
f2 do ... end
g2 do ... end
end
|
class
C3
inherit
C2
select f2 end
C1
redefine f1, g1
select g1 end
feature
f1 do ... end
g1 do ... end
end
|
This system is defined by:
The naming function
We proceed by calculating the naming function. According to its definition we have to do that incrementally. Meaning that we first calculate then and finally .
Calculating
Since contains only one class it is sufficient to define . According to the definition:
We can forget about the right part of the union since has no base classes. So we need to calculate:
-
So we get:
And hence:
Calculating
We show the calculation of the different (four) parts of the function in separate sections:
Calculate
According to the definition:
Calculate
According to the definition:
Calculate
According to the definition:
Lets calculate the left part first:
And now the right part:
So we get:
Calculate
According to the definition:
Where:
And:
Here are the steps taken to compute the part:
-
-
So we get:
Putting the parts together:
We can know show the complete total function:
|
|
|
|
|
|
|
|
|
|
|
|
Calculating
We will not show the complete construction of but restrict our self to the most interesting parts.
Calculate
According to the definition:
Where:
And:
Note that we can omit from the formulas since it is always empty.
-
-
So we get:
The complete naming function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The dynamic binding function
To calculate the dynamic binding function, we need to get . We will again calculate it incrementally:
Calculating
According to the definition:
Since is empty this simplifies to:
So we get:
Calculating
Again we calculate the different parts of the function in separate sections:
Calculate
According to the definition:
Calculate
According to the definition:
Calculate
According to the definition:
-
So we get:
Calculate
According to the definition:
At this stage it should be clear how to calculate this, so we just give the result:
Putting the parts together:
We can know show the complete total function:
|
|
|
|
|
|
|
|
|
|
|
|
Calculating
There is nothing new for this calculation so we just present the result:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Deriving the dynamic binding function
The function is now given. We evaluate it at two interesting points: