Python面向對象編程——什麼是面向對象的程序設計

Python面向對象編程——什麼是面向對象的程序設計

1、面向過程的程序設計

一、概念python

核心是「過程」二字,「過程」指的是解決問題的步驟,即先幹什麼再幹什麼......基於面向過程設計程序就比如在設計一條流水線,是一種機械式的思惟方式。若程序一開始是要着手解決一個大的問題,面向過程的基本設計思路就是把這個大的問題分解成不少個小問題或子過程,這些子過程在執行的過程當中繼續分解,直到小問題足夠簡單到能夠在一小步驟範圍內解決。linux

二、優勢git

複雜的問題流程化,進而簡單化(一個複雜的問題,分紅一個個小的步驟去實現,實現小的步驟將會很是簡單)程序員

舉個典型的面向過程的例子, 寫一個數據遠程備份程序, 分三步,本地數據打包,上傳至雲服務器,測試備份文件可用性。shell

import os

def data_backup(folder):
    print("找到備份目錄: %s" %folder)
    print('正在備份......')
    zip_file='/tmp/backup20181103.zip'
    print('備份成功,備份文件爲: %s' %zip_file)
    return zip_file

def cloud_upload(file):
    print("\nconnecting cloud storage center...")
    print("cloud storage connected.")
    print("upload file...%s...to cloud..." %file)
    link='http://www.xxx.com/bak/%s' %os.path.basename(file)
    print('close connection.....')
    return link

def data_backup_test(link):
    print("\n下載文件: %s , 驗證文件是否無損" %link)

def main():
    #步驟一:本地數據打包
    zip_file = data_backup("c:\\users\\alex\歐美100G高清無碼")

    #步驟二:上傳至雲服務器
    link=cloud_upload(zip_file)

    #步驟三:測試備份文件的可用性
    data_backup_test(link)

if __name__ == '__main__':
    main()

三、缺點編程

一套流水線或者流程就是用來解決一個問題,好比生產汽水的流水線沒法生產汽車,即使是能,也得是大改,改一個組件,與其相關的組件都須要修改,牽一髮而動全身,擴展性極差。服務器

好比咱們修改了步驟二的函數cloud_upload的邏輯,那麼依賴於步驟二結果才能正常執行的步驟三的函數data_backup_test相關的邏輯也須要修改,這就形成了連鎖反應,而這一弊端會隨着程序的增大而變得愈加的糟糕,咱們程序的維護難度將會愈來愈大。函數

import os

def data_backup(folder):
    print("找到備份目錄: %s" %folder)
    print('正在備份......')
    zip_file='/tmp/backup20181103.zip'
    print('備份成功,備份文件爲: %s' %zip_file)
    return zip_file

def cloud_upload(file): #加上異常處理,在出現異常的狀況下,沒有link返回
    try:
        print("\nconnecting cloud storage center...")
        print("cloud storage connected.")
        print("upload file...%s...to cloud..." % file)
        link = 'http://www.xxx.com/bak/%s' % os.path.basename(file)
        return link
    except Exception:
        print('upload error')
    finally:
        print('close connection.....')

def data_backup_test(link): #加上對參數link的判斷
    if link:
        print("\n下載文件: %s , 驗證文件是否無損" %link)
    else:
        print('\n連接不存在')
def main():
    #步驟一:本地數據打包
    zip_file = data_backup("c:\\users\\alex\歐美100G高清無碼")

    #步驟二:上傳至雲服務器
    link=cloud_upload(zip_file)

    #步驟三:測試備份文件的可用性
    data_backup_test(link)

if __name__ == '__main__':
    main()

四、應用場景測試

面向過程的程序設計思想通常用於那些功能一旦實現以後就不多須要改變的場景, 若是你只是寫一些簡單的腳本,去作一些一次性任務,用面向過程的方式是極好的,著名的例子有Linux內核,git,以及Apache HTTP Server等。但若是你要處理的任務是複雜的,且須要不斷迭代和維護 的, 那仍是用面向對象最方便了。設計

2、面向對象的程序設計

一、概念

核心是「對象」二字,要理解對象爲什麼物,必須把本身當成上帝,在上帝眼裏,世間存在的萬物皆爲對象,不存在的也能夠創造出來。程序員基於面向對象設計程序就比如如來設計西遊記,如來要解決的問題是把經書傳給東土大唐,如來並無考慮問題的解決流程,而是設計出了負責取經的師傅四人:唐僧,沙和尚,豬八戒,孫悟空,負責騷擾的一羣妖魔鬼怪,以及負責保駕護航的一衆神仙,這些全都是對象,而後取經開始,就是師徒四人與妖魔鬼怪神仙交互着直到完成取經任務。因此說基於面向對象設計程序就比如在創造一個世界,世界是由一個個對象組成,而你就是這個世界的上帝。

咱們從西遊記中的任何一我的物對象都不難總結出:對象是特徵與技能的結合體。好比孫悟空的特徵是:毛臉雷公嘴,技能是:七十二變、火眼金睛等。

與面向過程機械式的思惟方式造成鮮明對比,面向對象更加註重對現實世界而非流程的模擬,是一種「上帝式」的思惟方式。

二、優勢

解決了面向過程可擴展性低的問題,這一點咱們將在下小節中爲你們驗證,須要強調的是,對於一個軟件質量來講,面向對象的程序設計並不表明所有,面向對象的程序設計只是用來解決擴展性問題。

三、缺點

編程的複雜度遠高於面向過程,不瞭解面向對象而當即上手並基於它設計程序,極容易出現過分設計的問題,並且在一些擴展性要求低的場景使用面向對象會徒增編程難度,好比管理linux系統的shell腳本程序就不適合用面向對象去設計,面向過程反而更加適合。

四、應用場景

固然是應用於需求常常變化的軟件中,通常需求的變化都集中在用戶層,互聯網應用,企業內部軟件,遊戲等都是面向對象的程序設計大顯身手的好地方。

相關文章
相關標籤/搜索