本来打算把这篇文章的题目叫做使用语法分析进行面对对象的设计,但是写在这里的语法分析很容易使人(尤其是程序员)想到一种编程语言的语法,而不是我在这里所说得我们日常生活中所使用的语言中的语法(但是为了方便起见,我在后面仍使用语法分析作为这种面对对象设计方法的名称)。
也许使用使用语法分析的方法进行面向对象的设计并不是一个新的概念,但是在我收集资料的过程中只在浙大的教学网站上发现了关于这一方法的一些资料,而这一发现还是在我打算撰写这篇小文之后的事情。所以至少对于我这个初学者而言,这种方法是值得一提的方法。
在这里我不想从一个系统开发的起步写起,这样的结果只会导致我偏离主题,所以以下内容的前提是我们有了关于我们要开发的系统的基本知识,并对这一系统的运作有了详细地了解。这样我们下一步的工作应该是对系统进行用例(user case)分析(至少我认为是这样的),换一个角度说,面向对象的设计应该是在用例分析的基础上的。用例的表达也有很多种方法,并且目前已经有许多的模式(pattern)发现并使用与用例表达,同时这些模式存在着各种好处,但是我们的这种面向对象的方法使用一种既简单的用例表达法--讲故事式的用例表达方法,也就是直接使用自然语言对用例进行阐述,这种用例表达方法相对于各种模式而言存在着没有规范性等缺陷,但是为了不至于进入讲解用例的误区我们将使用这一方法。
好的,现在我们就针对一个具体的系统中的某个用例来做一下分析表达,并根据这个对用例的阐述使用前面提到的语法分析法进行面向对象的设计。下面的用例是我在旅店管理系统(我也是在涉及这个系统是联想到的这种语法分析的方法)中的一个用例,
预定房间(用例名称):一个顾客告诉旅店服务人员他(顾客)需要预订房间,顾客告诉旅店服务人员预定信息(标准,入住时间和天数应该包括入住人姓名等),旅店服务人员根据预定信息从房间信息中查询是否存在符合预定信息的房间,旅店服务人员告诉顾客是否预定成功,如果成功旅店服务人员记录预定信息。
如果读者回头去读我在旅店管理系统中关于这一用例的描述时会我发现这里的描述和以前的不是完全一致,但是他们表达的同一个问题,也实现了同一个目的,这是因为一个人在不同阶段讲故事的水平不同造成的。我们不理会这些细节,开始进行我们的语法分析。
在正式分析之前,我们先看一下我们的系统,由于我们的系统是一个不支持网上预定的系统,也就是说顾客只有通过旅店服务原来达到预定的目的,因此第一句“一个顾客告诉旅店服务人员他(顾客)需要预订房间”是这个问题的开始条件,第二句“顾客告诉旅店服务人员预定信息(标准,入住时间和天数应该包括入住人姓名等)”也只不过是告诉使用用例的人预定信息的来源,与我们的系统没有任何关系,因此以下的分析将其排除在外。
这样的话,我们会发现在以上的用例中我们只有一个主语也就是旅店服务人员,我们把这个主语定义成一个类。接下来我们看到旅店服务人员在这个用例中只有查询和记录两个行为(告诉这个行为与顾客有关,而顾客我们不考虑在内所以该行为是在系统中不存在的行为),这样我们就把这两个作为旅店服务员这个类的两个方法。然后我们看到这两个行为涉及到了其他的事物,其中包括预定信息(查询的条件,记录内容),房间信息(在那里查询),“是否存在符合预定信息的房间”是一个查询的结果,我们可以使用一个boolean的类型来表示。同时应该注意的事,如果预定信息和房间信息足够简单的话,我们可以使用程序语言中的简单类型表示,而不必为他们建立一个类,当然如果“是否存在符合预定信息的房间”足够复杂,就需要定义为类来实现。这样我们就实现了在用例中对系统要使用的类的抽象。
在这种抽象过程中,我们也可以先把用例中的名词全部列出,然后一个个分析看是否可以作为对象使用的方法,在这里就不再详细介绍。
版权所有:idilent 网站转载请注明作者 其他转载方式请与作者联系(idilent@yahoo.com.cn)。