【2023/09/04】面相对象的特性

面向对象技术的基本特质

  • 万事万物皆对象
  •  程序便是成堆的对象,彼此通过消息的传递,请求其他对象进行工作
  •  每个对象都有自己的存储空间,可容纳其他对象。
  • 每个对象都有一个类型,皆为其类(class )的一个实体(instance )
  • 同一类的所有对象能接受的消息皆相同

POP vs OOP

【2023/09/04】面相对象的特性_第1张图片

【2023/09/04】面相对象的特性_第2张图片

POP与OOP的对比

  • POP

    • 门槛较低,简单易学。
    • 便于处理规模较小的问题
    • 性能较高
  • OOP
    • 善于处理规模较大的问题
    • 耦合度低, 易维护 。
    • 封装性好,容易扩展。
    • 类层次清晰, 易复用 

面向对象的思维方式

用面向对象的思想来考虑问题,不应该再考虑第一步干什么,第二步干什么

  1. 第一,应该考虑问题域里有哪些类,哪些对象。 
  2. 第二,再考虑每一种类每一个对象应该具有哪些属性和方法
  3. 第三,再考虑类和类之间具备了什么样的关系。

类和对象

对象的概念

对象

描述现实世界中的客观事物,由静态的属性和动态的行为组成。

【2023/09/04】面相对象的特性_第3张图片

类的概念

对具有相同属性和行为的客观事物的共性描述,是一种抽象的概念。【2023/09/04】面相对象的特性_第4张图片

对象和类的关系

  • 对象用计算机语言对问题域中的事物描述,对象通过 “ 属性 ”(attribute )和 “ 方法 ” (method )来分别对应事物所具有的静态属性( 成员变量)
  • 类是用于描述同一类型的对象的一个抽象概念 ,类中定义了这一类对象所具有的静态和动态属性。
  • 类 可以看成同一类对象的模版,对象可以看成该类的一个具体实例

对象是具体的,类是抽象的

  • 类可以看作为模板 ,对象就是用这个模板创建的实例 
  • 同一个类的所有对象实例具有家族式的相似性

对象有两个层次的概念

  • 现实生活中对象指的是客观世界的实体
  • 程序中的对象就是一组属性和相关方法的集合,其中属性表明对象的状态,方法表明对象所具有的行为

【2023/09/04】面相对象的特性_第5张图片

类(对象)之间的关系

依赖关系

假设有两个类,类A和类B,类A的某个成员方法的参数有类B,说明类A使用了类B,类A依赖类B,依赖关系即uses-a关系,依赖关系除了被依赖方作为依赖方的方法参数,还可能作为依赖方的方法返回值存在,这些都是依赖关系的表现形式。如下图所示:

【2023/09/04】面相对象的特性_第6张图片

关联关系

关联关系是一种强依赖的关系,假设有两个类,类A和类B,类B作为类A的成员变量存在,类A也可为类B的成员变量存在,如果互为成员变量则为双向依赖,否则为单向依赖。

【2023/09/04】面相对象的特性_第7张图片

关联关系与依赖关系的区别在于,依赖关系是一种临时的关系,依赖关系主要体现在方法参数,当调用方法时才有关系,关联关系是一种长期的关系,主体现在成员变量,无论是否调用方法这种关系都存在。

聚合关系

聚合关系是一种has-a关系,假设有两个类,类A和类B,类A包含类B,类B是类A的成员变量,聚合关系和关联关系都体现在成员变量,它们的区别在于:关联关系双方是平级的,是个体和个体的关系,聚合关系双方不是平级的,是整体和部分的关系。

组合关系

组合关系是一种强聚合的关系,组合关系与聚合关系的区别在于:聚合关系中部分离开整体仍可存活,组合关系中部分离开整体没有意义,比如:人由身体、四肢等部分组成 ,它们的关系为组合关系。

继承关系

【2023/09/04】面相对象的特性_第8张图片

实现关系

【2023/09/04】面相对象的特性_第9张图片

面向对象编程

Object-Oriented Programming (OOP)

  • 当前主流的程序设计模式
  • 模拟人类解决问题的思维方式
  • 把客观世界中的实体抽象为问题域中的对象
  • 程序由一系列对象组成,各对象之间通过发送消息来解决问题

你可能感兴趣的:(编程语言,面相对象编程)