趣味教程:從女媧造人談類、屬性、方法及執行個體

來源:互聯網
上載者:User

前言:相信大家都聽說過女媧造人的故事,不過細節可能不會太清楚,我現在略述如下,您可要仔細聽哦,這和我們今天要聊的主題有莫大的關係呀。

女媧是一個人身龍尾的女神。Apsara Distributed File System開天闢地以後,也就在天地間到處遊歷。她雖然是神,可是也會寂寞的,望著平靜的水面裡自己美麗的倒影不勝唏噓。於是她便決定按照自己的形貌來捏泥人。女媧心靈手巧,不一會兒就捏好了好多的泥人。這些泥人幾乎和她一樣,只不過她給他們做了與兩手相配的雙腿,來代替龍的尾巴。女媧朝著那些小泥人吹口氣,那些小泥人便被灌注了活力,“活”了起來,變成了一群能直立行走、能言會語、聰明靈巧的小東西,女媧稱他們為“人”。女媧在其中一些人身上注入了陽氣——自然界一種好鬥的雄性要素,於是他們就成了男人;而在另外一些人身上,她又注入了陰氣——自然界一種柔順的雌性素,於是她們便成了女人。 女媧想讓人們遍布廣闊的大地,但她累了,做得也太慢了。於是,她想出一條捷徑。她把一根繩子放進河底的淤泥裡轉動著,直到繩的下端整個兒裹上一層土。接著,她提起繩子向地面上一揮,凡是有泥點降落的地方,那些泥點就變成了一個個小人。女媧就這樣創造了布滿大地的人們。

這個故事可謂是蘊涵了極深刻的程式文法規則,大家看完我下面的分析後,一定會相信故事的作者沒準是遠古時代的程式員呢!

<代碼看起來很長,是我加了詳細的注釋的緣故>

1、類:如果女媧屬於一個類的話,可以稱之為"神"。代碼錶示為:
--神.as開始--

class 神{//class :定義'類'的關鍵字,描述一組具有共性的對象的特徵    static var 類別:String="神";   //static :定義'類變數'或'類方法'的關鍵字,它描述一組類的整體屬性或方法。在這裡表示,所有的神的都可稱為"神"。    static var 所屬:Object =神;//表示神歸誰管啦,中國遠古的神好象沒有什麼附屬關係哦。    public var 善惡:String;   //public :定義'公開'屬性或方法的關鍵字,它描述類的可以供外部對象訪問的屬性或方法。    private var __姓名:String;   //private :定義'私人‘屬性或方法的關鍵字,它描述類的需要封裝的屬性或方法,   //表現為它定義的變數或方法只可以被類或子類內部的方法訪問(調用).   //下面會詳細說明用private的理由的.   private var __形體:String;//在變數名字前加"__"僅標誌它是具有擷取/設定方法的屬性.   private var __性別:String;   public function set 姓名(n:String):Void{   //set:動作指令碼 2.0中隱式設定類相關屬性的關鍵字.下面會詳細說明        __姓名=n;//類內部的方法可以訪問私人屬性'__姓名'  }   public function get 姓名():String{   //get:動作指令碼 2.0中隱式擷取類相關屬性的關鍵字.下面會詳細說明       var n:String="偉大的神"+__姓名;//類內部的方法可以訪問私人屬性'__姓名'       return n;   }   public function set 形體(x:String):Void{      __形體="神奇的"+x;   }   public function get 形體():String{      return __形體;   }   public function set 性別(n:String):Void{      if(n=="男"||n=="女"){              __性別=n;      }   }    public function get 性別():String{              return __性別;   }   function 神(sh:String,n:String,x:String,s:String){   //建構函式,是串連類和執行個體的紐帶,它接受外部設定的參數,  //對即將產生的執行個體進行初始化.它的表現就是名稱與包含它的類的名稱相同.其實我真的認為...它可以比喻為'子宮'的..   //sh:善惡,n:姓名,x:形體,s:性別      善惡=sh;//為善惡屬性直接賦值。      姓名=n;//調用'set 姓名'方法為'__姓名'屬性賦值。      形體=x;//調用'set 形體'方法為'__形體'屬性賦值。      性別=s;    //調用'set 性別'方法為'__性別'屬性賦值,在賦值之前會先判斷s是否為'男'或'女'。    //對賦值進行必要的控制,是隱式設定屬性的一個優勢。   }   public function 寂寞():Void{      trace("\"自己好孤單啊,有個人陪陪我多好啊!\"");      //為什麼不去[維藝--Flash]論壇?呵呵,做個廣告啦!   }   public function 創造(o:String):Object {   //o:創造的目標      if(o=="人"){          var 泥人=捏泥人();          var 氣=["陽","陰"];          var r=Math.floor(Math.random()*2);//得到一個隨即數字,或0或1          var 隨即氣= 氣[r];          var 人=吹口氣(泥人,隨即氣);//類內部的方法可以調用'私人'方法'吹口氣'          命名(人,"人");//女媧稱他們為'人'...          return 人;       }       //if ... 當然神還具備其它的創造本領,這裡略~    }     public function 捏泥人():Object {        trace("捏泥人...");        var 泥人=new Object();        泥人.形體="人身人腿";//據上面神話所述,女媧是'人身蛇尾'...        trace("一個泥人製作完畢!");        return 泥人;    }    public function 命名(o:Object,n:String){    //o:待命名的對象,n:名稱        o.類別=n;        trace("一個人誕生了!");    }    private function 吹口氣(o:Object,s:String):Object{    //o:泥人,s:氣    //這個方法確實是神私人的方法啦,我一直都不理解的,如果能吹口氣吹出銀子來...    trace("吹口氣...");   //--泥人具有了以下本領--    o.直立行走=function(){              trace("打架摔交中...");    }    trace("泥人學會直立行走!");    o.能言會語=function(){    trace("談情說愛中...");  }  trace("泥人學會語言!");  o.聰明靈巧=function(){              trace("坑蒙拐騙中...");  }  trace("泥人學會思考!");   //呵呵   if(s=="陰"){   //如果注入的是陰氣              o.性別="女";   }else if(s=="陽"){              o.性別="男";   }   //else if 又陰又陽 then 人妖~~   trace("泥人性別是"+o.性別+"!");   trace("泥人具備了靈魂!");   return o;  }}

--神.as結束--

到這裡我們的"造神運動"就告一階段了,該看看我們的神的威力啦!

--女媧造人.fla開始--

//在第一楨上寫代碼:var 女媧=new 神("善","女媧","人身蛇尾","女");//new:產生執行個體的關鍵字,它先建立一個初始時匿名的新對象,再用建構函式設定新對象的特性,//最後返回新對象的記憶體位址。在這裡新誕生的'神'的記憶體位址賦給了'女媧'變數。trace(女媧.姓名+"是一位"+女媧.形體+女媧.性別+神.類別);//調用女媧的'get 姓名'方法,返回'偉大的神女媧'。對返回的屬性值進行必要的控制,是隱式擷取屬性的一個優勢。//比如,你的老闆叫張三,卻常被稱為'張總',這也是經過必要的控制之後得到的結果。//'張三'這個名字只有他的自己人才使用哦!所以說生活中有很多事情也可用'私人屬性'來解釋的~trace("她是"+女媧.善惡+神.類別);//直接返回女媧的善惡屬性值。trace("一天,她覺得");女媧.寂寞();trace("於是,她開始");女媧.創造("人");

--女媧造人.fla結束--

現在測試一下吧,看看會產生什麼驚天動地的大事吧!

--測試影片開始--
偉大的神女媧是一位神奇的人身蛇尾女神
她是善神
一天,她覺得
"自己好孤單啊,有個人陪陪多好啊!"
於是,她開始
捏泥人...
一個泥人製作完畢!
吹口氣...
泥人學會直立行走!
泥人學會語言!
泥人學會思考!
泥人性別是男!
泥人具備了靈魂!
一個人誕生了!
--測試影片結束--

呵呵,到此為止,我們的女媧造人的故事就講述了一半了,接下來就該女媧如何用繩子甩泥點造人啦(這的確比一個一個手工捏要利索多了),也就是類的繼承。希望不會讓大家等太久哦:)

前言:在上篇中談到女媧不甘寂寞,用泥土捏出了一個個會走動、具靈氣的"人",可是忘了交代一下"人" 的才能到底如何。在女媧開始大批量造人之前先給我們"人"個舞台,讓他展現一下自己的才能吧!

--女媧造人.fla 開始--

var 女媧:神=new 神("善","女媧","人身蛇尾","女");trace(女媧.姓名+"是一位"+女媧.形體+女媧.性別+神.類別);trace("她是"+女媧.善惡+神.類別);trace("一天,她覺得");女媧.寂寞();trace("於是,她開始");var 原始人:Object=女媧.創造("人");//將創造出來的"人"賦值給變數'原始人',以後就可以通過'原始人'訪問他的屬性與方法。trace("----原始人開始展示自己的才能----");trace("原始人是"+原始人.性別+原始人.類別);trace("原始人的形體是"+原始人.形體);trace("原始人會直立行走,現在他(她)在:");原始人.直立行走();trace("原始人能言會語,現在他(她)在:");原始人.能言會語();trace("原始人聰明靈巧,現在他(她)在:");原始人.聰明靈巧()

 

--女媧造人.fla 結束--

我們人的表現如何呢?現在測試一下:

--女媧造人.fla 測試開始--

偉大的神女媧是一位神奇的人身蛇尾女神
她是善神
一天,她覺得
"我好孤單啊,有個人陪陪我多好啊!"
於是,她開始
捏泥人...
一個泥人製作完畢!
吹口氣...
泥人學會直立行走!
泥人學會語言!
泥人學會思考!
泥人性別是女!
泥人具備了靈魂!
一個人誕生了!
----原始人開始展示自己的才能----
原始人是女人
原始人的形體是人身人腿
原始人會直立行走,現在他(她)在:
打架摔交中...
原始人能言會語,現在他(她)在:
談情說愛中...
原始人聰明靈巧,現在他(她)在:
坑蒙拐騙中...

--女媧造人.fla 測試結束--

看到測試結果,你的感受如何呢?這個這個嘛,還是'人之初,性本惡'吧?

廢話少說,言歸正傳。話說女媧想讓人們遍布廣闊的大地,但象她這樣一個一個捏制下去希望實在渺茫啊。而且我們也看到了,其實每個泥人的樣子雖然各不相同,但靈魂卻是相似的,都是女媧的一口氣使然。如果每個人都需要從女媧那裡來那麼一口,不把女媧累死也得元氣大傷吧!那麼女媧該怎麼辦呢?傳說裡說女媧拿了根繩子甩啊甩的就造出了很多人,看來得從這根'繩'子著手了.

這根繩子如此不一般,我認為是女媧把造人的模版傾注其中的結果。傳說裡又說,女媧是'按照自己的行貌'造的人,可以肯定'人'一定是從神那裡繼承了不少的特性吧。

--人.as開始--

class 人 extends 神 {//extends:定義類與類之間繼承關係的關鍵字,子類對父類的特性可以保留或揚棄。  static var 類別:String = "人";  static var 所屬:Object = 神;  //看到沒,人是歸神所管的哦  static var 氣:Array = ["陽", "陰"];  static function 設定性別():String {    var 隨即氣 = 人.氣[Math.floor(Math.random()*2)];    if (隨即氣 == "陰") {      return "女";    } else if (隨即氣 == "陽") {      return "男";    }  }  public function set 形體(x:String):Void {  //畢竟人和神的形體有很大的不同,神的形體千變萬化,  //人的形體卻大體是相似的,所以子類重寫了父類的 'set 形體()'方法.  //x:形體的狀況,如是怎樣的身材等等    if (x == undefined) {      x = "平常";    }    //如果沒有提供'形體'的詳細描述,那麼用預設值'平常'。    __形體 = x+"人體";  }  public function get 形體():String{  //這個方法有點奇怪,本來應該直接繼承就可以了,但卻不得不再寫一遍,原因不明。或者set 與 get 要配對出現?    return __形體;  }  function 人(x) {  //人的誕生無法和神相比啦,重寫建構函式  //x:形體  //與神相比,人的建構函式只有'形體'一項參數,因為人的善惡跟後來的成長過程有關,  //性別由自然規則來定,姓名是後來由別人給命名的...只有身體是與天俱來的  //善惡=undefined 這裡寫出來,是提醒大家善惡現在其實是undefined的   //姓名=undefined     形體 = x;    性別 = 人.設定性別();    //調用類方法來初始化性別    trace("人誕生了!");  }  //下面的是繼承來的方法  public function 寂寞():Void {  //寂寞者,人神皆然。不過'人'對'神'的寂寞有所拓展    super.寂寞();    //super:指向父類對象的關鍵字,因為'人'與神的寂寞有相同的地方,所以這裡先調用'神'的‘寂寞’方法。    trace("哪怕是陪我聊聊天也行哦!");    //神會把'寂寞'轉化為'創造',人卻把'寂寞'轉化為'有聊'~~  }  public function 創造(o:Object):Object {  //人是沒有神那麼偉大的創造力...重寫'創造'方法    if (o == "火") {      var o = new Object();      o.名稱 = "火";      o.烤 = function(oo:Object) {        trace(oo+"烤熟了!");      };      trace("發明鑽木取火!");      return o;    }    //其他的創造能力...略  }  //public function 捏泥人()... 人和神的 ‘捏泥人’沒啥區別,完全繼承之  public function 吹口氣(o:Object) {  //由私人方法成為公有方法  //唉,一般來說子類對父類的功能都是有所拓展或增強,唯獨由神到人有點特別呀,  //拓展的只是些皮毛無聊的小功能,象這‘吹口氣’的大本領就沒繼承來!要是吹口氣吹出銀子來...    if (o == undefined) {    //如果無東西可吹      trace("哎,這覺睡得好長啊");      //等於是打個哈欠吧    } else if (o == " 蠟燭") {      trace("蠟燭滅了");      //吹吹蠟燭~    } else if (o == this) {    //this:表示對象自身的關鍵字。    //如果吹的對象是自己       trace("哪裡哪裡,我也是略懂一二...你有什麼要請教的?");      //唉,我也難免吹吹自己的~    } else if (o instanceof 人.所屬) {    //如果吹的對象是人類的主宰的話      trace("爹親娘親沒有"+o.姓名+"親!");      //得 ,這又是在拍了~    }  }  //下面是人自己的方法  public function 直立行走() {    trace("打架摔交中...");  }  public function 能言會語() {    trace("談情說愛中...");  }  public function 聰明靈巧() {    trace("坑蒙拐騙中...");  }}

//--人.as結束--

現在"造人運動"也告一段落了,讓我們看看收效如何吧:

--女媧造人.fla--
(在原代碼後附加)

var 遠古人=new 人("美麗的");遠古人.姓名="遠古人";//為執行個體自己的姓名屬性賦值遠古人.打獵=function(o:String):Void{  trace("射殺一隻"+o+"!");}//為執行個體定義自己的方法trace("----遠古人開始展示自己的才能----");trace(遠古人.名字+"是"+遠古人.性別+人.類別);trace(遠古人.名字+"的形體是"+遠古人.形體);遠古人.寂寞();trace("遠古人會直立行走,現在他(她)在:");遠古人.直立行走();trace("遠古人能言會語,現在他(她)在:");遠古人.能言會語();trace("遠古人聰明靈巧,現在他(她)在:");遠古人.聰明靈巧();遠古人.捏泥人();遠古人.吹口氣();遠古人.吹口氣("蠟燭");遠古人.吹口氣(遠古人);遠古人.吹口氣(女媧);遠古人.打獵("鹿");

--女媧造人.fla 結束--

如果你想要看看這位遠古人的表現如何,不妨自己測試。到此為止,我們的故事就快講完了。女媧現在造人就非常簡單了,只需要"new 人()"就可以了,再不用捏個泥人吹口氣了。如果精神充沛的話就"new 人('健康的')",如果體力不支的話就"new 人('軟弱的')"。如果你瞭解Action 1.0文法的繼承機制的話,一定知道類中的執行個體方法是寫在類的"prototype"(即原型)上的,這樣可以實現由類建立的執行個體共用相同的方法。在我們剛才建立的類中,由"public"或"private"關鍵字修飾的方法其實也是寫在"prototype"上的。所以說,現在女媧不再需要在每個"人"身上都定義一遍"方法",也就是對每個人都"吹口氣"了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.