天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

面向對象編程:這里我說了算!

  英文原文:I give the orders around here! 

  自從 9 歲那年得到第一臺 Commodore 64 家用電腦起,我就開始編程。然而,當面對如何寫出好的代碼時,我仍然感覺自己還有很多要學的。

  在探索如何提高自己的過程中,我學了很多種語言。大多數是以面向對象為主的(OO)。

  然而,讓我驚訝的是,在我讀過的大多數書本、雜志和網上文章中,有著大量遭透了的被當作面向對象例子的代碼。

  這些代碼中,我看到的最多被違反的原則是“命令,不要去詢問(Tell, Don’t Ask)”原則。這個原則講的是,一個對象應該命令其它對象該做什么,而不是去查詢其它對象的狀態來決定做什么(查詢其它對象的狀態來決定做什么也被稱作‘功能嫉妒(Feature Envy)’)。在面向對象的編程中,一個對象被定義成由對象狀態和操作這個狀態的方法組成。

  在《Holub on Patterns: Learning Design Patterns By Looking At Code》這本書里,Allen Holub 在第一章里有一節的標題是“為什么 getter 和 setter 方法有害”。他在 JavaWorld 上的一篇文章里也談論了這個問題。對所有的面向對象的程序員來說,這應該是一篇“必讀”文章。

  我有一些程序員同事,他們在一個對象上第一步聲明了屬性后,第二步就是添加 getter 和 setter 方法。JavaBean 規范對于這種文化的推廣負于很大的責任。人們認為這是一種能讓你寫出可復用的模塊化組建的好方法,但這已是很多年前的事了,時過境遷。

  寫帶有 getter 和 setter 方法的類會導致過程式的代碼。通過 getter 和 setter 來獲取數據進行操作的邏輯最終會遍布整個應用,進而經常導致應用內的重復(這違反了另外一個原則:DRY——不要自我重復(Don’t Repeat Yourself))。這會致使產生很難維護的代碼,當你對一個類做任何修改時,都會在整個應用內造成連鎖式的牽連。

  用這種方式來暴露數據還會妨礙你重構你的類,因為對這樣的屬性的任何修改都意味著會影響到訪問了這個屬性的其它類。

  違反“命令,不要去詢問”原則的另外一個副作用是,你的探詢最終變成嚴重依賴狀態信息并帶有很多前提條件。這會讓人很難理解你究竟詢問的是什么。

  你很可能會最終違反的第三個原則是,盡少知道(Least Knowledge)原則,也叫做得墨忒耳定律(Law Of Demeter)。這個定律可以總結為下面一句好:

一個類應該只跟它的直接朋友通話,不要跟陌生人說話。

  在類里面加入 getter 方法,你的代碼最終會寫成這樣:

if (person.getAddress () .getCountry () == "Australia") {

it知識庫面向對象編程:這里我說了算!,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久伊人网站 | 久久天天婷婷五月俺也去 | 亚洲黄色在线 | 果冻传媒在线观看网站 | 朝鲜女人性猛交 | 亚洲欧美日韩国产手机在线 | 青青青青草 | 国色天香社区视频免费高清3 | 强奷乱码欧妇女中文字幕熟女 | 野花韩国高清完整版在线 | 噜噜噜在线AV免费观看看 | 沟沟人体一区二区 | 处 女 开 破小说 | chinese东北夫妻video | 精品手机在线1卡二卡3卡四卡 | 国产高清视频在线播放www色 | 欧美性喷潮xxxx | 亚洲 欧美 制服 校园 动漫 | 久久精品电影网 | 91久久精品国产亚洲 | 性色AV乱码一区二区三区视频 | 新影音先锋男人色资源网 | 日韩一卡二卡三卡四卡免费观在线 | 黄色天堂网站 | 肉奴隷 赤坂丽在线播放 | 精品久久久爽爽久久久AV | 国产精品毛片在线视频 | 99热在线视频这里只精品 | 亚洲 欧美 日韩 精品 自拍 | 亚洲中文 字幕 国产 综合 | 十分钟免费观看大全视频 | 中文在线中文资源 | 看看妇女的B免费看 | 亚洲激情一区 | WWW污污污抽搐喷潮COM | 2020精品极品国产色在线 | 男人边吃奶边挵进去呻吟漫画 | 色哟哟网站入口在线观看视频 | 成人女人A级毛片免费软件 成人免费在线视频 | 男人私gay挠脚心vk视频 | 久久青青无码AV亚洲黑人 |