现在的位置: 首页 > 综合 > 正文

面向对象思想

2013年09月09日 ⁄ 综合 ⁄ 共 2529字 ⁄ 字号 评论关闭

面向对象思想

总述:

面向对象设计的基石:

封装、继承、多态 

关键: 抽象


 + 类间关系 + 类种类与类职责 + 反射与注解

类的种类:

一、按是否可实例化分类:抽象类或接口,具体类  

二、按是否使用继承分类:父子类,普通类

  注:抽象类和接口必须作为父类,否则没有任何意义。

类间关系(6种):

1. 泛化:  继承、实现

2. 非泛化:关联、聚合、组合、依赖

面向对象的性质:

封装性、继承性、多态性

面向对象设计,就是通过对现实世界建立模型;利用抽象、封装、继承、多态、反射等机制。确定类(具体类、抽象类、接口)的职责及类之间关系(继承、实现、依赖、关联、聚合、组合);达到软件的可重用、可维护、可扩展等特性。

**************************************************************************************************************************************************************

l 面向对象思想:

哲学观:宇宙即时空,空间的变化产生时间。空间由虚与实构成,实即物质对象,虚即关系和能量。实的对象之间通过虚的关系相互作用,从而构成整个宇宙。

而对象和关系也分虚实,实对象即物质对象,虚对象即人抽象出的概念对象。实关系即现实世界中各实对象间的关系,虚关系即人假想出来的关系。

方法论:面向对象思想即对现实中的对象与关系进行直接映射,建立模型,然后通过思维加工修饰(关键是抽象),构建整个软件系统。

l 面向对象的性质:封装性,继承性,多态性

l 面向对象分析:

即“面向对象思想”中的方法论

l 面向对象设计:注:面向对象设计的关键是抽象。

第一步:建模

对现实中的事物进行建模,找出所有的对象及对象间关系(这里的对象指现实世 界 的对象),建立世界模型

第二步:映射

根据建立的模型,将对象映射为类及类间关系。

第三步:重构

抽象出抽象类和接口,重构类及类间关系。这里需要利用抽象、继承、多态、封装以及反射的手段,重构类的种类、类的职责、类间关系

面向对象设计原则:

  模块化 抽象 信息隐藏 低耦合 高内聚

  开闭原则+单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、组合/聚合复用原则

面向对象特性:

  抽象 封装 继承 多态

  特性的具体编程时体现:

抽象:抽象类、接口

封装:类、对象

继承:子类父类

多态:虚函数; 重载、模板、宏

附:

面向对象术语:

  属性 方法 重载 构造函数 析构函数 改写 虚函数 纯虚函数 抽象类 虚拟继承 模板

  各术语的含义:

  重载:指函数重载

  改写:指在子类中重写父类中的方法

重载与改写的区别:重载要求函数名相同,参数的个数或类型不同;改写要求返回类型,

函数名,参数列表都相同,且同为const或非const成员

  虚函数:为了实现多态而设

  纯虚函数:特殊的虚函数,为了实现抽象类而设

  虚拟继承:多重继承时,若A{a}  B:A{b} C:A{} 

  D多重继承BC,则D:B,C{}中的数据有(a,b,a,c)即BC继承的A

a重复了。为了解决这个问题,从而引入了虚拟继承。这样就成了(a,b,c)




类之间关系

类的种类:

按是否可实例化分类:抽象类或接口,具体类  

按是否使用继承分类:父子类,普通类

注:抽象类和接口必须作为父类,否则没有任何意义。

UML把类之间的关系分为6种:

1. 泛化:  继承、实现

2. 非泛化:关联、聚合、组合、依赖

下面分条讲解:

l 1. 泛化(继承、实现)

【定义】

泛化表示类与类之间的继承关系,接口与接口之间的继承关系;或类对接口的实现关系。  

【具体表现】

父类 父类实例=new 子类() 

【UML图】

图1-1 泛化—继承

也有地方将泛化进一步细分为继承(类继承类,接口继承接口)与实现(类对接口的实现)

图1-2 泛化—实现
【代码表现】

class Animal{}

class tiger extends Animal{}

public class test

{

public void test(){

Animal a=new tiger();

}

}

l 2. 依赖

【定义】

对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对 象的服务时,这两个对象之间主要体现为依赖关系。 

【具体表现】

依赖关系表现在局部变量方法的参数,以及对静态方法的调用 

【UML图】

图2 依赖

【代码表现】

public class person{

//人使用螺丝刀来完成拧螺丝的操作

public void screw(ScrewDriver screwdriver){

screwdriver.screw();

}

}

l 3. 关联(分单向关联、双向关联、多维关联、自身关联)

【定义】

对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定 的对应关系时,这两个对象之间为关联关系。 

【具体表现】

关联关系是使用实例变量来实现 

【UML图】

图3 关联

l 4. 聚合

【定义】

聚集是关联关系的一种特例。聚集指的是整体与部分之间的关系,他体现的是整体与部 分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各 自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机 与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义
级别来区分 

【具体表现】

与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。

关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。 

【UML图】

图4 聚合

l 5. 组合

【定义】

组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更 强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分 的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现 在代码层面,和关联关系是一致的,只能从语义级别来区分。

【具体表现】

与关联关系一样,组合关系也是通过实例变量来实现这样关系的。

关联关系和聚合关系在语法上是没办法区分的,从语义上才能更好的区分两者的区别。 

【UML图】

图5 组合

抱歉!评论已关闭.