• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            第二桶 基于對(duì)象的編程 第一碗 老C初談統(tǒng)一建模 小P開練建模語言(之一)

                 “……所以,我們希望使得軟件也可以像硬件一樣——將實(shí)現(xiàn)同一功能的電路放在一起,做成集成電路并封裝,只留下定義清晰的引腳作為接口——這樣在需求相似 的地方,只要使用這個(gè)已經(jīng)制造好的芯片就可以了,而無需再次設(shè)計(jì)電路。這就是復(fù)用的思想,這樣可以極大的提高生產(chǎn)效率和技術(shù)的積累。正因?yàn)橛辛薎C,硬件 發(fā)展的水平已經(jīng)遠(yuǎn)遠(yuǎn)的將軟件發(fā)展的水平甩在了身后,目前軟件發(fā)展還只是進(jìn)行到模塊化而已,而就我所知系統(tǒng)級(jí)規(guī)模的復(fù)用也還是在發(fā)展階段……還遠(yuǎn)沒有到達(dá)軟 件IC的地步……總之你要了解自己所處于的技術(shù)浪潮中,這樣才可以更好的把握自己……”不知道兩個(gè)人在聊什么,不知不覺就又聊到了編程這個(gè)話題。“同時(shí)軟 件業(yè)可以像其它行業(yè)學(xué)習(xí)的東西很多,比如像硬件學(xué)習(xí)封裝和復(fù)用,像建筑業(yè)學(xué)習(xí)模式,像心理學(xué)和工業(yè)設(shè)計(jì)學(xué)學(xué)習(xí)UI設(shè)計(jì)……等等等等,總之要心態(tài)開放,兼容 并包,虛心學(xué)習(xí),不要以為自己有多么了不起——就各行各業(yè)的發(fā)展時(shí)間來看,軟件業(yè)吃的飯還沒有一些傳統(tǒng)行業(yè)吃的鹽多……”老C開始給小P狂噴。兩個(gè)人下午 上完課也沒有什么事情,干脆把椅子拉在一起狂諞起來。
                 “嗯,我覺得你說的有些道理,那么我們的編程語言是如何對(duì)模塊化進(jìn)行支持的呢?”小P覺得自己的捧場很重要,如果沒有自己說“然后呢……其他呢……”等 等,老C不會(huì)狂噴這么多有意思的話題,所以他很是恰當(dāng)?shù)脑谂赃吷匡L(fēng)。“一開始的時(shí)候沒有直接的模塊化的支持,”老C道,“后來人們根據(jù)實(shí)際需求總結(jié)出來一 些使用語言的方法,形成一定的業(yè)內(nèi)規(guī)范,將語言形成的代碼組織得更容易形成模塊。比如我們?cè)谑褂肅語言時(shí),將模塊的接口聲明到.h文件,內(nèi)部實(shí)現(xiàn)放在.c 文件并且用static聲明,這樣就提供了某些封裝的方法——但不是強(qiáng)制的,如果你違反了這些規(guī)定,語言本身是拿你沒有辦法的——這個(gè)時(shí)候就需要從行政上 動(dòng)腦筋……比如扣除一部分你的勞動(dòng)所得等等,哈哈。”老C笑道,“但是這種約定只是在坊間流傳,基本上不會(huì)在介紹語言的書籍或者課本上出現(xiàn)——因?yàn)檫@些是 工程經(jīng)驗(yàn),而理論雖然在理論上講與實(shí)踐沒有什么區(qū)別,但是從實(shí)踐的觀點(diǎn)看,結(jié)論正好相反——因此企業(yè)不得不花費(fèi)一些時(shí)間教會(huì)新手和菜鳥遵守某些坊間流傳的 規(guī)矩和約定。”
                 “哦?也就是說如果我們畢業(yè)就算找到工作,也還是不能馬上就給企業(yè)帶來效益的?”小P問。
                 “嗯,是的。所以雖然企業(yè)內(nèi)部急需要人才,但是應(yīng)屆畢業(yè)生工作還是挺難找的,因?yàn)楹芏嗥髽I(yè)不想花費(fèi)一些培訓(xùn)和引導(dǎo)的成本,所以就在社會(huì)上尋找有經(jīng)驗(yàn)的人。 但是有經(jīng)驗(yàn)的人哪里這么好找啊……于是就出現(xiàn)了矛盾——一方面好多人找不到工作,另一方面企業(yè)又需要人……”老C道。
                 “哦?那么沒有什么好的解決方法嗎?”小P問。
                 “我覺得也有辦法,學(xué)校尤其是一類院校可以從企業(yè)吸收一些高級(jí)人才,充當(dāng)一線教師和導(dǎo)師……但是這里面牽扯了方方面面的利益,實(shí)現(xiàn)起來比較困難。同時(shí)由于 學(xué)校的學(xué)術(shù)界有固步自封的傾向,一味追求理論上的高新,基本上不會(huì)考慮實(shí)現(xiàn)上的問題,導(dǎo)致大量水文的出現(xiàn),造成一定程度上畢業(yè)生質(zhì)量的下降。我覺得如果一 個(gè)人可以很好的將某種理論以實(shí)際的方法實(shí)現(xiàn),應(yīng)當(dāng)也頒發(fā)學(xué)歷和學(xué)位的——因?yàn)檫@樣學(xué)術(shù)研究才會(huì)真正變?yōu)樯a(chǎn)力——要知道數(shù)字信號(hào)處理在FFT變換出來之前 也只是理論上的玩具而已,但是隨著FFT的被發(fā)現(xiàn),信息技術(shù)才有了突飛猛進(jìn)的發(fā)展啊……”老C感概道,“呵呵,一下子說的遠(yuǎn)了,跑題,跑題……”他咋咋 嘴,嘆了一口氣,“題外話就不多說了,我們?cè)賮砜纯措S著科技的發(fā)展,語言又對(duì)我們的模塊化編程提供了哪些支持吧。”
                 “哦,然后呢?”小P問。
                 “然后隨著人們經(jīng)驗(yàn)的增加和積累,發(fā)現(xiàn)在語言層面對(duì)模塊這個(gè)概念提供支持是很好很強(qiáng)大的想法,至于怎么實(shí)現(xiàn)模塊化,見仁見智,相互PK,總之我們看到的結(jié) 論是經(jīng)過在市場上的殘酷廝殺,面向?qū)ο罄碚摪l(fā)展了起來。”老C道,“其實(shí)我們用非面向?qū)ο蟮恼Z言也可以實(shí)現(xiàn)面向?qū)ο蟮哪承┧枷?,比如可以在C中用結(jié)構(gòu)體+ 對(duì)結(jié)構(gòu)體操作的函數(shù)的方式構(gòu)造我們的模塊,但——你也看到了——到底沒有語言上直接支持來的方便和輕松。”老C撓撓頭,“因?yàn)槿藗冮_始接受面向?qū)ο蟮恼Z 言,如何對(duì)設(shè)計(jì)過程和設(shè)計(jì)所使用的模型進(jìn)行描述又有了新的爭議……”
                 “哦?什么是設(shè)計(jì)模型?”小P問。
                 “……簡單的說,我們?cè)谏w房子的時(shí)候一般都會(huì)先簡單的畫出一個(gè)草圖吧,也叫藍(lán)圖,blue print的東東,然后再進(jìn)行詳細(xì)的計(jì)算和設(shè)計(jì)……沒有見過沒有圖紙就直接上的,這樣既不安全,出了問題也比較難以修改,這個(gè)就是草圖和藍(lán)圖的作用,而草 圖和藍(lán)圖描述的就是房子的模型——因?yàn)榉孔又怀霈F(xiàn)在概念中,還沒有被實(shí)際蓋出來。”老C覺的要向這個(gè)無知青年解釋清楚還是比較累人的,“又比如我們要進(jìn)行 一個(gè)飛機(jī)場空中管制和航班管理的軟件,你會(huì)怎么做?”
                 “呵呵,依我現(xiàn)在的水平——不要想,就是我的做法……”小P答道。
                 “……也是……哈哈,我覺得你應(yīng)當(dāng)先去買一套飛機(jī)場的玩具,然后模擬幾次飛機(jī)的起降過程,并人為的制造一些障礙,比如飛機(jī)晚點(diǎn),天氣不好等等,來熟悉你即將碰到的問題并想辦法解決之。這就是建模的過程,體現(xiàn)了一些模型的重要性。”老C笑道。
                 “哦,我明白了,”小P高興的說道,“就是說在實(shí)際實(shí)現(xiàn)前,概念上和理論上的對(duì)問題進(jìn)行仿真和建模,并用某種方式表達(dá)出來,這樣對(duì)開發(fā)過程很有益處……”
                 “沒錯(cuò)沒錯(cuò)。”老C同意,“就像流程圖這個(gè)我們?cè)诮Y(jié)構(gòu)化編程時(shí)經(jīng)常使用的建模工具,在面向?qū)ο髸r(shí)代也有類似的,但是更強(qiáng)大的工具來支持我們建模。同時(shí)這種 工具不但可以在外部對(duì)問題進(jìn)行描述,對(duì)問題域進(jìn)行記錄,而且還可以記錄解決問題的方案,程序的結(jié)構(gòu)等解決域的內(nèi)容。”他想了想,又說道,“在歷史上有多種 這樣的符號(hào)和圖形系統(tǒng)——畢竟一圖頂千言,哦,不,是正確的清晰的一圖才可以頂千言——最后經(jīng)過努力這些圖形和符號(hào)都統(tǒng)一為一種符號(hào)和表述方式……就像電 路符號(hào)是實(shí)際電路的建模一樣,如果同時(shí)存在7、8種電阻符號(hào),那樣引起的混亂有可能比沒有建模還嚴(yán)重呢。”
                 “喔?這么說其實(shí)建模的工具就是一些用來描述問題和軟件結(jié)構(gòu)的圖形和符號(hào)?就像我在電路課程中學(xué)習(xí)的電阻、電感和電容符號(hào)那樣?”小P問。
                 “沒錯(cuò)!這種被統(tǒng)一后的符號(hào)集和圖形集被稱為UML,近來還在里面加入了一些在符號(hào)間找來找去的腳本語言……”老C接著道,“所謂UML,就是Unified Modeling Language的簡稱,從Unified這個(gè)詞,你就可以看出它發(fā)展的歷史。”
                 “哦,原來名字的來歷是這樣啊。”小P道。
                 “是啊,無論怎么樣,統(tǒng)一和標(biāo)準(zhǔn)是我們的需求,只有用統(tǒng)一的標(biāo)準(zhǔn)的符號(hào)我們才可以更好的交流。一個(gè)反面的例子是我們上數(shù)字電路里面的與門、非門、與非門和 或門等等的邏輯符號(hào),國家標(biāo)準(zhǔn)與業(yè)界流行的標(biāo)準(zhǔn)就不一樣,導(dǎo)致學(xué)生在畢業(yè)的時(shí)候可能看不懂行業(yè)內(nèi)的電路圖——就事實(shí)而論,我們大部分的電路模塊產(chǎn)品和芯片 的說明手冊(cè)還是歐美的居多——這樣即加重了企業(yè)負(fù)擔(dān),可能需要再花一部分精力來培訓(xùn)新人,也增加了學(xué)生的負(fù)擔(dān)——為了在畢業(yè)的時(shí)候增加些許競爭力,不得不 學(xué)習(xí)兩套符號(hào)系統(tǒng)。總之我覺得這個(gè)事情還是比較腦殘的,讓我想到窄軌鐵路……”老C借機(jī)發(fā)泄了一下從畢業(yè)就開始累積的郁悶。
                 “呵呵……”小P嘴上打著哈哈,心想,不就是多記幾個(gè)框框嘛,對(duì)自己影響不是很大啊,“消消氣,我們還是來說說UML本身吧。”小P道。
                 “嗯……我覺得首先我們得先明確幾個(gè)概念——要知道概念是比技巧更重要的東西——為了明確這些概念,我們最好先來談?wù)撘恍┱軐W(xué)問題。”老C道,“首先來UML的陰與陽。”
                 “陰與陽?”小P槑。
                 “對(duì),呵呵,無極生太極,太極生兩儀,兩儀生八卦……”老C開始轉(zhuǎn)文。
                 “八卦?我覺得隔壁的行司就比較八卦……”小P小聲說道。
                 “哈哈,這里說的陰與陽,是指UML模型中class與object概念的對(duì)偶,靜態(tài)模型與動(dòng)態(tài)模型的區(qū)分。”老C道,“這些都是不同的概念,我們現(xiàn)在來仔細(xì)說說。”
                 “哦?是嗎?那太好了。”小P道。
                 “首先我們來區(qū)分class與object的概念,什么是class?什么是object?我們先在概念上討論一下,然后再看看在C語言里是怎么一回事。 首先講概念,我們來打個(gè)簡單的比方。”因?yàn)橐_始長篇大論,老C把自己的茶杯端到手里,“比如你在一村閑逛,看到一只小狗在樹下面小便,你會(huì)說‘狗撒尿 ’……”
                 “哦,這個(gè)例子顯得……每下愈況……”小P道。
                 “呵呵,你總結(jié)的很好很強(qiáng)大……”老C突然有了伯牙遇子期的感慨,“話說高山……哦,不,狗撒尿,在這里,狗就是類的概念。”老C道,“因?yàn)樗械墓?,無 論什么品種,都會(huì)撒尿,因此你會(huì)建立一個(gè)‘狗’的概念,這個(gè)‘狗’只是存在于理性世界當(dāng)中,并不是真實(shí)存在的,只是一種模型而已,這就是對(duì)類這個(gè)概念的簡 單理解。如果你知道這條狗叫旺財(cái),你會(huì)說‘旺財(cái)撒尿’,那么這里‘旺財(cái)’就是‘狗’這個(gè)類的一個(gè)對(duì)象,因?yàn)?#8216;旺財(cái)’是‘狗’這個(gè)概念的實(shí)體。”
                 “喔?這樣說來就是概念與實(shí)體的區(qū)別了?”小P問。
                 “嗯,可以先簡單的這樣理解。”老C說,“而‘撒尿’就是‘狗’這個(gè)類所具有的‘操作’,就是說只要是‘狗’,一定會(huì)‘撒尿’。”
                 “哦,有點(diǎn)需要理解力了。”小P道。
                 “呵呵,可以這樣理解,‘狗’與‘撒尿’這兩個(gè)都是概念,生活在理性的世界,而‘旺財(cái)’和‘旺財(cái)?shù)娜瞿騽?dòng)作’是實(shí)體,生活在現(xiàn)實(shí)世界。”老C解釋道,“但是理性世界的概念在實(shí)例化之前不會(huì)有任何作用……因?yàn)樗鼈儽旧矶际歉拍疃选?#8221;
                 “太抽象了,來點(diǎn)具體的吧。”小P埋怨。
                 “呵呵,形而上者謂之道,形而下者謂之器,先道而后器者,幾??!”老C又轉(zhuǎn)文,“可以可以,我們?cè)贑++中舉個(gè)簡單的例子。”他又指揮小P拉過來白板并擦干凈,寫下如下代碼。

            class Dog
            {
            public:
                Dog(const string& name) : name_(name) {}
                piss() {}
            private:
                string name_;
            };

            int main()
            {
                Dog wangCai("Wang Cai");
               
                wangCai.piss();

                return 0;
            }

                 “看,我們的Dog類,在還沒有生成wangCai對(duì)象前,并沒有什么實(shí)際的作用,它只是記錄了一些類型和函數(shù)的信息而已。然而一旦生成了wangCai 對(duì)象,那么在實(shí)際內(nèi)存中——無所謂是在棧還是堆——都占有了一席之地,而這個(gè)對(duì)象的行為都會(huì)依照我們class內(nèi)部的設(shè)定而進(jìn)行。”老C道。
                 “唔,這么一說,我倒是理解了很多。”小P道。
                 “呵呵,還是要在實(shí)際編程中多體會(huì)和領(lǐng)悟。”老C說道。“現(xiàn)在我們來說說class和object如何在UML中表示,沒有什么難的,就像電阻、電感或者 電容一樣,只是一種記號(hào)。”老C道,并在白板上畫了兩個(gè)框框,“不同的訪問等級(jí)分別用+,#,和-表示,你可以google一下class diagram,查找一些具體的信息。”他接著說道,“有了class和object的表示方法,我們需要了解一下如何表示它們之間的關(guān)系。”     
                 “哦?”小P一副疑惑的樣子。
                 “因?yàn)槲覀兊膶?duì)象都不可能是孤島,對(duì)象之間需要相互協(xié)作才可以完成一些功能。形而下的對(duì)象之間如何發(fā)生了相互的聯(lián)系,那么在形而上的類之間就會(huì)塑模出各種 關(guān)系。”老C說道,“我們先來說說最簡單的也是最寬泛的一種關(guān)系——對(duì)于類來說叫association,對(duì)于對(duì)象來說叫l(wèi)ink……你要習(xí)慣這種概念體 系,因?yàn)樵赨ML中,形而上和形而下被區(qū)分的很明顯,你要理解這種概念上的對(duì)偶。”
                 “那么什么叫做association呢?”小P問道。
                 “嗯,只要有物理上或者概念上的關(guān)聯(lián),都可以建模為類之間的association,或者對(duì)象之間的link。”老C回答,“同樣我們可以舉例說明一下。 比如我們選課,你選擇了《數(shù)字信號(hào)處理》、《數(shù)理統(tǒng)計(jì)》和《現(xiàn)代控制理論》,那么你就和這些課程之間發(fā)生一些link,因?yàn)槟闶菍?duì)象,而這些課程也是對(duì) 象;我選擇了《計(jì)算機(jī)通信原理》,《數(shù)理統(tǒng)計(jì)》和《現(xiàn)代測(cè)控原理》那么我這個(gè)對(duì)象和這些課程對(duì)象之間就發(fā)生了一些link——上升到理性世界,就是形而上 的世界,那就是Person這個(gè)類與Course這個(gè)類之間發(fā)生了association。”
                 “哦?是這樣啊……”小P想了想,“那么怎么樣用association表示link的數(shù)量呢?因?yàn)橐呀?jīng)抽象到另一個(gè)層次中……”
                 “呵呵,沒有關(guān)系,我們可以用multiplicity來表示,比如這個(gè)學(xué)期我們每個(gè)人可以最多選5門,最少選3門課,可以在class diagram中用multiplicity來這樣表示……”老C說著畫了一個(gè)圖,“你先理解到這里就夠了,因?yàn)閁ML是一個(gè)理論性很強(qiáng)的東東,沒有必要 一下子就深入進(jìn)去,這樣反而無法學(xué)好。我們先一個(gè)一個(gè)慢慢來,由淺入深,由此及彼。”
                 “嗯,你說的有些道理。”小P道。
                 “先在我們只要知道class之間有association就可以了,至于這種association具體到什么地步,那是下一步的事情。所謂建模是見仁 見智的事情,除非重大錯(cuò)誤,否則你總可以認(rèn)為你這樣建模是對(duì)的,因?yàn)槟阌^察問題的角度就是這樣……”老C道,“我們現(xiàn)階段就只要先搞清楚有幾個(gè)class 存在關(guān)系就行了。”
                 “呵呵,好的。”小P心想還沒有人教他這樣不求甚解的學(xué)習(xí)。

            Link



            Association
                 “下來我們需要掌握sequence diagram,”老C道,“關(guān)于UML,有3中模型,分別是class model,state model和interaction model,前一個(gè)class model是靜態(tài)模型,后兩個(gè)是動(dòng)態(tài)模型,這是UML中除形而上和形而下外又一對(duì)陰陽。”他喝了一口茶,“我們先把state model放一邊,先學(xué)習(xí)一下interaction modle中的sequence diagram。而且同樣也不要太深入,只要先了解一些夠我們用的部分就行了。”說罷他在白板上先寫下可見性三個(gè)大字。

            可見性

                 “不是要說sequence diagram嗎?”小P不解的問。
                 “哦,sequence diagram主要是描述對(duì)象間是如何交換信息的,在此之前我們需要簡單的說說對(duì)象間交換信息的方式。”老C回答,“否則可能你對(duì)message這個(gè)概念的理解會(huì)困難一些。”他接著說,“你能告訴我兩個(gè)對(duì)象之間怎么傳遞信息嗎?”
                 “哦,我想想……”小P想了一回,“如果對(duì)象a需要對(duì)象b的信息,那么對(duì)象a可以調(diào)用對(duì)象b的提取信息的成員函數(shù)……”
                 “沒錯(cuò),這是一個(gè)辦法,”老C點(diǎn)頭,“如果我們把對(duì)象想象為一個(gè)一個(gè)的小島,它們之間需要通過交換信息來共同解決問題,那么你可以想象message就是 它們之間往來的小船,這些小船攜帶了需要交互的信息。比如a島需要b島的信息,或者它需要將信息發(fā)送到b島,作為活動(dòng)發(fā)起人,它需要b島提供船只,然后將 信息從船上取出,或者將信息放入船上。你先這樣理解,信息的接受和發(fā)送都是被動(dòng)的,如果a是發(fā)起者,那么它就需要b提供交通工具——因?yàn)槟悻F(xiàn)在碰到的都是 被動(dòng)類,等我們遇到了主動(dòng)類,再來升級(jí)我們的認(rèn)識(shí)。這樣在C++中,如果對(duì)象a需要向?qū)ο骲發(fā)送一個(gè)消息,那么對(duì)象b需要提供一個(gè)接口;具體來說就是a調(diào) 用了b的成員函數(shù)。”
                 “哦,那我就先這樣理解著。”小P回答。
                 “是啊,因?yàn)橐徊降轿坏暮苷_和深刻的認(rèn)識(shí)這個(gè)問題也不現(xiàn)實(shí),我們需要在不斷的實(shí)踐中迭代的修正我們的觀念。”老C道,“現(xiàn)在我們來看看,如果對(duì)象a需要調(diào)用對(duì)象b的函數(shù),那么對(duì)象b必須對(duì)對(duì)象a來說是可見的,你說說在C++中怎么樣才具有這種可見性呢?”
                 “唔……好像對(duì)象b要是對(duì)象a的一個(gè)成員變量?”小P不是很確定。
                 “嗯,只是一種情況。”老C回答,“如果對(duì)象b對(duì)于對(duì)象a可見,可能存在以下幾種情況。”說著他在白板的可見性幾個(gè)字下面又增加了幾行。

            可見性

            1. b 在 全局范圍內(nèi)。
            2. b 是a的成員變量。
            3. a有一個(gè)指向b的指針(或引用),這個(gè)指針(或引用)被正確的初始化。
            4. a的成員函數(shù)含有b的指針或引用的參數(shù)。
            5. b的定義在a定義的外層。


                 “看,雖然在模型中都由a發(fā)送message給b代所塑模,但具體實(shí)現(xiàn)上我們可以有至少這么多的方案供選擇。”老C說,“不要狹隘的理解message, 無非就是信息交換而已。”他想了想,“為了保持你的好奇心和進(jìn)取心,我再給你簡單說說當(dāng)兩個(gè)對(duì)象不可見時(shí)它們?cè)趺唇粨Q信息……”
                 “哦?這樣它們也可以交換信息?”小P追問。
                 “這時(shí)C++語言沒有提供直接的幫助,我們需要借助外力。如果我們使用類庫,可以用boost的signal/slot機(jī)制,也可以用Qt的signal /slot機(jī)制;如果我們?cè)趙indows下編程,可以借助windows操作系統(tǒng)的消息并借用MFC的消息映射機(jī)制;如果這些都不可用,我們還可以自己 依照command模式和observe模式設(shè)計(jì)一套機(jī)制來自己使用……這些話題我們以后一定可以討論到,現(xiàn)在就先不要著急啦。”老C吊起了小P的胃口, 但是又不再繼續(xù)下去。
                 “是嗎?”小P問道,心想自己需要學(xué)習(xí)的地方還挺多的。
                 “好,現(xiàn)在我們就具體看看sequence diagram。”老C說道。說著他讓小P打開電腦,照著AppleGame的代碼在白板上畫出了如下圖形。

            AppleGame


            sd PlayAppleGame

                 “我來解釋一下。”老C先指著class diagram AppleGame說道,“在這里我們只要先知道AppleGame類與ChildList類有關(guān)聯(lián)就可以了,至于具體是什么關(guān)聯(lián),我們以后再說。”然后 他解釋道,“由于我已經(jīng)知道這兩個(gè)class的成員函數(shù)了,為了省事就直接寫在里面,其實(shí)更合理的做法是先不要在這里寫需要的成員函數(shù),而是應(yīng)當(dāng)在有了 class diagram后馬上去建模sequence diagram,根據(jù)解決問題的需要再回頭給class 中添加具體的成員函數(shù)。”看到小P看得聚精會(huì)神,他就停了一會(huì)兒,喝了一口水,等小P先消化消化。
                 “……嗯,然后呢?”幾分鐘后,小P問道。
                 “sequence diagram表示了對(duì)象間數(shù)據(jù)交換的順序和過程,你可以在每個(gè)message上看到標(biāo)注的數(shù)字,那表示順序。”老C接著說道,“每個(gè)對(duì)象下面垂直的虛線 叫l(wèi)ife ine,表示對(duì)象的生存期;虛線上的長條矩形叫做activation,表示對(duì)象是否活躍,你就認(rèn)為是函數(shù)的執(zhí)行期,activation之間可以重疊; 水平的實(shí)線實(shí)心箭頭表示同步消息,關(guān)于同步消息和異步消息我們以后再討論,你現(xiàn)在全部使用同步消息就可以了,指向?qū)ο笞约旱南⒈硎菊{(diào)用自己的函數(shù);虛線 表示返回消息,你可以理解為返回值;中間的方框叫combined fragments,包括alternatives, options 和 loops。你可以根據(jù)我們已經(jīng)有的代碼體會(huì)體會(huì)sequence diagram的用法。”他想了想,“對(duì)了,關(guān)于圖的名稱也有要求,sequence diagram要求以sd開頭,后面是所描述場景的概要說明,比如我們這里的sd PlayAppleGame。”
                 “哦,我學(xué)習(xí)學(xué)習(xí)。有什么線索沒有?”小P追問。
                 “嗯,關(guān)于UML工具有很多,跨平臺(tái),GPL的也不少,我試用了一些,感覺visual paradigm和magic draw還不錯(cuò),這兩個(gè)都有community版本的,可以供我們學(xué)習(xí)和進(jìn)行非商業(yè)活動(dòng)用。你還可以登陸到www.umlchina.com,那里也有一 些很不錯(cuò)的資料和書籍介紹。但是根據(jù)我的經(jīng)驗(yàn),UML還是要多用,而且不要一次學(xué)習(xí)的過于深入為好,因?yàn)閁ML的語義很豐富且理論性比較深一些,而且同樣 的事情可能有不同的圖形都可以描述,所以最好根據(jù)需要,一點(diǎn)一點(diǎn)的學(xué)習(xí),邊學(xué)邊用最好。”老C說道。
                 “哦,是啊。”小P點(diǎn)點(diǎn)頭。
                 “UML是建模工具,不是編程工具。模型需要對(duì)實(shí)際的事物進(jìn)行合理的剪裁和取舍,注意模型的清晰性比信息的完備性更重要,如果不論青紅皂白的將所有信息一 股腦全部放在模型上,那樣圖形看起來會(huì)很恐怖的。”老C接著解釋,“所以不要要求模型完全反應(yīng)細(xì)節(jié)信息,只要在大方向上對(duì)就可以了。同時(shí)你還要了解模型所 要描述的問題規(guī)模,如果是一個(gè)大型的交易系統(tǒng),按照我繪出的sequence diagram的詳細(xì)程度,那是根本不可能的。在描述這樣的系統(tǒng)時(shí),可以省略足夠的細(xì)節(jié),可以在框架結(jié)構(gòu)的規(guī)模上表現(xiàn)清楚就可以了。”老C道。
                 “是么?看來我還需要在實(shí)踐中學(xué)習(xí)啊。”小P說道,“看來以后你還要多給我說說這方面的道理。”
                 “呵呵,好啊。反正國慶假期也快到了,如果你沒有什么事情的話就繼續(xù)完善我們的sd PlayAppleGame如何?將List類也加入其中。” 老C問道。
                 “好啊好啊。”小P道,“我可以趁沒有出去玩的時(shí)候自己畫畫試試。”他想了想,“但是如果有什么不會(huì)的我可要打你的電話啊。”
                 “當(dāng)然可以,”老C說道,“如果沒有人接那是我在外面沒有聽見,你最好晚上打。”

            (看看小P如何完成sd PlayAppleGame)

            注: 本章中的許多內(nèi)容都穿越啦。Visual Paradigm在2003年還沒有出來這一套UML2.1標(biāo)準(zhǔn)的UML工具,而老C說的在class model中導(dǎo)航的OCL語言也是在2006年左右才出來的。本章中sequence diagram中使用的很多符號(hào)都是UML2.0標(biāo)準(zhǔn)的,這在2003年根本沒有……


            posted on 2009-02-26 15:34 Anderson 閱讀(1885) 評(píng)論(5)  編輯 收藏 引用

            評(píng)論

            # re: 第二桶 基于對(duì)象的編程 第一桶 老C初談統(tǒng)一建模 小P開練建模語言(之一) 2009-02-26 20:22 ZJOK

            很好,
            再通俗點(diǎn)就好了!!!!!!!!!!!!!!!!  回復(fù)  更多評(píng)論   

            # re: 第二桶 基于對(duì)象的編程 第一碗 老C初談統(tǒng)一建模 小P開練建模語言(之一) 2009-03-16 19:01 supersand

            樓主繼續(xù)~  回復(fù)  更多評(píng)論   

            # re: 第二桶 基于對(duì)象的編程 第一碗 老C初談統(tǒng)一建模 小P開練建模語言(之一) 2009-05-23 17:47 ty

            閱過留名,樓主辛苦了!  回復(fù)  更多評(píng)論   

            # re: 第二桶 基于對(duì)象的編程 第一碗 老C初談統(tǒng)一建模 小P開練建模語言(之一) 2009-09-07 23:17 billow

            跟進(jìn)閱讀中,感謝lz。  回復(fù)  更多評(píng)論   

            # re: 第二桶 基于對(duì)象的編程 第一碗 老C初談統(tǒng)一建模 小P開練建模語言(之一)[未登錄] 2010-10-07 22:07 Andrew

            看不到代碼的?  回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2009年2月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            1234567

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(6)

            隨筆檔案(21)

            文章檔案(1)

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            精品久久人人妻人人做精品| 美女写真久久影院| 久久笫一福利免费导航| 久久天天躁夜夜躁狠狠| 精品国产乱码久久久久久人妻| 色妞色综合久久夜夜| 国内精品久久久久| 久久天天躁狠狠躁夜夜av浪潮| 久久久国产视频| segui久久国产精品| 波多野结衣久久精品| 国内精品久久国产大陆| 色天使久久综合网天天| 久久99精品久久久久久动态图| 久久成人永久免费播放| 亚洲AV日韩AV天堂久久| 久久青青草原精品国产不卡| 久久国产乱子伦免费精品| 欧美激情精品久久久久久久| 国产精品久久久亚洲| 精品久久久久成人码免费动漫| 久久er国产精品免费观看2| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 国产精品欧美久久久久天天影视| 久久精品国产清自在天天线| 99久久综合国产精品二区| 久久亚洲私人国产精品| 久久婷婷五月综合97色直播 | 亚洲国产成人久久综合一区77 | 无码人妻久久久一区二区三区| 久久激情五月丁香伊人| 中文字幕成人精品久久不卡| 国产精品久久久亚洲| 久久久久女人精品毛片| 色婷婷综合久久久久中文 | 亚洲中文久久精品无码| 久久久国产视频| av色综合久久天堂av色综合在| 无码任你躁久久久久久久| 久久综合九色综合欧美就去吻| 精品久久久久久99人妻|