面向物件與面向過程對比
阿新 • • 發佈:2018-12-17
大象裝冰箱 指令碼, 此時程式碼是最簡單的. 不需要構思整個程式的概況 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 : 純面向物件 => 可以把一個微型專案. 做成巨型專案