mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2025-12-07 23:32:42 +01:00
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:
@@ -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.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user