面向对象强调系统的结构应该直接与现实世界的结构相对应,系统应该是围绕对象来构造的,而非功能。从程序设计的角度来看,面向对象的程序设计应该是对象及其相互之间关系的语言成分。可用以下几句话慨括面向对象程序设计:
系统一切皆对象;
对象是属性和操作的封装体;
对象可按性质划分为类;
对象称为类的实例;
实例关系和继承关系是对象的静态关系;
消息传递时对象的动态联系;
方法是消息的序列。
面向对象的三个基本特征:封装、继承、多态。封装是把对象的实现细节隐藏起来,只向外提供一些公用方法;继承是面向对象实现软件复用的重要手段,通过继承,子类可以获得父类的属性和方法;多态是子类对象可以直接赋给父类对象,当运行时根据子类运行的行为决定是哪个具体的对象。
UML(统一建模语言)
当我们看到如图所示的13种UML图形时,可能会对UML感到恐惧,但在实际中很少都会用到,常用的UML图包括:用例图、类图、组件图、部署图、顺序图、活动图、状态机图。下面简单介绍一下这几类图。
用例图
用于描述系统提供的系列功能,为帮助开发团队以一种可视化的方式理解系统软件,用例图仅仅只是对功能的描述,没有涉及任何实现。
用例图包括用例(某项功能,用椭圆表示,命名应从参与者的角度出发)、“角色”(与系统交互的参与者,以一个人形符合表示)、角色与用例之间的关系以及系统内用例之间的关系。
用例图中包括三种关系:参与者之间的泛化关系,用例之间的包含、泛化与扩展关系。
参与者间的泛化关系(转)
例如,一个网上订购系统,可以有网上客户、电话客户、直接客户等。可以看出,他们有共同的行为特征,这就是可以用到面向对象的抽象,抽象出更为一般的化的参与者——客户。通过泛化来描述多个参与者之间的共同行为,不同的参与者以独特的方式来使用系统。
用例之间的关系
1、泛化
用例间的泛化关系通常用于同一业务通过不同方式实现,例如某购物系统为用户提供不同的支付方式。
2、包含关系
在包含关系中,基本用例吸收了被包含用例的行为,如果没有后者它将是不完整的。
包含关系的划分有两个好处:一是被包含用例被抽取出来,基本用例得以简化;二是可以抽象出公共事件流,实现代码复用。
3、扩展
将基用例中一段相对独立并且可选的动作,用扩展(Extension)用例加以封装,再让它从基用例中声明的扩展点(Extension Point)上进行扩展,从而使基用例行为更简练和目标更集中。扩展用例为基用例添加新的行为。扩展用例可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。但是扩展用例对基用例不可见。
对于一个扩展用例,可以在基用例上有几个扩展点。
例如,系统中允许用户对查询的结果进行导出、打印。对于查询而言,能不能导出、打印查询都是一样的,导出、打印是不可见的。导入、打印和查询相对独立,而且为查询添加了新行为。因此可以采用扩展关系来描述:
原文地址:http://ypyu1989.blog.51cto.com/6786671/1543232