国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

軟件最大的追求是什么?

2019-11-18 15:43:30
字體:
來源:轉載
供稿:網友

  這段時間,java世界有兩件事情值得關注:工業界力推SOA;在開源領域,即將推出的SPRing 2.0將支持非貧血模型,將OO編程推向一個新的階段。

  無論SOA全新架構推出還是OO的持續發展,他們都追求同一個終極目標:松耦合。

  當我們在Java波濤洶涌的潮流中奮擊時,我們經常會思考?我為什么要這樣做?甚至,我們會想松耦合真的那么酷?可維護性真的是軟件唯一?也許我們迷失了方向。

  我們要好好探究一下,軟件的最大追求是什么?

  我們的大學計算機教育只是教會我們如何編程?這如同技工學校中教會學員如何使用車床一樣,當我們學會了編程,接下來是什么呢?是不是就沒有了呢?是不是就是如同車工那樣只需日復一日的反復編程呢?

  其實,當你在一個系統中持續編程(增加新的東西),這個系統就變得復雜了,你面臨最大的挑戰是如何整理你自己的產物。

  也就是說:大學教育只教會我們如何“增加新的東西”,但是沒有教育我們如何“整理這些東西”,而后者是目前軟件領域日新月異不斷發生的革命的新動力。

  下面我們以具體代碼來說明“增加新的東西”和“整理這些東西”完全屬于不同層次的學問,有些人談到軟件只會想到算法和數據結構,認為這些才是科學,其實這是將軟件數學化,軟件不只是科學計算的工具,它自身也是一門科學,更象治理學/經濟學一樣,是科學和藝術的結合。

  在最近Java(TM) Boutique網站上刊登出一篇文章Measuring the Complexity of OO Systems,衡量OO系統的復雜性,該文對軟件復雜性幾個聞名公理進行了具體闡述,這些公理假如你不進行學習和培訓,即使你使用OO語言Java等這樣工具,還是顯示你是“業余”的。

  軟件復雜性包括以下部分(引自Measuring the Complexity of OO Systems):

   * Cyclomatic Complexity (圈復雜性)
   * Response for Class (類的響應)
   * Weighted methods per class (每個類重量方法)

  Cyclomatic Complexity

  Cyclomatic Complexity可以用下面代碼來說明:

  Cyclomatic Complexity (CC) = number of decision points +1

  其中number of decision points是指一個if else之類的條件判定語句,比如,是下面這個條語句:
  public void isValidSearchCriteria(SearchCriteria s){

  if(s!=null) {
    return true;
  }else{
    return false;
  }
  }

  Cyclomatic complexity 對代碼的可測試性和可維護性上有很大影響,正如上例指出,當你要測試isValidSearchCriteria()方法 ,你必須寫三個測試用例來驗證它。

  假如這個CC值增加,將有更多的判定點(decision points)數量,也就意味著需要花費更多的力量來測試這些方法。具體更多說明可參考Measuring the Complexity of OO Systems一文。

  所以,if else 或while 等條件語句是對真正OO的一種傷害(這是非OO公理見Thomas McCabe),可以極端地說:一個好的OO系統幾乎在業務邏輯層看不到超出兩個以上條件的if else等判定語句,這些條件語句都是可以被GoF設計模式的狀態模式/策略模式等替代。

  當你的Java系統中布滿了大量的if else語句,雖然你使用很酷的語言工具,但是說明你的思維是傳統過程的,需要重新學習和培訓。

  Response for Class(RFC)

  這是聞名的 Chidamber and Kemerer公理之一。以下面代碼來說明:
  public class RegistrationManager {

  public void createRegistration(RegistrationData regData){

    DataaccessManager manager = new DataAccessManager();
    AuditManager auditManager = new AuditManager();
    //save the registration
    manager.saveRegistration(regData);
    //audit the creattion
    auditManager.createAuditRecord(regData);

  }

  public Registration findRegistration(String regNumber){

    DataAccessManager manager = new DataAccessManager();
    Registration reg = null;

    //find the registration
    reg = manager.findRegsitration(regNumber);

    return reg;

  }

  }

  這個類RegistrationManager 依靠其他兩個類DataAccessManager 和 AuditManager 。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永定县| 新郑市| 大石桥市| 漳州市| 中宁县| 石柱| 洞口县| 凤翔县| 从江县| 绥中县| 水城县| 察雅县| 海门市| 蕉岭县| 松潘县| 东莞市| 南投市| 嵩明县| 内江市| 宾阳县| 大同市| 荆州市| 微山县| 会东县| 古浪县| 乌审旗| 从化市| 三河市| 东安县| 永修县| 旌德县| 济源市| 六安市| 金门县| 元朗区| 古蔺县| 岢岚县| 新巴尔虎右旗| 阿拉善左旗| 阳泉市| 浠水县|