精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如此理解面向對象編程

開發 后端
先看這篇教程是怎么來講述OOP的。它先給了下面這個問題,這個問題需要輸出一段關于操作系統的文字:假設Unix很不錯,Windows很差。

從Rob Pike 的 Google+上的一個推看到了一篇叫《Understanding Object Oriented Programming》的文章,我先把這篇文章簡述一下,然后再說說老牌黑客Rob Pike的評論。

先看這篇教程是怎么來講述OOP的。它先給了下面這個問題,這個問題需要輸出一段關于操作系統的文字:假設Unix很不錯,Windows很差。

這個把下面這段代碼描述成是Hacker Solution。(這幫人覺得下面這叫黑客?我估計這幫人真是沒看過C語言的代碼)

 

  1. public class PrintOS 
  2.     public static void main(final String[] args) 
  3.     { 
  4.         String osName = System.getProperty("os.name") ; 
  5.         if (osName.equals("SunOS") || osName.equals("Linux")) 
  6.         { 
  7.             System.out.println("This is a UNIX box and therefore good.") ; 
  8.         } 
  9.         else if (osName.equals("Windows NT") || osName.equals("Windows 95")) 
  10.         { 
  11.             System.out.println("This is a Windows box and therefore bad.") ; 
  12.         } 
  13.         else 
  14.         { 
  15.             System.out.println("This is not a box.") ; 
  16.         } 
  17.     } 

然后開始用面向對象的編程方式一步一步地進化這個代碼。

先是以過程化的思路來重構之。

過程化的方案

  1. public class PrintOS 
  2.     private static String unixBox() 
  3.     { 
  4.         return "This is a UNIX box and therefore good." ; 
  5.     } 
  6.     private static String windowsBox() 
  7.     { 
  8.         return "This is a Windows box and therefore bad." ; 
  9.     } 
  10.     private static String defaultBox() 
  11.     { 
  12.         return "This is not a box." ; 
  13.     } 
  14.     private static String getTheString(final String osName) 
  15.     { 
  16.         if (osName.equals("SunOS") || osName.equals("Linux")) 
  17.         { 
  18.             return unixBox() ; 
  19.         } 
  20.         else if (osName.equals("Windows NT") ||osName.equals("Windows 95")) 
  21.         { 
  22.             return windowsBox() ; 
  23.         } 
  24.         else 
  25.         { 
  26.             return defaultBox() ; 
  27.         } 
  28.     } 
  29.     public static void main(final String[] args) 
  30.     { 
  31.         System.out.println(getTheString(System.getProperty("os.name"))) ; 
  32.     } 

然后是一個幼稚的面向對象的思路。

幼稚的面向對象編程

PrintOS.java

  1. public class PrintOS 
  2.     public static void main(final String[] args) 
  3.     { 
  4.         System.out.println(OSDiscriminator.getBoxSpecifier().getStatement()) ; 
  5.     } 

OSDiscriminator.java

  1. public class OSDiscriminator // Factory Pattern 
  2.     private static BoxSpecifier theBoxSpecifier = null ; 
  3.     public static BoxSpecifier getBoxSpecifier() 
  4.     { 
  5.         if (theBoxSpecifier == null
  6.         { 
  7.             String osName = System.getProperty("os.name") ; 
  8.             if (osName.equals("SunOS") || osName.equals("Linux")) 
  9.             { 
  10.                 theBoxSpecifier = new UNIXBox() ; 
  11.             } 
  12.             else if (osName.equals("Windows NT") || osName.equals("Windows 95")) 
  13.             { 
  14.                 theBoxSpecifier = new WindowsBox() ; 
  15.             } 
  16.             else 
  17.             { 
  18.                 theBoxSpecifier = new DefaultBox () ; 
  19.             } 
  20.         } 
  21.         return theBoxSpecifier ; 
  22.     } 

BoxSpecifier.java

  1. public interface BoxSpecifier 
  2.     String getStatement() ; 

DefaultBox.java

  1. public class DefaultBox implements BoxSpecifier 
  2.     public String getStatement() 
  3.     { 
  4.         return "This is not a box." ; 
  5.     } 

UNIXBox.java

  1. public class UNIXBox implements BoxSpecifier 
  2.     public String getStatement() 
  3.     { 
  4.         return "This is a UNIX box and therefore good." ; 
  5.     } 

WindowsBox.java

  1. public class WindowsBox implements BoxSpecifier 
  2.     public String getStatement() 
  3.     { 
  4.         return "This is a Windows box and therefore bad." ; 
  5.     } 

他們覺得上面這段代碼沒有消除if語句,他們說這叫代碼的“logic bottleneck”(邏輯瓶頸),因為如果你要增加一個操作系統的判斷的話,你不但要加個類,還要改那段if-else的語句。

所以,他們整出一個叫Sophisticated的面向對象的解決方案。

#p#

OO大師的方案

注意其中的Design Pattern

PrintOS.java

 

  1. public class PrintOS 
  2.     public static void main(final String[] args) 
  3.     { 
  4.         System.out.println(OSDiscriminator.getBoxSpecifier().getStatement()) ; 
  5.     } 

OSDiscriminator.java

  1. public class OSDiscriminator // Factory Pattern 
  2.     private static java.util.HashMap storage = new java.util.HashMap() ; 
  3.   
  4.     public static BoxSpecifier getBoxSpecifier() 
  5.     { 
  6.         BoxSpecifier value = (BoxSpecifier)storage.get(System.getProperty("os.name")) ; 
  7.         if (value == null
  8.             return DefaultBox.value ; 
  9.         return value ; 
  10.     } 
  11.     public static void register(final String key, final BoxSpecifier value) 
  12.     { 
  13.         storage.put(key, value) ; // Should guard against null keys, actually. 
  14.     } 
  15.     static 
  16.     { 
  17.         WindowsBox.register() ; 
  18.         UNIXBox.register() ; 
  19.         MacBox.register() ; 
  20.     } 

BoxSpecifier.java

  1. public interface BoxSpecifier 
  2.     String getStatement() ; 

DefaultBox.java

  1. public class DefaultBox implements BoxSpecifier // Singleton Pattern 
  2.     public static final DefaultBox value = new DefaultBox () ; 
  3.     private DefaultBox() { } 
  4.     public String getStatement() 
  5.     { 
  6.         return "This is not a box." ; 
  7.     } 

UNIXBox.java

  1. public class UNIXBox implements BoxSpecifier // Singleton Pattern 
  2.     public static final UNIXBox value = new UNIXBox() ; 
  3.     private UNIXBox() { } 
  4.     public  String getStatement() 
  5.     { 
  6.         return "This is a UNIX box and therefore good." ; 
  7.     } 
  8.     public static final void register() 
  9.     { 
  10.         OSDiscriminator.register("SunOS", value) ; 
  11.         OSDiscriminator.register("Linux", value) ; 
  12.     } 

WindowsBox.java

  1. public class WindowsBox implements BoxSpecifier  // Singleton Pattern 
  2.     public  static final WindowsBox value = new WindowsBox() ; 
  3.     private WindowsBox() { } 
  4.     public String getStatement() 
  5.     { 
  6.         return "This is a Windows box and therefore bad." ; 
  7.     } 
  8.     public static final void register() 
  9.     { 
  10.         OSDiscriminator.register("Windows NT", value) ; 
  11.         OSDiscriminator.register("Windows 95", value) ; 
  12.     } 

MacBox.java

  1. public class MacBox implements BoxSpecifier // Singleton Pattern 
  2.     public static final MacBox value = new MacBox() ; 
  3.     private MacBox() { } 
  4.     public  String getStatement() 
  5.     { 
  6.         return "This is a Macintosh box and therefore far superior." ; 
  7.     } 
  8.     public static final void register() 
  9.     { 
  10.         OSDiscriminator.register("Mac OS", value) ; 
  11.     } 

作者還非常的意地說,他加了一個“Mac OS”的東西。老實說,當我看到最后這段OO大師搞出來的代碼,我快要吐了。我瞬間想到了兩件事:一個是以前酷殼上的《面向對象是個騙局》和 《各種流行的編程方式》中說的“設計模式驅動編程”,另一個我想到了那些被敏捷洗過腦的程序員和咨詢師,也是這種德行。

于是我去看了一下第一作者Joseph Bergin的主頁,這個Ph.D是果然剛剛完成了一本關于敏捷和模式的書。

Rob Pike的評論

(Rob Pike是當年在Bell lab里和Ken一起搞Unix的主兒,后來和Ken開發了UTF-8,現在還和Ken一起搞Go語言。注:不要以為Ken和Dennis是基友,其實他們才是真正的老基友!)

Rob Pike在他的Google+的這貼里評論到這篇文章——

他并不確認這篇文章是不是搞笑?但是他覺得這些個寫這篇文章是很認真的。他說他要評論這篇文章是因為他們是一名Hacker,至少這個詞出現在這篇文章的術語中。

他說,這個程序根本就不需要什么Object,只需要一張小小的配置表格,里面配置了對應的操作系統和你想輸出的文本。這不就完了。這么簡單的設 計,非常容易地擴展,他們那個所謂的Hack Solution完全就是笨拙的代碼。后面那些所謂的代碼進化相當瘋狂和愚蠢的,這個完全誤導了對編程的認知。

然后,他還說,他覺得這些OO的狂熱份子非常害怕數據,他們喜歡用多層的類的關系來完成一個本來只需要檢索三行數據表的工作。他說他曾經聽說有人在他的工作種用各種OO的東西來替換While循環。(我聽說中國Thoughtworks那幫搞敏捷的人的確喜歡用Object來替換所有的if-else語句,他們甚至還喜歡把函數的行數限制在10行以內)

他還給了一個鏈接http://prog21.dadgum.com/156.html,你可以讀一讀。最后他說,OOP的本質就是——對數據和與之關聯的行為進行編程。便就算是這樣也不完全對,因為:

Sometimes data is just data and functions are just functions.

我的理解

我覺得,這篇文章的例子舉得太差了,差得感覺就像是OO的高級黑。面向對象編程注重的是:1)數據和其行為的打包封裝,2)程序的接口和實現的解耦。你那怕,舉一個多個開關和多個電器的例子,不然就像STL中,一個排序算法對多個不同容器的例子,都比這個例子要好得多得多。老實說,Java SDK里太多這樣的東西了。

我以前給一些公司講一些設計模式的培訓課,我一再提到,那23個經典的設計模式和OO半毛錢關系沒有,只不過人家用OO來實現罷了。設計模式就三個準則:1)中意于組合而不是繼承,2)依賴于接口而不是實現,3)高內聚,低耦合。你看,這完全就是Unix的設計準則

原文鏈接:http://coolshell.cn/articles/8745.html

責任編輯:陳四芳 來源: 酷殼網
相關推薦

2012-12-18 09:24:47

2024-01-03 13:38:00

C++面向對象編程OOP

2017-04-21 09:07:39

JavaScript對象編程

2012-01-17 09:34:52

JavaScript

2012-06-07 10:11:01

面向對象設計原則Java

2010-11-17 11:31:22

Scala基礎面向對象Scala

2022-07-30 23:41:53

面向過程面向對象面向協議編程

2012-12-13 11:01:42

IBMdW

2023-10-25 13:42:19

Java面向對象

2012-02-27 09:30:22

JavaScript

2011-05-25 10:21:44

Javascript

2019-03-26 10:50:22

Python面向對象編程語言

2011-06-28 11:06:16

Scala

2023-01-10 09:06:17

2010-07-13 17:18:29

Perl面向對象編程

2010-07-16 17:23:57

Perl面向對象編程

2023-12-11 15:32:30

面向對象編程OOPpython

2010-07-13 13:06:41

Perl面向對象

2011-05-25 10:59:26

Javascript繼承

2023-11-30 08:00:54

面向對象面向切面
點贊
收藏

51CTO技術棧公眾號

亚洲中文字幕久久精品无码喷水| 精品无人区一区二区三区| 国产三级在线观看完整版| 色综合一区二区日本韩国亚洲| 亚洲日本乱码在线观看| 国产亚洲精品久久飘花| 久久久久亚洲视频| 欧美午夜久久| 亚洲天堂免费在线| 四虎1515hh.com| 欧美gay视频| 亚洲免费视频成人| 茄子视频成人在线观看| 亚洲精品成av人片天堂无码| 玖玖在线精品| 欧美俄罗斯性视频| а天堂中文在线资源| 国产成人在线中文字幕| 欧美视频在线观看一区二区| 人体内射精一区二区三区| 视频免费一区| 不卡的av在线播放| 国产伊人精品在线| 亚洲成人第一网站| 1000部精品久久久久久久久| www.国产一区| 国产精品一二三区在线观看| a级日韩大片| 欧美精品日韩综合在线| 国产a级一级片| 成人在线免费观看黄色| 亚洲丝袜精品丝袜在线| 欧美午夜精品久久久久久蜜| 手机看片福利在线| 国产成人av电影在线观看| 国产日韩一区在线| 天堂网视频在线| 亚洲男人影院| 久久免费精品视频| 久久机热这里只有精品| 欧美在线二区| 久久夜色精品国产| gv天堂gv无码男同在线观看| 欧美久久精品一级c片| 欧美成人aa大片| 亚洲欧美激情一区二区三区| 国产va免费精品观看精品| 欧美另类z0zxhd电影| 国产理论在线播放| 成人黄色视屏网站| 欧美中文字幕一区二区三区亚洲| 免费男同深夜夜行网站| 成人自拍av| 91激情五月电影| 欧美少妇性生活视频| 中文字幕这里只有精品| 狠狠躁天天躁日日躁欧美| 欧美一区二区中文字幕| 欧美男人天堂| 日韩欧美精品在线观看| 91精品91久久久中77777老牛| √8天堂资源地址中文在线| 亚洲444eee在线观看| 日韩精品xxxx| 欧美在线va视频| 欧美无人高清视频在线观看| 中文字幕第100页| 91麻豆精品一二三区在线| 91精品一区二区三区在线观看| www午夜视频| 精品一区二区三区四区五区 | 一级特黄色大片| 国产一二三精品| 成人免费视频视频在| 天天操天天干天天干| 久久久国际精品| 一区二区三区av在线| 影音先锋男人资源在线| 亚洲高清在线视频| 久久婷婷国产精品| 亚洲成人高清| 精品国产乱码久久久久久闺蜜| 一级性生活毛片| 91日韩欧美| 久久久久久高潮国产精品视| 国产一级片毛片| 极品少妇xxxx精品少妇| 国产精品xxxx| 成人免费高清在线播放| 亚洲男同性恋视频| 国产免费黄色av| 国产精品.xx视频.xxtv| 欧美精品一区二区久久久| 黄色片网站免费| 午夜日韩激情| 国产精品jizz在线观看麻豆| 国产高清精品软件丝瓜软件| 亚洲第一网站男人都懂| 特级黄色录像片| 久久青草伊人| 制服丝袜亚洲播放| 亚洲成人av免费在线观看| 日韩欧美综合| 97久久精品人人澡人人爽缅北| 国产一区免费看| 国产69精品久久99不卡| 色狠狠久久av五月综合|| 国产第一页在线| 欧美日韩情趣电影| 麻豆国产精品一区| 欧美久久久久| 国产欧美精品va在线观看| 婷婷在线免费观看| 亚洲三级在线看| 亚洲精品一二三四五区| 国产丝袜一区| 免费不卡欧美自拍视频| 中文字幕福利视频| 26uuu精品一区二区| 日韩美女爱爱视频| 国产情侣一区在线| 在线视频一区二区| 久久青青草原亚洲av无码麻豆| 国产伦精品一区二区三区免费 | 亚洲免费在线观看视频| www.精品在线| 九九免费精品视频在线观看| 97涩涩爰在线观看亚洲| 国产成人精品毛片| 1区2区3区精品视频| 亚洲一区二区蜜桃| 亚洲小说图片| 欧美在线视频网站| 天天操天天干天天操| 亚洲国产精品一区二区www| 污污视频在线免费| 国产二区精品| 91精品在线影院| 日本中文字幕在线观看| 在线看一区二区| 中文字幕一二三四区| aa级大片欧美三级| 精品91免费| 国产污视频在线播放| 亚洲第一精品夜夜躁人人爽| 麻豆一区二区三区精品视频| 国产成人高清视频| 2019日韩中文字幕mv| 国产精品高潮呻吟久久久久| 欧美黄色片在线观看| 亚洲精品第五页| 亚洲一区二区在线播放相泽 | 久久久久久久久免费| 日韩免费毛片视频| 国产真实有声精品录音| 国产精品久久久久久久天堂 | 欧美国产乱视频| 亚洲国产剧情在线观看| 亚洲国产人成综合网站| 插我舔内射18免费视频| 亚洲在线观看| 婷婷精品国产一区二区三区日韩| 欧美91在线|欧美| 久久中文字幕一区| 亚洲第一页在线观看| 亚洲成av人片在线观看无码| 99久久久久久久久久| 日韩和欧美一区二区三区| 亚洲一区二区在线免费观看| 狂野欧美xxxx韩国少妇| 久久久久久亚洲| 日韩精品一二| 欧美日韩在线三级| 在线免费日韩av| 99re这里只有精品视频首页| 毛葺葺老太做受视频| 香蕉久久网站| 国内精品二区| 欧美91在线|欧美| 久久久噜噜噜久久中文字免| 黄色av免费在线看| 欧美一区二区视频在线观看| 日本视频免费在线| 国产农村妇女精品| 美女日批在线观看| 久久午夜精品一区二区| 正在播放一区| 特黄特色欧美大片| 亚洲aaaaaa| 日韩伦理精品| www.亚洲免费视频| 五月婷婷伊人网| 欧美一级日韩不卡播放免费| 色婷婷av国产精品| 中文字幕一区二区三区乱码在线| 亚洲视频在线播放免费| 精品一区二区在线免费观看| 亚洲熟妇av日韩熟妇在线| 日韩精品午夜| 精品欧美一区二区三区久久久| 久久精品资源| 91成人精品网站| 欧美成人二区| 亚洲男人天堂久| a天堂中文在线观看| 日本高清视频一区二区| 精品少妇一二三区| 国产精品美女视频| 精品少妇一区二区三区免费观| 国产麻豆精品久久一二三| 欧美精品无码一区二区三区| 亚洲一本视频| 亚洲一区 在线播放| av一区二区高清| 国产偷国产偷亚洲高清97cao| 四虎国产精品永久在线国在线| 77777少妇光屁股久久一区| 91国内在线| 色yeye香蕉凹凸一区二区av| 色久视频在线播放| 亚洲成人精品av| 国产喷水吹潮视频www| 在线观看一区二区精品视频| 国产九色在线播放九色| 亚洲一区二区三区视频在线| 免费国产羞羞网站美图| 欧美国产视频在线| 成人免费网站黄| 成人av电影在线观看| 午夜性福利视频| 国产在线麻豆精品观看| 色乱码一区二区三区在线| 日本欧美一区二区在线观看| 久草在在线视频| 久久久一二三| 国产淫片av片久久久久久| 午夜在线一区| 国产a级片免费观看| 午夜综合激情| 中文字幕无码不卡免费视频| 美女尤物久久精品| 国产主播在线看| 母乳一区在线观看| 日韩一级在线免费观看| 免费看的黄色欧美网站| av动漫免费看| 日本在线不卡一区| 簧片在线免费看| 蜜桃91丨九色丨蝌蚪91桃色| 2025韩国理伦片在线观看| 奇米在线7777在线精品| 欧美三级理论片| 日韩精品三区四区| 亚洲色图久久久| 韩国精品在线观看| 欧美熟妇精品一区二区| 成人app下载| 久久午夜夜伦鲁鲁片| 久久久亚洲精品石原莉奈| 中文字幕欧美激情极品| 国产精品嫩草影院com| 色欲人妻综合网| 亚洲午夜电影在线| av黄色在线看| 欧美日韩中字一区| 国产精品午夜福利| 精品不卡在线视频| 麻豆av电影在线观看| 最近2019好看的中文字幕免费| 黄色网址免费在线观看| 97视频在线免费观看| 欧美色999| av成人免费观看| 猛男gaygay欧美视频| 自拍偷拍一区二区三区| 亚洲精一区二区三区| 男女无套免费视频网站动漫| 国内不卡的二区三区中文字幕 | 欧美精品福利视频| 天堂电影一区| 91视频国产一区| 日韩大胆成人| 中文一区一区三区免费| 影院欧美亚洲| 欧美大尺度做爰床戏| 成人中文字幕电影| 韩国三级hd中文字幕| 亚洲精品国产视频| 中文字幕69页| 日韩精品自拍偷拍| 精品一二三区视频| 欧美日本国产在线| 日本综合视频| 国产精品区一区| 97精品视频在线看| 国产l精品国产亚洲区久久| 狠狠色丁香婷婷综合久久片| 青青草视频播放| 亚洲欧美日韩国产手机在线| 国产精品久久久久久久久久精爆| 91精品国产入口在线| 国产在线视频福利| 欧美激情亚洲自拍| 91精品亚洲一区在线观看| 久久久综合亚洲91久久98| 中文字幕一区二区三三| 国产福利影院在线观看| 99久久婷婷国产综合精品电影| 国产人妻精品一区二区三区不卡 | 国产男男gay网站| 国产婷婷97碰碰久久人人蜜臀 | 免费黄色在线播放| 国产精品日日摸夜夜摸av| 久久久国产精品成人免费| 日韩欧美成人午夜| 九七久久人人| 国产精品91久久| 偷窥自拍亚洲色图精选| www.国产在线播放| 国产aⅴ综合色| 男的操女的网站| 欧美绝品在线观看成人午夜影视| 欧美日韩国产中文字幕在线| 高清欧美性猛交xxxx| 亚洲无线观看| 欧美另类videosbestsex日本| 九九视频精品免费| xxxxx99| 91极品美女在线| 国产资源在线观看| 日韩av123| 曰本一区二区三区视频| 成人在线免费在线观看| 99久久99久久综合| 日本免费观看视| 日韩高清有码在线| 电影在线观看一区| 精品免费视频123区| 99精品免费视频| 一二三不卡视频| 精品国产电影一区| 天堂а在线中文在线无限看推荐| 欧美极品欧美精品欧美视频| 成人香蕉社区| 六月婷婷在线视频| 99re热这里只有精品免费视频| 97人人澡人人爽人人模亚洲| 亚洲精品www久久久| 欧美裸体视频| 日韩高清国产一区在线观看| 男女性色大片免费观看一区二区 | 欧美女人交a| 岛国av免费观看| 亚洲1区2区3区4区| 日本亚洲欧美| 国产精品久久久久久一区二区| 久久国产综合| 亚洲一区二区中文字幕在线观看| 亚洲美女一区二区三区| 亚洲国产精品一| 日本久久中文字幕| 久久综合成人| 无码人妻丰满熟妇啪啪网站| 欧美日韩国产精品一区二区三区四区| 日韩欧美在线观看一区二区| 国产精品第3页| 亚洲午夜精品一区二区国产| 无码人妻丰满熟妇区毛片蜜桃精品 | 男女羞羞视频在线观看| 国产亚洲精品久久飘花| 久热精品在线| 免费在线观看h片| 亚洲国产精品久久久| 午夜欧美巨大性欧美巨大| 最近中文字幕免费mv| 97se亚洲国产综合自在线观| aaa在线视频| 久久手机精品视频| 国产精品色在线网站| 不卡av免费在线| 樱桃国产成人精品视频| 性xxxxbbbb| 成人女保姆的销魂服务| 亚洲国产导航| 1024手机在线观看你懂的| 日韩视频中午一区| 成人看片网站| 国产美女永久无遮挡| 中文字幕精品在线不卡| 亚洲精品字幕在线观看| 国产97免费视| 激情欧美亚洲| 长河落日免费高清观看| 精品国产一区久久| 日日av拍夜夜添久久免费| 永久免费看av| 欧美国产精品中文字幕| 日批视频免费播放| 91精品久久久久久久久久| 香蕉精品999视频一区二区|