首页 > 代码库 > OOA/OOD

OOA/OOD

基本知识点:

    1、软件工程的基本思想:就是用工程学的方法进行软件的开发与维护,并对软件生产过程进行工程化的管理。

    2、软件生命周期:需求分析、设计、编码、测试、维护。

    3、软件工程的主要内容:工程方法、技术细则、文档规范、技术支持、管理制度、人员组织以及质量保证体系。

    4、实行软件工程的主要意义:提高软件产品的质量、提高软件生产率。

    5、软件开发方法:功能分析法、数据流法(结构化方法)、快速原型法、信息模型法、面向对象方法。

    6、软件过程模型:瀑布模型、螺旋模型、增量模型、喷泉模型、原型模型。

    原型模型的适用范围:不能预先确切定义需求的软件系统开发,项目组成员不能很好交流或者通信有困难的情况。

    7、面向对象系统分析(OOA):主要工作内容是研究问题域和用户需求,运用面向对象的观点和原则发现问题域中与系统责任有关的对象,以及对象的特征和相互关系。

    8、面向对象系统设计(OOD):主要工作内容是以OOA模型为基础,按照实现的要求进行设计决策,包括全局性的决策和局部细节的设计。

    OOD所考虑的具体实现条件包括:硬件、操作系统及网络设施;数据管理系统;图形用户界面系统;编程语言;能够得到的可复用构件。

    9、面向对象系统编程(OOP)

    10、面向对象系统测试(OOT):白盒测试、黑盒测试(边界数据、极限数据)

    11、面向对象软件工程各阶段建模:需求建模、分析建模、设计建模、实现建模

    12、UML(统一建模语言):用统一的图形化方法表示模型。建模方法有:RUP、XP、ICONIX。

OOA与OOD的区别

面向对象方法学讲的是迭代,不是传统的瀑布式,因此分析和设计之间的界限变得更加模糊,但并不是说没区别,搞清之间的区别还是很有益的,软件工程讲究的是在适当的时机做适当的事,而不要在分析时做设计,在设计时又去分析.

总的来说,分析是从现实问题的角度来考虑,而设计是从计算机实现的角度来考虑.一种分析的属性,关系很多时候是无法用OO语言直接实现的,这就需要应用设计的知识来进行转化.比如两个类之间的多对多关联,就不能用OO语言直接实现,需要转化.

下面拿类图来说,谈一下分析类图与设计类图的区别,从四个方面:

1.类本身:

分析阶段的类来源于问题领域的核心概念,通过这些概念以及之间的相互关系来反映业务逻辑.分析阶段的类图主要对应领域层,而不涉及UI和数据持久层.在分析阶段类主要有实体,值对象,服务等,这可以参考

分析模式与领域驱动设计.而设计阶段不仅要考虑领域层,还要考虑UI和数据持久层,以及这三者之间如何交互,如何解藕,在这个过程中可以使用GRASP模式与GOF的设计模式.

2.类的属性

在分析阶段,属性考虑的是对象本身的本质特征(从现实问题角度);而在设计阶段,会引入"伪属性",即对其它类的引用,从而实现类之间的关联.

3.类的操作

在分析阶段,主要是从职责分配的角度为类指定操作,这通常都是公用接口;而到了设计阶段,要考虑这些接口如何实现,可能会把一个公用操作又分解为几个小的操作,其中有些操作会是私有的,对用户不可见.

4.类之间的关系

在分析阶段,对于类之间的关系主要是两大类:泛化与关联(连接,聚合,组合),这两种关系都是来源于问题本身,而不是从计算机的角度来考虑继承,引用之类.另外还有一类关系是依赖,它与具体实现有关,通常在分析阶段不会突出它.

而到了设计阶段,连接,聚合,组合可能都被实现为一种东西:即对象的引用,但这并不代表这三种关系都是一样的,没有区分.从被关联的两个类自身来看,可能 实现上没有区别,但从外部与这两个类的通信来说,就有区别,如果是聚合,有聚合根,消息是先发给聚合根,之后由根再发给内部其它对象;而如果是连接,就是 对等的关系,二者都可以和外界通信.

从对象的创建角度来看,也有区别,如果是聚合,内部对象可能是由聚合根来创建,而如果是对等关系,则不一定.

面向对象分析与设计设计步骤

1、需求获取
  根据需求写用例描述或话用例图,做到已经了解用户想让系统实现的方方面面
2、系统分析(实体类)
  根据用例描述或用例图识别出类。先识别出类,再识别出类的属性,然后是类的方法,最后是类的关系。这中间伴随着活动图和顺序图,并且是个迭代的过程,直到各种业务实体类都已经被识别到系统来。
3、系统设计(界面层、业务层、服务层)
  根据不同的业务规则,再结合各种设计模式,设计高级业务类、控制类、界面类、服务类。设计界面类的时候一起设计用户控件,这些统统作为界面 层的东西。设计高级业务类,控制类即为业务层。服务类即为服务层。在涉及持久对象的服务类时,可以只设计空的而服务,因为这个时候可以不必理会将来或其他 人是用何种方法实现持久层的。
4、系统设计(持久层、数据层)
  设计持久层与数据层,可以自己封装数据操作方法,也可以使用别人写好的。比如IBatis工具。而对于实例类,则需要在这里进行关系数据库 映射,把类都映射成数据表,并画出ER图。然后通过代码工具(当然也可以自己写),实现这些映射。如Ibatis就是写一堆Dao类与XML文件。
5、系统设计(补充服务层)
  现在回头把服务类的具体持久层服务方法补充完整。当然,你如果想采用WCF,则还需要设计契约等。
6、静态工具类设计