1. 程式人生 > >Python 面向物件和麵向過程對比

Python 面向物件和麵向過程對比

# 大象裝冰箱
# 指令碼, 此時程式碼是最簡單的.  不需要構思整個程式的概況
print("開門")
print("裝大象")
print("關門")

# 函數語言程式設計. 比指令碼麻煩. 對功能有了概況.

def kai():
    print('開門')
def zhuang():
    print("裝大象")
def guan():
    print('關門')

kai()
zhuang()
guan()

# 面向物件程式設計, 對整個系統進行分析. 分析出需要哪些物件. 然後給物件進行歸類.
# 先寫類. 然後使用類建立物件. 最後用物件去執行相關的操作
class Elephant:
    def __init__(self):
        print("建立了一個大象")

    def kai(self):
        print("開門")

    def zuan(self):
        print("大象進冰箱")

    def guan(self):
        print("大象把門帶上")
#
dx = Elephant()
dx.kai()
dx.zuan()
dx.guan()

# 第一回合
# 指令碼勝
# 函式側重的是功能
# 面向物件側重的是 歸類



# PK2
# # 小豬佩奇. 使用嘴巴嘟嘟技能攻擊 超人
# # 小豬佩奇. 使用嘴巴嘟嘟技能攻擊 蝙蝠俠
# # 小豬佩奇. 使用嘴巴嘟嘟技能攻擊 蜘蛛俠
#
# # 面向過程: 程式碼非常的冗餘. 尤其是引數
def fight_superman(name, jineng):
    print("%s使用%s攻擊超人" % (name, jineng))

def fight_batman(name, jineng):
    print("%s使用%s攻擊蝙蝠俠" % (name, jineng))

def fight_spiderman(name, jineng):
    print("%s使用%s攻擊蜘蛛俠" % (name, jineng))
#
#
fight_superman('小豬佩奇', "嘴巴嘟嘟")
fight_batman('小豬佩奇', "嘴巴嘟嘟")
fight_spiderman('小豬佩奇', "嘴巴嘟嘟")
#
#
class Pig:
    def __init__(self, name, jineng):
        self.name = name
        self.jineng = jineng

    def fight_superman(self):
        print("%s使用%s攻擊超人" % (self.name, self.jineng))

    def fight_batman(self):
        print("%s使用%s攻擊蝙蝠俠" % (self.name, self.jineng))

    def fight_spiderman(self):
        print("%s使用%s攻擊蜘蛛俠" % (self.name, self.jineng))
#
#
pg = Pig("小豬佩奇", "嘴巴嘟嘟")
# # 不需要向原來一樣傳遞一樣的引數了
# # 面向物件的程式: 結果相對清晰. 缺點: 程式碼量比原來大, 上手太難
pg.fight_batman()
pg.fight_spiderman()
pg.fight_superman()


# 如果寫一個定時任務, 半夜12點. 給老闆傳送財務報表(一張圖)
def send_email(address, name, title, content):
    print("傳送郵件")

def send_wechat(wechat_num, name, title, content):
    print("傳送微信")

def send_chat(wechat_num, name, title, content):
    print("傳送簡訊")

def send_dd(wechat_num, name, title, content):
    print("傳送釘釘")

def send_oa(wechat_num, name, title, content):
    print("傳送OA")


class Messager:
    def __init__(self, name, title, content):
        self.name = name
        self.title = title
        self.content = content

    def send_email(self, address):
        print("傳送郵件")

    def send_wechat(self, wechat_num):
        print("傳送微信")

    def send_chat(self, phone_num):
        print("傳送簡訊")

    def send_dd(self, dd_num):
        print("傳送釘釘")

    def send_oa(self, oa_num):
        print("傳送OA")


# 用面向物件就比面向過程稍微好一些.
#   可維護性比原來好

# python同時支援面向物件和麵向過程:
# 面向過程: 應用程式相對比較小. 不需要大規模的設計
# 面向物件: 程式非常大. 專案管理 維護成本很高. 此時更適合用面向物件(結構)

# java : 純面向物件  => 可以把一個微型專案. 做成巨型專案