面向对象的编程思想
首先,面向对象是一种编程思想,简称Object Oriented,OO。而我们新人在初接触编程(学习面向对象思想之前)时,喜欢使用的是传统的思考模式。其模式是根据顺序一步一步完成所需的需求。这种模式称之为面向过程的程序设计。
高级语言出现之初,程序设计的思路,也是参考了人类解决问题的思路。
面向过程的设计思想在面对少量的流程项目时,是一种不错的编程模式,但当项目过程复杂的项目时,就有一种无力的感觉。并且,当代码发布后,需要维护和修改功能时,也会有很多的复杂程度,会使代码不易修改,维护费过大。
面向对象是一种编程思想,就是一种解决问题的思路,将项目中不同的数据,封装成类型来进行使用。是对面向过程编程思想的补充和完善。
从世界观的角度可以认为:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。
从方法学的角度可以认为:面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统。
面向对象,有自己的三大特征,分别是,封装、继承、多态。
这三个特征主要含义如下:
1.封装:将对象的敏感的信息封装在对象的内部,不让外界直接访问,提高数据的安全性
2.继承:通过继承关系,梳理对象和对象之间的关系,同时提高了程序设计功能的强大的扩展性和代码的复用性
3.多态:程序在运行过程中,实时根据不同的数据执行不同的处理逻辑展现不同的状态,让程序的功能更加的完善健壮
面向对象的设计思路:
1.抽取出所需对象:用户
2.抽取出对象的属性:用户的资料、行为状态等
3.抽取出对象的动作(方法):填写完整资料,购买商品等
总体来说,分为这三步。
面向对象在实际项目开发中,为了更加符合人类的语言习惯和认识这个世界的思维方式,给这样的程序设计添加了一些特殊的处理让开发人员更加容易理解,同时提高了程序的健壮性、可扩展性和可维护性等。其原因是:
重用性好,当有多个相似对象时,只需更改设计思路中的对象,即可完成。
可扩展性好,当要扩充其功能或对象属性时,有相当明显的方法函数和对象属性在代码文件中,显而易见的更改即可。
维护性好,同可扩展性的原因。
正如老师所说,客户的要求是无理的,但是是必须执行的。当有新的需求时,由于代码的鲜明性,因此可以直接对照代码更改相应的地方。也由于面向对象的设计思想,会使代码模块化。
面向对象的设计思想,会使我们在编写大型项目代码时变得充满头绪(企业级项目开发基础)
但我们思维不能江化严重,在编写小型代码和重用性不高的代码时,不可否认,面向过程的代码反而更为简易易懂。不能只为了面向对象的思想,就把本来几行的代码,分别拆解为对象、属性和方法表示出来。这样就是失去本心了。
借用网上的话:
Sometimes data is just data and functions are just functions.
OOP的本质就是——对数据和与之关联的行为进行编程
面向对象编程注重的是:1)数据和其行为的打包封装,2)程序的接口和实现的解耦
以下是老师总结:
- 什么是面向对象?【概念:重要,操作:可以忘掉】
a) 面向对象是一种编程思想,就是一种解决问题的思路,将项目中不同的数据,封装成类型来进行使用。是对面向过程编程思想的补充和完善。
b) 面向对象,有自己的三大特征,封装、继承、多态
- python中的面向对象怎么表示?【概念:可以忘掉,操作:可以忘掉】
a) python中,通过类和对象,以及对象之间的互相调用完成一定的功能,来体现面向对象的编程思想
- 类是什么?【概念:重要,操作:可以忘掉】
a) 类,就是类型、数据类型的简称,是从一部分实际存在具有相似的特征和行为的实物中,抽象出来的一个概念。
- 对象是什么?【概念:重要,操作:可以忘掉】
a) 对象,就是实际存在的物体,也称为实体,是类型表示的具体的实际存在一个实例
- 类和对象有什么区别?【概念:重要,操作:可以忘掉】
a) 类是对象 的抽象概念
b) 对象是类 的实例
- 怎么定义一个类?【概念:可以忘掉,操作:重要】
a) 类一般有几个组成部分:类型名称、属性、方法
b) 通过class
关键字,来定义一个自定义类型
c) 通过__init__()
函数,来初始化类的属性数据
d) 通过普通函数,定义类的行为方法
- 怎么创建对象?【概念:可以忘掉,操作:重要】
a) 和执行函数一样,直接通过类的名称,来创建对象,如:u = Users()
- 创建的对象,怎么使用对象的属性?【概念:可以忘掉,操作:重要】
a) 对象的属性,可以直接通过 对象的引用变量.属性名称
来使用,如u.username
- 创建的对象,怎么使用对象的方法?【概念:可以忘掉,操作:重要】
a) 对象的方法,可以直接通过 对象的引用变量.方法名称()
来调用方法
- 创建对象的过程是什么?【概念:重要,操作:忘掉】
a) 首先,创建对象,会调用对象的__new__()
函数,来申请内存,创建对象
b) 其次,给创建好的独享,初始化对象的数据,自动调用__init__()
函数,给对象的属性赋值
- 创建好的对象,赋值给了一个变量,变量是什么类型?存放的是什么数据?【忘掉】
a) 变量 = 类名称() 创建了一个对象,将对象的引用地址,赋值给了变量
b) 变量(内存地址) -> 堆内存中的对象
c) type(变量) -> 类类型