青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

huaxiazhihuo

 

c++面向?qū)ο蟮念愒O(shè)計(jì)

類的設(shè)計(jì)在于用恰到好處的信息來完整表達(dá)一個(gè)職責(zé)清晰的概念,恰到好處的意思是不多也不少,少了,就概念就不完整;多了,就顯得冗余,累贅,當(dāng)然特例下,允許少許的重復(fù),但是,這里必須要有很好的理由。冗余往往就意味著包含了過多的信息,概念的表達(dá)不夠精準(zhǔn),好比goto,指針,多繼承這些貨色,就是因?yàn)槠溥^多的內(nèi)涵,才要嚴(yán)格限制其使用。好像,more effective c++上說的,class的成員函數(shù),應(yīng)該是在完整的情況下保持最小化。但是,這里我們的出發(fā)點(diǎn),是成員數(shù)據(jù)的完整最小化。

最小化的好處是可以保持概念最大的獨(dú)立性,也意味著,可以用最小的代價(jià)來實(shí)現(xiàn)這個(gè)概念,也意味著對(duì)應(yīng)用層的代碼要求越少,非侵入式?好比c++11 noexcept取代throw(),好比從多繼承中分化出來接口的概念,好比不考慮多繼承虛繼承的普通成員函數(shù)指針。又比如,如果不要求只讀字符串以0結(jié)束,那么就可以把只讀字符串的任何一部分都當(dāng)成是只讀字符串。類的對(duì)外功能固然重要,但是,類不能做的事情,也很重要。

首先是要有清晰的概念以及這個(gè)概念要支持的最基本運(yùn)算,然后在此基礎(chǔ)上組織數(shù)據(jù),務(wù)求成員數(shù)據(jù)的最小化。當(dāng)然,概念的產(chǎn)生,并非拍著腦袋想出來的,是因?yàn)榇a里面出現(xiàn)太多那種相關(guān)數(shù)據(jù)的次數(shù),所以就有必要把這些數(shù)據(jù)打包起來,抽象成一個(gè)概念。好比說,看到stl算法函數(shù)參數(shù)到處開始結(jié)束的迭代器,就有必要把開始結(jié)束放在一起。比如說,string_view的出現(xiàn),這里假設(shè)其字符存儲(chǔ)類型為char,string_view就是連續(xù)char內(nèi)存塊的意思,可以這樣表示

struct string_view

{

         const char* textBegin;

         size_t length; //或者 const char* textEnd

};

這里的重點(diǎn)是,string_view里面的兩個(gè)成員字段缺一不可,但是也不必再添加別的什么其他東西。然后,在這兩個(gè)數(shù)據(jù)上展開實(shí)現(xiàn)一系列的成員函數(shù),這里,成員函數(shù)和成員字段這兩者,有一點(diǎn)點(diǎn)雞生蛋生雞的糾結(jié),因?yàn)楸匾蓡T函數(shù)的集合(原始概念的細(xì)化),成員函數(shù)決定了成員字段的表示,而成員字段定下來之后,這反過來又能夠驗(yàn)證成員函數(shù)的必要性。不管怎么說都好,成員函數(shù)的設(shè)計(jì),也必須遵從最小完整化的原則。再具體一點(diǎn),就是說但凡一個(gè)成員函數(shù)可以通過其他成員函數(shù)來實(shí)現(xiàn),就意味著這個(gè)函數(shù)應(yīng)該趕出類外,作為全局函數(shù)存在。當(dāng)然,這也不是死板的教條,有些很特殊的函數(shù),也可以是成員函數(shù),因?yàn)槌蓡T函數(shù)的使用,確實(shí)很方便。

可能會(huì)有疑惑,感覺所有的成員函數(shù)其實(shí)都可以是全局函數(shù)?;蛘哒f,我們可以對(duì)每一個(gè)成員字段都搞一對(duì)setget的函數(shù),那么所有的其他成員函數(shù)就可以是全局函數(shù)的形式,很容易就可以遵守最小完整化的原則。當(dāng)然,這是明顯偷懶,拒絕思考的惡劣行為。與其這樣,還不如就開放所有的成員字段,那樣子就落入c語言的套路了。所以的法論是,一個(gè)函數(shù),這里假設(shè)是全局函數(shù),如果它的實(shí)現(xiàn)必須要訪問到成員字段,不能通過調(diào)用該類的成員函數(shù)(一般不是get,set)來達(dá)到目的,或者,也可以強(qiáng)行用其他函數(shù)來完成任務(wù),但是很麻煩,或者要付出時(shí)間空間上的代價(jià),那么就意味著這個(gè)函數(shù)應(yīng)該是該類的成員函數(shù)。

類的設(shè)計(jì),就是必不可少的成員字段和必不可少的成員函數(shù),它們一起,實(shí)現(xiàn)了對(duì)類的原始概念的完整表達(dá),其他什么的,都不必理會(huì)。一個(gè)類如果不好寫,往往意味著這個(gè)類的功能不專一,或者其概念不完整,這時(shí),可以不要急著抽象,如果一個(gè)類有必要誕生,那么在代碼的編寫中,該類的抽象概念將一再重復(fù)出現(xiàn),猿猴對(duì)它的理解也越來越清晰,從而,水到渠成地把它造出來。所有非需求推動(dòng),非代碼推動(dòng)的,拍著腦袋,想當(dāng)然的造類行為,都是在臆造抽象,脫離實(shí)際生活的藝術(shù),最終將被淘汰。

類的設(shè)計(jì),其著眼點(diǎn)在于用必要的數(shù)據(jù)來完整表達(dá)一個(gè)清晰的概念。而繼承,則是對(duì)類的概念進(jìn)行細(xì)化,也就是分類,好比說生物下面開出來動(dòng)物、植物這兩個(gè)子類,就是把生物分成動(dòng)物、植物這兩類,繼承與日常生活的分類不太一樣,繼承的分類方式是開放式,根據(jù)需要,隨時(shí)可以添加新的子類別。整個(gè)類的體系,是一顆嚴(yán)格的單根樹,任何類只能有一個(gè)根類。從任何類開始,只能有一條路徑回溯到最開始的根類,java、C#中就是Object,所有的類都派生自Object,這是一棵大樹。單根系下,萬物皆是對(duì)象,這自然很方便,起碼,這就從語言層面上直接支持c++ std的垃圾any了。而由于java、C#完善的反射信息,拋棄靜態(tài)類型信息,也可以做動(dòng)態(tài)語言層面上的事情,而cc++void*,所有的動(dòng)態(tài)類型信息全部都在猿猴的大腦中。java平臺(tái)上生存著大把的動(dòng)態(tài)語言,而且,性能都還很不錯(cuò)。

相對(duì)很多語言來說,c++就是怪胎就是異數(shù),自有其自身的設(shè)計(jì)哲學(xué),它是多根系的,它不可能也沒必要搞成單根系,當(dāng)然,我們可以假設(shè)一個(gè)空類,然后所有的類都默認(rèn)繼承自這個(gè)空類。c++的所有類組成一個(gè)森林,森林里的樹都長自大地。但是不管怎么說都好,只能允許單繼承,千萬不要有多繼承,這是底線,千萬千萬不能違背(當(dāng)然,奇技淫巧的場合,就不必遵守這個(gè)戒條,多繼承千般不是,但是不可或缺,因?yàn)樗梢酝娉鰜砗芏嗷樱⑶叶己軐?shí)用很必要)。最起碼,單根系出來的內(nèi)存布局直觀可預(yù)測,一定程度上跨編譯器,只有良好的內(nèi)存布局,才有望良好的二進(jìn)制復(fù)用。另外,父類對(duì)子類一無所知,不要引用到子類一丁點(diǎn)的信息,要保持這種信息的單向流動(dòng)性。

在這種單根系的等級(jí)分明的階級(jí)體系下,一切死氣沉沉,沒有一點(diǎn)點(diǎn)的社會(huì)活力。顯然,只有同屬于同一父類的類別之間,才能共享那么一丁點(diǎn)可憐的共性。如果沒有接口搗亂,將是怎樣的悲劇,最好的例子,mfc,真是厲害,沒有用到接口,居然可以做出來嚴(yán)謹(jǐn)滿足大多數(shù)需要的gui框架,沒有接口,并不表示它不需要,因?yàn)?/span>mfc開了后門,用上了更厲害的玩意----消息發(fā)送,即便如此,mfc有些地方的基類還有依賴到子類,這就很讓人無語了。

c++下,類的設(shè)計(jì)絕對(duì)不對(duì)兒戲,一定要清楚自己想要的是什么,抽象出來的概念才不會(huì)變成垃圾。大而全的類,遠(yuǎn)遠(yuǎn)不如幾個(gè)小而專的細(xì)類。javaC#下的類開發(fā)很方便,但是粒度過大,把一攬子的東西都丟給你,強(qiáng)賣強(qiáng)買,反正只要類一定義,必然相應(yīng)的就會(huì)出現(xiàn)一大坨完善的反射信息,而對(duì)象里面也包含了一些無關(guān)緊要的成員字段,而對(duì)象的訪問,也全部都是間接引用的訪問,雖然,現(xiàn)在計(jì)算機(jī)性能過剩,這些都無傷大雅。c++給了開發(fā)者最大的選擇,而搞c++的猿猴,基本上都智力過剩,對(duì)于每種選擇,都清楚其背后的代價(jià)以及所要到達(dá)的目的,所以雖然開發(fā)時(shí)候,存在心智包袱影響開發(fā)效率,但是,但內(nèi)心就不會(huì)存在什么性能包袱的負(fù)罪感。就個(gè)人而言,還是喜歡c++這種最高自由度的語言,有時(shí)候,對(duì)于內(nèi)存最細(xì)致的控制,可以得到更精簡的設(shè)計(jì),這里無關(guān)運(yùn)行性能,好比說,在c++中,只要內(nèi)存布局一致,即便是不同類型的對(duì)象,通過強(qiáng)制類型轉(zhuǎn)換來統(tǒng)一對(duì)待,進(jìn)而做匪夷所思之事,好比COM里面,為了聚合復(fù)用,一個(gè)類,竟然可以針對(duì)同一個(gè)接口提供兩套實(shí)現(xiàn)方式。這種方便,在其他強(qiáng)類型語言中是不支持的。

某種意義上講,c++在面向?qū)ο笊咸峁┑恼Z言機(jī)制,就是為了方便地生成各種內(nèi)存布局,以及此內(nèi)存布局上所能支持的操作,虛函數(shù)用以生成一堆成員函數(shù)指針,繼承則用以方便地生成一坨成員字段,……。所以,c++的面向?qū)ο缶褪敲嫦騼?nèi)存布局地設(shè)計(jì),而多繼承、虛繼承、模板這些鬼東西很容易就導(dǎo)致內(nèi)存布局的失控,不過,如果使用得當(dāng),卻又有鬼斧神工之奇效,創(chuàng)造出來其他語言所沒有的奇跡。真的,論動(dòng)態(tài)行為藝術(shù),任何語言在c++這個(gè)大人面前都是幼兒園里的小學(xué)生。

為了引出接口,本座花大力氣做科普。這也沒辦法,因?yàn)轭愲m然是基礎(chǔ),但是靜態(tài)面向?qū)ο蟮木A,全部都在接口上。只有清晰明確類的功能職責(zé),才能理解接口的必要性以及其多樣性。那么,可不可以只有接口,沒有類的。可以,就好像com那樣子,而代價(jià)是,使用起來,各種不方便。這個(gè)世界,從來就不存在包治百病之萬能藥。什么事情都能做的意思就是什么都做不好。

posted on 2017-07-14 11:48 華夏之火 閱讀(1415) 評(píng)論(0)  編輯 收藏 引用 所屬分類: c++技術(shù)探討

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(6)

隨筆分類

隨筆檔案

搜索

積分與排名

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久精品动漫| 国产精品美女一区二区在线观看| 久久综合影音| 欧美三级乱码| 欧美激情亚洲视频| 欧美日本一区二区视频在线观看| 欧美黑人在线播放| 欧美日韩另类在线| 国产精品成av人在线视午夜片| 欧美午夜在线视频| 国产日韩欧美在线| 亚洲第一在线综合在线| 亚洲级视频在线观看免费1级| 亚洲精品免费电影| 亚洲视频在线一区观看| 久久成人免费视频| 免费在线看一区| 亚洲精品在线观看免费| 亚洲午夜久久久久久尤物 | 美日韩精品免费观看视频| 久久亚洲精选| 最近中文字幕日韩精品| 最新国产の精品合集bt伙计| 亚洲最黄网站| 久久不射中文字幕| 欧美日韩精品免费看| 国产精品欧美日韩一区二区| 国内精品视频久久| 日韩亚洲欧美成人| 欧美中在线观看| 亚洲国产成人久久| 性欧美1819性猛交| 欧美日韩久久久久久| 韩日视频一区| 亚洲制服丝袜在线| 欧美成人精品一区| 亚洲欧美国产不卡| 欧美日本亚洲韩国国产| 国语自产精品视频在线看| 一区二区三区|亚洲午夜| 久久爱www久久做| 亚洲七七久久综合桃花剧情介绍| 欧美影院成年免费版| 欧美三级欧美一级| 亚洲欧洲精品一区二区三区波多野1战4 | 国产精品大片| 亚洲国产天堂久久综合| 久久精品日韩| 亚洲综合欧美| 欧美日韩中文在线观看| 亚洲精华国产欧美| 蜜臀99久久精品久久久久久软件| 亚洲图片自拍偷拍| 欧美日韩在线播放三区四区| 亚洲国产一区二区三区青草影视 | 亚洲一区二区免费在线| 久久在线免费观看视频| 一区二区三区视频在线观看 | 久久久久久久久久久久久久一区| 国产精品高潮在线| 亚洲一区二区视频| 日韩视频一区二区在线观看 | 国产精品草草| 亚洲欧美日韩精品久久亚洲区| 亚洲三级免费观看| 欧美精品入口| 99精品国产热久久91蜜凸| 亚洲福利电影| 欧美日韩国产精品一区二区亚洲| 一区二区欧美精品| 亚洲精品视频在线看| 欧美区国产区| 亚洲一本视频| 性做久久久久久| 国产日韩欧美在线看| 午夜在线a亚洲v天堂网2018| 亚洲精品视频在线观看免费| 欧美日韩综合视频| 日韩视频专区| 午夜精品久久久久影视| 99精品久久| 欧美久久一区| 亚洲一区二区欧美| 在线亚洲观看| 国产精品女人网站| 免费亚洲电影在线观看| 久久综合色8888| 亚洲国产精品一区在线观看不卡| 免费欧美电影| 女人香蕉久久**毛片精品| 亚洲精品久久久久久一区二区| 亚洲电影毛片| 欧美大香线蕉线伊人久久国产精品| 亚洲国产欧洲综合997久久| 欧美成人免费va影院高清| 麻豆精品精华液| 日韩午夜av在线| 亚洲一区二区三区在线看| 久久九九久精品国产免费直播| 怡红院精品视频| 欧美国产一区二区| 欧美三级午夜理伦三级中文幕 | 国产乱码精品一区二区三| 欧美一级电影久久| 欧美在线视频全部完| 在线看国产一区| 国产欧美日本| 久久久久久噜噜噜久久久精品| 亚洲欧洲日本国产| 亚洲一区日本| 黄网动漫久久久| 亚洲国产成人91精品| 国产精品国产三级国产专播精品人| 久久av免费一区| 欧美a级大片| 香蕉乱码成人久久天堂爱免费| 久久精品综合一区| 久久视频在线看| 亚洲在线视频| 久久这里有精品视频| 在线视频欧美日韩| 亚洲尤物在线| 亚洲日本理论电影| 亚洲欧美日韩精品在线| 亚洲国产日韩综合一区| 欧美二区在线| 亚洲高清自拍| 亚洲欧美国产不卡| 一二美女精品欧洲| 久久久女女女女999久久| 亚洲午夜激情网页| 久久天天躁狠狠躁夜夜av| 亚洲影院在线| 国产精品久久久999| 欧美成人亚洲成人日韩成人| 国产精品久久久久久久久婷婷| 欧美成人激情视频免费观看| 国产欧美日韩另类一区| 亚洲精品国产系列| 国外成人在线| 亚洲高清免费视频| 国产一区再线| 亚洲欧美成人在线| 亚洲永久字幕| 国产精品v一区二区三区| 亚洲国产美女精品久久久久∴| 国产精品久久久久久影院8一贰佰| 最新日韩在线| 黄色欧美日韩| 久久蜜臀精品av| 久久精视频免费在线久久完整在线看| 国产精品久久久久久影院8一贰佰 国产精品久久久久久影视 | 午夜免费久久久久| 欧美另类综合| 最新69国产成人精品视频免费| 亚洲国产美女久久久久| 久久久久久一区二区三区| 欧美主播一区二区三区| 国产精品亚洲аv天堂网| 美女999久久久精品视频| 最近中文字幕mv在线一区二区三区四区| 欧美在线观看一区二区三区| 午夜亚洲影视| 国产精品尤物| 亚久久调教视频| 久久久久久香蕉网| 黄色国产精品| 欧美性色aⅴ视频一区日韩精品| 亚洲美女尤物影院| 这里只有精品丝袜| 亚洲欧洲一区二区天堂久久| 欧美日韩日韩| 夜夜嗨av色一区二区不卡| 99日韩精品| 国产精品高清免费在线观看| 亚洲综合电影| 久久一区亚洲| 亚洲精品久久视频| 欧美日韩美女在线| 一区二区激情| 欧美一区二区日韩一区二区| 麻豆av一区二区三区久久| 一区二区三区精品视频在线观看| 亚洲主播在线| 国产一区二区三区久久| 老色鬼久久亚洲一区二区| 亚洲人体偷拍| 亚洲欧美制服另类日韩| 久热这里只精品99re8久| 亚洲综合色激情五月| 久久久噜噜噜久久狠狠50岁| 亚洲黄色片网站| 国产精品久久久久久久久久直播| 欧美一区二视频在线免费观看| 免费不卡视频| 国产精品久久久久av免费| 欧美国产日本在线| 亚洲欧美日韩国产成人| 欧美成人综合一区| 亚洲午夜电影|