Objective-J简明教程3-2:使用对象和类、导入代码
2009年05月31日 Web开发, 翻译
官方网站原文:Learning Objective-J
了解了Objective-J对象和类的基本情况下,接下来我们看一看如何使用它们。下面的代码创建一个新Person对象,并设置了其name属性:
var myPerson = [[Person alloc] init]; [myPerson setName:"John"];
Objective-J中的方法调用叫做“消息”(messages),为对象发送消息需要使用方括号表示法,如:[object message]。如前所述,有些方法是类方法,要通过类来调用——alloc就是一个类方法。Objective-J中的每个类都有一个名叫alloc的特殊的类方法,该方法返回相应类的一个新实例。
上面的例子在Person类上调用了alloc方法,结果返回了一个Person实例。然后,我们又调用了该实例的init方法。无论alloc还是init都返回一个对象的引用,而我们把这个对象赋给了变量myPerson。就像alloc一样,每个类都会从CPObject继承init方法。
alloc类方法与JavaScript、C++及Java语言中的new关键字相似,都是创建新的实例。而init实例方法则与这些语言中的构造器相似,都是对新创建的实例执行初始化。
有一些会指定自定义的init方法,如CPView的自定义init方法签名如下:
- (id)initWithFrame:(CGRect)aFrame
每个子类都要确保调用其父类的init方法。以下是前面Person类的自定义init方法,该方法直接接收名字参数:
- (id)initWithName:(CPString)aName
{
self = [super init];
if (self)
{
name = aName;
}
return self;
}
首先,调用超类的init方法,结果会返回一个对新初始化实例的引用。此时,必须把这个引用赋值给self变量(以防超类的init方法因新实例而抛弃原始的实例)。然后,检查self确保其正确返回,如果检查通过则执行针对当前类的操作,即把aName赋值给name。最后,返回self以便调用代码获得这个新初始化对象的引用。
Objective-J中的self等价于JavaScript中的this。可以说this引用JavaScript对象,而self引用Objective-J对象。与JavaScript类似,self.foo引用的是foo实例变量;但与JavaScript不同的是,self不是必需的,即可以在任何实例方法中使用foo。
Cappuccino中的很多类都为创建对象提供了一种略有不同的模型,但却更加便捷。在创建对象时,这些类不调用alloc和init,而是实现各自的类方法以返回新对象。注意,在类方法中,self引用类自身。
+ (id)personWithName:(CPString)aName
{
return [[self alloc] initWithName:aName];
}
可以像下面这样调用这个类方法:
var joe = [Person personWithName:"Joe"];
导入代码
JavaScript所欠缺的一种众望所归的特性,就是以像Java或C一样的方式导入代码。对此,Objective-J添加了@import语句:
@import <Foundation/CPObject.j> @import <AppKit/CPView.j> @import "MyClass.j"
有两种类型的导入语句。尖括号表示框架代码,而引号表示本地项目代码。导入框架代码时,会使用内置的搜索路径机制从定义的位置中搜索目标文件。而导入本地代码时,则只会查找与导入文件相关的位置。
Objective-J简明教程3-1:类、方法
2009年05月26日 Web开发, 翻译
官方网站原文:Learning Objective-J
![]()
Objective-J是一门基于Objective-C的新编程语言,是JavaScript的超集。换句话说,任何有效的JavaScript代码同样也是有效的Objective-J代码。对于熟悉JavaScript及面向对象编程概念,特别是熟悉经典继承机制的读者而言,学习Objective-J并不难。熟悉Objective-C会有所帮助,但不是必需的。
类
Objective-J有两种对象:本地JavaScript(以下简称“JS”)对象和Objective-J对象。本地JS对象就是JavaScript内置的那些对象。Objective-J对象则是Objective-J添加的另一种本地对象。这些新增的对象基于类和经典继承构建(与C++或Java相似),而不是基于原型式继承构建。
在Objective-J中创建一个类很简单。下面就是一个Person类的代码,该类包含一个成员变量name:
@implementation Person : CPObject
{
CPString name;
}
@end
类定义始终以关键字@implementation开头,后跟类名。冒号后面的第三个项是要子类化的类。在这个例子中,我们想要子类化CPObject,而它是大多数类的顶级(root)类。你可能不需要超类,但终归还应该有一个比较稳妥(You don’t need a superclass, but nearly all the time you will want one.)。
在类声明之后,包含在一对花括号中的代码块,用于定义类的成员变量。每个变量声明独占一行,格式是类型、变量名和一个分号。从技术上角度讲,类型是可选的,但我们强烈建议不要省略它。声明变量的类型非常重要,如果不在类中声明成员变量的类型,该变量就会变成全局变量。
类定义的最后,需要添加一个@end关键字。
方法
跟对象一样,本地JavaScript函数在Objective-J中也没有什么不同。除了本地函数之外,Objective-J则为新的类系统添加了方法的概念。下面我们就为Person类添加一组访问器(accessor)方法:
- (void)setName:(CPString)aName
{
name = aName;
}
- (CPString)name
{
return name;
}
以上这些代码位于定义类的@implementation行及声明实例变量的代码块之后、@end关键字之前。熟悉C语言(包括JavaScript)编程风格的读者对这种语法应该不会陌生。这里唯一需要说明的就是方法声明。
每个方法签名以一个减号(-)或一个加号(+)开头。短划线表示实例方法,即能够基于实例变量调用的方法。由此可见,上面的两个方法都应该是实例方法,因为这两个方法的用途分别是设置和取得Person对象的实例变量。
减号/加号的后面是由一对圆括号包围的类型。这也没有什么特别的。同样,这里的类型声明虽然也是可选的,但我们仍然要强烈推荐,因为它有助于理解代码。最后,就是方法名。在Objective-J中,方法的参数与方法名是掺混在一块的。上面定义的两个方法分别是name和setName:,注意“setName”之后的冒号,这表明后面是一个参数。
如果某个方法有多个参数,则以冒号分隔每个参数。在下面的方法声明中,两个参数由一个标签(label)分隔,之后是冒号、类型和参数名:
- (void)setJobTitle:(CPString)aJobTitle company:(CPString)aCompany
在Objective-J中,方法名可以被其参数分隔开来。从技术上说,被分隔开的方法名并不命名参数;即上面的方法名是setJobTitle:company:。把方法名的第一部分与后续的标签按照次序连接起来,就是“实际的”方法名。
方法的参数必须按顺序传递,而且必须传递所有参数。例如,要调用上面定义的多参数方法,需要在每个标签后面传递数据:
[myPerson setJobTitle:"Founder" company:"280 North"];
这里,我们在每个冒号后面都指定了与参数名对应的输入值。对每个参数来说,都要重复“标签、冒号、输入”的格式。
有读者可能会问:实际的方法名是什么还有那么重要吗?在Objective-J和Cappuccino中,读者可以发现一种模式,即能够将方法作为参数传递给另一个方法。这种思想常见于委托和事件系统中。但是,由于Objective-J的方法不像JavaScript中那样是一类对象,因此引用它们需要使用特殊的表示法——@selector。如果想把前面的方法作为参数传递给另一个方法,可以使用下面的代码:
[fooObject setCallbackSelector:@selector(setJobTitle:company:)];
由此可知,通过@selector引用(并传递)的方法名需要包含冒号及相应的参数标签。
2006年以来翻译的英文外版图书回顾
2009年05月18日 翻译
19.2009-05-18~2009-06-18
原版书名:Learning jQuery 1.3
出 版 社:人民邮电出版社
出版日期:未知
18.2009-03-21~2009-05-15
原版书名:Designing Web Interfaces: Principles and Patterns for Rich Interactions
出 版 社:电子工业出版社
出版日期:2009-8-1
17.2009-02-01~2009-03-20
原版书名:Flex 3 in Action
出 版 社:清华大学出版社
出版日期:预计2009-9-1
16.2008-09-15~2008-12-15
原版书名:Dojo: The Definitive Guide
出 版 社:机械工业出版社
出版日期:2009-4-1
15.2008-06-10~2008-07-30
原版书名:Google Web Toolkit Solutions: More Cool & Useful Stuff
出 版 社:机械工业出版社
出版日期:2009-1-1
14.2008-04-01~2008-06-01
原版书名:Google Web Toolkit Applications
出 版 社:机械工业出版社
出版日期:2008-9-1
13.2008-02-01~2008-03-30
原版书名:Stylin’ with CSS: A Designer’s Guide (2nd Edition)
出 版 社:人民邮电出版社
出版日期:2009-2-1
12.2008-01-12~2008-01-31
原版书名:Learning jQuery: Better Interaction Design and Web Development with Simple JavaScript Techniques
出 版 社:人民邮电出版社
出版日期:2008-7-1
11.2008-01-01~2008-01-12
原版书名:CSS Web Site Design Hands on Training (Hands-On Training)
出 版 社:机械工业出版社
出版日期:2008-4-1
10.2007-12-01~2007-12-31
原版书名:The Book of JavaScript, 2nd Edition: A Practical Guide to Interactive Web Pages)
出 版 社:清华大学出版社
出版日期:2008-9-1
9.2007-10-23~2007-11-30
原版书名:AdvancED DOM Scripting: Dynamic Web Design Techniques
出 版 社:人民邮电出版社
出版日期:2008-7-1
8.2007-09-01~2007-10-22
原版书名:Ajax Construction Kit: Building Plug-and-Play Ajax Applications
出 版 社:机械工业出版社
出版日期:2008-1-1
7.2007-06-13~2007-07-14
原版书名:Beginning Regular Expressions
出 版 社:清华大学出版社
出版日期:2008-10-1
6.2007-04-02~2006-06-05
《Adobe Photoshop Lightroom摄影师完全手册》
原版书名:The Adobe Photoshop Lightroom Book: The Complete Guide for Photographers
出 版 社:清华大学出版社
出版日期:2009-2-1
5.2007-02-06~2007-05-29
原版书名:PHP Cookbook,2nd Edition
出 版 社:中国电力出版社
出版日期:预计2009-10-1
4.2006-09-13~2006-11-30
原版书名:Cascading Style Sheets: The Definitive Guide, 2nd Edition
出 版 社:学习翻译,未公开
3.2006-09-13~2006-09-30
原版书名:Sams Teach Yourself Regular Expressions in 10 Minutes
出 版 社:学习翻译,未公开
2.2006-09-01~2009- 09-12
原版文章:From DHTML To DOMScripting
出 版 社:学习翻译,未公开
1.2006-05-28~2006-08-20
原版书名:Stylin’ with CSS: A Designer’s Guide (1nd Edition)
出 版 社:学习翻译,未公开
关于primitive interfaces的翻译
2009年05月12日 翻译
碰到了primitive interfaces这个词,感觉不能泛泛地翻译。经过搜索,找到了一篇名为Primitive interface structures in browsing the Web的论文。该论文大概发表于1998年在澳大利亚召开的“计算机人机交互会议”的《会刊》上面。查看全文是要收费的,所幸“摘要”部分可以free of charge。现摘录并试译如下,作为存档。
Primitive interface structures in browsing the Web
Rho, Y.; Gedeon, T.D.
Computer Human Interaction Conference, 1998. Proceedings. 1998 Australasian
Volume , Issue , 30 Nov-4 Dec 1998 Page(s):304 – 305
Digital Object Identifier 10.1109/OZCHI.1998.732228
Summary:Browsing WWW documents is interactive. Not only their layout but also their interaction structures should be organised well in order to be effective to the reader and to get engineering benefits by composition. We define four primitive logical browsing structures. These are the sequential, go-to, nested and iterative structures. To support these primitive browsing structures, five groups of interface structures are proposed in this paper. These are the sequential, go-to, nested, loop and evolutionary interface structures
Web浏览中的基本界面结构
Rho, Y.; Gedeon, T.D.
原载计算机人机交互会议《学报(1998)》(澳大利亚,1998)
卷,期,1998年11月30日~12月4日,页:304~305
数字对象识别 10.1109/OZCHI.1998.732228
摘要:浏览WWW文档是一个交互的过程。除布局之外,还应合理组织文档的交互结构,以方便人类阅读和自动化处理。本论文定义了4种基本的逻辑浏览结构,分别是连续型、跳转型、嵌套型和迭代型。为了支持这些基本的浏览结构,本论文建议成立5个界面结构小组,分别是连续结构组、跳转结构组、嵌套结构组、循环结构组和界面结构改进组。



















为之漫笔(李松峰),本博客专注于Web前后端技术、移动平台开发技术、交互设计和技术翻译。声明一下,因为时常需要外出审稿,而且基本不带笔记本,所以有时可能会迟一点回复大家的留言。