1. 程式人生 > >Day 29(06/29)面向對象

Day 29(06/29)面向對象

-1 無法 必須 實例化 博客 dem 功能 art lose

一 面向對象的程序設計的由來

見概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html

回到頂部

二 什麽是面向對象的程序設計及為什麽要有它

面向過程的程序設計的核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什麽時候處理什麽東西。

優點是:極大的降低了程序的復雜度

缺點是:一套流水線或者流程就是用來解決一個問題,生產汽水的流水線無法生產汽車,即便是能,也得是大改,改一個組件,牽一發而動全身。

應用場景:一旦完成基本很少改變的場景,著名的例子有Linux內核,git,以及Apache HTTP Server等。

面向對象的程序設計的核心是對象(上帝式思維),要理解對象為何物,必須把自己當成上帝,上帝眼裏世間存在的萬物皆為對象,不存在的也可以創造出來。面向對象的程序設計好比如來設計西遊記,如來要解決的問題是把經書傳給東土大唐,如來想了想解決這個問題需要四個人:唐僧,沙和尚,豬八戒,孫悟空,每個人都有各自的特征和技能(這就是對象的概念,特征和技能分別對應對象的數據屬性和方法屬性),然而這並不好玩,於是如來又安排了一群妖魔鬼怪,為了防止師徒四人在取經路上被搞死,又安排了一群神仙保駕護航,這些都是對象。然後取經開始,師徒四人與妖魔鬼怪神仙交互著直到最後取得真經。如來根本不會管師徒四人按照什麽流程去取。

面向對象的程序設計的

優點是:解決了程序的擴展性。對某一個對象單獨修改,會立刻反映到整個體系中,如對遊戲中一個人物參數的特征和技能修改都很容易。

缺點:可控性差,無法向面向過程的程序設計流水線式的可以很精準的預測問題的處理流程與結果,面向對象的程序一旦開始就由對象之間的交互解決問題,即便是上帝也無法預測最終結果。於是我們經常看到一個遊戲人某一參數的修改極有可能導致陰霸的技能出現,一刀砍死3個人,這個遊戲就失去平衡。

應用場景:需求經常變化的軟件,一般需求的變化都集中在用戶層,互聯網應用,企業內部軟件,遊戲等都是面向對象的程序設計大顯身手的好地方

面向對象的程序設計並不是全部。對於一個軟件質量來說,面向對象的程序設計只是用來解決擴展性。

技術分享

回到頂部

三 類和對象

回到頂部

3.1 什麽是對象,什麽是類

  提示:python的class術語與c++有一定區別,與 Modula-3更像。

  python中一切皆為對象,且python3統一了類與類型的概念,類型就是類,所以,不管你信不信,你已經使用了很長時間的類了

1 >>> dict #類型dict就是類dict
2 <class ‘dict‘>
3 >>> d=dict(name=‘egon‘) #實例化
4 >>> d.pop(‘name‘) #向d發一條消息,執行d的方法pop
5 ‘egon‘

  基於面向對象設計一個款遊戲:英雄聯盟,每個玩家選一個英雄,每個英雄都有自己的特征和和技能,特征即數據屬性,技能即方法屬性,特征與技能的結合體就一個對象。

  從一組對象中提取相似的部分就是類所有對象都具有的特征和技能的結合體

  在python中,用變量表示特征,用函數表示技能,因而類是變量與函數的結合體,對象是變量與方法(指向類的函數)的結合體

  

  補充幾個有意思的點:

  garen_hero.Q()稱為向garen_hero這個對象發送了一條消息,讓他去執行Q這個函數,完成一個功能,類似的有:

  garen_hero.W()

  garen_hero.E()

  garen_hero.R()

  一個英雄可以攻擊另外一個英雄,這就是對象之間的交互

  garen_hero.attack(Riven)

技術分享

回到頂部

3.2 類相關知識

3.2.1 初識類

在python中聲明函數與聲明類很相似

聲明函數

1 def functionName(args):
2      ‘函數文檔字符串‘
3       函數體 

聲明類

技術分享
 1 ‘‘‘
 2 class 類名:
 3     ‘類的文檔字符串‘
 4     類體
 5 ‘‘‘
 6 
 7 #我們創建一個類
 8 class Data:
 9     pass 
技術分享 技術分享 經典類與新式類

在本節開頭介紹得出結論,類是數據與函數的結合,二者稱為類的屬性

class Garen:        #定義英雄蓋倫的類,不同的玩家可以用它實例出自己英雄;
    camp=‘Demacia‘  #所有玩家的英雄(蓋倫)的陣營都是Demacia;
    def attack(self,enemy):   #普通攻擊技能,enemy是敵人;
        enemy.life_value-=self.aggressivity #根據自己的攻擊力,攻擊敵人就減掉敵人的生命值。


ps:http://www.cnblogs.com/linhaifeng/articles/6182264.html (詳見老師博客)

Day 29(06/29)面向對象