苹果屋

BlogJava 首页 新随笔 联系 聚合 管理
  2 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

2007年3月7日 #

 

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 钱磊 阅读(259) | 评论 (0)编辑 收藏

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 钱磊 阅读(322) | 评论 (0)编辑 收藏