編程語言不斷湧現,不同的方法也不斷湧現。面向對象的編程就是這樣一種方法,在過去的幾年中變得非常流行。
本章講述了Python編程語言的特性,使其成為一種面向對象的編程語言。
編程語言規劃分類
Python可以在面向對象編程方法論下進行表徵。 下圖顯示了各種編程語言的特性。 觀察使其面向對象的Python特性。
- 編程範式
- 過程程式,主要有 - C, C++, C#, Objective-C, java, Go
- 腳本,主要有 - CoffeeScript, JavaScript, Python, Perl, Php, Ruby
- 函數式,主要有 - Clojure, Eralang, Haskell, Scala
- 編譯類
- 靜態,主要有 - C, C++, C#, Objective-C, java, Go, Haskell, Scala
- 動態,主要有 - CoffeeScript, JavaScript, Python, Perl, Php, Ruby, Clojure, - 類型類
- 強類型,主要有 - C#, java, Go, Python, Ruby, Clojure, Erlang, Haskell, Scala
- 弱類型,主要有 - C, C++, C#, Objective-C, CoffeeScript, JavaScript, Perl, Php
- 記憶體類
- 託管,其他
- 非託管,主要有 - C, C++, C#, Objective-C
什麼是面向對象編程?
面向對象意味著面向對象。 換句話說,它意味著功能上針對建模對象。 這是用於通過數據和行為描述一系列交互對象來為複雜系統建模的眾多技術之一。
Python是面向對象編程(OOP),是一種編程方式,專注於使用對象和類來設計和構建應用程式。面向對象編程(OOP)的主要支柱是繼承,多態,抽象和封裝。
面向對象分析(OOA)是檢查問題,系統或任務並識別它們之間的對象和相互作用的過程。
為什麼選擇面向對象編程?
Python是用面向對象的方法設計的。 OOP提供以下優點 -
- 提供清晰的程式結構,可以輕鬆映射真實世界的問題及其解決方案。
- 便於維護和修改現有的代碼。
- 由於每個對象都是獨立存在的,因此可以輕鬆添加新功能而不會打擾現有對象,從而增強了程式的模組化。
- 為代碼庫提供了一個很好的框架,供程式員輕鬆修改和修改提供的組件。
- 賦予代碼可重用性
程式與面向對象編程
基於程式的編程源於基於功能/過程/例程概念的結構編程。 在面向程式的編程中訪問和更改數據很容易。 另一方面,面向對象編程(Object Oriented Programming,OOP)允許將問題分解成多個稱為對象的單元,然後在這些對象周圍構建數據和函數。 它比過程或功能更強調數據。 在OOP中,數據也是隱藏的,不能被外部程式訪問。
下圖中的表格顯示了POP和OOP方法的主要區別。
程式化編程(POP)與程式化編程(POP)的區別。 面向對象編程(OOP)。
序號/項 | 程式化編程 | 面向對象編程 |
---|---|---|
基於 | 整個焦點集中在數據和函數上 | 基於真實世界的場景。整個程式劃分為稱為對象的小部分 |
可重用性 | 有限的代碼重用 | 代碼重用性高 |
途徑 | 自上而下的方法 | 面向對象的設計 |
訪問說明符 | 沒有 | public , private 以及 protected |
數據移動 | 數據可以從功能中自由移動到系統中的功能 | 在Oops中,數據可以通過成員函數進行移動和相互通信 |
數據訪問 | 大多數功能使用全局數據進行共用,可以從系統中的功能自由訪問 | 數據不能在方法之間自由移動,它可以保存在公共或私人的位置,這樣就可以控制數據的訪問 |
數據隱藏 | 在流行中,隱藏數據的方式非常特殊,所以安全性稍差 | 它提供數據隱藏,更安全 |
重載 | 不可能 | 函數和運算符重載 |
示例語言 | C, VB, Fortran, Pascal | C++, Python, Java, C# |
抽象化 | 在過程級別使用抽象 | 在類和對象級別使用抽象 |
面向對象編程原理
面向對象編程(Object Oriented Programming,OOP)是基於對象而不是動作的概念,以及數據而不是邏輯。 想要使編程語言成為面向對象,它應該有一種機制來支持類和對象的使用,以及基本的面向對象原則和概念的實現和使用,即繼承,抽象,封裝和多態。
下麵簡單瞭解面向對象編程的各個支柱 -
封裝
該屬性隱藏了不必要的細節,並使管理程式結構變得更加容易。 每個對象的實現和狀態都隱藏在明確定義的邊界之後,並為它們提供了一個乾淨而簡單的介面。 實現這一目標的一種方法是將數據保密。
繼承
繼承也稱為泛化,它允許我們捕獲類和對象之間的層次關係。 例如,“水果”是“橙色”的泛化。 從代碼重用的角度來看,繼承非常有用。
抽象化
這個屬性允許我們隱藏細節,只顯示概念或對象的基本特徵。 例如,駕駛滑板車的人知道在按喇叭時發出聲音,但不知道如何在按下喇叭時實際產生應該是什麼樣的聲音。
多態性
多態性意味著許多形式。 也就是說,某件事或行為是以不同的形式或方式呈現的。 多態的一個很好的例子是類中的構造函數重載。
Python面向對象
Python編程的核心是對象和OOP,但是您不需要通過將代碼組織到類中來限制自己使用OOP。 OOP增加了Python的整個設計理念,並鼓勵一種乾淨而實用的編程方式。 面向對象還可以編寫更大更複雜的程式。
模組與類和對象
模組就像“字典”,在使用模組時,請注意以下幾點 -
- Python模組是封裝可重用代碼的包。
- 模組存儲在一個有
__init__.py
檔的檔夾中。 - 模組包含功能和類。
- 模組使用
import
關鍵字導入。
字典是一個鍵值對。 這意味著如果有一個關鍵的EmployeID
字典,如果想檢索它,那麼需要使用下麵的代碼行 -
employee = {"EmployeID": "Employee Unique Identity!"}
print (employee ['EmployeID'])
可通過使用以下過程來處理模組 -
- 模組是一個包含一些函數或變數的Python檔。
- 導入需要的檔。
- 現在,可以使用
.
(點)運算符訪問該模組中的函數或變數。
考慮有一個名為employee.py
的模組,其中包含一個名為employee
的函數。 該函數的代碼如下所示 -
# this goes in employee.py
def EmployeID():
print ("Employee Unique Identity!")
現在導入模組,然後訪問函數EmployeID
-
import employee
employee.EmployeID()
可以在其中插入名為Age
的變數,如下所示 -
def EmployeID():
print ("Employee Unique Identity!")
# just a variable
Age = "Employee age is **"
現在,按照以下方式訪問該變數 -
import employee
employee.EmployeID()
print(employee.Age)
現在,我們來比較一下字典 -
Employee['EmployeID'] # get EmployeID from employee
Employee.employeID() # get employeID from the module
Employee.Age # get access to variable
請注意,Python中有常見的模式 -
- 以一個
key = value
風格的容器 - 通過鍵的名稱獲取某些內容
將模組與字典進行比較時,兩者都是相似的,除了以下內容 -
- 在字典的情況下,鍵是一個字串,語法是
[key]
。 - 在模組的情況下,鍵是一個識別字,語法是
.key
。
類就像模組
模組是一個專門的字典,可以存儲Python代碼,所以你可以用.
操作符來獲得它。 類是一種對函數和數據進行分組並將其放置在容器中的方式,以便您可以使用.
操作符訪問它們。
如果要創建一個類似於員工模組的類,則可以使用以下代碼執行此操作 -
class employee(object):
def __init__(self):
self. Age = “Employee Age is ##”
def EmployeID(self):
print (“This is just employee unique identity”)
注 - 類比模組更受歡迎,因為它可以按原樣重用它們,且不會受到太多干擾。 使用模組時,整個程式只有一個。
對象就像小型的模組
一個類就像一個迷你版本的模組,可以用類似的方式導入類,就像使用類實例一樣。 請注意,當實例化一個類時,會得到一個對象。
您可以實例化一個對象,類似於像函數一樣調用一個類,如圖所示 -
this_obj = employee() # Instantiatethis_obj.EmployeID() # get EmployeId from the class
print(this_obj.Age) # get variable Age
可以通過以下三種方式中的任何一種來執行此操作 -
# dictionary style
Employee['EmployeID']
# module style
Employee.EmployeID()
Print(employee.Age)
# Class style
this_obj = employee()
this_obj.employeID()
Print(this_obj.Age)