作者:矢泽久雄
文章目录
——————————————————————————————————————
第七章 • 成为会使用面向对象编程的程序员
——————————————————————————————————————
【01】面向对象编程
面向对象编程(OOP,Object Oriented Programming)是一种编写程序的方法,旨在提升开发大型程序的效率,使程序易于维护,从而缩减企业成本(开发费用+维护费用)。
与面向对象编程相对的,就是是面向过程编程。
下面从多个角度对OOP理解剖析。
——
【02】观点1:面向对象编程通过把组件拼装到一起构建程序
- 类就是OOP的组件
- 把程序中相关联的函数和变量汇集到一起编程组,这个组就是类
- OOP,就是把若干个类组装在一起构成完整的程序
——
【03】观点2:面向对象编程可以提高程序的开发效率和可维护性
- OOP是通过如若干个“类”这样的组件拼装构成程序的
- 所以可以以组件为单位对程序进行维护
- 类与类之间是相互独立的,一个类的修改不会影响其他类的变化
- 对于类的使用者来说,“类看起来是什么样子的”这种关于规范的描述通常被称为“接口”。
——
【04】观点3:面向对象编程是适用于大型程序的开发方法
假设一个程序需要10000个函数和20000个边浪,如果把这个程序用100个类组织起来,那么平均一个类里就只有100个函数和200个变量。
程序的复杂度也就降低到了原来的1%。
如果在此基础上使用封装这种编程技巧(将函数和变量放入黑盒,使其对外界不可见),还能够进一步降低复杂程度。
所以说这也是为什么面向对象编程使用过于大型程序的开发。
——
【05】观点4:面向对象编程就是在为现实世界建模
我们通过程序在计算机上实现现实世界的各种业务和娱乐活动。
在面向对象编程中,可以通过“这个是由什么样的对象构成的呢?”这样的观点来分析,将现实世界的各种各样的活动拆分为一个一个对象,然后转化为程序。
这样的分析过程就叫做“建模”。
在实际建模的过程中有两大步骤,“组件化”和“省略化”。
组件化,就是将由若若干个对象构成的集合的现实世界分割成若干个组件。
省略化,就是将组合成实现世界的组件中非关键组件进行省略掉,从而专注于涉及核心功能和属性的重要组件。
——
【06】观点5:面向对象编程可以借助UML设计程序
为了把对现实世界建模的结果以图形的形式展示出来,会经常使用UML(Unified Modeling Language,统一建模语言)的标记方法。
UML是通过统一历史上曾经出现的各种各样的标记方法而发明出来的,且UML已经成为了建模标记方法中的世界标准。
UML中规定的九种图
面向对象编程,就是从类图角度出发的。
在进行面向对象编程的时候,从一开始就要把所需要的的类确定下来,再列举每个类中应该具有的方法和变量。
要一边观察作为程序参照物的显示世界,一边思考待解决的问题是由哪些类构成的。正式因为在设计时要去关注对象,这种编程方法才被称为面向对象编程。
——
【07】观点6:面向对象编程通过在对象间传递消息驱动程序
程序可以通过由一个对象去调用另一个对象所拥有的函数,从而运行起来。
这种调用方式被称为对象间的 “消息传递” 。
以“判定石头剪刀布输赢”案例为例。
如果采用面向过程编程方式,它可能是这样的
# 纯粹使用独立的函数
a = GetHand()
b = GetHand()
winner = GetWinner(a,b)
可以用“流程图”来表示程序的运行过程
如果使用面向对象编程放,它会是这样的
# 调用某个对象所拥有的函数
a = PlayerA.GetHand()
b = PlayerB.GetHand()
winner = Judge.GetWinner(a,b)
可以使用UML中的“时序图”来表示程序的运行过程
——
【08】观点7:在面向对象编程中使用继承、封装和多态
继承、封装和多态是面向对象编程的三个基本特性。
继承:通过继承已存在的类所拥有的成员(变量和方法)而生成新的类,被继承者与继承者之间称为父类和子类的关系。通过继承能够高效地生成和修正类。
封装:在类所拥有的的成员中,隐藏掉那些没有必要展现给该类调用者的成员。类就可以被当作黑盒,变成易于使用且便于维护的组件。
多态:针对同一种消息,不同的对象可以进行不同的操作。使用这样的类能够大大减少程序员的记忆量。
——
【09】类的三种使用方式
- 仅调用类中的个别成员(变量、方法)
- 在类的定义中包含其他的类(这种方法被称为组合)
- 通过继承已存在的类从而定义出新的类
采用哪种使用方式,是根据目标类的性质以及个人的目的决定的。
——
【10】个人总结
面向过程和面向对象两种编程方式之间并不绝对地存在谁优谁劣,它们是两种不同的编程思维方式。
我们需要根据自己所编写的程序代码去选择合适的方式,只不过在越大的编程项目总,采用面向对象编程能够更加提高效率、便于维护。
——