面向对象思想

写在开头的话

把一组数据结构和处理它们的方法组成对象,把相同行为的对象归纳为,通过类的封装隐藏对象的内部实现细节,通过继承实现类的特化/泛化,通过多态实现基于对象类型的动态分派

OOP思想

OOP是一种思想,既面向对象对象编程,将数据和行为进行封装并看作对象对象进行操作。面向对象的核心是一种思想,抽象的得思想,是解决实际问题时需要的一种思考方式。

面向对象的第一步:抽象

当我们面对一个实体时,我们要抽取这个实体群中的所有公共属性和行为,即抽取公共部分,然后进行一个类别的定义。例如,当我们面对一个人时,所有的人都具有姓名、年龄、性别…等属性,同时也有吃饭、睡觉…等行为,当我们将这些属性和行为封装的一起的时候就可以形成一个人的类,而一个具体的人就是一个对象,是根据我们抽象出来的类型进行的实例化。
这就是面向对象的第一步,抽象
将实际存在或者需求中的实物进行泛化,提取公共部分,进行类型定义

对象

我们定义一个抽象的类型之后可以根据这个类型生成任意一个具体的实例,对象是根据抽象类型的实例化,我们定义了人类的特征和行为(既编写了一个class),便可以根据这个class产出一个具体的个体来。

面向对象要明确的几点

  1. 一切皆是对象:在程序中任何事物都可以被当作对象,你总是可以再要解决的问题上抽象出具体的概念,形成一个类,然后在程序中将其表示成一个对象。
  2. 程序是对象的集合,他通过发送消息来告知彼此需要干什么:程序就像是一个现实世界在电脑中的映射,现实世界中的各种实体就是程序中的各个对象,对象之间相互通信,操作来完成一件事,这边是程序中的一个流程,要请求调用一个对象的方法,你需要向该对象发送消息。
  3. 每个对象都有自己的存储空间,可以容纳其他的对象:我们可以通过封装现有的对象形成一个新的对象。
  4. 每个对象都拥有自己的类型:任何一个对象都是某个类的实例,每个对象都必须有其依赖的抽象。
  5. 同一类的所有对象都能接受相同的消息

面向对象的三大特性:封装、继承、多态

封装

利用抽象数据类型,将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型内部,尽可能的隐藏内部实现的细节,只保留一些对外的接口使其与外部发生联系。用户无需关心对象内部的细节,但可以通过对象对外提供的接口来访问该对象。

优点:

  1. 减少耦合:可以独立的开发、测试、优化、使用、理解和修改
  2. 减轻维护负担:更易理解,且在调试的时候不影响其他的模块
  3. 有效的调节性能:可以通过分析指导哪些模块影响了系统的性能
  4. 提高软件的可重用性
  5. 降低了构建大型系统的风险

继承

公有继承实现了“是一个”的关系,例如Cat和Animal就是一种“是一个”的关系,因此Cat可以继承自Animal,从而获得Animal的非私有属性和方法
继承应该遵循里氏替换原则,子类对象必须能够替换掉所有的父类对象。Cat可以当做Animal来使用,也就是说可以使用Animal引用Cat对象(会发生切片现象)。父类引用指向子类对象成为向上转型

多态

多态分为编译时多态和运行时多态

  • 编译时多态主要指的是方法的重载
  • 运行时多态主要指的是虚继承
    运行时多态的条件
  • 虚继承
  • 子类型需要重写父类的方法
  • 向上转型:既父类通过指针或者引用调用子类型的方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值