软件开发(三)——设计与建模

一、软件设计的作用?
需求分析描述了软件应该“做什么”,设计是规划出“怎么做”的蓝图。设计是需求的直接体现,也是软件实现的直接依据。软件设计的越好,开发实现就越容易,后期维护的成本也就越低。

二、软件设计是什么?
软件设计包含三方面内容:软件结构设计,数据库设计,程序处理过程设计。

数据库设计就是建立数据库表的过程,一般来说,首先从需求分析描述中找到所有的名词,分析其是否可以作为一张表,然后再去考虑应该为这张表添加哪些属性。

程序处理过程设计就是在软件结构设计完成之后,进行更详细的内部完成过程的设计。比如软件结构设计中说了一个“去上学”,程序处理过程需要将其细化成走哪条路,在第几个十字路口转弯这样的详细过程。

软件结构设计是软件设计中最重要的内容,由于目前大部分程序语言都是面向对象设计的,所以为了提高开发效率,软件结构的设计最好也采取面向对象的思路来设计,这时软件结构设计就成了建立模型的过程。

三、如何进行面向对象的建模?
建模的最终目的是要实现三个内容:1、分析出需要建立哪些类;2、分析出各类所需要的属性;3、分析出各类所需要的方法。
这三个内容的分析很难从思维中靠想象来捋清楚,可以尝试首先建立用例图的方式。

(一)建立用例图
所谓的用例图就是用图形的方式来表示用户和系统的交互。下图是一个点菜系统的用例图,矩形框外的小人是操作者,矩形框内的椭圆是用例,这里的箭头可以理解为一种关联。
图片来自网络
为了建立用例图,首先要分析系统有哪些类型的操作者,又称系统有哪些执行者或者角色;其次要分析每个操作者对应的用例。
用例指的是操作者和系统进行交互的某些动作的步骤集合。
用例图的关键是完整的统计用例,一是可以通过分析操作者的业务处理过程来确定用例,二也可以从系统的业务描述中获得用例。
这里需要注意,用例是和功能完全不同的概念,它是操作者和系统发生在系统边界的动作序列,是操作者使用系统的过程。
用例只是对动作的一种简要描述,在建立完用例图之后还需要用详细的语言来描述每一个用例,描述的方面包括:用例名称、操作者、简要说明、前置条件、后置条件、基本事件流和异常事件流(即用伪代码的形式描述过程)。其中前置条件指的是执行用例之前必须存在的系统状态,后置条件指的是执行用例后系统可能处于的一组状态。

(二)确定系统的类和对象
每一个类都对应一个相应的表格,如图所示:
UML类图
第一栏代表类名,第二栏代表类的属性,第三栏代表类的方法。可以用+号、-号、#号来分别表示公有、私有和受保护的。

(1)确定类名
从用例模型中挑选出下面五类:1、可感知的物理实体;2、人;3、应记录的事件;4、两个或多个对象的相互作用;5、需要说明的概念
而后从这五类内容中合并相同或相似的,剔除与系统无关的,找出可作为属性而不必作为类的。
(2)确定类的属性
类的属性是附属于类的各方面的数据特征,确定类的名称后,分析数据特征,进而确定属性。
在这里要注意:不要把对象当作属性,不要把限定当作属性,不要把内部状态当作属性,不要过于细化,不要出现不一致的属性定义。

再定义完类的名称和属性后,就可以进一步的确定各类之间的关系,主要是确定好哪些类之间是泛化关系,即一个类基于另一个类的情况。
(3)确定类的行为
为了更好的分析类的行为,可以先建立类的顺序图,即一个行为的完成分别需要哪些类在哪些时候做出哪些动作。行为图例如图所示:
在这里插入图片描述
这样就能清楚的看到各个类所需实现的行为是什么,也就能清楚地得到各类所对应的方法。

这里记录一个自己有一天突然开始想不明白的问题,其归根到底还是对软件的开发过程不熟悉,下面将其记录。
如果现在有读者和书籍两个类,那么借书这个方法是应该写在读者类里还是写在书籍类里?同时还能实现查找读者借阅过哪些书籍,以及书籍被哪些读者借阅过?
类只是提供了一个相应的数据模型,用类可以声明出对象,而对象是有其自身生命周期的,在使用对象的过程中,不能指望对象一直存在着,这一来会消耗很多内存,二来也基本不现实。
关于书籍或者读者的信息都应存储于数据库表中,通过软件与数据库频繁的交互来存取数据信息。
在数据库表中可以将所想到的所有属性都加入其中,而在类的属性中,只需要按需建立属性列表即可。
如在本例中,我们可以在数据库中设置一个读者库表,将读者的属性设置为姓名、读者ID、身份证号、电话号码、年龄、性别等。
设置一个书籍库表,所含属性有书名、作者、编号、出版社、价格、是否在馆等。
同时再设置一个借还库表,所含属性为时间、读者ID、书籍编号、借阅/归还。
这样在代码中建立读者类时,就可以创建一个借书方法,方法的形参为书籍类型,在该方法的实现中实现与借还库表的交互。
同样,通过借还库表的查询,就能实现我们提到的查找读者借阅过哪些书籍,以及书籍被哪些读者借阅过。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部