从零开始的Python计划#7.1---面向对象程序设计(OOP)

这是一个面向对象编程的快速概述还有程序设计的比较,有一点点难理解,但还是希望能够慢慢看完。

程序编程

程序编程:用执行特定任务的函数编写程序
—程序通常对与程序分离的数据项进行操作(我们用数据把它传递给程序来修改数据,然后会有一个输出,通常这些东西都是分开的)
—数据项通常从一个程序传递到另一个程序(我们取出数据,通过一个函数将结果传递给另一个函数,数据通过多个函数进行修改以获取我们想要的结果)
—重点:创建对程序数据进行操作的过程

面向对象程序设计

面向对象编程的重点是创建对象
对象:
是我们可以接触,感受和操作的有形的东西
对象/物体是有形事物的模型,是有形对象的模型。包括数据(代表有形事物的不同特征),并关联行为或程序,以回到我们以前的编码方式来操纵有形事物的数据

仅仅通过文字很难理解,但是把编程中的一个对象想象成一个包含数据,值,程序(函数或算法)的概念或模型。当代码的方式越复杂,不去将它们分开,而是统一数据和程序。例如:
Python中的数据类型有浮点,字符串,整数类型。当我们进行程序化编程时,比如:Value = 3.2 * 5
(两种不同类型相乘,我们也可以很清晰知道它们的输出),但是当我们开始讨论更复杂的概念时,比如:变量保存表示客户、学生或银行帐户所需的所有数据。我们很难想象一个变量如何保存所有要表示的数据。我们可以使用变量,但事情会变得很复杂(需要保存一系列可能有不同类型的数据)。

在我们开始讨论如何在Python上创建对象或类之前,我们可以先看看过程式编程和面对对象编程之间的区别:

在程序编程中:在这里插入图片描述
我们有一些函数定义,两个从用户键盘获取输入的量(宽,高)。我们可以调用我们定义的函数来计算矩形的面积,把宽高传递到函数内部,然后将函数的结果或返回值存储在变量中。
--------------------------------------------------------------
然而在面向对象编程中编写相同的代码时:
在这里插入图片描述
当对对象调用过程时,不需要传递数据。
图中定义了一个主函数,也有同样的宽高(从用户那里收集数据)。有一个变量rectangle(是一个有width和height的矩形),这是我们在创造一个矩形对象,当我想要面积时,用area = rectangle.get_area(),意思是我们调用对象rectangle(我们知道在对象rectangle中,有一个程序叫做get_area,意思就是到Python中获取对象rectangle并使用get_area程序返回矩形的面积)
可以看到我们避免使用了一个函数并把刚才声明的变量放进去,只是用变量实例化一个对象,然后执行所有过程,应用了计算而不必再次传递数据。

所以在面对对象编程中,没有限制
在OOP中,一切都是一个对象
对象是任何你也可以给一个名词的东西。(现实生活中,对象可以是电视机、台灯和一杯水等…)
对象的设计目的很明确,但它们之间的交互方式并不受限制。(例如:一个用于提供足够的光来读书的灯,用来喝水的杯子,把杯子的水倒在书上…)物品/对象在现实生活中有着真正的效用,但是使用物品的方式完全取决于我。
世界上物体之间的相互作用是由我们的想象力而不是物体的局限性决定的。(所以使用对象,更多的是被想象限制,而不是代码限制,不是说代码会自行编码,但是在代码片段之间进行更复杂的交互会容易得多。
-----------------------------------------------------------------------
1·面向对象编程的中心是创建对象,而不是过程。
2·对象是数据和操作该数据的过程的融合。
3·对象中的数据称为属性。
4·对象中的过程称为方法。(与对象沟通,我们需要使用编程接口,就是方法)

可视化对象:在这里插入图片描述

面向对象的编程通过封装将数据和行为结合在一起。(封装就是将一个对象放入一个对象,封装一个对象并签署另一个对象,用对象的力量把它嵌入和封装到另一个对象中,这种力量是指数级的,它包含更多对象,就会扩大对象的力量)
数据隐藏是对象从程序中的其他对象隐藏数据的能力。(一个对象可以公开数据,但是也可以有私人数据,所以可以让数据只在内部使用来计算它自己来运行程序,然后它只能公开一定数量的数据,当使用对象时,它比随机对象更加的安全,更利于实践,就好像脚本里的间谍。)
只有对象方法才能直接操作其属性。(我们可以进入对象内部并操作唯一抛出的对象方法中的内容,仅抛出对象本身为用户提供的内容,以便对其进行操作。这样我们的数据会更安全,难以被删除,破坏和重写代码片段,因为对象只通过它的方法和外面沟通。)
允许其他对象通过对象的方法操纵对象的属性。(其它对象可以彼此交互,但只能通过对象定义的方法)
这种间接访问称为编程接口。(我们让某些特定的东西可以从代码的其他部分访问,而不是让所有东西对所有人都可用。其他部分隐藏在编程接口后面,只有对象本身才可以使用和知道。)
-----------------------------------------------------------------------
我们可以划分代码并设想一个更复杂的结构,我们可以创建即可用于用户界面又可用于其他对象的东西,还有一些可以藏在幕后的东西。
数据属性:定义对象的状态
–—示例:创建一个clock对象并具有秒、分和小时数据,秒,分钟,小时就是clock对象的属性。(它们定义了物体本身的状态,当我们取clock时,并且给予几秒几分几小时,时钟的指针会相应地调整,通过给出时钟属性,我们能改变时钟的声明。)
公共方法:允许外部代码操作对象
–—示例:继续举时钟的例子,公共方法是设置时间和闹钟时间,我想让用户能够改变时钟的时间并且想给用户设置闹钟的能力。这些公共方法是外部的,以及可能对向其他对象的。)
私有方法:用于对象的内部工作
–—举例:用户和其他对象可以交互并改变时钟的行为,但有些东西我不需要或者不想暴露给其他人或其他方法和对象。

#它确保了时钟正确的工作:
def clock_inner_operation(): 
		for hours in range(24):
			for minutes in range(60):
				for seconds in range(60):
				#这些东西对我们的时钟对象的工作至关重要,但对其他任何人来说都不是必要的,所以我们不需要把它们暴露在其他对象上,不需要向用户公开它们
					print(hours, ':', minutes, ':', seconds)

发布了11 篇原创文章 · 获赞 116 · 访问量 7171

猜你喜欢

转载自blog.csdn.net/Mr_zoezhou/article/details/105569889
今日推荐