![](https://csdnimg.cn/release/download_crawler_static/88745253/bg4.jpg)
L.
丰特斯山口
Sánchez/Electronic Notes in Theoretical Computer Science 189
(
2007
)
87
/{buyers=buyersU{id}} /placedBids = placedBidsUid
/{buyers=}
/{buyers=buyersU{id}}
/{buyers.callForProposal
(
bid
)
}
CollectBids
{price= Auction.getStartingPrice
()
;
buyers
.callForProposal
(
price
)
}
directBuy
(id)
at
(
biddingTime
)
{price= Auction.getStartingPrice
()
;
buyers
.callForProposal
(
price
)
}
directBuy
(id)
at
(
biddingTime
)
/Auction. decide Winner
(
winner
,
price
)
关闭拍卖
buyers=buyers-winner; buyers.rejectProposal
()
;
winner.acceptProposal
(
winner
,
price
)
}
/Auction. decide Winner
(
winner
,
price
)
关闭拍卖
buyers.acceptProposal
(
winner
,
price
)
}
图二
.
状态机:
Private One Bid
(左)
Public English Style
(右)
Auctions
被认为是一个外部协调器的设计,在组件的提供
/
需要的接口之间透明地引入(图
1
中的灰色背景)。
在我们的模型中,组件只封装计算,不允许执行与协调相关的任务或活动。为了
执行计算,组件可以显式地调用它们所需接口的服务. 它们在所需接口连接到的组件
上调用这些服务例如,根据图
1
,客户组件可以请求服务(例如,join)从Auction组件调
用包含在IAERONIC接口中的。组件调用服务时不知道连接器、协调器或放置在它
们之间的任何
关注拍卖系统示例,有几个协调协议可用(例如,私人英式风格,私人一个出
价,私人维克瑞等)。图
2
(左)显示了一
个私有的一次出价
拍卖的协调协议,用
UML状态机表示。 在这种情况下,当拍卖开始时, 初始化为空集,系统转换为初
始化状态。在这种状态下,只能向拍卖组件发送加入消息。任何其他消息发送都被简单
地跳过(否则,可能会引发异常)。当加入拍卖的指定时间(joinTime)到期时,将
向所有注册买家广播callForProposal消息,系统将进入CollectBids状态。在这种状态下,只
允许向Auction组件发送proposeBid消息。此外,每个客户只能发送一条消息,因为在
私
人一次出价
拍卖协议中不可能进行多次出价。当指定的投标时间(biddingTime)到期
时,拍卖结束
;
计算获胜者和最终价格,并向获胜者发送接受消息。由于拍卖是私人
的,拒绝消息被发送给所有非赢家买家,没有关于赢家或最终价格的任何信息
此外,Auction组件还提供了一个特殊的服务directBuy:每个物品的卖家指定一个金
额,该金额是拍卖物品价格的上限。如果客户希望以该金额购买物品,则可以在
CollectBids阶段调用此服务,而无需进行更多的出价。在这种情况下,拍卖将结束,拍
卖的获胜者将是服务的调用者。因此,状态之间的转换可能由于时间消耗或组件执
行的动作而发生。