Author:halw

Date:2011-04-08T23:03:48.000000Z


git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@869 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
halw
2011-04-08 23:03:48 +00:00
parent 02e92b18a5
commit 54b4f91ee2

View File

@@ -13,6 +13,33 @@ The scenario in the Faneuil Hall example involves a number of immigrants waiting
=Highlights=
The primary actors here are the immigrants, the judge, and the spectators, model by classes <code>IMMIGRANT</code>, <code>JUDGE</code>, and <code>SPECTATOR</code>, respectively. Some of the common behavior of these classes is abstracted into a deferred parent class, <code>ACTOR</code>. In addition to the actor classes, there is a class <code>HALL</code> that represents Faneuil Hall itself, and a root class that sets everything up and starts the processing. There is only one judge, but there will be a maximum combined number of immigrants and spectators. The specific number of immigrants versus spectators varies at random from one execution to the next.
Although not really considered an actor here (at least not a descendant of class <code>ACTOR</code>) the class <code>HALL</code> plays a critical role in managing the concurrent actions of the immigrants, spectators, and the judge. <code>HALL</code> includes many status queries which, when used in preconditions in features of the other actors, constitute [[Concurrent Eiffel with SCOOP#Preconditions|uncontrolled precondition clauses]] which when false will cause the calling processor to wait until the condition becomes true. For example, consider the following status query from class <code>HALL</code>:
<code>
immigrants_ready: BOOLEAN
-- Are immigrants ready?
do
Result := immigrant_count = ready_immigrant_count
end
</code>
This query is used by the <code>JUDGE</code> when preparing to sit and administer oaths to the immigrants:
<code>
take_place (a_hall: separate HALL)
-- Prepare to confirm.
require
immigrants_ready: a_hall.immigrants_ready
do
print (out + " taking place%N")
a_hall.sit_judge
end
</code>
The judge will take his place only when all the immigrants present have checked in and are ready to take the oath.