從零開始的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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章