《图书馆信息系统设计.doc》由会员分享,可在线阅读,更多相关《图书馆信息系统设计.doc(25页珍藏版)》请在三一办公上搜索。
1、设计文档一、设计包的实际划分以及系统构架设计二、系统构架图说明1、UI包(用户接口包)用户接口包显示了所有的在用户接口中的类,以及它们与其它类(即,在业务对象类)之间的关系和协作。用户接口描述了四个类图:1、基本类图:该图显示了StartClass,该类包含了整个应用软件的主操作,并且只有它才可以激活主窗口(MainWindow)。主窗口包含了一个菜单,该菜单被用来访问在应用系统中所有的其它窗口。2、功能类:它显示了所有的用在MenuBar “Functions”中的窗口类。这些窗口包含了对于租借和返还书目以及预定书目和取消预定的主要功能。3、信息类:它显示了所有的用在MenuBar “Inf
2、ormation”中的窗口类。这些类都是为了查看有关标题和租借者信息以及浏览所有的标题和所有的租借者的信息。4、维护类:它显示了所有的用在MenuBar “Maintenance”中的窗口类。这些类都是为了系统维护的,如增加、删除和更新标题、书目和租借者信息。UI包同样也包含了对所有在分析中多定义的用例顺序图,它显示了这些用例在设计阶段的实现。用例现在被细化成在设计类图中的实际操作,因此,这些顺序图可以阅读,用来理解实际代码。有些顺序图同样也被转换成协作图。2、BO包(业务对象包)这是业务对象包,包含了从分析阶段的问题域中的类。这些类在设计阶段被详细化,描述了它们精确的操作和确切的信号。这些类
3、同样被变成了永久性的类,这是通过继承来自数据库包中的永久类并实现必要的写操作和读操作。在分析阶段所定义的关联也在设计阶段使用对象识别码变量来实现,在这里,一个对象识别码可以被用做对系统中任何其它永久对象的参考的一个方式,并且在必要时可以很容易地控制这个对象。3、DB包(数据存储包)数据库包支持永久存储业务对象。在当前的版本中,这些仅仅通过Persistent类来控制,它只做简单的对象的连续存储到一个文件中。Persistent类的子类仅仅实现写和读操作,读写操作就是写和读对象的属性到一个文件中。永久对象类具有操作,如通过一个对象识别码来检索一个对象,从一个永久对象中读出对象识别码,当然还可以存
4、储、删除和更新一个对象。同样存在于类的所有对象中的迭代操作,它用来实现查找的方法。4、工具包工具包包含了用于所有的其它包中的通用工具。目前,它仅仅包含了ObjId类,它实现了一个对象识别码,一个对象使用它可以参考其它在系统中的任何永久对象,并且很容易的用来作为参考和检索在文件中的对象。ObjId类被所有的其它类所使用,因此将其存放在这个包中。三、各个包中的类图简介1、图形用户接口包图形用户接口包包含了5个接口类,分别介绍如下:MainWindow类:MainWindow类操作那些总是出现在应用系统中的窗口,应用系统窗口具菜单条,并且显示一个图象在它的客户端区域。由用户选择(每一个菜单的选择都映
5、射给一个在MainWindow类中的操作)了不同的菜单动作,并且MainWindow类创建并显示其它用户接口类的所有对象。当应用系统退出时,MainWindow对象和窗口将会被删除。LendItemFrame类:LendItemFrame类是租借活动被注册的窗口。它是从Functions-Lend Item菜单中调用,并且让用户通过使用特别的查询窗口(FindTitleDialog and FindBorrowerDialog)来选择书目的标题和租借者。当标题、书目和租借者已经被建立起来时,通过按下“OK”按钮,租借被确认并且一个租借对象已经在系统中被注册。ReturnItemFrame类:R
6、eturnItemFrame是在“Functions-Return Item”菜单选中时创建和显示的,在这时,一本书目被返还给图书馆。标题和书目的ID被输入给该窗口(标题是通过FindTitleDialog查询窗口)并且该书目的归还被确认。而代表这次租借的租借对象将被删除。ReservationFrame类:ReservationFrame类是进行标题书目预定的窗口类。它是由“Functions-Reserve Title”菜单来创建,它允许用户通过使用特殊的查询窗口(FindTitleDialog 和 FindBorrowerDialog)选择图书的标题和租借者。当图书的标题和租借者选定之后
7、,通过按下“OK”按钮来确认预定。CancelReservationFrame类:CancelReservationFrame类用来从系统中删除一个预定。它有一个画面显示,在画面上可以查找图书标题,并且所查到的图书标题做了预定的所有租借者都会显示在一个列表框内。用户可以选择哪一个预定将被删除,然后按下“OK”按钮来确认删除。2、BO包(业务对象包)业务对象包包含了5个类(简化了分析类中的两个类),分别介绍如下:标题类:标题代表了一个书的概念(一本书或杂志),这是一个租借者可以对其书目进行租借的概念。而书目却是在图书馆实际具有的书和杂志。在图书馆中,一个流行的标题可能具有几个书目。标题具有一些信
8、息,例如图书名称,图书作者,以及其它信息如ISBN或杂志编号等。标题具有0或多个预定,这意味着当一个标题的书目被返还时,该书目将被保留给一个特定的租借者。所有的标题类的对象都是永久的,因此,它继承了永久类并实现了读写操作。书目类:书目代表了一个标题的可以被租借的实际书目(物理上真正存在的书目)。该对象可以具有状态“借出”或“未借”两种。书目总是具有一个相应的标题对象,该对象定义了该书目(即书名、作者和ISBN书号)。将书目和它的标题分离的原因是,你或许需要预定一个标题,但是没有特定的书目,图书馆可以对同一个标题存有几本具体的书目(在这里,每一个书目可以被一个租借者租借)。你或许同样能够查找一个
9、标题,但是图书馆却还没有购买任何一本具体的书目。所有的书目类都是永久性的,因此,需要继承Persistent类,并且实现读写操作。租借者信息类:租借者信息是指一个具体的租借者的信息,它可以是一个人或者是另一个图书馆。被存储的信息是姓名,地址,城市,邮政编码,和省份。BorrowerInformation类所有的对象都是永久的,因此它继承了Persistent类并且实现了读写租借类:租借是租借者与图书馆之间的契约。阻截参考了一个租借者和一本书目,一个租借对象的存在代表了一个租借者已经租借了在租借对象中所参考(指向)的一本书。当该书目被返还时,租借对象将被删除。租借类的所有的对象都是永久的,因此,
10、它继承了Persistent类并实现了读写操作。预定类:一个租借者可以进行一个预定。预定是指租借者想预定相关的标题,当该标题的一个书目归还时,租借者可以能够优先于其他租借者之前租借这本书。一个标题可以由不同的租借者预定不止一次。预定类的所有的对象都是永久的,因此它继承了Persistent类并实现了读写操作。3、DB包(数据库包)数据库包中只包含了一个类,那就是Persistent类:永久类只是简单地将对象持续存储到一个文件中。永久类的子类仅仅实现有关本类的对象属性的读和写到一个文件的操作。永久类具有由一个对象识别码来检索一个对象的操作,和为一个永久对象获得识别码,以及存储、删除和更新一个对象
11、的操作。该类可以在性能上进行优化。4、UTIL包(工具包)工具包中只包含了一个类,那就是ObjId类:对象识别码类,代表了对系统中的一个对象的一个参考(关联)。对象识别码是由所参考的类的类名和一个唯一识别码数字来组成。通过向在Persistent类中的 getObject操作传递对象识别码,对象将会被从永久存储(文件)中读取并返回给调用者。因此,对象识别码对实现永久对象的参考是一个容易的机制。getObject操作同样也在Persistent类的子类中实现来返回一个更为类型特定的对象来提高类型的安全性。四、设计阶段的状态图1、Title2、Item五、设计阶段的顺序图1、租借图书2、返还图书3
12、、预定图书4、取消预定用户界面设计(User-lnterface Design)设计阶段的一个特定的活动是创建用户界面。图书馆系统的用户界面基于用例,分为以下几部分,每一部分都在主窗体菜单上给出一个单独的菜单项。Functions:实现系统基本功能的窗体,通过它可以实现借阅、归还和对图书的预定。Information:查看系统信息的窗体,收集了借阅者和图书的信息。Maintenance:维护系统的窗体,添加、修改和删除标题、借阅者和书目。图 显示了一个User-Interface Package 中类图的例子。其中包含了典型的AWT 事件句柄。按钮(button)、标签(label)和编辑(e
13、dit)等的属性没有显示。典型地,每一个窗体都给出了系统的一个服务,并且映射一个最初的用例(尽管并非所有的用户界面都必须从用例中映射)。六、组件图1、组件图组件视图显示了所有的在逻辑视图中的类的代码实现文件。由于实现的语言使用了Java,则在逻辑视图和组件视图之间只有一个简单的一对一的映射。我们使用了同样的包和名字。StartClass.java组件仅仅包含了用于启动系统的主操作(显示出MainWindow对象的窗口)。2、BO包组件图在组件视图中的BO包包含了在逻辑视图中的业务对象包中的类的实现组件。3、UI包组件图在组件视图中的UI包包含了在逻辑视图中的用户接口包中的类的实现组件。4、DB
14、包组件图在组件视图中的DB包包含了在逻辑视图中的数据库包中的类的实现组件。5、Util包组件图在组件视图中的Util包包含了在逻辑视图中的工具包中的类的实现组件。七、部署图八、实现在构造或称实现阶段进行程序编写。该应用程序要求能运行在几个不同的处理器和不同的操作系统上,因此选择Java 来实现系统。Java 可以轻松地将逻辑类映射为代码组件,因为在类和Java 代码文件之间有1 对1 的映射。图显示,设计模型的组件视图简单地将逻辑视图中的类映射为组件视图中的组件。每个逻辑视图包含了一个指向逻辑视图中类的连接,因此可以很容易地在不同的视图之间导航(即便象本例只是简单地使用了文件名)。由于依赖性可
15、以从逻辑视图的类图中得到,因此组件图中没有显示组件之间的依赖性。编写代码时,从下面的设计模型的图中取出规范说明:1类规范:每一个类的规范详细地显示了必要的属性和操作。2类图:类图由类构成,显示了类的结构以及类之间的关系。3状态图:类的状态图显示了类可能具有的状态以及需要处理的状态转移(以及触发转移的操作)。4动态图(顺序图、协作图和活动图):涉及到类的对象,显示了类中的特定方法如何实现,或对象之间如何使用其它类的对象进行交互。5用例图和规范:当开发者需要了解更多的关于系统如何被使用的信息时(当开发者感到他或她已经迷失在一片细节中),他们显示了系统被使用的结果。很自然,设计中的某些缺陷可以在编码阶段发现。可能需要一些新的操作或修改某些操作,这意味着开发者必须改变设计模型。这在所有的工程中都会发生。重要的是将设计模型和代码同步,以便使模型能够成为系统的最终文档。