从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

  • A+
所属分类:python基础入门

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

二:什么是面向过程编程?

面向过程编程依赖 - procedures,一个procedure包含一组要被进行计算的步骤, 面向过程又被称为top-down languages, 就是程序从上到下一步步执行,一步步从上到下,从头到尾的解决问题 。基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问题或子过程,这些子过程再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。

举个典型的面向过程的例子, 写一个数据远程备份程序, 分三步,本地数据打包,上传至云服务器,测试备份文件可用性。

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

这个变量,那这个子过程你也要修改,假如又有一个其它子程序依赖这个子过程 , 那就会发生一连串的影响,随着程序越来越大, 这种编程方式的维护难度会越来越高。

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

所以我们一般认为, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程的方式是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护 的, 那还是用面向对象最方便了。

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

一个字典表示一个角色实体,但是如果有多条狗和多个人一起打呢?那就得写多个字典

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

这样是有问题的,因为如果你字典里的值不小心定义错了,把attack写成了了atteck的话,那整个程序就有问题了。so 你很快想出了改进方案,把字典放进函数

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

好,现在角色定义好了,还差每个角色的功能,人打狗,狗咬人的功能要定义出来

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

但是要设定许多许多的功能,我们是不是要一点点的加?那么久特别麻烦,改这个改那个的,为了解决上面的问题,我们使用面向对象。

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

面向过程 == 个人视角

我要去做大保健,我只需考虑,我有没有钱,去哪家店,怎么去,做什么价位的就可以,你的每一步都要通过程序定义出来,写死了,在这个程序里,你只被设定了去做大保健的功能,你说中途我想去个ktv,那可能会导致整个程序的逻辑都得更改。 用面向过程的方式写代码,那你care的就是整个事情的执行过程

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

五:面向对象和面向过程的优缺点对比

面向过程

优点:

  • 复杂的问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单)

  • 举个典型的面向过程的例子, 写一个数据远程备份程序, 分三步,本地数据打包,上传至云服务器,测试备份文件可用性。

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

面向对象

优点:

解决了面向过程可扩展性低的问题,需要强调的是,对于一个软件质量来说,面向对象的程序设计并不代表全部,面向对象的程序设计只是用来解决扩展性问题。

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。

对不同类的对象发出相同的消息将会有不同的行为。比如,你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,而不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”, 因为“员工”是一个抽象的事物, 只要是员工就可以开始工作,他知道这一点就行了。至于每个员工,当然会各司其职,做各自的工作。

多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。这里引用和调用方法的代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

注意:封装绝不是等于“把不想让别人看到、以后可能修改的东西用private隐藏起来”

真正的封装是,经过深入的思考,做出良好的抽象,给出“完整且最小”的接口,并使得内部细节可以对外透明

(注意:对外透明的意思是 外部调用者可以顺利的得到自己想要的任何功能, 完全意识不到内部细节的存在)

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

9.5 泛化/特化

基于继承

泛化表示所有子类与其父类及祖先类有一样的特点。

特化描述所有子类的自定义,也就是,什么属性让它与其祖先类不同。

9.6 多态与多态性

多态指的是同一种事物的多种状态:水这种事物有多种不同的状态:冰,水蒸气

多态性的概念指出了对象如何通过他们共同的属性和动作来操作及访问,而不需考虑他们具体的类。

冰,水蒸气,都继承于水,它们都有一个同名的方法就是变成云,但是冰.变云(),与水蒸气.变云()是截然不同的过程,虽然调用的方法都一样

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

十:小白容易犯的错误

1.面向对象的程序设计看起来高大上,所以我在编程时就应该保证通篇class,这样写出的程序一定是好的程序(面向对象只适合那些可扩展性要求比较高的场景)

2.很多人喜欢说面向对象三大特性(这是从哪传出来的,封装,多态,继承?漏洞太多太多,好吧暂且称为三大特性),那么我在基于面向对象编程时,我一定要让我定义的类中完整的包含这三种特性,这样写肯定是好的程序

好家伙,我说降龙十八掌有十八掌,那么你每次跟人干仗都要从第一掌打到第18掌这才显得你会了是么:面对敌人,你打到第三掌对方就已经倒下了,你说,不行,你给老子起来,老子还没有show完...

3.类有类属性,实例有实例属性,所以我们在定义class时一定要定义出那么几个类属性,想不到怎么办,那就使劲的想,定义的越多越牛逼

这就犯了一个严重的错误,程序越早面向对象,死的越早,为啥面向对象,因为我们要将数据与功能结合到一起,程序整体的结构都没有出来,或者说需要考虑的问题你都没有搞清楚个八九不离十,你就开始面向对象了,这就导致了,你在那里干想,自以为想通了,定义了一堆属性,结果后来又都用不到,或者想不通到底应该定义啥,那就一直想吧,想着想着就疯了。

你见过哪家公司要开发一个软件,上来就开始写,肯定是频繁的开会讨论计划。

4.既然这么麻烦,那么我彻底解脱了,我们不要用面向对象编程了,你啊,你有大才,你能成事啊,傻叉。

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

3 面向对象编程(object oriented programming,OOP)

根据面向对象设计的结果,选择一种计算机语言把它写成程序,可以是python

4 面向对象测试(object oriented test,OOT)

在写好程序后交给用户使用前,必须对程序进行严格的测试,测试的目的是发现程序中的错误并修正它。

面向对的测试是用面向对象的方法进行测试,以类作为测试的基本单元。

5 面向对象维护(object oriendted soft maintenance,OOSM)

正如对任何产品都需要进行售后服务和维护一样,软件在使用时也会出现一些问题,或者软件商想改进软件的性能,这就需要修改程序。

由于使用了面向对象的方法开发程序,使用程序的维护比较容易。

因为对象的封装性,修改一个对象对其他的对象影响很小,利用面向对象的方法维护程序,大大提高了软件维护的效率,可扩展性高。

在面向对象方法中,最早发展的肯定是面向对象编程(OOP),那时OOA和OOD都还没有发展起来,因此程序设计者为了写出面向对象的程序,还必须深入到分析和设计领域,尤其是设计领域,那时的OOP实际上包含了现在的OOD和OOP两个阶段,这对程序设计者要求比较高,许多人感到很难掌握。

现在设计一个大的软件,是严格按照面向对象软件工程的5个阶段进行的,这个5个阶段的工作不是由一个人从头到尾完成的,而是由不同的人分别完成,这样OOP阶段的任务就比较简单了。程序编写者只需要根据OOd提出的思路,用面向对象语言编写出程序既可。

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

是否通俗易懂呢?谢谢阅读!

从零到大神!面向对象最完整的教程!哪怕你完全零基础都能看懂!

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: