Flash中ActionScript的形象列子分享

2010-12-15  金鑫 

今天看到一篇形象的代码举例,share给大家!

      ActionScript 提供 getter 和 setter 以存取类的属性. 在 OOP 编程的角度, 是出于类的封装性考虑, 类的继承 (protected) 和私有化 (private) 的属性不能直接暴露在外, 外部只能通过存取方法访问和修改.

      假设现在有一个去理发的女生, 年龄只有她自己知道, 发型师可以获知她的发质, 知道并可以改变她的发型. 那么 ActionScript 类可以定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Lady {
 
	// 年龄
	private var _age:int;
 
	// 发质
	protected var _hairQuality:String;
	public function get hairQuality():String {
		return this._hairQuality;
	}
 
	// 发型
	private var _hairStyle:String;
	public function get hairStyle():String {
		return this._hairStyle;
	}
	public function set hairStyle(value:String):void {
		this._hairStyle = value;
	}
 
	public function Lady() {
		this._age = 24;
		this._hairQuality = "damaged";
		this._hairStyle = "fashion";
	}
 
}

      由代码可以看出, 通过存取方法可以选择性地开放外部对属性的操作. 存取方法的写法也与一般的方法写法不同点在于 get 和 set 关键字. 一旦写为存取方法, 其调用方式将与常规方法不同, 将通过点运算符进行操作, 如:

1
2
3
4
var lady:Lady = new Lady();
if(lady.hairStyle == "gliding") {
	lady.hairStyle = "fashion";
}

另外, 使用存取方法还可以覆盖从超类继承来的属性, 这是常规类属性不能做到的, 可以对从超类继承的 getter 和 setter 方法使用 override 属性.

ActionScript 存取方法的思想和 C# 中 "域 (field)" 的概念几乎一样, 倡导开发者不使用 public 声明属性, 而通过 getter 和 setter 对外提供服务. 而 C# 要求同一个属性的 getter 和 setter 写在一起, 可以减少开发者遗漏和犯错.

或许因为我很长一段时间在敲 Java, 这种类似原型 (prototype) 的调用方式让我感到难受. 如果用 Java 对上面的 Lady 再写一遍, 会是这样的...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Lady {
 
	// 年龄
	private int _age;
 
	public Lady() {
		this._age = 24;
		this._hairQuality = "damaged";
		this._hairStyle = "fashion";
	}
 
	// 发质
	protected String _hairQuality;
	protected String getHairQuality {
		return this._hairQuality;
	}
 
	// 发型
	private String _hairStyle;
	public String getHairStyle() {
		return this._hairStyle;
	}
	public void setHairStyle(String value) {
		this._hairStyle = value;
	}
 
}

      Java 恨不得将所有属性设为继承和私有, 而通过对外的方法提供信息. 在外部调用时, 其调用方法与常规方法无异, 如果不是 JavaBean, 没有任何特殊要求. 好处是什么? 属性是属性, 方法是方法, 没有存取方法什么的这种特殊类型, 所以代码可以更加清晰易懂.

425°/4245 人阅读/1 条评论 发表评论

李康  2011-02-18

as技术也有啊!还有flex呢!


登录 后发表评论