程式導向程式設計哲學

我學習我快樂-Python發表於2020-12-14

一 、程式設計正規化

​ 很多初學者在瞭解了一門程式語言的基本語法和使用之後,面對一個’開發需求‘時仍然會覺得無從下手、沒有思路/套路,本節主題“程式設計正規化”正是為了解決該問題,那到底什麼是程式設計正規化呢?
程式設計正規化指的就是程式設計的套路,打個比方,如果把程式設計的過程比喻為練習武功,那程式設計正規化指的就是武林中的各種流派,而在程式設計的世界裡常見的流派有:程式導向、函式式、物件導向等,本節我們主要介紹前兩者。
​ 在正式介紹前,我們需要強調:“功夫的流派沒有高低之分,只有習武的人才有高低之分“,在程式設計世界裡更是這樣,各種程式設計正規化在不同的場景下都各有優劣,誰好誰壞不能一概而論,下面就讓我們來一一解讀它們。

二 、程式導向

​ ”程式導向“核心是“過程”二字,“過程”指的是解決問題的步驟,即先幹什麼再幹麼…,基於程式導向開發程式就好比在設計一條流水線,是一種機械式的思維方式,這正好契合計算機的執行原理:任何程式的執行最終都需要轉換成cpu的指令流水按過程排程執行,即無論採用什麼語言、無論依據何種程式設計正規化設計出的程式,最終的執行都是過程式的。
​ 詳細的,若程式一開始是要著手解決一個大的問題,按照過程式的思路就是把這個大的問題分解成很多個小問題或子過程去實現,然後依次呼叫即可,這極大地降低了程式的複雜度。舉例如下:
​ 寫一個資料遠端備份程式,分三步:本地資料打包,上傳至雲伺服器,檢測備份檔案可用性

import os,time

# 一:基於本章所學,我們可以用函式去實現這一個個的步驟
# 1、本地資料打包
def data_backup(folder):
    print("找到備份目錄: %s" %folder)
    print('正在備份...')
    zip_file='/tmp/backup_%s.zip' %time.strftime('%Y%m%d')
    print('備份成功,備份檔案為: %s' %zip_file)
    return zip_file

#2、上傳至雲伺服器
def cloud_upload(file):
    print("\nconnecting cloud storage center...")
    print("cloud storage connected")
    print("upload [%s] to cloud..." %file)
    link='https://www.xxx.com/bak/%s' %os.path.basename(file)
    print('close connection')
    return link

#3、檢測備份檔案可用性
def data_backup_check(link):
    print("\n下載檔案: %s , 驗證檔案是否無損..." %link)


#二:依次呼叫
# 步驟一:本地資料打包
zip_file = data_backup(r"/Users/egon/歐美100G高清無碼")

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

# 步驟三:檢測備份檔案的可用性
data_backup_check(link)

程式導向總結:

  • 優點:將複雜的問題流程化,進而簡單化
  • 缺點:程式的可擴充套件性極差,因為一套流水線或者流程就是用來解決一個問題,就好比生產汽水的流水線無法生產汽車一樣,即便是能,也得是大改,而且改一個元件,與其相關的元件可能都需要修改,比如我們修改了cloud_upload的邏輯,那麼依賴其結果才能正常執行的data_backup_check也需要修改,這就造成了連鎖反應,而且這一問題會隨著程式規模的增大而變得越發的糟糕。
def cloud_upload(file): # 加上異常處理,在出現異常的情況下,沒有link返回
    try:
        print("\nconnecting cloud storage center...")
        print("cloud storage connected")
        print("upload [%s] to cloud..." %file)
        link='https://www.xxx.com/bak/%s' %os.path.basename(file)
        print('close connection')
        return link
    except Exception:
        print('upload error')
    finally:
        print('close connection.....')

def data_backup_check(link): # 加上對引數link的判斷
    if link:
        print("\n下載檔案: %s , 驗證檔案是否無損..." %link)
    else:
        print('\n連結不存在')

三、應用場景

程式導向的程式設計一般用於那些功能一旦實現之後就很少需要改變的場景, 如果你只是寫一些簡單的指令碼,去做一些一次性任務,用程式導向去實現是極好的,但如果你要處理的任務是複雜的,且需要不斷迭代和維護, 那還是用物件導向最為方便。

四、總結

# 程式導向的程式設計思想:
#      核心是"過程"二字,過程即流程,指的是做事的步驟:先什麼、再什麼、後幹什麼
#      基於該思想編寫程式就好比在設計一條流水線

# 優點:複雜的問題流程化、進而簡單化
# 缺點:擴充套件性非常差

# 程式導向的程式設計思想應用場景解析:
# 1、不是所有的軟體都需要頻繁更迭:比如編寫指令碼
# 2、即便是一個軟體需要頻繁更迭,也不併不代表這個軟體所有的組成部分都需要一起更迭

相關文章