面向对象基础知识(一)
面向对象
一
面向过程与面向对象
面向过程的核心是过程,过程是指解决问题的步骤。
即先干什么在干什么,每一步都是提前计划好的,只需要按照计划执行就可以了。
比如工厂的流水线生产,就是典型的面向过程,生产计划已经提前做好的,
只需要按照计划在流水线上生产出最终想要的产品即可。
这就意味着:流水线能够生产的产品非常单一,
如果我想用生产螺丝的流水线来制造汽车,那么我就需要把真个流水线改掉才可以。
这太费时间了,我们也通常不会这么做,而是去建一个生产汽车的流水线。
那么我们可以理解成:
面向过程的优点是:把复杂的问题,分解成简单的步骤,进而把问题的流程简单化
但是面向过程的缺点也很明显:这种面向过程的方式,可扩展性极差,几乎没什么大的可扩展性。
这样的编程方式,只适合于一旦完成就很少去做改变的场景下,比如Linux的内核。
面向对象的核心是对象二字。
要理解面向对象的意思,你要把自己想象成上帝,站在上帝的视角来看待事情。
那么以上帝视角来看,所有的事物不过是一个又一个的对象。
如果这个不好理解,那就举一个关于开公司的例子:
你要开一家公司,你肯定不会什么岗位都自己去做,
而是会去招聘具有相应专业技能的人员来做相应的岗位。
你在意的不是每一件事情该怎么去做,而是去选人来做相应的事情,你得到最终的结果。
就像是你下达了一个命令,要求什么项目以什么样的方式,在什么样的时间内完成,
你不需要知道具体的操作步骤,只需要得到项目最终完成的结果就可以了。
面向对象的优点是:解决了程序的可扩展性,想要修改,我只需要修改局部就可以了。
!!!!!!(非常重要!)
面向对象的缺点:面向对象是python编程的核心,如果你没有真正理解关于面向对象的实质,
那么在你写项目的时候,极易出现设计过度的问题,
比如你为一个项目设计了很多的功能,结果却用不上,这就是过度设计的问题。
想要让你的项目写的有质量,你需要真正理解面向对象究竟是怎么回事。
还有一点是关于预测最终结果的可能性。
在面向过程中,我们能够很好的预测最终的结果是什么样的,
但是在面向对象的过程中,我们能够预测准确的可能性微乎其微,
这里面有太多的不可控的因素,因为也就造就了结果的不确定性。
面向对象的程序一旦开始,决定程序走向的就是对象之间的不断交互,
即使是程序的设计者也不知道最终程序会发展成什么样子。
面向对象的应用场景是一些经常变化的地方,
比如需求经常变化的软件,一般都集中在用户层,互联网应用,
企业内部软件,游戏等都是面向对象大显身手的好地方
但是要注意的是,面向对象并不是解决了程序设计中的所有问题,
面向对象的程序设计只是解决了可扩展性的问题。
由上面的面向对象的解释,我们可以引出两个概念:类和对象。
简单来说,类就是具有共同特征的对象的合集。
或者说类是共有的属性,而对象是特有的属性。
对象是包含在类中的,比如人是包含在人类这个类中的。
不过有一点我们需要注意:
在现实生活中,是先有对象后有类的,比如先出现人,最后才将人的聚集体称为人类。
在现实生活中,对象是具体的存在,而类则仅仅是一个概念。
而在程序中,是先有类,后有对象的。
跟以前学习的函数一样,面向对象中的是先有类,后又对象的。
而且还是遵循先定义后调用的原则。
不过定义函数和定义类,又有一些不同的地方:
在你定义函数时,如果你没有调用函数,那么函数体内的代码是不会运行的。
在类中就不一样了,你只要定义了一个类,类中的代码就会运行。
调用函数,会执行函数会执行函数体的代码,返回的是函数的执行结果,
而对于类来说,调用类会产生对象,返回的是对象。
你只要定义了一个类,就会在内存中产生一个关于类的名称空间,
而在函数中,你只有调用了函数之后,才会产生与之对应的名称空间。
你可以通过函数与类的相同点和不同点对比着记。
如果觉得不好理解,那么你可以按照自己的方式进行定义,这样你就可以更好地理解整个程序是如何运行的。
"""
"""
关于对象还有一个关于西游记的例子,师徒四人每个人都是一个对象,
站在如来佛的角度,他们都是完成任务的对象,
如来佛关心的不是如何去完成,而是最终的结果。
对象有特征和技能的属性,而在面向对象中,特征对应数据属性,技能对应方法属性。
以函数作为类比,变量就相当于特征,函数就相当于方法。
对象是特征与技能的结合体,基于面向对象设计程序就好像是创造一个世界。
你就是这个世界的上帝,一切都是对象,由你来决定。
关于面向对象,最难的就是站在上帝的角度思考问题,看待对象的相関概念。
理解面向对象并不难,但是要写出一个好的面向对象的程序项目却不是那么容易的事情。
这需要一个时间的积累
"""
对象是特征与技能的结合体,而类则是一系列对象相似的特征和技能的结合体。
浙公网安备 33010602011771号