python基础四_01_面向对象编程

导读:
本文主要从what?why?how?三个方向理解面向对象编程的思想;仅供自己梳理。

一、什么是面向对象编程?

面向对象编程与面向过程编程是两种常见的编程思想。先通过引子来看下:

引子1:

    话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片。
眼看就要灭了东吴,统一天下,曹操大悦,于是大宴众文武。在酒席间,曹操诗性大发,
不觉吟道:"喝酒唱歌,人生真爽..."。众文武齐呼:”丞相好诗!“于是命印刷工匠刻版印刷
,以便流传天下。版样给曹操一看,曹操感觉不妥,说道”喝与唱,此话过俗,应改为‘对酒当歌’较好!
于是命工匠重新雕刻。那时候,还没发明活字印刷术,如果样板要改,只能重头雕刻。
工匠眼看连夜刻版之工,彻底白费,心中叫苦不迭。只得照办。版样再次出来请曹操过目,曹操细细一品,觉得还是不好,说“人生真爽太过直接,
应该改问语才够意境,因此应改为‘对酒当歌,人生几何?’”,于是....在活字印刷术还没出现之前,如果版样有改动,只能重新雕刻(这个就相当于面向过程)。
而且在印刷完成后,这个样板就失去了它的价值,如果需要其他样板只能重新雕刻。而活字印刷
术的出现就大大改善了印刷技术。如上例”喝酒唱歌,人生真爽“,如果用活字印刷,只需要改四
个字就可,其余工作都未白做。岂不快哉!!活字印刷也反应了面向对象(OOP)。当要改动时,只需要改要改的地方,此为可维护;
当这些字用完后,并非就完全没有价值了,它完全可以在后来的印刷中重复使用,此乃可复用;
下次诗若要加字,只需另刻字加入即可,这就是可扩展;字的排列可以横排,也可以竖排,
此是灵活性好。

引子2:

假如我们要做一个五子棋游戏,从两种设计思路来分析一下。

面向过程的设计思路:
面向过程的设计思路就是首先分析问题的步骤:
1、开始游戏,
2、黑子先走,
3、绘制画面,
4、判断输赢,
5、轮到白子,
6、绘制画面,
7、判断输赢,
8、返回步骤2,
9、输出最后结果。
把上面9个步骤用不同的方法来实现。
面向对象的设计思想
面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为三个部分。
1、黑白双方,这两方的行为是一模一样的,
2、棋盘系统,负责绘制画面,
3、规则系统,负责判定诸如犯规、输赢等。
第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

通过以上两个引子,我们已经对面向过程和面向对象有了初步的了解。

二、为什么要面向对象编程?

1.面向过程与面向对象的编程思维对比:

面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
面向对象是模型化的,结构化的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。
面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。

2.面向过程与面向对象的优缺点对比:

(1).面向过程:

优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展.

(2).面向对象:

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 .
缺点:性能比面向过程差

三、怎样面向对象编程?

1.面向对象的哲学

万物皆对象

类是对象的模板,对象是类的实例化。

2.相关概念和词汇

面向对象有些概念不搞明白含义,我们就无法进行编程。比如:类,对象,属性,方法,实例和实例化,父类,子类等等。这些都是啥意思?

(1).类是具有相同或相似性质的对象的抽象。如:人类,狗类,车类,枪类,鱼类,水果类,美食类,艺术类等等。它们都有相似的性质,但是它们是抽象的,并不是客观存在的,比如:你能拿出来一水果叫‘水果’吗?当然不能,因为‘水果’是一个抽象的概念,并不是某个具体的水果。同样,人类也是一样的道理。所以说类是对象的模板。
(2).‘人类’是‘黄种人类’的父类,‘黄种人类’是‘人类’的子类。
(3).对象是类的具体化。比如:‘张三’这个实例就是从‘人类’这个类中实例化出来的一个对象。
(4).属性描述了对象的状态。如:年龄。
(5).方法描述了对象的行为。如:吃饭。

我们通过下面的例子来看下:

# 类
人类---------------------------------------父类
黄种人类-----------------------------------子类
# 对象
张三---------------------------------------对象(实例)
# 属性
性别,年龄,身高----------------------------公有属性(所有人类都有的属性)
备胎---------------------------------------私有属性(备胎属性是张三的私有属性)
# 方法
走路,吃饭,说话,睡觉----------------------公有方法(人类都有的方法)
舔狗---------------------------------------私有方法(舔狗技能是张三的私有技能)

3.python面向对象编程简单实战

# 创建一个猫类:Cat
class Cat:# 定义一个猫叫的方法:calldef call(self):print('喵喵喵~~~')# 通过Cat类,实例化一个tom对象
tom = Cat()
# 猫叫:tom猫调用call方法
tom.call()

四、总结

1.通过以上对oop简单了解。

2.oop面向对象编程是一种思想,思维的转变很重要。

python基础四_01_面向对象相关推荐

  1. Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...

  2. Python基础入门_5面向对象基础

    Python 基础入门前四篇: Python 基础入门–简介和环境配置 Python基础入门_2基础语法和变量类型 Python基础入门_3条件语句和迭代循环 Python基础入门_4函数 第五篇主要 ...

  3. python基础程序设计与面向对象程序设计_python基础——面向对象的程序设计

    python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  4. Python基础day08【面向对象(类、对象、属性)、魔方方法(init、str、del、repr)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]   目录 0.复习 1.类外部添加和获取对象属性 2.类内部操作属性 3.魔法方法 3.1.__i ...

  5. python基础之数据类型-面向对象

    人生苦短,Python當歌! 此篇博客是本人学习python过程中,总结的基础知识点,希望可以帮到有需要的朋友,如有不足或错误之处,希望评论指出,感谢大家!! 第一章 计算机基础 1.1 硬件 ​ 计 ...

  6. Python全栈开发-Python基础教程-07 面向对象初级

    面向对象初级 一. 面向对象 面向对象编程(Object-oriented Programming,简称 OOP),是一种封装代码的方法.其实,在前面章节的学习中,我们已经接触了封装,比如说,将乱七八 ...

  7. Python基础学习,面向对象的基本概念

    Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程. 面向对象的最主要目的是提高程序的重复使用性.我们这么 ...

  8. Python基础学习(13)—面向对象2(特殊方法,分装及装饰器)

    面向对象(2) 1.1 特殊方法(魔术方法) 1 特殊方法例如__init__的都是以__开头__结尾的方法, 特殊方法会在特定的时候自动调用,init会在对象创建以后立即执行并且init会对新创建的 ...

  9. Python基础:一起来面向对象 (二) 之搜索引擎

    实例 搜索引擎 一个搜索引擎由搜索器.索引器.检索器和用户接口四个部分组成 搜索器就是爬虫(scrawler),爬出的内容送给索引器生成索引(Index)存储在内部数据库.用户通过用户接口发出询问(q ...

最新文章

  1. 比较全的log4j示例
  2. drupal 迁移_关于如何迁移到Drupal的4个技巧
  3. 爱了!华为nova 5细节曝光:外观配置堪比Mate 20 Pro
  4. 【报告分享】2021H1电商发展分析报告.pdf(附下载链接)
  5. 成功就是成为最好的你自己
  6. No.3小白的HTML+CSS心得篇
  7. 利用Jenkins+Phantomas进行前端性能自动化测试
  8. invalid operands of types‘const char [7]‘and ‘char [32]‘ to binary
  9. OPENCV运动追踪研究和PYTHON及JAVA实现
  10. 消防信号总线原理_消防总线隔离模块作用及工作原理?
  11. Android MTU 值修改
  12. shell命令以及运行原理和Linux权限
  13. 仙武:开局神级召唤!(一)
  14. xy苹果助手未受信任_苹果ios企业签名后App无法安装?如何解决?
  15. 修改linux系统的时间EDT和EST为CST
  16. 【Block-Level Verification】 芯片开发通识_验证目标_ 验证语言_ 验证职业前景 _挑战和瓶颈_验证周期_功能描述文档_验证计划_回归测试_硅后测试_逃逸分析...
  17. JS实现答题上一题下一题
  18. 企鹅公司为企业与单位推出的一款基于其业务交流平台,该款企业微信mac版可以很轻松的进行企业级沟通
  19. 使用C++ 编写嵌入式应用程序
  20. 我,是一个培训班出来的程序员

热门文章

  1. Bootstrap 框架 思维导图
  2. (一)GNSS定位中的电离层延迟估计
  3. LSM优化系列(五) -- 【SIGMOD‘19】X-engine 在电商场景下针对大规模事务处理的优化-- 强者恒强啊
  4. 温度采集模块的分类及应用
  5. 几种设计模式的对比分析
  6. 感应(异步)电机无速度传感器技术—电压模型法
  7. Oracle 10g New Features - AWR - Basical Conception
  8. NEUQ-acm 预备队训练Week8——动态规划2
  9. 综合布线系统设计与实现
  10. 淘淘商城——Redis持久化方案