软件工程之面向对象软件工程基础(软件工程实践之三)
作者:Make 日期:2005-07-04 13:53
导读
1.什么是面向对象(OO-[Object-Oriented])
2. 面向对象概念介绍
3. 为什么要使用面向对象
4. 面向对象软件工程使用的过程开发模型
5.标识对象的模型和元素
6.总结
一、 什么是面向对象(OO-[Object-Oriented])
面向对象(object-oriented)=对象(objects)+分类(classification)+继承(inheritance)+通信(communication)
二、 面向对象概念介绍
1、 类:意为分类,将相同特性的事物归类。类=操作+数据/行为+属性/服务+信息,一个类必须包括数据和操作才成为一个类,类封装一组数据,并只能通过特定的权限的操作来操作数据,通过这一个目的来隐蔽信息,并达到程序模块之间的松藕合(这个概念在传统的软件工程中会讲到,通意就是模块之间的关联性或少即藕合性越松,越松藕合的程序越容易维护,利用性也越好)。
2、 封装:将数据和操作封装起来,只提供有限的接口供外部使用,达到信息的隐蔽性。
3、 对象:对象的概念很容易理解了,就是类的实例,类只定义了一个模板/ 分类,实际面对我们可以操作的却是实在的对象。如下面JAVA伪代码所写的类与对象之间的关系:
定义的类:
Class Window{//定义一个窗口类
Private color;//封闭窗口的颜色属性
public String getColor(){//得到当前窗口的颜色
return color;
}
Public void setColor(String color1){//更改窗口的颜色
color=color1;
}
Public void open(){//打开窗口的操作
Open(“打开这个窗口,去外面吹吹风”);
}
}
使用类:
Window window1=new Window();//生成一个窗口的实例
Window1.open();//打开窗口一
4、 抽象类:不能实例化的类,如JAVA伪语言所示:
Class Abstract Window{…}
那么就不能:
Window window1=new Window();
因为这样定义的类不能具体为一件事物。
5、 继承:分类有最基本的概括事物的特性,但具体分类下面的事物又有不同 的特性,因此我们用子类来说明,这一种关系,即子类继承父类所有的特性,子类又拥有父类没有的特性,称之为继承。
6、 通信:类之间的联系,即通信的关系。
7、 消息:类本身之间通信,通过一种激励机制来通信,这种机制即消息(message)。
8、 多态性:同一个操作名称,能表现出不同的行为,即重载。它使程序复用程度和维护程度更高。
注意:有些书上说明继承也是多态性的一种表现形式,我认为也没有什么二义性,但我解释是这么认为,这一文中的多态性的说明是在同一个类的说明多态的表示,但继承是类与类之间的多态性表示,如多个类继承一个抽象类,这个抽象类中的方法全部覆盖抽象类中的一个方法,因此使用起来的时候却是不同的行为,这也是一种多态的表现形式。
三、 为什么要使用面向对象
使用面向对象软件工程的好处在哪呢?这是我们首先应该回答的问题,答案就是复用程度高,易于维护,降低开发成本。
四、 面向对象软件工程使用的过程开发模型
前面一文《软件工程之软件过程(软件工程实践之二)》一文中讲到各种软件过程模型,这些开发模型基本都实用于OO,但由于面向对象主要是产生组件,然后通过组件来组装应用程序的,因此一看就知道是一种更适合于演化的过程,因此最适合面向对象软件工程的过程模型是演化模型。
五、 标识对象的模型和元素
<一>标识潜在的对象
1、 外部实体(如,其他系统、设备、人员),它们生产或消费被基于计算机的系统使用的信息。
2、 事物(如,报告、显示、文字、信号),它们是问题的信息域的一部分。
3、 发生的事情或事件(如,性质变迁或完成一系列的遥控的运动),它们出现在系统运行的环境内。
4、 角色(如,管理者、工程师、销售人员),由和系统交互的人员所扮演。
5、 组织单位(如,分支、小组、小队),它们和应用相关。
6、 位置(如,制造场所或装载码头),它们建立问题和系统整体功能的环境。
7、结构(如,传感器、四轮交通工具或计算机),它们定义一类对象,或
者在极端情况下,定义对象的相关类。
如下图:
<二>标识确定的对象应该考虑的因素
1、 保留的信息——仅当关于潜在对象的信息必须被记住才能使系统可以操作时,则它在分析中是有用的;
2、需要的服务——潜在对象必须拥有一组可标识的操作,它们可以以某
种方式修改对象属性的值;
3、多个属性——在需求分析阶段,关注点应该是“较大的”信息(仅具有单个属性的对象在设计时可能是可用的,但是在分析阶段,最好将它表示为一个对象的属性);
4、公共属性——可以为潜在对象定义一组属性,这些属性适用于对象每一次发生的事件;
5、公共操作——可以为潜在对象定义一组操作,这些操作适用于对象每一次发生的事件;
6、必要的需求——出现在问题空间的外部实体以及对系统的任何解决方案的操作都是必要的生产或消费信息将几乎总是被定义为需求模型中的对象。
如下图:
<三>标识属性
将数据字典(传统面向对象的概念,通意即是数据模型)中描述的数据项来标识属性,其实通意一点,一个对象即是属性来标明的。如:信用卡=帐号+用户ID+信用金额+信用余额,这样的数据字典的描述,那么信用卡这个对象的属性即可用帐号,用户ID,信用金额,信用余额来标识。
<四>标识对象的操作
在需求过程中,抽取需求中的动词,注意需求中的活动和行为,并考虑到类之间的通信消息,即可定义出类中的操作了。
六、 总结
对象描述系统中所有的问题域,标识系统中全部方面,包括实体、事物、发生的事情或事件、角色、组织单位、位置及对象的结构,一但分类定义好,即可很好的复用,这是很值得注意的地方。
OO 方法和传统的软件工程方法区分。1、封装将数据和操纵数据的操作包装到单个命名的对象中;2、继承使得类的属性和操作可以被通过实例化产生的它的所有的子类和对象所继承;3、多态使得一系列不同的操作具有相同的名字,减少实现系统所需的代码行数并方便修改。
面向对象的产品和系统使用演进模型来开发。
下一篇:软件工程之面向对象系统分析(软件工程实践之四)