(本以为这一片的标题会改为“旅店管理系统中的对象的概述”,但是发现Allen Holub也是用class作为设计时的名称,于是保留的原来的标题)
在上一篇中提到了Allen Holub对于对象以及OO的定义是这片开发文档进入了漫长的预备路程,但是我在Allen Holub 的这篇“Building user interfaces for object-oriented systems”很快的就读到这关于一个实例的设计。就是Allen Holub对于ATM的OO分析:
Allen Holub 提到,OO设计的第一步是简洁阐述我们要解决问题的主要部分。也许(或者肯定)这就是我在第二章“旅店管理系统问题的定义”提到的内容问题定义。但是现在看来我们的定义并不是足够的好,现在做如下更改:
首先我觉得这个系统不能仅用一个主要问题来描述而应该分为七个:预订房间,租用房间,结算,解除预定,候补预订和查询处理。而这七个问题也就是在前文提到的7个用例(很多人认为我在前一节中的用例阐述得很不够,我自己也是这样认为,于是我花了些时间读了Alistair Cockburn的“Patterns for Effective Use Cases” 和“Writing Effective Use Cases” (extract)的英文原文,我认为的确有必要认真书写用例文档。但是Alistair Cockburn也提到,在一些较小的系统中也可以简化用例的书写过程,同时使用模式书写用例的目的在于使系统的再开发和维护更简便,使开发过程中的其他人员--非用例撰写人员更容易了解系统所要解决的问题。因此我决定不再重新写用例这一节,而是在这里简单的重新勾勒一下。)。现在我在这里重新描述这7个问题:
1、预定房间:一个顾客打电话或以其他方式告诉旅店服务人员需要预订房间以及预定信息(标准,入住时间和天数应该包括入住人姓名等),旅店服务人员根据顾客提供的预定信息从房间信息中查询是否存在符合条件房间,并告诉顾客是否预定成功,如果存在,记录预定信息。
2、租用房间:顾客告诉旅店服务人员要求租用房间并提供租用信息(比预定信息要多),旅店服务人员根据顾客提供的房间息从客房信息中查询是否存在符合条件房间,并告诉顾客时候可以租用房间,记录租用信息。
3、延长租用房间:应该也是租用房间(暂定)。
4、结算:顾客提出结算,旅店服务人员根据租用信息得到租用费用,顾客交款,服务人员实现结算。
5、解除预定:顾客告诉旅店服务人员自己的预定情况(姓名等),服务人员找出预订,实现解除预定。
6、候补预定:预订房间条件并且房间已经出租或预定,如果在于租用时间之前出现房屋空闲,在自动实现预定(在固定时间检查这一状态)。
7、查询房间出租情况:管理人员根据查询条件对租用信息进行查询(应该是租用信息的部分或全部),找出租用信息。
从以上问题描述中我归纳出了以下类以及他们的功能。
1、房间信息:管理客房信息,供旅店服务人员查询。
2、预定信息:管理顾客姓名,房间种类,租用时间等信息。提供给旅店服务人员使用,实现预定房间。
3、租用信息:管理顾客姓名(需要更信息的内容),房间种类,租用时间等信息。提供给旅店服务人员使用。
4、旅店服务人员:根据顾客要求(预定信息,租用信息)进行查询,预订、候补预定、租用房间,解除预定,结账。
5、管理人员:查询预定及租用信息。
6、查询信息:提供给管理人员使用。
其中旅店服务人员和管理人员应该属于客户端的类,而其他则属于服务器端的类。(其中预定信息,租用信息以及查询信息应该以接口的形式存在)
以下使用上面归纳出来的类(其中的房间信息等都是根据我们以上定义的类实例化的对象)来对我们要解决的问题进行模拟:
1、预定房间:旅店服务人员向客房信息发出是否存在符合条件的客房的请求,客房信息回答yes或者no,如果答案是yes则输入顾客提供的预定信息,如果不存在通知客户,不存在上述房间,是否候补预定。如果顾客要求候补预定则进行候补预定(与预订房间基本相同,在输入信息时标明候补)。
2、租用房间:旅店服务人员向客房信息发出是否存在符合条件的客房的请求,客房信息回答yes或者no,如果答案是yes则录入顾客提供的租用信息,如果答案是no则租用失败。
3、延期:同租用。
4、结算:旅店服务员根据顾客提供的信息(顾客姓名,房间号码等)找出租用信息,根据租用信息中得出租用费用,收取费用,解除房间租用状态。
5、解除预定:旅店服务人员根据顾客提供的信息(顾客姓名等)找出预定信息,解除预定状态。
6、候补预定:(见预订房间)。
7、查询房间出租情况:管理人员根据查询信息进行查询。
其中有以下应该注意:系统应该在每天的固定时间进行信息自动更新,有如下内容:
1、自动查询是否存在过期的预定信息,如果存在则自动解除预定。
2、自动查询是否存在过期的租用信息,如果存在,通知旅店服务人员,由旅店服务人员(现实世界中的)通知顾客,实现结算或延期。
3、自动查询是否存在候补预定的房间可以转变成预定的,如果存在则通知旅店服务人员,由旅店服务人员(现实世界中的)通知顾客,如果顾客同意预定,则进行预订房间。
以上类似乎解决了旅店管理系统中我们提到的问题,但是其中仍经不起仔细的推敲,比如:在查询房间出租情况中管理人员是对什么进行查询的,如果是对租用信息或者是预定信息,则这两种信息应该是信息集合,而不是一个单个的信息,而租用房间和预订房间的问题中这两种信息应该是单个的信息。所以我对自己做出的上述的类的定义并不满意,相信大家存在更多的疑惑,希望能够得到更多人的指正。
待续
版权所有:idilent 网站转载请注明作者 其他转载方式请与作者联系(idilent@yahoo.com.cn)。