蘋果屋

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            2 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          2007年3月12日 #

          ?

          Ruby的“單行程序”

          為了使您適應腳本語言,首先介紹幾個Ruby的單行程序。

          # 經典的 Hello world.print "Hello world\n"
          # 列出輸入文件中包含”From”的行while gets(); print if /From / end
          # 向文件中添加行號while gets(); print $., ":", $_ end
          # π的計算print 4*Math.atan2(1,1), "\n"

          Ruby的注釋

          Ruby的注釋是指從#開始到該行結束。

          Ruby的表達式

          Ruby的表達式包括下列內容(主要的)。

          字符串
          字符串是指被單引號(')或雙引號(")括起來的部分。在用雙引號括起來的字符串中,可以使用反斜杠(\)來指定轉義字符,這同C語言是一樣的。同時,以#{}括起來的表達式的結果也被置入其中。
          數值
          整數,浮點數。
          數組/散列表
          用[]括起來的一串表達式是數組,而以{}括起來的一串表達式是散列表。
          散列表是一種可以把任意類型的對象都當成索引的數組。散列表有時也叫做哈希表或辭典。
          變量/常數
          Ruby中有常數和3種變量。變量和常數的區別在于第一個字符有所不同。
          局部變量
          變量名以小寫英文字母開始。使用時,需要以賦值的方式進行初始化。
          全局變量
          以$開始。未初始化的值為nil。
          實例變量
          以@開始。未初始化的值為nil。
          類變量
          以@@開始。未初始化的值為nil。
          類常數
          以大寫英文字母開始。未初始化的值為nil。
          賦值
          變量賦值方法如下。
          變量=表達式
          調用方法(函數)
          執行對象固有操作(方法)的方法如下
          表達式.方法名表達式.方法名(表達式..)
          在不引起混淆的情況下,可以省略參數的括號。
          調用某方法執行主體self的方法時,可以省略最開始的表達式。
          方法名方法名(表達式..)
          區分無參數的方法調用和局部變量的方法是看看有沒有賦值過程。
          操作符表達式
          普通的算式可以用(基本上與C語言一樣的)操作符來表示。但內部是把操作符當作方法調用(以操作符作為方法名)來處理的。

          Ruby的語句

          Ruby使用分號(;)或換行來分隔表達式,表達式串起來構成語句。語句的值取決于最后執行的表達式的值。

          Ruby的流程控制結構

          Ruby中可以使用下列流程控制結構。

          • if表達式 then代碼塊 [elsif表達式 then代碼塊]..[else代碼塊]end
          • case表達式when表達式..;代碼塊...[else代碼塊]end
          • while表達式;代碼塊end
          • for變量..in表達式;代碼塊end

          if和while的意思與通常的語言基本相同。可以使用分號或換行來代替if代碼塊中的then。請注意Ruby使用elsif代替C語言中的else if。

          case是把若干個比較歸為一體的控制結構。

          for可以使用循環把數組等的元素分別賦值給變量。

          循環內可以使用下列語句。

          break
          中斷循環(相當于C語言的break)。
          next
          開始下一次循環(相當于C語言的continue)。
          redo
          重新執行塊的第一行。

          常用的語句

          介紹幾個Ruby程序中常用的語句。這些語句是對象類的方法,可以在任何類中使用,就如同使用函數一樣。

          exit([status])
          結束程序的運行。若為status指定了一個整數的話,該整數就成為結束status。默認的status值為0。
          gets
          從命令行參數指定的文件(群)中讀取一行,然后把該行的內容作為字符串返回。若沒有制定命令行參數的話,則從標準輸入中讀取。讀取的字符串可以被賦值給變量$_。遇到文件結束返回nil(偽)。
          while gets  ...end
          上面就是典型的用法。
          open(文件名[,mode])
          打開文件。mode是字符串,就和C的fopen一樣。省略時以讀取模式打開。
          print
          輸出函數。按順序將參數輸出到標準輸出上。省略參數時則輸出變量$_的值。
          posted @ 2007-03-12 12:50 錢磊 閱讀(272) | 評論 (0)編輯 收藏

          2007年3月7日 #

          SOA是英文Service-Oriented Architecture,即面向服務架構的縮寫。這個詞匯最近一兩年頻頻出現在各種技術期刊上。但是一直以來對于 SOA到底是什么沒有明確的回答;SOA有什么特點?適合用于解決哪些問題?與其他的技術有什么區別與聯系?Web Service和SOA又是什么關系 ?SOA的出現對于軟件架構設計有什么影響?本文將就上面提到的這些問題,嘗試根據作者自己的理解給出SOA的定義;總結出SOA特有的三個基 本特征;然后以HTTP協議為例對這些特征進行解釋;最后簡要的說明SOA對今后軟件架構設計可能帶來的影響。

          SOA定義

          下面是作者給SOA下的一個定義:SOA是指為了解決在Internet環境下業務集成的需要,通過連接能完成特定任務的獨立功能實體實現的一種 軟件系統架構。從這個定義中我希望表達的前提有下面兩點:

          1) 軟件系統架構:SOA不是一種語言,也不是一種具體的技術而是一種軟件系統架構,它嘗試給出在特定環境下推薦采用的一種架構,從這 個角度上來說,它更像一種模式(Pattern)。因此它與很多已有的軟件技術比如面向對象技術,是互補的而非互斥的。它們分別面向不同的應用 場景,用來滿足不同的特定需求。

          2) SOA的使用范圍:需求決定同時也限制功能。SOA并不是包治百病的萬靈丹,它最主要的應用場合在于解決在Internet環境下的不同商業 應用之間的業務集成問題。在下面我們會詳細討論Internet的各種特點如何決定SOA的特點,這里我們只需要先簡單回顧一下Internet環境區別 于Intranet環境的幾個特點:

          a) 大量異構系統并存,計算機硬件工作方式不同,操作系統不同、編程語言也不同;

          b) 大量、頻繁的數據傳輸仍然速度緩慢并且不穩定;

          c) 版本升級無法完成,我們根本就無法知道互聯網上有哪些機器直接或者間接的使用某個服務。

          基于上面的前提,下面就讓我們一起看一下SOA的基本特征。

          SOA三大基本特征

          1 獨立的功能實體

          在Internet這樣松散的使用環境中,任何訪問請求都有可能出錯,因此任何企圖通過Internet進行控制的結構都會面臨嚴重的穩定性問題。 SOA非常強調架構中提供服務的功能實體的完全獨立自主的能力。傳統的組件技術,如.NET Remoting,EJB,COM或者CORBA,都需要有一個宿主 (Host或者Server)來存放和管理這些功能實體;當這些宿主運行結束時這些組件的壽命也隨之結束。這樣當宿主本身或者其它功能部分出現問 題的時候,在該宿主上運行的其它應用服務就會受到影響。

          SOA架構中非常強調實體自我管理和恢復能力。常見的用來進行自我恢復的技術,比如事務處理(Transaction),消息隊列(Message Queue) ,冗余部署(Redundant Deployment)和集群系統(Cluster)在SOA中都起到至關重要的作用。

          2 大數據量低頻率訪問

          對于.NET Remoting,EJB或者XML-RPC這些傳統的分布式計算模型而言,他們的服務提供都是通過函數調用的方式進行的,一個功能的完成 往往需要通過客戶端和服務器來回很多次函數調用才能完成。在Intranet的環境下,這些調用給系統的響應速度和穩定性帶來的影響都可以忽 略不計,但是在Internet環境下這些因素往往是決定整個系統是否能正常工作的一個關鍵決定因素。因此SOA系統推薦采用大數據量的方式一次 性進行信息交換。

          3 基于文本的消息傳遞

          由于Internet中大量異構系統的存在決定了SOA系統必須采用基于文本而非二進制的消息傳遞方式。在COM、CORBA這些傳統的組件模型中, 從服務器端傳往客戶端的是一個二進制編碼的對象,在客戶端通過調用這個對象的方法來完成某些功能;但是在Internet環境下,不同語言, 不同平臺對數據、甚至是一些基本數據類型定義不同,給不同的服務之間傳遞對象帶來的很大困難。由于基于文本的消息本身是不包含任何處 理邏輯和數據類型的,因此服務間只傳遞文本,對數據的處理依賴于接收端的方式可以幫忙繞過兼容性這個的大泥坑。

          此外,對于一個服務來說,Internet與局域網最大的一個區別就是在Internet上的版本管理極其困難,傳統軟件采用的升級方式在這種松散 的分布式環境中幾乎無法進行。采用基于文本的消息傳遞方式,數據處理端可以只選擇性的處理自己理解的那部分數據,而忽略其它的數據, 從而得到的非常理想的兼容性。

          HTTP協議:一個典型的SOA實現

          每一項新技術都是在一些舊的技術基礎上發展出來的。正如XML根本思想來自于在60年代就已經出現的早期標記性語言一樣,SOA雖然這兩年 才出現,但是它所表達的觀念應該說在網絡這種分布式系統結構出現不久就已經廣泛應用了。例如我們最熟悉的HTTP協議就是一個非常典型的 SOA架構設計。HTTP協議的工作過程簡單敘述如下:

          1) 客戶端,通常是通過瀏覽器,向服務器端以文本的方式發送一個請求,索取一個Web頁面;
          posted @ 2007-03-07 21:12 錢磊 閱讀(329) | 評論 (0)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 西畴县| 晴隆县| 新龙县| 德江县| 湘潭县| 九江县| 莫力| 平潭县| 山丹县| 喀喇| 准格尔旗| 浦东新区| 青川县| 宁远县| 白沙| 莎车县| 肥乡县| 永寿县| 巴青县| 监利县| 大连市| 陵川县| 石屏县| 富民县| 林州市| 吴桥县| 平原县| 贡山| 赣州市| 永平县| 鸡西市| 南川市| 翼城县| 汝州市| 巩留县| 新绛县| 登封市| 鄱阳县| 百色市| 化州市| 沙洋县|