zhrb的空間

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            20 隨筆 :: 0 文章 :: 29 評(píng)論 :: 0 Trackbacks

          2010年3月2日 #

          jEdit,一款用java編寫的代碼編輯器,可定制性很強(qiáng),還有功能豐富的插件。
          官方網(wǎng)址:   http://www.jedit.org/
          先上一個(gè)官方網(wǎng)站其他人配置的圖片吧。然后隨便寫一些前陣子折騰出來(lái)的常用設(shè)置





           
           

          常用設(shè)置
              Utilities--Global Options
                  Appearance(設(shè)置外觀,其中Swing look $ feel如果設(shè)置成Metal風(fēng)格,可以更改菜單等字體大小)
                  Docking(設(shè)置插件、組件在編輯器中出現(xiàn)的位置,一般將FileBrowser設(shè)置在left,將console與Errolist設(shè)置在bottom)
                  Editing(Tab witdh設(shè)置tab的空格數(shù),Indent width設(shè)置縮進(jìn)的空格數(shù),Soft(emulated with space)tabs用空格模擬tab)
                  Gutter(編輯區(qū)左邊條狀區(qū)域)
                      1.Line numbers(顯示行號(hào)),Gutter font
                  Text Area(編輯區(qū))
                      1.Text font(字體大小)
                  View
                      1.Show full path of buffer in title bar(在標(biāo)題欄顯示打開文件的完整路徑)
                      2.show buffer switcher(buffer switcher,打開文件切換器)
                  File System Browser
                      1.Default path(打開browser時(shí)默認(rèn)打開的目錄)
                  Plugin Manager
                      1.Update mirror list(插件升級(jí)服務(wù)器鏡像列表)
                      2.Install plugins in
                          jEdit setting directory(jEdit設(shè)置目錄,在windows操作系統(tǒng)下通常是在MyDocument目錄下的 .jedit 目錄)
                          jEdit application directory(jEdit程序目錄)

          jEdit的設(shè)置目錄(.jedit)
              存放jEdit設(shè)置、插件的目錄(可以備份此文件夾來(lái)保存自己的設(shè)置與插件)位置(在windows操作系統(tǒng)下通常
          是在MyDocument目錄下的 .jedit 目錄,也可以通過(guò)菜單Utilities--TroubleShooting--Activity log查看含有 message字
          樣的信息,一般包含.jedit的信息就是jEdit的設(shè)置目錄)

          常用插件及設(shè)置
              Plugins--plugin manager
                  Install下可以選擇想要安裝的插件
                  常用的插件
                      console(控制臺(tái))
                      error list(錯(cuò)誤列表)
                      buffer tab(以標(biāo)簽頁(yè)的方式顯示打開文件)
                      code book(代碼自動(dòng)完成)
                      java style(修飾代碼風(fēng)格)
                      javainsight(反編譯)
              插件不僅需要安裝還需要設(shè)置,選擇plugin options
              常用設(shè)置
                  console(general下選擇字體大小。Character encoding選擇編碼,請(qǐng)選擇GBK,否則無(wú)法顯示中文。Compile & run,選擇編程語(yǔ)言對(duì)應(yīng)的編譯器等)
                  buffer tabs(選擇Enable BufferTabs by default)

          先寫這么多比較基礎(chǔ)的設(shè)置,還有更多強(qiáng)大功能還有待挖掘。嘿嘿
          posted @ 2010-03-02 22:49 zhrb 閱讀(7927) | 評(píng)論 (4)編輯 收藏

          2008年6月25日 #

          原帖地址:
          http://www.infoq.com/cn/articles/use-uml-to-do-system-analysis

          業(yè)務(wù)很重要...呵呵
          posted @ 2008-06-25 23:06 zhrb 閱讀(295) | 評(píng)論 (0)編輯 收藏

          轉(zhuǎn)載:奧卡姆剃刀

          發(fā)表于:2008年6月25日 22時(shí)59分0秒評(píng)論(1) 舉報(bào)本文鏈接:http://user.qzone.qq.com/2882888/blog/1214405940
          發(fā)信人: Vulcain (龍★火神), 信區(qū): Philosophy
          標(biāo)  題: 轉(zhuǎn)載:奧卡姆剃刀
          發(fā)信站: 水木社區(qū) (Wed Jun 25 22:48:38 2008), 站內(nèi)
          Phil Gibbs 著 
          杉原廣 補(bǔ)充
          柯南 譯   
            奧卡姆剃刀(Occam's Razor, Ockham's Razor)是由14世紀(jì)邏輯學(xué)家、圣方濟(jì)各會(huì)修
          士奧卡姆的威廉(William of Occam)提出的一個(gè)原理。奧卡姆(Ockham)在英格蘭的薩里郡,那是他出生的地方。
            這個(gè)原理稱為“如無(wú)必要,勿增實(shí)體”(Entities should not be multiplied
          unnecessarily)。
              威廉使用這個(gè)原理證明了許多結(jié)論,包括“通過(guò)思辨不能得出上帝存在的結(jié)論”。這使他不受羅馬教皇的歡迎?! ≡S多科學(xué)家接受或者(獨(dú)立的)提出了奧卡姆剃刀原理,例如萊布尼茲的“不可觀測(cè)事物的同一性原理”和牛頓提出的一個(gè)原則:如果某一原因既真又足以解釋自然事物的特性,則我們不應(yīng)當(dāng)接受比這更多的原因。
            對(duì)于科學(xué)家,這一原理最常見的形式是:
            當(dāng)你有兩個(gè)處于競(jìng)爭(zhēng)地位的理論能得出同樣的結(jié)論,那么簡(jiǎn)單的那個(gè)更好。
            在物理學(xué)中我們使用奧卡姆剃刀切掉形而上學(xué)的概念。愛(ài)因斯坦的狹義相對(duì)論與洛侖茲
          的理論就是一個(gè)范例。洛侖茲的理論認(rèn)為在以太中運(yùn)動(dòng)的尺收縮、鐘變慢。愛(ài)因斯坦關(guān)于空—時(shí)變換的方程與洛侖茲方程在鐘慢尺短效應(yīng)上一致,但是愛(ài)因斯坦和龐加萊(法國(guó)數(shù)學(xué)家——譯注)認(rèn)為以太不能根據(jù)洛侖茲和麥克斯韋方程組檢測(cè)到。根據(jù)奧卡姆剃刀,以太就被排除了。
            這一原理也被用來(lái)證明量子力學(xué)的不確定性。海森堡從光的量子本性和測(cè)量效應(yīng)中推出了不確定原理。
            史蒂芬·霍金在他的《時(shí)間簡(jiǎn)史》中解釋說(shuō):我們?nèi)匀豢梢韵胂瘢瑢?duì)于一些超自然的生物,存在一組完全地決定事件的定律,它們能夠觀測(cè)宇宙現(xiàn)在的狀態(tài)而不必干擾它。然而,我們?nèi)祟悓?duì)于這樣的宇宙模型并沒(méi)有太大的興趣??磥?lái),最好是采用稱為奧卡姆剃刀的原理,將理論中不能被觀測(cè)到的所有特征都割除掉。
            但是“不能確定以太的存在”和“以太的不存在”都不能僅僅根據(jù)奧卡姆剃刀推出。它可以區(qū)分兩個(gè)能做出同樣結(jié)論的理論,但是不能區(qū)分其他可能做出不同結(jié)論的理論。實(shí)驗(yàn)的證據(jù)仍然是必需的,并且奧卡姆本人支持經(jīng)驗(yàn)主義,而不是反對(duì)。
            厄恩斯特·馬赫提倡奧卡姆剃刀的一個(gè)版本,他稱作“經(jīng)濟(jì)原理”,表述為:“科學(xué)家應(yīng)該使用最簡(jiǎn)單的手段達(dá)到他們的結(jié)論,并排除一切不能被認(rèn)識(shí)到的事物”。把它引入哲學(xué)就形成了實(shí)證主義哲學(xué),即認(rèn)為某物存在但無(wú)法觀測(cè)與根本不存在是一碼事。馬赫影響了愛(ài)因斯坦關(guān)于時(shí)空不是絕對(duì)的論述,但是他(馬赫)也把實(shí)證主義應(yīng)用到分子的概念。馬赫和他的追隨者認(rèn)為分子是形而上學(xué)的概念,因?yàn)樗鼈兲《荒鼙恢苯犹綔y(cè)到。這種主張不顧分子論在解釋化學(xué)反應(yīng)和熱力學(xué)上的成功。具有諷刺意味的是,當(dāng)使用經(jīng)濟(jì)原理拋棄了以太和絕對(duì)參照系的時(shí)候,愛(ài)因斯坦幾乎同時(shí)發(fā)表了一篇關(guān)于布朗運(yùn)動(dòng)的論文,它證實(shí)了分子的實(shí)在性,這就打擊了實(shí)證主義的使用。這個(gè)故事意味著,我們不能盲目使用奧卡姆剃刀。正如愛(ài)因斯坦在他的《自傳筆記》中寫道:
            即使是大膽而天才的學(xué)者也會(huì)因?yàn)檎軐W(xué)上的偏見而妨礙他認(rèn)清事實(shí),這是一個(gè)很有趣的例子。
            人們常常引用奧卡姆剃刀的一個(gè)強(qiáng)形式,敘述如下:
            如果你有兩個(gè)原理,它們都能解釋觀測(cè)到的事實(shí),那么你應(yīng)該使用簡(jiǎn)單的那個(gè),直到發(fā)現(xiàn)更多的證據(jù)。
            對(duì)于現(xiàn)象最簡(jiǎn)單的解釋往往比較復(fù)雜的解釋更正確。
            如果你有兩個(gè)類似的解決方案,選擇最簡(jiǎn)單的。
            需要最少假設(shè)的解釋最有可能是正確的。
            ……或者以這種自我肯定的形式出現(xiàn):
            讓事情保持簡(jiǎn)單!
            注意到這個(gè)原理是如何在上述形式中被加強(qiáng)的。嚴(yán)格的說(shuō),它們應(yīng)該被稱為吝嗇定律,或者稱為樸素原則。最開始的時(shí)候我們使用奧卡姆剃刀區(qū)分能夠做出相似結(jié)論的理論。現(xiàn)在我們?cè)噲D選擇做出不同結(jié)論的理論。這不是奧卡姆剃刀的本意。我們不用檢驗(yàn)這些結(jié)論嗎?顯然最終不是這樣,除非我們處于理論的早期階段,并且還沒(méi)有為實(shí)驗(yàn)做好準(zhǔn)備。我們只是為理論的發(fā)展尋求一種指導(dǎo)。
            這個(gè)原理最早至少能追溯到亞里士多德的“自然界選擇最短的道路”。亞里士多德在相信實(shí)驗(yàn)和觀測(cè)并無(wú)必要上走得太遠(yuǎn)。樸素原理是一個(gè)啟發(fā)式的經(jīng)驗(yàn)規(guī)則,但是有些人引用它,仿佛它是一條物理學(xué)公理。它不是。它在哲學(xué)和粒子物理中使用的很好,但是在宇宙學(xué)和心理學(xué)中就不是特別好,這些領(lǐng)域中的事務(wù)往往比你想象的還要復(fù)雜?;蛟S引用莎士比亞的一句話要?jiǎng)龠^(guò)引用奧卡姆剃刀:“天地之大, 赫瑞修, 比你所能夢(mèng)想到的多出更多”(出自《哈姆雷特》,第一幕,第五景——譯注)
            樸素是主觀的,宇宙并不總是像我們認(rèn)為的那樣簡(jiǎn)單。成功的理論往往涉及到對(duì)稱、美與簡(jiǎn)單。1939年保羅·狄拉克寫道:
            研究者在把自然法則轉(zhuǎn)變?yōu)閿?shù)學(xué)形式的時(shí)候,應(yīng)該為數(shù)學(xué)的美而努力。對(duì)于簡(jiǎn)單和美的需求往往是等價(jià)的,然而當(dāng)它們發(fā)生沖突的時(shí)候,后者應(yīng)該優(yōu)先。
            吝嗇原理不能取代洞察力、邏輯和科學(xué)方法。永遠(yuǎn)也不能依靠它創(chuàng)造或者維護(hù)一個(gè)理論。作為正確性的判別方法,只有邏輯上的連貫性和實(shí)驗(yàn)的證據(jù)才是絕對(duì)的。狄拉克的理論很成功,他構(gòu)造了電子的相對(duì)論場(chǎng)方程,并用它預(yù)言了正電子。但是他并沒(méi)有主張物理學(xué)僅僅應(yīng)該基于數(shù)學(xué)的美。他完全贊同實(shí)驗(yàn)檢驗(yàn)的必要性。
            最后的結(jié)論來(lái)自愛(ài)因斯坦,他本身也是一位格言大師。他警告說(shuō):
            “萬(wàn)事萬(wàn)物應(yīng)該盡量簡(jiǎn)單,而不是更簡(jiǎn)單。” 
          --
          如果我們仔細(xì)的研究唐詩(shī)宋詞,就會(huì)發(fā)現(xiàn)里面有全部已知和未知的現(xiàn)代數(shù)學(xué)和物理學(xué)定理。現(xiàn)在我確知李衛(wèi)公所寫的春宮解說(shuō)詞里包含了費(fèi)爾馬定理的證明,但我沒(méi)法把它讀出來(lái)——這是因?yàn)橘M(fèi)爾馬定理的證明應(yīng)該是怎樣的,現(xiàn)在沒(méi)有人知道,或者說(shuō),現(xiàn)在還沒(méi)有人能夠證出費(fèi)爾馬定理。它就如隋時(shí)發(fā)明的避孕套,到唐代就失傳了,因此給了洋鬼子機(jī)會(huì),讓他們可以再發(fā)明一次。因?yàn)樗呀?jīng)失傳,所以我也不知該怎樣解釋這些說(shuō)明詞。最簡(jiǎn)單的解釋是:那是一些性交的訣竅。但是不應(yīng)該是這樣子的。不應(yīng)該的原因是有我們存在。我們的任務(wù)就是把性交的訣竅解釋成數(shù)學(xué)定理,在宋詞里找出相對(duì)論,在唐詩(shī)里找出牛頓力學(xué)。——王小波《紅拂夜奔》
          ※ 來(lái)源:·水木社區(qū) http://newsmth.net·[FROM: 210.78.58.*]
          posted @ 2008-06-25 23:03 zhrb 閱讀(384) | 評(píng)論 (0)編輯 收藏

          2008年6月2日 #

          發(fā)信人: kabbesy (Arthas), 信區(qū): Java
          標(biāo)  題: zz做JAVA開發(fā)要掌握的知識(shí)
          發(fā)信站: 水木社區(qū) (Sun Jun  1 23:42:19 2008), 站內(nèi)

          http://www.javaeye.com/topic/183513


          來(lái)自http://www.bjsxt.com/zixue/zixuezhilu_1.html


          一:J2SE
          面向?qū)ο螅庋b、繼承、多態(tài)
          內(nèi)存的分析
          遞歸
          集合類、泛型、自動(dòng)打包與解包、Annotation
          IO
          多線程、線程同步
          TCP/UDP
          AWT、事件模型、匿名類
          正則表達(dá)式
          反射機(jī)制

          2:數(shù)據(jù)庫(kù)(Oracle或者M(jìn)ySQL)
          SQL語(yǔ)句
          多表連接,內(nèi)外連接, 子查詢等
          管理表、視圖、索引、序列、約束等
          樹狀結(jié)構(gòu)存儲(chǔ)
          存儲(chǔ)過(guò)程、觸發(fā)器
          數(shù)據(jù)庫(kù)設(shè)計(jì)三范式、

          3:JDBC
          JDBC基礎(chǔ)
          連接池
          樹狀結(jié)構(gòu)存儲(chǔ)與展現(xiàn)
          DataSource & RowSet
          JDBC連接Oracle及MySQL

          4:HTML_CSS_JAVASCRIPT
          html、css、javascript基礎(chǔ)語(yǔ)法
          JavaScript Form判斷
          Dom編程基礎(chǔ)(事件處理等)
          JS常用效果如TreeView、下拉聯(lián)動(dòng)等
          JS學(xué)習(xí)方法
          JS調(diào)試方法
          DreamWeaver初步(建立HTML、Table、Form、CSS)等

          5:Servlet & JSP

          tomcat基礎(chǔ)
          servlet基礎(chǔ)
          web.xml配置基礎(chǔ)
          web application的結(jié)構(gòu)
          servlet生命周期
          request response等常用方法
          ServletContext類
          HTTP協(xié)議基礎(chǔ)(GET POST)
          Cookie
          Session
          Application

          JSP的幾種語(yǔ)法(包括JSTL等)注意在項(xiàng)目中練習(xí),不要拘泥于語(yǔ)法細(xì)節(jié)而裹步不前。

          6:Struts
          多層架構(gòu)理論
          Model 1 and Model 2
          Struts基本概念
          MVC
          Action與業(yè)務(wù)邏輯類的關(guān)系
          在Struts與JSP之間傳遞數(shù)據(jù)
          Struts處理流程(控制流)
          Struts TagLib(了解常用的)
          JSTL
          ActionForm
          字段收集
          上傳文件
          類型轉(zhuǎn)換
          DTO
          動(dòng)態(tài)Action Form
          驗(yàn)證框架
          ActionForward 轉(zhuǎn)發(fā)與重定向
          動(dòng)態(tài)生成ActionForward
          全局與局部的ActionForward
          Action Forward Scope
          UnknownActionMapping
          Action的線程安全
          I18N
          如何切換語(yǔ)言環(huán)境
          Struts異常處理機(jī)制 程序處理 自動(dòng)處理 自定義異常處理器
          Struts的多模塊配置

          7:XML
          (XML/XSL、XSLT/DTD、SCHEMA等基礎(chǔ)的概念、關(guān)于Java的編程可以暫時(shí)扔在一邊)

          8:Hibernate
          OR Mapping原理
          Hibernate基礎(chǔ)開發(fā)步驟
          Hibernate基本接口(重點(diǎn)Session)
          普通屬性映射
          關(guān)聯(lián)關(guān)系映射
          Native SQL
          inverse lazy cascade
          繼承關(guān)系映射
          HQL
          性能優(yōu)化 一級(jí)緩存 二級(jí)緩存 查詢緩存
          事務(wù)與并發(fā) 悲觀鎖、樂(lè)觀鎖
          OpenSessionInView
          CurrentSession
          (至于JTA、聯(lián)合主鍵、自然主鍵、動(dòng)態(tài)主鍵、Any類型 Creteria Queries Intercepter and Event 自定義類型等,可以暫時(shí)扔在一邊)

          9:Spring
          IOC/DI
          Spring配置
          Spring架構(gòu)
          AOP及Spring AOP
          聲明式事務(wù)(AOP)
          Spring + Hibernate Spring支持Web
          Scope
          (其他的Spring模塊對(duì)于自學(xué)來(lái)說(shuō)可以暫時(shí)扔在一邊)

          10:EJB3.0
          J2EE架構(gòu)基礎(chǔ)(JTA JMS等)
          EJB基礎(chǔ)(地位及基本理論、分類等)
          Annotation
          Ant編譯與部署EJB
          Session Bean
          EJB的依賴注入
          Persistence API
          (可以用JBoss學(xué)習(xí)EJB3.0)

          11:至于SOA,對(duì)于自學(xué)的同學(xué)來(lái)說(shuō),暫時(shí)不用特別關(guān)注。

          梳理一下,你就會(huì)發(fā)現(xiàn)東西不是想象中的那么多呀!

          --
          The pact is sealed!


          ※ 來(lái)源:·水木社區(qū) newsmth.net·[FROM: 125.33.176.*]

          posted @ 2008-06-02 12:01 zhrb 閱讀(392) | 評(píng)論 (1)編輯 收藏

          2008年5月12日 #

          應(yīng)用lucene建立簡(jiǎn)單的索引軟件
          可以使用lucene進(jìn)行程序的編寫

          發(fā)信人: minos (卡妙), 信區(qū): NewSoftware
          標(biāo) 題: 有什么軟件能夠?yàn)閛ffice文檔建立索引目錄?
          發(fā)信站: 水木社區(qū) (Mon May 12 11:16:28 2008), 站內(nèi)

          就如同word的索引,它是為word里面的文字建立索引。

          能有個(gè)方便的軟件能為doc,ppt,xls文檔建立索引,并添加注釋就好了

          posted @ 2008-05-12 21:33 zhrb 閱讀(285) | 評(píng)論 (0)編輯 收藏

          2008年4月20日 #

          主要功能:為用戶群建立群組,群組中含有任務(wù)分發(fā)與管理、論壇、發(fā)放通知、資源共享(照片、文件等)。每個(gè)用戶都有自己的信息中心,里面包含任務(wù)、信息、個(gè)人功能。成熟以后,可以為用戶開發(fā)相應(yīng)的客戶端,類似qq。其實(shí)本質(zhì)上就是開發(fā)一個(gè)個(gè)人信息中心。

          可能涉及的難點(diǎn):權(quán)限管理、任務(wù)分排與管理


          以后的工作:C/S

           

           自己隨便的一個(gè)想法,不知道國(guó)內(nèi)有沒(méi)有已經(jīng)做得很成熟的系統(tǒng)可供參照,希望大家可以幫忙介紹一下。呵呵

          posted @ 2008-04-20 00:54 zhrb 閱讀(318) | 評(píng)論 (0)編輯 收藏

          2008年4月19日 #

          發(fā)信人: gentboy (老流氓,老水車,老男人就是快樂(lè)的一家), 信區(qū): Java
          標(biāo)  題: 填坑:oo的前世今生及后世
          發(fā)信站: 水木社區(qū) (Fri Apr 18 13:27:06 2008), 站內(nèi)

          摘要:需求一直在擴(kuò)展,邏輯復(fù)雜度以更高的速度增加,而人的邏輯處理能力沒(méi)有任何變?
          。oo解決了一個(gè)stage的問(wèn)題,但是類似于軟件危機(jī)的問(wèn)題肯定還會(huì)出現(xiàn),期待新的邏輯或
          者工具來(lái)解決這個(gè)問(wèn)題。


          N多年前,軟件危機(jī)的出現(xiàn)基于三個(gè)事實(shí),一個(gè)是需求迅速增長(zhǎng),功能要求越來(lái)越多;再者軟件的復(fù)雜度并不是與軟件的體積成正比的,復(fù)雜度的增長(zhǎng)速度要遠(yuǎn)大于代碼的行數(shù)的增長(zhǎng)速度。

          還有一個(gè)沒(méi)有被強(qiáng)調(diào)的原因就是,人的能力是有限的,對(duì)于復(fù)雜的軟件,沒(méi)有任何一個(gè)人能掌握所有的邏輯,即使他了解所有的邏輯,也不可能同時(shí)考慮到這些邏輯。因此,人們?cè)诰帉戃浖r(shí),只能在有限的視野內(nèi)工作,這種情況本身就決定了軟件中的缺陷難以避免。

          oo被認(rèn)為是解決軟件危機(jī)一個(gè)比較好的方法,主要原因就是oo將整個(gè)軟件中的大量邏輯和數(shù)據(jù)封裝起來(lái),從而使得程序員不必關(guān)注所有的細(xì)節(jié),而只關(guān)注與自己負(fù)責(zé)的部分有關(guān)的細(xì)節(jié)。這大大減輕了程序員的負(fù)擔(dān),從而也使軟件規(guī)模得到了較大的擴(kuò)大。

          但是,需求仍在繼續(xù)增長(zhǎng),而且邏輯的復(fù)雜度又以更快的速度增長(zhǎng)。用oo編程的程序員們漸漸感覺(jué)到即使大量的邏輯被封裝了,剩下的要處理的邏輯仍然足夠復(fù)雜。

          而且,oo也是一把雙刃劍,如果封裝的方法不當(dāng),同樣會(huì)給別人的開發(fā)造成麻煩。而且不同的程序員往往對(duì)同一個(gè)應(yīng)用有著不同的理解。這使得協(xié)作中的沖突很常見。

          因此大量的針對(duì)具體應(yīng)用的framework出現(xiàn)了,比如orm, ejb, struts等等,這些framework從某種程度上定義了某種具體應(yīng)用的范式,把應(yīng)用中有共性的部分拿出來(lái),而讓程序員做那些有特性的東西。這又讓程序員少考慮了不少東西。

          到目前為止,framework的確起了不小的作用,也出現(xiàn)了很多超大型的framework,能讓程序員寫很少的代碼就能完成原來(lái)可能要18個(gè)人干半年才能完成的任務(wù)。

          但是,framework也有其本身的缺陷,一個(gè)是framework往往本身就足夠復(fù)雜,難以學(xué)習(xí)已經(jīng)是一些大型的framework的通病。另外framework本身也有質(zhì)量問(wèn)題,過(guò)分依賴或者不正確的使用framework的后果同樣是致命的。

          framework替你做的事情越多,程序員往往就越難以使用它,但是如果他做的東西少,程序員就會(huì)喊自己做了很多重復(fù)勞動(dòng)。因此這兩者之間要有一個(gè)平衡。從這個(gè)角度來(lái)講,spring做的比jboss要好。

          展望將來(lái),需求的規(guī)模還會(huì)繼續(xù)增長(zhǎng),而邏輯的復(fù)雜度仍然會(huì)以相對(duì)于需求的復(fù)雜度的指數(shù)形式增長(zhǎng)。但是人的腦子跟幾十年前沒(méi)什么區(qū)別,還是同時(shí)能處理那么多邏輯。尖銳問(wèn)題肯定會(huì)出現(xiàn)。

          但是解決問(wèn)題的方法呢?單單靠語(yǔ)言特性恐怕已經(jīng)難以再做什么。人們應(yīng)當(dāng)再次反思程序這個(gè)概念本身,提出新的解決方案。或許人們會(huì)開發(fā)出更為實(shí)用的framework以定義業(yè)務(wù)邏輯,更為智能化的集成開發(fā)/協(xié)作環(huán)境工具來(lái)擴(kuò)展我們的大腦,或者其它...


          --


             晶晶姑娘是個(gè)好姑娘


          ※ 修改:·gentboy 于 Apr 18 13:28:32 2008 修改本文·[FROM: 210.13.85.*]
          ※ 來(lái)源:·水木社區(qū) newsmth.net·[FROM: 210.13.85.*]

          posted @ 2008-04-19 10:34 zhrb 閱讀(260) | 評(píng)論 (0)編輯 收藏

          2008年4月14日 #

          發(fā)信人: NewXin (睡貓|糖果氣泡), 信區(qū): ITExpress
          標(biāo)  題: 技術(shù)是一種加速器 但重要的不是技術(shù)
          發(fā)信站: 水木社區(qū) (Mon Apr 14 12:32:38 2008), 站內(nèi)

          噴嚏網(wǎng):原創(chuàng) www.dapenti.com
          (一)

           多年以前,我有個(gè)學(xué)生在一家做“工作流引擎”的軟件小公司里工作。他遇到了一些麻煩

           什么是“工作流引擎”?簡(jiǎn)單地說(shuō),是一種可以自動(dòng)執(zhí)行流程的工作元件:使用者設(shè)置好
          基本的參數(shù),該元件就能按照預(yù)先設(shè)定的工作步驟和業(yè)務(wù)的流程往下走。

           聽起來(lái)很酷,看上去很美。

           學(xué)生的麻煩是:公司的產(chǎn)品做得歪瓜劣棗的,開發(fā)人員不夠,人員參差不齊??偟恼f(shuō)來(lái),
          技術(shù)問(wèn)題很多,公司也不太重視。

           他來(lái)問(wèn)我他該怎么辦。

           我說(shuō):其實(shí),這不是技術(shù)的問(wèn)題。而是在于以公司這樣的實(shí)力進(jìn)入這樣的小眾市場(chǎng),完全
          沒(méi)有能力。高端的“工作流引擎”肯定有市場(chǎng),但是都是很多IT的老大才做。中低端的應(yīng)用
          ,需要的不是自動(dòng)化軟件,而是人事關(guān)系。這就更與技術(shù)無(wú)關(guān)。

           技術(shù)是很好的想法,但是沒(méi)有生根的地方。從商業(yè)和個(gè)人投資來(lái)看,就沒(méi)有商業(yè)價(jià)值。

           我給他的建議是:趕快離場(chǎng),做點(diǎn)其他的。


          (二)

           我在軟件行業(yè)做過(guò)10年以上的技術(shù)工作。我知道技術(shù)人員在某一個(gè)階段上會(huì)有一個(gè)通病,
          就是:太把技術(shù)當(dāng)回事兒。

           怎么說(shuō)呢?就是說(shuō)總是從技術(shù)的觀點(diǎn)去考慮問(wèn)題,想到希望發(fā)生的事情,而不會(huì)從一個(gè)普
          通人的角度看待現(xiàn)實(shí)。

           理解技術(shù)是好事情,你可以飛快地想象到未來(lái),看到一種趨勢(shì)。但是,你一定要明白,這
          種趨勢(shì)可能發(fā)生,也可能只是一種錯(cuò)覺(jué)。

           技術(shù)是一種加速器。但是你不知道,這是成功的加速器,還是速死的加速器。

           技術(shù)的思維角度,如果放錯(cuò)了位置,很多時(shí)候,會(huì)成為認(rèn)知上的障礙。你以為你看到的東
          西是重要的,其實(shí),人們根本不是按你想象的方式需要,或者生活。

           技術(shù)是一種異化過(guò)程。當(dāng)你以為你是專業(yè)人士的時(shí)候,你也有可能忘記:作為普通人,他
          們的感覺(jué)應(yīng)該是什么樣子。


          (三)

           我經(jīng)常在小區(qū)的周圍散步。我看見各種各樣的小商鋪,開辦的熱火朝天。我最喜歡的是一
          家小面館。這些店鋪的生意各不相同,但都有一個(gè)共同之處:跟我的職業(yè)沒(méi)有任何的關(guān)系。也就是說(shuō),他們都是一些遠(yuǎn)離互聯(lián)網(wǎng)的又小又好的生意。比如:洗衣店、蛋糕房、小型超市。

           我很清楚,至少在我活著的時(shí)候,我還不能從網(wǎng)絡(luò)上下載一碗面。這種想法,總是提醒我
          注意在偉大的傳統(tǒng)行業(yè)面前,保持謙卑。

           看著很多2-3個(gè)人,10來(lái)個(gè)人開辦的火熱的小生意。我就在想:什么樣的生意才算是好生意呢?能活著的生意,當(dāng)然是好的。這些生意還應(yīng)該有如下的特點(diǎn):

           【1】有廣泛的需求,無(wú)認(rèn)知障礙,應(yīng)用的技能簡(jiǎn)單,如:吃飯、穿衣。這是誰(shuí)都需要,誰(shuí)都會(huì)的事情;

           【2】市場(chǎng)龐大,不是只需幾家就能搞定的,而且要方便。需求是有循環(huán)、反復(fù)的;

           【3】滿足需求的產(chǎn)品種類獨(dú)特,或者豐富;

           作為技術(shù)的互聯(lián)網(wǎng),是如何改變了傳統(tǒng)的市場(chǎng)?

           優(yōu)勢(shì):

           【1】技術(shù)跨越了地域的限制,信息加速,需求被聚合;

           【2】信息流動(dòng)得更快,用戶間的接觸增加,消費(fèi)變得可以評(píng)價(jià);

           【3】營(yíng)銷的方式發(fā)生了根本的變化

           劣勢(shì):

           【1】信任成本的建立很高;

           【2】商品的可接觸成本很高;

           【3】需求到消費(fèi)的轉(zhuǎn)換率不高;

           這樣看來(lái),我們就很容易理解這樣的事實(shí):互聯(lián)網(wǎng)上的生意看著人多,其實(shí)一點(diǎn)都不便宜
          。而且,還不太容易存活。難怪那么多人,成天鬧著要忽悠風(fēng)投。

           能自個(gè)賺錢了,還需要風(fēng)投干嘛。


          (四)

           任何一個(gè)成功的互聯(lián)網(wǎng)項(xiàng)目或產(chǎn)品,至少應(yīng)該具有這樣的基本特征:

           【1】首先要是一個(gè)很好的生意。

           上面說(shuō)過(guò)了,無(wú)論是用月球的技術(shù)還是火星的技術(shù),生意還是生意,生意的本質(zhì)并沒(méi)有改
          變。

           【2】要找到一個(gè)跟這種生意匹配的業(yè)務(wù)形式,或是商業(yè)模式:

           扎堆,是人多。人多好辦事,但是成本也高。而且,面越廣,實(shí)質(zhì)就越少。

           任何一個(gè)商業(yè)系統(tǒng)都是中性系統(tǒng),不可能是完美的系統(tǒng)。所以說(shuō),長(zhǎng)尾是一種浪漫的說(shuō)法
          。對(duì)長(zhǎng)尾的正確理解應(yīng)該是:傳統(tǒng)系統(tǒng)能做5個(gè)特性的話。長(zhǎng)尾目前也最多能擴(kuò)展到10或者
          15。

           如果首先有80/20的業(yè)務(wù)存在,那么互聯(lián)網(wǎng)的長(zhǎng)尾就會(huì)看上去非常優(yōu)美。如果沒(méi)有,長(zhǎng)尾就等于是零。

           所以,那些辦起博客,相冊(cè)就叫web 2.0的網(wǎng)站,肯定是:非死不可(FaceBook) 。同時(shí)
          ,如果能符合上面的兩個(gè)條件的社區(qū)或管它叫什么的網(wǎng)站,卻會(huì)活得很好。

           我相信基本的一點(diǎn):當(dāng)所有人談?wù)撋虡I(yè)模式,談錢的時(shí)候。他們都要回到最根本的問(wèn)題上
          --商業(yè)的需求從何而來(lái),是怎么樣的一個(gè)規(guī)模,在某個(gè)具體的平臺(tái)下,技術(shù)能提供怎么樣的突破,該如何提供什么樣的產(chǎn)品和服務(wù)的形式來(lái)滿足這些需求。

           雖然有些社區(qū)是非死不可了,但我仍然看好這樣的一類網(wǎng)站:婚戀市場(chǎng),如世紀(jì)佳緣類的
          ,還有育兒市場(chǎng),如寶寶樹之類的。

           這樣的網(wǎng)站首先是有一個(gè)無(wú)限廣闊的市場(chǎng)空間,而且網(wǎng)站的內(nèi)容跟業(yè)務(wù)結(jié)合的非常緊密。
          只要不犯大的錯(cuò)誤,堅(jiān)持下去,這樣的業(yè)務(wù)本身不僅可以賺大錢,而且可以一直做很久。因?yàn)?,很多業(yè)已存在的傳統(tǒng)生意,被證明已經(jīng)是好生意。

           我一直認(rèn)為:web 2.0類的網(wǎng)站發(fā)展,是電子商務(wù)普及的前哨戰(zhàn)。很多的炮灰會(huì)成就電子商務(wù)的明天。我敢打賭:活下來(lái)的都是不太關(guān)心是2還是1的人。

           最后,提一下作為web 2先驅(qū)的豆瓣:盡管?

           如果首先有80/20的業(yè)務(wù)存在,那么互聯(lián)網(wǎng)的長(zhǎng)尾就會(huì)看上去非常優(yōu)美。如果沒(méi)有,長(zhǎng)尾就等于是零。

           所以,那些辦起博客,相冊(cè)就叫web 2.0的網(wǎng)站,肯定是:非死不可(FaceBook) 。同時(shí)
          ,如果能符合上面的兩個(gè)條件的社區(qū)或管它叫什么的網(wǎng)站,卻會(huì)活得很好。

           我相信基本的一點(diǎn):當(dāng)所有人談?wù)撋虡I(yè)模式,談錢的時(shí)候。他們都要回到最根本的問(wèn)題上
          --商業(yè)的需求從何而來(lái),是怎么樣的一個(gè)規(guī)模,在某個(gè)具體的平臺(tái)下,技術(shù)能提供怎么樣的突破,該如何提供什么樣的產(chǎn)品和服務(wù)的形式來(lái)滿足這些需求。

           雖然有些社區(qū)是非死不可了,但我仍然看好這樣的一類網(wǎng)站:婚戀市場(chǎng),如世紀(jì)佳緣類的
          ,還有育兒市場(chǎng),如寶寶樹之類的。

           這樣的網(wǎng)站首先是有一個(gè)無(wú)限廣闊的市場(chǎng)空間,而且網(wǎng)站的內(nèi)容跟業(yè)務(wù)結(jié)合的非常緊密。
          只要不犯大的錯(cuò)誤,堅(jiān)持下去,這樣的業(yè)務(wù)本身不僅可以賺大錢,而且可以一直做很久。因?yàn)椋芏鄻I(yè)已存在的傳統(tǒng)生意,被證明已經(jīng)是好生意。

           我一直認(rèn)為:web 2.0類的網(wǎng)站發(fā)展,是電子商務(wù)普及的前哨戰(zhàn)。很多的炮灰會(huì)成就電子商務(wù)的明天。我敢打賭:活下來(lái)的都是不太關(guān)心是2還是1的人。

           最后,提一下作為web 2先驅(qū)的豆瓣:盡管開始人多勢(shì)大了,也加了很多功能,但是,本身的特色也在喪失。豆瓣賦予了自己太多的使命。我覺(jué)得謙卑一點(diǎn)還是比較好。我喜歡作為讀
          書工具的豆瓣,而不太喜歡作為交友工具的豆瓣。 一會(huì)兒是關(guān)注,一會(huì)兒又是好友。一會(huì)
          兒是廣播,一會(huì)兒又是日記。

           如果功能太多,只能讓人不知所措。面越廣,實(shí)質(zhì)就越少。

           我最喜歡《玩具總動(dòng)員》里面主人翁的第一句話:focus,speed!

           我的理解是:專注,才有速度。

          --

          ※ 來(lái)源:·水木社區(qū) http://newsmth.net·[FROM: 202.108.130.*]

          posted @ 2008-04-14 19:31 zhrb 閱讀(303) | 評(píng)論 (0)編輯 收藏

          2008年3月25日 #

          發(fā)信人: seableu (地球是天上一顆星), 信區(qū): JavaExpress
          標(biāo)  題: 面向?qū)ο蟮乃季S方法 [zz]
          發(fā)信站: BBS 水木清華站 (Sat Jan  8 20:02:47 2005), 站內(nèi)

              剛才看到一篇文章,是有關(guān)面向?qū)ο蟮乃季S方法的,感覺(jué)對(duì)我很有啟發(fā),貼出來(lái)大家一起看,呵呵。
              原文鏈接:http://blog.csdn.net/wooaoo/archive/2004/07/30/56163.aspx

          ------------------------------------------------------------------------
          面向?qū)ο蟮乃季S方法
          作者:范凱
          E-mail: robbin_fan@yahoo.com.cn

          我是從學(xué)習(xí)Java編程開始接觸OOP(面向?qū)ο缶幊?,剛開始使用Java編寫程序的時(shí)候感覺(jué)很別扭,因?yàn)槲以缫粤?xí)慣用C來(lái)編寫程序,很欣賞C的簡(jiǎn)潔性和高效性,喜歡C簡(jiǎn)練而表達(dá)能力豐富的風(fēng)格,特別忍受不了Java運(yùn)行起來(lái)慢吞吞的速度,相對(duì)冗長(zhǎng)的代碼,而且一個(gè)很簡(jiǎn)單的事情,要寫好多類,一個(gè)類調(diào)用一個(gè)類,心里的抵觸情緒很強(qiáng)。

          我對(duì)Java的面向?qū)ο蟮奶匦宰聊チ季?,自認(rèn)為有所領(lǐng)悟,也開始有意識(shí)的運(yùn)用OOP風(fēng)格來(lái)寫程序,然而還是經(jīng)常會(huì)覺(jué)得不知道應(yīng)該怎樣提煉類,面對(duì)一個(gè)具體的問(wèn)題的時(shí)候,會(huì)覺(jué)得腦子里千頭萬(wàn)緒的,不知道怎么下手,一不小心,又會(huì)回到原來(lái)的思路上去。

          舉個(gè)例子,要發(fā)廣告郵件,廣告郵件列表存在數(shù)據(jù)庫(kù)里面。倘若用C來(lái)寫的話,一般會(huì)這樣思考,先把郵件內(nèi)容讀入,然后連接數(shù)據(jù)庫(kù),循環(huán)取郵件地址,調(diào)用本機(jī)的qmail的sendmail命令發(fā)送。

          然后考慮用Java來(lái)實(shí)現(xiàn),既然是OOP,就不能什么代碼都塞到main過(guò)程里面,于是就設(shè)計(jì)了三個(gè)類:

          一個(gè)類是負(fù)責(zé)讀取數(shù)據(jù)庫(kù),取郵件地址,調(diào)用qmail的sendmail命令發(fā)送;
          一個(gè)類是讀郵件內(nèi)容,MIME編碼成HTML格式的,再加上郵件頭;
          一個(gè)主類負(fù)責(zé)從命令讀參數(shù),處理命令行參數(shù),調(diào)用發(fā)email的類。

          把一件工作按照功能劃分為3個(gè)模塊分別處理,每個(gè)類完成一件模塊任務(wù)。

          仔細(xì)的分析一下,就會(huì)發(fā)現(xiàn)這樣的設(shè)計(jì)完全是從程序員實(shí)現(xiàn)程序功能的角度來(lái)設(shè)計(jì)的,或者說(shuō),設(shè)計(jì)類的時(shí)候,是自低向上的,從機(jī)器的角度到現(xiàn)實(shí)世界的角度來(lái)分析問(wèn)題的。因此在設(shè)計(jì)的時(shí)候,就已經(jīng)把程序編程實(shí)現(xiàn)的細(xì)節(jié)都考慮進(jìn)去了,企圖從底層實(shí)現(xiàn)程序這樣的出發(fā)點(diǎn)來(lái)達(dá)到滿足現(xiàn)實(shí)世界的軟件需求的目標(biāo)。

          這樣的分析方法其實(shí)是不適用于Java這樣面向?qū)ο蟮木幊陶Z(yǔ)言,因?yàn)?,如果改用C語(yǔ)言,封裝兩個(gè)C函數(shù),都會(huì)比Java實(shí)現(xiàn)起來(lái)輕松的多,邏輯上也清楚的多。

          我覺(jué)得面向?qū)ο蟮木柙谟诳紤]問(wèn)題的思路是從現(xiàn)實(shí)世界的人類思維習(xí)慣出發(fā)的,只要領(lǐng)會(huì)了這一點(diǎn),就領(lǐng)會(huì)了面向?qū)ο蟮乃季S方法。

          舉一個(gè)非常簡(jiǎn)單的例子:假使現(xiàn)在需要寫一個(gè)網(wǎng)頁(yè)計(jì)數(shù)器,客戶訪問(wèn)一次頁(yè)面,網(wǎng)頁(yè)計(jì)數(shù)器加1,計(jì)數(shù)器是這樣來(lái)訪問(wèn)的

          http://hostname/count.cgi?id=xxx

          后臺(tái)有一個(gè)數(shù)據(jù)庫(kù)表,保存每個(gè)id(一個(gè)id對(duì)應(yīng)一個(gè)被統(tǒng)計(jì)訪問(wèn)次數(shù)的頁(yè)面)的計(jì)數(shù)器當(dāng)前值,請(qǐng)求頁(yè)面一次,對(duì)應(yīng)id的計(jì)數(shù)器的字段加1(這里我們忽略并發(fā)更新數(shù)據(jù)庫(kù)表,出現(xiàn)的表鎖定的問(wèn)題)。

          如果按照一般從程序?qū)崿F(xiàn)的角度來(lái)分析,我們會(huì)這樣考慮:首先是從HTTP GET請(qǐng)求取到id,然后按照id查數(shù)據(jù)庫(kù)表,獲得某id對(duì)應(yīng)的訪問(wèn)計(jì)數(shù)值,然后加1,更新數(shù)據(jù)庫(kù),最后向頁(yè)面顯示訪問(wèn)計(jì)數(shù)。

          現(xiàn)在假設(shè)一個(gè)沒(méi)有程序設(shè)計(jì)經(jīng)驗(yàn)的人,他會(huì)怎樣來(lái)思考這個(gè)問(wèn)題的呢?他會(huì)提出什么樣的需求呢?他很可能會(huì)這樣想:

          我需要有一個(gè)計(jì)數(shù)器,這個(gè)計(jì)數(shù)器應(yīng)該有這樣的功能,刷新一次頁(yè)面,訪問(wèn)量就會(huì)加1,另外最好還有一個(gè)計(jì)數(shù)器清0的功能,當(dāng)然計(jì)數(shù)器如果有一個(gè)可以設(shè)為任意值的功能的話,我就可以作弊了。

          做為一個(gè)沒(méi)有程序設(shè)計(jì)經(jīng)驗(yàn)的人來(lái)說(shuō),他完全不會(huì)想到對(duì)數(shù)據(jù)庫(kù)應(yīng)該如何操作,對(duì)于HTTP變量該如何傳遞,他考慮問(wèn)題的角度就是我有什么需求,我的業(yè)務(wù)邏輯是什么,軟件應(yīng)該有什么功能。

          按照這樣的思路(請(qǐng)注意,他的思路其實(shí)就是我們平時(shí)在生活中習(xí)慣的思維方式),我們知道需要有一個(gè)計(jì)數(shù)器類 Counter,有一個(gè)必須的和兩個(gè)可選的方法:

          getCount()  // 取計(jì)數(shù)器值方法
          resetCounter()  // 計(jì)數(shù)器清0方法
          setCount()  // 設(shè)計(jì)數(shù)器為相應(yīng)的值方法

          把Counter類完整的定義如下:

          public class Counter {
            public int getCount(int id) {}
            public void resetCounter(int id) {}
            public void setCount(int id, int currentCount) {}
          }

          解決問(wèn)題的框架已經(jīng)有了,來(lái)看一下如何使用Counter。 在count.cgi里面調(diào)用Counter來(lái)計(jì)數(shù),程序片斷如下:

            //  這里從HTTP環(huán)境里面取id值
            ...
            Counter myCounter = new Counter();  // 獲得計(jì)數(shù)器
            int currentCount = myCounter.getCount(id);  // 從計(jì)數(shù)器中取計(jì)數(shù)
            //  這里向客戶瀏覽器輸出
            ...

          程序的框架全都寫好了,剩下的就是實(shí)現(xiàn)Counter類方法里面具體的代碼了,此時(shí)才去考慮具體的程序語(yǔ)言實(shí)現(xiàn)的細(xì)節(jié),比如,在getCount()方法里面訪問(wèn)數(shù)據(jù)庫(kù),更新計(jì)數(shù)值。

          從上面的例子中看到,面向?qū)ο蟮乃季S方法其實(shí)就是我們?cè)诂F(xiàn)實(shí)生活中習(xí)慣的思維方式,是從人類考慮問(wèn)題的角度出發(fā),把人類解決問(wèn)題的思維方式逐步翻譯成程序能夠理解的思維方式的過(guò)程,在這個(gè)翻譯的過(guò)程中,軟件也就逐步被設(shè)計(jì)好了。

          在運(yùn)用面向?qū)ο蟮乃季S方法進(jìn)行軟件設(shè)計(jì)的過(guò)程中,最容易犯的錯(cuò)誤就是開始分析的時(shí)候,就想到了程序代碼實(shí)現(xiàn)的細(xì)節(jié),因此封裝的類完全是基于程序?qū)崿F(xiàn)邏輯,而不是基于解決問(wèn)題的業(yè)務(wù)邏輯。

          學(xué)習(xí)JDBC編程的經(jīng)典錯(cuò)誤問(wèn)法是:“我怎樣封裝對(duì)數(shù)據(jù)庫(kù)的select操作?”

          面向?qū)ο蟮脑O(shè)計(jì)是基于解決業(yè)務(wù)問(wèn)題的設(shè)計(jì),而不是基于具體編程技術(shù)的設(shè)計(jì)。我不會(huì)去封裝select語(yǔ)句的,我只封裝解決問(wèn)題的業(yè)務(wù)邏輯,對(duì)數(shù)據(jù)庫(kù)的讀取是在業(yè)務(wù)邏輯的編碼實(shí)現(xiàn)階段才去考慮的問(wèn)題。

          回過(guò)頭看上面那個(gè)發(fā)廣告郵件的例子,應(yīng)該如何應(yīng)用面向?qū)ο蟮乃季S方法呢?

          對(duì)于一個(gè)郵件來(lái)說(shuō),有郵件頭,郵件體,和郵件地址這三個(gè)屬性,發(fā)送郵件,需要一個(gè)發(fā)送的方法,另外還需要一個(gè)能把所有郵件地址列出來(lái)的方法。所以應(yīng)該如下設(shè)計(jì):

          類JunkMail

          屬性:
            head
            body
            address
          方法:
            sendMail()    // 發(fā)送郵件
            listAllMail() // 列郵件地址

          用Java來(lái)表示:

          public class JunkMail {
            private String head;
            private String body;
            private String address;
            public JunkMain() {  // 默認(rèn)的類構(gòu)造器
              // 從外部配置文件讀郵件頭和郵件體
              this.head=...;
              this.body=...;
            }

            public static boolean sendMail(String address) {
              //  調(diào)用qmail,發(fā)送email
            }

            public static Collection listAllMail() {
              //  訪問(wèn)數(shù)據(jù)庫(kù),返回一個(gè)郵件地址集合
            }
          }

          當(dāng)把JunkMail設(shè)計(jì)好了以后,再調(diào)用JunkMail類完成郵件的發(fā)送,將是非常輕松的事情。

          如果說(shuō)傳統(tǒng)的面向過(guò)程的編程是符合機(jī)器運(yùn)行指令的流程的話,那么面向?qū)ο蟮乃季S方法就是符合現(xiàn)實(shí)生活中人類解決問(wèn)題的思維過(guò)程。

          在面向?qū)ο蟮能浖治龊驮O(shè)計(jì)的時(shí)候,要提醒自己,不要一上來(lái)就去想程序代碼的實(shí)現(xiàn),應(yīng)該拋開具體編程語(yǔ)言的束縛,集中精力分析我們要實(shí)現(xiàn)的軟件的業(yè)務(wù)邏輯,分析軟件的業(yè)務(wù)流程,思考應(yīng)該如何去描述和實(shí)現(xiàn)軟件的業(yè)務(wù)。畢竟軟件只是一個(gè)載體,業(yè)務(wù)才是我們真正要實(shí)現(xiàn)的目標(biāo)。

          但是在設(shè)計(jì)過(guò)程中,心里卻往往在擔(dān)心,如果我完全不去考慮程序代碼的實(shí)現(xiàn)的話,那么我怎么知道我的設(shè)計(jì)一定合理呢?我怎么知道我設(shè)計(jì)的類、接口一定可以實(shí)現(xiàn)呢?(是個(gè)問(wèn)題:()所以經(jīng)??梢钥吹降默F(xiàn)象就是:

          在設(shè)計(jì)過(guò)程中,雖然知道不能過(guò)早考慮代碼實(shí)現(xiàn),但是每設(shè)計(jì)一個(gè)類,一個(gè)接口,心里都要不知不覺(jué)的用自己熟悉的編程語(yǔ)言大概的評(píng)估一下,看看能否編出來(lái),因此,一不小心,就會(huì)又回到按照程序功能實(shí)現(xiàn)的思路進(jìn)行設(shè)計(jì)的老路上去了。

          舉個(gè)例子來(lái)說(shuō)明,在做Web程序設(shè)計(jì)的時(shí)候,經(jīng)常要遇到分頁(yè)顯示數(shù)據(jù)的情況。比如說(shuō)需要把系統(tǒng)中所有的用戶都列出來(lái)這樣的功能。假設(shè)使用User類來(lái)表示用戶,增加用戶addUser(),刪除用戶deleteUser(),查詢所有用戶listUsers()方法。而數(shù)據(jù)庫(kù)中有一個(gè)user表,一條記錄是一個(gè)用戶的信息。下面考慮一下User類的方法的實(shí)現(xiàn):

          addUser()和deleteUser()方法都好實(shí)現(xiàn),就是對(duì)數(shù)據(jù)庫(kù)增加記錄和刪除記錄。對(duì)于listUsers()方法,其實(shí)就是對(duì)user表的select,取出一個(gè)記錄集。但是該怎么從listUsers()方法中得到所有用戶的列表呢?

          一個(gè)方法調(diào)用的返回值只有一個(gè),沒(méi)有多個(gè),所以很多情況下采用的辦法就是返回值定義為集合類型,比如Vector。這樣就可以在listUsers()方法的具體代碼實(shí)現(xiàn)的時(shí)候,從數(shù)據(jù)庫(kù)依次取出一個(gè)個(gè)記錄,插入到Vector里面來(lái)。在主程序里面,調(diào)用listUsers()方法可以返回一個(gè)Vector,然后再對(duì)Vector遍歷操作,就可以得到用戶列表了。

          public class User {

            public static void addUser(...) {
              //  數(shù)據(jù)庫(kù)insert一條記錄
            }

            public static void deleteUser(...) {
              //  數(shù)據(jù)庫(kù)delete一條記錄
            }

            public Vector listUsers(...) {
              //  數(shù)據(jù)庫(kù)select結(jié)果放到一個(gè)集合里面
            }
          }

          這樣的設(shè)計(jì)基本合理,但是仍然有點(diǎn)小問(wèn)題。因?yàn)樵谠O(shè)計(jì)的時(shí)候,就考慮到了用Java的集合類Vector來(lái)實(shí)現(xiàn)對(duì)不定長(zhǎng)數(shù)據(jù)集的存放,因而違反了面向?qū)ο笤O(shè)計(jì)的一個(gè)原則:在設(shè)計(jì)的時(shí)候不應(yīng)過(guò)早的考慮具體程序語(yǔ)言的實(shí)現(xiàn)。所以必須用抽象的方法,和具體實(shí)現(xiàn)無(wú)關(guān)的方法來(lái)表達(dá)業(yè)務(wù)邏輯。

          我們知道,通常對(duì)具有集合特征的數(shù)據(jù)結(jié)構(gòu)進(jìn)行遍歷通常可以使用next和hasNext方法,next實(shí)現(xiàn)取下一個(gè)用戶,hasNext判斷是否還有元素。 因此我們定義一個(gè)接口Iterator,這個(gè)接口中定義兩個(gè)方法next和hasNext:

          public interface Iterator {
            public boolean hasNext() {}
            public Object next()  {}
          }

          而User類的listUses方法返回值改為Iterator接口的實(shí)現(xiàn)類:

          public class User {
            ...
            public Iterator listUsers() {
            }
            ...
          }

          這樣就把User類的設(shè)計(jì)和具體的實(shí)現(xiàn)方法分離開了,因?yàn)榇藭r(shí)任何實(shí)現(xiàn)了next()和hasNext()方法的類都可以做為listUsers的返回值,都可以被用來(lái)表達(dá)“用戶列表”,而不僅僅可以使用Vector而已。比如,我可以用ArrayList來(lái)表達(dá)用戶列表,因?yàn)锳rrayList也實(shí)現(xiàn)了Iterator,當(dāng)然我也可以自己專門寫一個(gè)類來(lái)存放用戶列表,只要實(shí)現(xiàn)next()和hasNext()方法就行了。

          這樣在具體的編寫代碼的時(shí)候,程序員具有了最大的靈活性,可以根據(jù)具體的情況,采用不同的編程方法來(lái)存放用戶列表。特別是降低了程序的耦合度,提高了程序的可移植性。對(duì)于上面那個(gè)JunkMail的listAllMail()方法也同樣應(yīng)該改為接口類型。

          然后,在主程序里面就這樣來(lái)使用User類的listUsers方法:

          User myUser = new User();
          Iterator iterator = myUser.listUsers();
          while (iterator.hasNext()) {
            iterator.next();
          }

          這樣就可以完全不用考慮程序代碼實(shí)現(xiàn)了,從高層次上把功能抽象出來(lái),定義成為接口,同時(shí)又可以把系統(tǒng)設(shè)計(jì)的很合理,完全根據(jù)業(yè)務(wù)的需求來(lái)進(jìn)行設(shè)計(jì)。

          結(jié)語(yǔ)

          通過(guò)上面的幾個(gè)例子的設(shè)計(jì)說(shuō)明,使用面向?qū)ο蟮乃季S方法,其實(shí)是一個(gè)把業(yè)務(wù)邏輯從具體的編程技術(shù)當(dāng)中抽象出來(lái)的過(guò)程,而這個(gè)抽象的過(guò)程是自上而下的,非常符合人類的思維習(xí)慣,也就是先不考慮問(wèn)題解決的細(xì)節(jié),把問(wèn)題的最主要的方面抽象成為一個(gè)簡(jiǎn)單的框架,集中精力思考如何解決主要矛盾,然后在解決問(wèn)題的過(guò)程中,再把問(wèn)題的細(xì)節(jié)分割成一個(gè)一個(gè)小問(wèn)題,再專門去解決細(xì)節(jié)問(wèn)題。

          因而一旦牢牢的抓住了這一點(diǎn),你就會(huì)發(fā)現(xiàn)在軟件設(shè)計(jì)和開發(fā)過(guò)程中,你自己總是會(huì)不知不覺(jué)的運(yùn)用面向?qū)ο蟮乃季S方法來(lái)設(shè)計(jì)和編寫程序,并且程序的設(shè)計(jì)和開發(fā)也變得不再那么枯燥,而一個(gè)合理運(yùn)用面向?qū)ο蠹夹g(shù)進(jìn)行設(shè)計(jì)和架構(gòu)的軟件,更是具備了思維的藝術(shù)美感。

          最后,愿面向?qū)ο蟮乃季S方法也能給您的程序設(shè)計(jì)之路帶來(lái)創(chuàng)作的樂(lè)趣。



          --
                  有一名年輕人名字叫seableu,
                  他的速度遠(yuǎn)勝于光,
                  一天,他啟程旅行,
                  但卻于前一天就返回了!


          ※ 來(lái)源:·BBS 水木清華站 http://smth.org·[FROM: 212.194.215.*]

          posted @ 2008-03-25 17:26 zhrb 閱讀(446) | 評(píng)論 (3)編輯 收藏

          2008年3月18日 #

          轉(zhuǎn)某個(gè)大牛關(guān)于需求分析的一段評(píng)論:

          發(fā)信人: zms (來(lái)福), 信區(qū): Java
          標(biāo)  題: Re: 這個(gè)怎么解決?
          發(fā)信站: 水木社區(qū) (Tue Mar 18 11:58:58 2008), 站內(nèi)

          這么解決:

          1.  需求分析,把 當(dāng)前 的需求搞清楚
          2.  需求分析,把 未來(lái) 可能出現(xiàn) 的需求搞清楚
          3.  需求分析,把 可能擴(kuò)展 以及發(fā)揮 的需求搞清楚
          4.  需求分析,預(yù)料 可能出現(xiàn) 的 變態(tài) 需求
          5.  需求分析, 把 以上需求加以 綜合 引申
          6.  照需求設(shè)計(jì)編碼之,沒(méi)有什么特殊之處,愛(ài)采用什么技術(shù)都行

          posted @ 2008-03-18 12:47 zhrb 閱讀(740) | 評(píng)論 (1)編輯 收藏

          僅列出標(biāo)題  下一頁(yè)
          主站蜘蛛池模板: 丘北县| 勃利县| 舞阳县| 万安县| 阿勒泰市| 龙山县| 芦山县| 阳山县| 会理县| 通海县| 阆中市| 洪江市| 许昌市| 吴江市| 温泉县| 区。| 确山县| 丰县| 清新县| 定州市| 电白县| 明星| 佛山市| 丹巴县| 锡林浩特市| 长阳| 双鸭山市| 措勤县| 哈密市| 永清县| 应用必备| 高邑县| 徐州市| 肇州县| 无锡市| 五台县| 壤塘县| 内乡县| 大洼县| 类乌齐县| 惠州市|