文章目录

  • 1.面向对象程序设计概述
    • 1.1 面向对象程序设计
    • 1.2 传统结构化程序设计
    • 1.3 面向对象与面向过程举例
  • 2.类之间的关系
    • 2.1 泛化/继承
    • 2.2 实现
    • 2.3 依赖
    • 2.4 关联
    • 2.5 聚合
    • 2.5 组合
    • 2.6 强弱顺序
    • 2.7 一张图融会贯通
  • 3. 参考文献

本文已同步到:https://www.bithachi.cn/posts/769cd987.html

1.面向对象程序设计概述

  • 面向对象程序设计(简称 OOP) 是当今主流的程序设计范型, 它已经取代了 20 世纪 70 年代的“ 结构化” 过程化程序设计开发技术。

1.1 面向对象程序设计

  • Java 是完全面向对象的, 必须熟悉 OOP 才能 够编写 Java 程序
  • 面向对象的程序是由对象组成的, 每个对象包含对用户公开的特定功能部分和隐藏的实 现部分。程序中的很多对象来自标准库,还有一些是自定义的。

1.2 传统结构化程序设计

  • 传统的结构化程序设计通过设计一系列的过程(即算法)来求解问题。一旦确定了这些 过程, 就要开始考虑存储数据的方式。这就是 Pascal 语言的设计者 Niklaus Wirth将其著作命 名为《算法 + 数据结构 = 程序》
  • 在 Wirth命名的书名中, 算法是第一位的,数据结构是第二位的,这就明确地表述了程序员的工作方式。 先要确定如何操作数据, 然后再决定如何组织数据, 以便于数据操作。 而 OOP 却调换了这个次序, 将数据放在第一位,然后再考虑操作数据的算法

1.3 面向对象与面向过程举例

举个例子简单说明面向过程开发与面向对象oop开发的不同:

  • 对于一些规模较小的问题, 将其分解为过程的开发方式比较理想。
  • 而面向对象更加适用 于解决规模较大的问题。
  • 要想实现一个简单的 Web 浏览器可能需要大约 2000 个过程,这些过程可能需要对一组全局数据进行操作。
  • 采用面向对象的设计风格, 可能只需要大约 100 个 类,每个类平均包含 20 个方法(如图 4-丨所示)。
  • 后者更易于程序员掌握, 也容易找到 bug 假设给定对象的数据出错了,在访问过这个数据项的 20 个方法中查找错误要比在 2000 个过 程中查找容易得多

2.类之间的关系

在类之间, 最常见的关系有:

  1. 泛化/继承(Generalization)
  2. 实现(Realization)
  3. 关联(Association)
  4. 聚合(Aggregation)
  5. 组合(Composition)
  6. 依赖(Dependency)

2.1 泛化/继承

  • 含义:继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。
  • 代码体现:在Java中继承关系通过关键字extends明确标识
  • 箭头指向:继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。

2.2 实现

  • 含义:实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。
  • 代码体现:在Java中此类关系通过关键字implements明确标识
  • 箭头指向:实现用一条带空心三角箭头的虚线表示,从类指向实现的接口。

2.3 依赖

  • 含义:一种使用的关系,即一个类的实现需要另一个类的协助,要尽量不使用双向的互相依赖.

    这种使用关系是具有偶然性的、临时性的、非常弱的,类B的变化会影响到类A。

  • 代码表现:局部变量、方法的参数或者对静态方法的调用;类B作为方法参数(局部变量)被类A在某个method方法中使用

  • 箭头指向:用带箭头的虚线表示,指向被使用者

2.4 关联

  • 含义:是一种拥有的关系,它使一个类知道另一个类的属性和方法;

    这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。

    如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

  • 代码体现:成员变量。被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。

  • 箭头指向: 带普通箭头的实心线,指向被拥有者

2.5 聚合

  • 含义:聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。

    此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。

    比如计算机与CPU、公司与员工的关系等,比如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。

  • 代码体现:成员变量;和关联关系是一致的,只能从语义级别来区分

  • 箭头指向:带空心菱形的实心线,菱形指向整体

2.5 组合

  • 含义:组合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。
    它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,

    比如人和人的大脑。比如公司和部门是整体和部分的关系,没有公司就不存在部门。

  • 代码体现:成员变量;和关联关系是一致的,只能从语义级别来区分

  • 箭头指向:带实心菱形的实线,菱形指向整体

2.6 强弱顺序

各种关系的强弱顺序:泛化/继承 = 实现 > 组合 > 聚合 > 关联 > 依赖

2.7 一张图融会贯通

下面这张UML图,比较形象地展示了各种类图关系:

3. 参考文献

  • http://www.uml.org.cn/oobject/201609062.asp#
  • https://www.cnblogs.com/liuling/archive/2013/05/03/classrelation.html

详解:面向对象与面向过程的比较 类之间的关系:泛化、实现、依赖、关联、聚合、组合相关推荐

  1. R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据

    R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据 目录

  2. 面向对象之: 类空间问题及类之间的关系

    面向对象之:类空间问题以及类之间的关系 类的空间问题 添加对象属性 总结:对象的属性不仅可以在__init__里面添加,还可以在类的其他方法或者类的外面添加. class A:mind = " ...

  3. 面向对象和面向过程之间的区别以及优缺点

    面向对象和面向过程详解 说到面向对象,我们都知道C#, Java, C++, python, JS- 都是面向对象的编程语言 说到面向过程,我们都知道C,fortran等都是面向过程的编程语言 今天我 ...

  4. 面向对象和面向过程(总结版)

    目录 前言 一.什么是面向对象?什么是面向过程? 二.面向对象和面向过程的优缺点对比 三.面向对象编程的特性:封装.继承.多态. 前言 为了更好的理解,我总结了什么是面向对象,什么是面向过程.以下内容 ...

  5. 详解面向对象、构造函数、原型与原型链

    详解面向对象.构造函数.原型与原型链 为了帮助大家能够更加直观的学习和了解面向对象,我会用尽量简单易懂的描述来展示面向对象的相关知识.并且也准备了一些实用的例子帮助大家更加快速的掌握面向对象的真谛. ...

  6. 面向对象与面向过程理解

    本文源地址: http://blog.csdn.net/ithzhang/article/details/52983530 http://blog.csdn.net/ithzhang/article/ ...

  7. 深入理解面向对象和面向过程

    面向对象基本概念: 面向对象 ( Object Oriented ) 是将现实问题构建关系,然后抽象成 类 ( class ),给类定义属性和方法后,再将类实例化成 实例 ( instance ) , ...

  8. 面向对象和面向过程的区别和联系

    ----前车之鉴,后车之师:对面向对象的理解 1.考虑问题的过程和思想的转变: 在对问题的考虑时人的主观思维起到重要作用,遇到问题会对整体问题进行考虑看是否遇到过类似问题,人为的向经验靠拢,对问题事件 ...

  9. 面向对象与面向过程区别

    面向对象:用线性的思维.与面向过程相辅相成.在软件开发过程中,宏观上,用面向对象来把握事物间复杂的关系,分析系统.微观上,仍然使用面向过程. "面向过程"是一种是事件为中心的编程思 ...

最新文章

  1. 老电脑安装matlab 2018卡不卡,软件装C盘会变卡?Windows系统要怎么用才不卡?
  2. PCL:全程详解 VS2010+PCL配置
  3. winform的UI设计关键属性汇总
  4. 数据库零碎---mysql编码设置,与乱码分析
  5. DDD-上下文映射图
  6. “fatal: refusing to merge unrelated histories” Git error
  7. 用php绘制空心圆,html5使用canvas画空心圆与实心圆_html5教程技巧
  8. indesign使用教程,如何将颜色保存为色板?
  9. mysql匿名账户登录导致的ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'错误...
  10. 软件工程~~判定树和判定表
  11. 安卓手机5个好用的思维导图软件
  12. Ant Design Vue下载本地文件(其他框架也适用)
  13. 从智能交通案例看物联网成功的关键
  14. [功能改进]Ctrl+Enter直接提交评论
  15. Error inflating class androidx.constraintlayout.widget.ConstraintLayout
  16. Qt项目-------掌上银行(客户端)
  17. 百面机器学习02-模型评估
  18. 励志短片:献给努力前行的你
  19. 想自由查看自己网站每个页面流量情况?这个工具可以满足需求!
  20. 青岛啤酒12星座铝瓶星耀公开 啤酒也有自己的朋友圈

热门文章

  1. 一个ioc例子jdk和spring版本导致问题
  2. win7下设置无线上网
  3. unix基础之改变文件权限
  4. 3.Factory Method 工厂方法模式(创建型模式)
  5. 【转】使用Windows Backup备份Exchange 2007 SP2和Exchange 2010
  6. Microsoft SQL Server 2005 安装程序错误解疑
  7. SQL Server中把查询出来的结果重新编号作为一列
  8. 解决方案:外域HDFS客户端访问内网HDFS datanode
  9. arthas class/classloader相关命令之一:sc、sm
  10. scala 数据类型体系一览图