 |
 |
 |
|
|
 |
|
| NovaVN
|
Mar 17 2004, 11:30 AM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
Giới
Thiệu
Trong Flash MX 2004, Macromedia
đã giới thiệu một phiên bản mới của ngôn ngữ lập trình
trong Flash, đó là Action Script 2.0. Trong bài viết
này, chúng ta sẽ nói qua về những đặc điểm mới của ngôn
ngữ lập trình hướng đối tượng (OOP) mới này, và sẽ xem
một số ví dụ về sự chuyển đổi từ Action Script 1.0 (sử
dụng trong Flash 5 và Flash MX) sang Action Script
2.0
Tại sao lại phải
cần có phiên bản Action Script mới?
Trong những movie clip đơn giản hoặc
trong những mẫu quảng cáo, chúng ta không cần một phiên
bản mới của Action Script. Trên thực tế, nhiều dự án
thậm chí không cần dùng đến Action Script (AS). Nếu dừng
ở đây thì bài viết thật ngắn gọn :-)
Là một nhà
phát triển ứng dụng sử dụng Flash, chúng ta dễ dàng nhận
thấy mệt mỏi khi phải làm việc với AS 1.0. Đối với những
lập trình viên sử dụng Java, C++ hay C# thì AS 1.0 rất
lạ lẫm với họ. Trong AS 2.0, những lập trình viên đó
sẽ cảm thấy sự quen thuộc trong cách lập trình. AS 2.0
giống như Java, Jscript .NET và những lập trình viên
JavaScript 2.0 sẽ cảm thấy rất quen thuộc với ngôn ngữ
này vì cả 3 ngôn ngữ trên đều bắt đầu từ một nguồn
(chúng đều được phát triển từ nền tảng của ECMAScript
Edition 4 proposal). AS 2.0 giúp các nhà phát triển viết
những ứng dụng tốt hơn, và có lẽ cũng sẽ thu hút nhiều
lập trình viên khác sử dụng Flash! Đừng bận tâm nếu
bạn chưa hứng thú học AS 2.0 ngay bây giờ. Flash MX 2004
vẫn cho phép chúng ta sử dụng AS 1.0 nếu muốn, chỉ có
điều bạn sẽ không được tiếp cận với những nét mới nếu
tiếp tục sử dụng AS 1.0 |
|
|
|
|
|
 |
|
| NovaVN
|
Mar 17 2004, 11:32 AM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
A
little bit of OOP in AS 1.0Trước khi
tìm hiểu về AS 2.0, chúng ta hãy xem lại OOP trong AS
1.0. Phần này sẽ giúp ích nhiều cho những bạn chưa quen
với OOP trong Flash 5 và Flash MX. Những người đã quen
rồi có thể bỏ qua phần này Mặc dù AS 1.0 vẫn chưa
phải là ngôn ngữ hướng đối tượng toàn diện những các nhà
phát triển ứng dụng trên Flash vẫn sử dụng AS 1.0 để
viết những ứng dụng hướng đối tượng. Mọi thứ trong AS
1.0 đều phụ thuộc vào prototype (nguyên mẫu). Trong thực
tế, OOP trong AS 1.0 đòi hỏi phải có trình độ về
prototype. Class trong AS 1.0 được thực thi như một
hàm, các method và property được gắn vào object mẫu của
class. Lấy ví dụ:
ActionScript
//
Wizard class function Wizard()
{ }
// A method
called help() is attached to the prototype
// object of the Wizard function
Wizard.prototype.help = function() {
};
Khi Flash không
tìm thấy property hay method của một object, nó sẽ tìm
trong chuổi prototype của đối tượng. Nếu method
help()được đặt ở trong class để thay thế, Flash sẽ tạo
một bản copy của method cho mỗi instance của Wizard
class:
ActionScript
//
This creates a new copy of the function help() in every
instance function Wizard() {
this.help = function()
{ };
}
Đối với lập
trình viên Java, C++ hay C# thì đoạn mã trên quen thuộc
hơn với method được viết bên trong class. Tuy nhiên, để
lưu vào bộ nhớ (để share), method và property có thể
được đặt trong object mẫu của class Trong ví dụ dưới
đây, chúng ta có 2 method cùng tên, một được gắn với
object mẫu và một đặt ở trong class, Flash sẽ thấy
method nằm trong class trước
ActionScript
function TestClass() {
this.method = function() {
trace("Internal
method");
};
this.prop =
">>> Internal prop";
}
// Attach a method to the
prototype object of the class
TestClass.prototype.method = function() {
trace("Prototype
method"); };
TestClass.prototype.prop = ">>> Prototype
prop"; // Create an
instance of the TestClass class var w =
new TestClass();
// Internal method
is located before the prototype method
w.method();
// Replace the
Internal method w.method = function()
{ trace("New
method"); };
w.method();
// Delete the Internal
method delete w.method;
// The only method remaining is the prototype
method w.method();
// Test the properties
trace(w.prop); w.prop = ">>>
New prop"; trace(w.prop);
delete w.prop;
trace(w.prop);
Như
các bạn đã thấy, OOP trong AS 1.0 sẽ rất dễ làm rối
những người mới làm quen với Flash. Biết cách đặt code
đúng chỗ rất quan trọng bởi vì không lập trình viên nào
thích “vò đầu bứt tóc” khi những thông báo đáng ghét cứ
xuất hiện. Một trong những khái niệm quan trọng
trong OOP là Inheritance (Thừa kế). Về căn bản, bạn sẽ
được thừa kế những gì cha mẹ và tổ tiên bạn có. Nếu bạn
không thích những thứ được thừa kế thì bạn có thể đổi
chúng với những cái bạn thích. Xét một ví dụ
sau:
ActionScript
function SuperClass() {
// SuperClass constructor
}
SuperClass.prototype.parentMethod
= function() { };
// A subclass that inherits from SuperClass
function SubClass() {
super(); }
// Set up the inheritance relationship: SubClass
inherits from SuperClass
SubClass.prototype = new SuperClass();
SubClass.prototype.childMethod = function() {
};
Có rất
nhiều lợi ích khi sử dụng OOP như là dễ bảo trì, khả
năng mở rộng và tái sử dụng mã.
|
|
|
|
|
|
 |
|
| NovaVN
|
Mar 25 2004, 12:39 PM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
Những
điểm mới trong Action Script 2.0AS
2.0 không phải là một ngôn ngữ mới, nó chỉ là bản cải
tiến của phiên bản cũ. Học cách sử dụng AS 2.0 quả thật
rất dễ nếu bạn đã từng sử dụng AS 1.0 hoặc đã sử dụng
các ngôn ngữ OOP khác). Hãy xem qua một số điều mà AS
2.0 đưa ra: - Strict data typing và bộ thông báo
của trình biên dịch được cải tiến - Gợi ý mã được đặt
trên cấu trúc dữ liệu - Những từ khóa và nét mới
trong OOP + class + interface + extends +
implements + public + private + static +
dynamic + intrinsic (chỉ sử dụng trong Flash) +
import + class path + get +
set Strict data typing Trong những
ngôn ngữ strong-typed, các biểu thức đều được gắn với
những kiểu dữ liệu. Dưới đây là 3 lợi ích mấu chốt của
strict data typing:
ActionScript
- Giúp trình biên
dịch tìm những lỗi có khả năng xảy ra và bắt được những
lỗi trong quá trình lập trình (type mismatch) - Làm
cho mã để đọc và dễ hiểu hơn -
|
|
|
|
|
|
 |
|
| NovaVN
|
Mar 25 2004, 12:41 PM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
Những
từ khoá và đặc trưng của OOPTrong bài
viết này, tôi xin mạn phép nói một vài nét về OOP trong
Flash sử dụng Action Script 2.0. Như chúng ta đã biết,
OOP sử dụng Action Script 1.0 đòi hiểu phải thao tác
nhiều. Nhưng các bạn sẽ thấy, chúng ta sẽ giảm bớt thời
gian làm việc với Action Script 2.0, chúng ta sẽ bàn
luận về cách thừa kế, nơi đặt code và cách tổ chức thư
viện code. Trước hết chúng ta sẽ nói về một số khái
niệm mới về OOP Từ khóa và những nét đặc trưng
mới về OOPĐơn vị cơ bản nhất trong OOP là
đối tượng (object), object chứa 2 thành phần chính là dữ
liệu và mã. Bởi vì object là một thành phần độc lập nên
dữ liệu và mã (method) đều không cần phải phô diễn ra
ngoài. Các object liên lạc với nhau bằng cách truyền và
nhận thông điệp thông qua các method (có thể hiểu là API
– Application Programming Interface), vì thế các dữ liệu
bên trong object không cần phải thao tác trực
tiếp. Trong thiết kế hướng đối tượng, xem như là
một bức tranh lớn. Bằng cách đập vỡ bức tranh lớn thành
nhiều mảnh nhỏ độc lập, các application có thể được xây
dựng một cách độc lập. Đấy là ví dụ về class trong
OOP. Dưới đây là một số từ khoá mới có liên quan
đến OOP
QUOTE
class
interface extends
implements
public private
static
dynamic import
get set
intrinsic
Chúng
ta sẽ không nói về từng từ khóa trên, mà các bạn có thể
xem trong tài liệu hướng dẫn của Macromedia Flash.
Lưu ý: Từ khóa intrinsic chỉ sử dụng trong
Flash. Trong Flash không có từ khóa package,
nhưng cách mà từ khóa import hoạt động cũng tương
tự như các ngôn ngữ lập trình hướng đối tượng khác, như
JavaHãy xem một ví dụ dưới đây được viết
Đoạn code dưới đây sử dụng Action Script
1.0
ActionScript
//
constructor _global.Parent =
function(name) {
this.init.apply(this, arguments);
};
// a class (static)
property Parent.lastNames = new
Array(); Parent.prototype.init =
function(name) {
this.lName = name;
Parent.lastNames.push(name);
this.id =
Parent.lastNames.length-1;
trace("Added '"+ Parent.lastNames[this.id]
+"' at: "+ this.id); };
Parent.prototype.getLastName = function()
{ return
(this.lName); };
Parent.prototype.setLastName = function(s) {
this.lName = s;
Parent.lastNames[this.id] =
s; };
Parent.prototype.getNames = function() {
return
(Parent.lastNames); };
Parent.prototype.addProperty("lastName",
Parent.prototype.getLastName,
Parent.prototype.setLastName);
Parent.prototype.addProperty("names",
Parent.prototype.getNames, null);
Còn đây là
code đã được dịch sang Action Script 2.0
ActionScript
class Parent
{ private var lName:String =
""; private var id:Number;
private static var lastNames:Array = new
Array(); //
constructor public function
Parent(name:String) {
init.apply(this, arguments);
}
private function
init(name:String):Void {
lName = name;
lastNames.push(name);
id = lastNames.length-1;
trace("Added '"+ lastNames[id] +"'
at: " + id); }
public function get lastName():String {
return lName;
} public function set
lastName(s:String):Void {
lName = s;
lastNames[id] = s;
} public function get
names():Array {
return lastNames; } }
QUOTE
Lưu
ý:Flash dịch tất cả các non-static properties ở
ngoài constructor và đính kèm nó vào object đầu tiên của
class, không giống như Action Script 1.0 chúng ta phải
viết code cho mỗi instance của class. Thật ra, trong
method init(), nơi mà câu lệnh lName = name được gọi,
một property mới với tên lName sẽ được tạo và override
trong object đầu tiên. Để chắc chắn điều này, chún ta sẽ
xóa instance.lName và thử trace(instance.lName). Nếu
property lName trong object đầu tiên mang một giá trị
khác property lName của các instance, bạn sẽ thấy rõ sự
khác biệt. Xét một ví dụ:
ActionScript
//
NonStaticNonPrimitivePropertyTest.as class
NonStaticNonPrimitivePropertyTest {
private var myArr:Array = new Array();
public function addToMyArr ( someThing:Object ) :
Void { myArr.push (
someThing ); }
public
function displayMyArr ( Void ) : Void {
var l:Number =
myArr.length; for (
var i=0; i < l; i++ ) {
trace (" myArr["+ i
+"] = " + myArr[i]);
} } }
//
nonStaticNonPrimitivePropertyTest.fla var
myFirstTestInstance:NonStaticNonPrimitivePropertyTest =
new NonStaticNonPrimitivePropertyTest(); var
mySecondTestInstance:NonStaticNonPrimitivePropertyTest =
new
NonStaticNonPrimitivePropertyTest();
myFirstTestInstance.addToMyArr("This
should only appear in first
instance");
trace("1. myArr in
myFirstTestIntance:");
myFirstTestInstance.displayMyArr();
trace("\n");
// empty
line
mySecondTestInstance.addToMyArr("This should
only appear in second instance");
trace("2.
myArr in
mySecondTestInstance:");
mySecondTestInstance.displayMyArr();
trace("\n");
// empty line trace("3. myArr in
myFirstTestIntance:");
myFirstTestInstance.displayMyArr();
Có
thể các bạn sẽ chưa quen với cách sử dụng apply() trong
phần constructor. Có 3 cách để thi hành functions trong
Action Script - Cách thứ nhất, đây là cách đơn giản
nhất là gọi tên hàm kèm theo các đối số kèm theo trong
dấu ngoặc đơn như sau
ActionScript
myFunction(myFirstArgument, mySecondArgument);
-
Cách thứ hai:
ActionScript
var
myObjectReference = _root; var
myFunctionName = "myFunction";
myObjectReference[myFunctionName] (myFirstArgument,
mySecondArgument);
-
Cách cuối cùng và tôi sử dụng nhiều nhất là sử dụng
method apply() như trên. Khi gọi một hàm thông qua
apply(), chúng ta có thể khai báo một đối tượng mà hàm
đó được gắn vào và truyền vào mảng đối số của hàm
ActionScript
var
myObjectReference = _root; myArguments
= [ myFirstArgument, mySecondArgument ];
myFunction.apply ( myObjectReference, myArguments
);
|
|
|
|
|
|
 |
|
|
|
 |
|
| NovaVN
|
Mar 26 2004, 09:07 PM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
Phạm vi
và thisViệc sử dụng từ khóa this sẽ
làm cho phạm vi sử dụng biến rõ ràng hơn. Khi mà một
biến địa phương và một property sử dụng cùng một tên,
chúng ta phải sử dụng this để chỉ property của class. Ví
dụ sau đây sẽ demo cho vấn đề trên 1) Chọn File
-> New (Ctrl-N) và chọn ActionScript File từ hộp
thoại New Document (nếu bạn đang sử dụng Flash MX 2004
Standard thì bạn sẽ không thấy phần này vì ở đây sử dụng
Flash MX 2004 Professional. Phiên bản standard không có
phần hỗ trợ soạn thảo các class AS 2.0. Chúng ta có thể
sử dụng các trình hỗ trợ riêng) 2) Lưu file với tên
ScopeTest.as. Như đã nói, tên file phải giống tên class
trong file đó. 3) Nhập đoạn code sau:
ActionScript
class ScopeTest {
private var myVar:String = "I am the
class property!"; public function
doTest(Void):Void { var
myVar:String = "I am the local variable!";
trace ("myVar = " + myVar);
trace ("this.myVar = " +
this.myVar); } }
4) Lưu
file 5) Tạo một Flash Document mới và lưu lại thành
file scopeTest.fla (file này phải nằm trong cùng thư mục
với file ScopeTest.as) 6) Nhập đoạn code sau và
Frame1 của Layer1:
ActionScript
var
myTest:ScopeTest = new ScopeTest();
myTest.doTest();
7)
Chạy thử movie của bạn |
|
|
|
|
|
 |
|
| NovaVN
|
Mar 26 2004, 09:08 PM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
Private
hay Protected?Một chú ý quan trọng là
việc thực thi của private trong AS 2.0. Trong những ngôn
ngữ như Java, một thuộc tính private có nghĩa là chỉ có
class đó mới có thể truy cập được, các class thừa kế nó
sẽ không thể nào truy cập vào được. Trong AS 2.0, việc
thực thi một private member giống như protected trong
các ngôn ngữ khác, giới hạn sẽ được mở rộng ra các class
con. Bởi vì những bổ sung mới này chỉ được kiểm tra
trong lúc chạy, nê sẽ là rất quan trọng để bảo đảm rằng
trình biên dịch có thể bắt được những truy cập vào
private member. Đây là một ví dụ:
ActionScript
class
PrivateMemberClass {
private var privateProp:String = "I'm a private
property"; }
Thuộc tính private
tên là privateProp có thể được truy cập nếu instance
không được định kiểu
ActionScript
var
instance = new PrivateMemberClass();
trace(instance.privateProp); // output "I'm a private
property"
Nói cách
khác, nếu một instance được định kiểu, các thuộc tính
private sẽ không thể truy cập được
ActionScript
var
instance:PrivateMemberClass = new
PrivateMemberClass();
trace(instance.privateProp); // compile error
Đây là một
trong những lỗi rất thường gặp! Mong rằng bây giờ thì
các bạn sẽ biết cách sử dụng!
|
|
|
|
|
|
 |
|
| NovaVN
|
Mar 28 2004, 09:25 AM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
Dynamic
và Static classMột dynamic class là
để chỉ rằng class này có thể được mở rộng ra (có thể
thêm các property và method mới). Đối với lập trình viên
Jscript .NET, thì điều này rất quen thuộc. Đối với các
class không phải là dynamic class (như class Math),
người dùng không thể thêm các method và property. Trong
AS 1.0, điều này rất phổ biến, bằng cách thêm vào
prototype object
ActionScript
MovieClip.prototype.someNewMethod = function()
{ // do something
to the movieclip };
Trong AS 2.0,
kiểu mở rộng này không còn được sử dụng. Tuy nhiên,
chúng ta có thể tạo class con và thêm các method và
property mới vào class đó. Đây là một ví dụ mở rộng
Math để tạo method mới tên max()để tìm giá trị lớn nhất
trong một dãy số (thay vì sử dụng hàm Math.max() thì chỉ
so sánh được 2 số):
ActionScript
dynamic class Math2
extends Math { // store a reference to
Math.max() private static var
oMax:Function = Math.max; // static
class cannot be instantiated private
function Math2() {}
// override Math.max(), support any number of
arguments public
static function max():Number {
var a:Array = arguments;
var n:Number = a.length;
if (n > 2) {
var m:Number =
oMax(a[n-2],a[n-1]);
// remove two elements from the end
of the array;
// could use 'a.length -= 2' as a shortcut
as well
a.pop();
a.pop();
a.push(m);
return Number(max.apply(null,
a)); } else if (n
== 2) {
return oMax(a[0],a[1]);
} else if (n == 1) {
return a[0];
} else {
return
oMax(); }
} }
Không
giống như trong class Math cũ, tôi đã tạo một dynamic
class, vì thế nó có thể được mở rộng ra. Sử dụng method
này như các method khác trong Math:
ActionScript
trace(Math2.max(70,6,3,12,82,9,28,5));
|
|
|
|
|
|
 |
|
| NovaVN
|
Mar 28 2004, 09:26 AM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
Thừa kế
(Inheritance)Như đã nói ở trên, thừa
kế là một điểm rất quan trọng trong OOP. Nó dùng để khai
báo mối quan hệ giữa class con và class cha. AS 2.0 giới
thiệu cho chúng ta một từ khóa mới để làm điều này:
extends. Trong ví dụ về Math2.max() ở trên, chúng ta đã
thấy việc thừa kế từ class Math. Chú ý rằng từ khóa
super() nên được đặt ở đầu contructor. Tuy nhiên, Flash
đủ thông minh để tự chèn thêm vào giúp bạn nếu bạn quên
làm. Nếu class cha không có constructor thì Flash sẽ tự
động tạo ra. Nếu bạn muốn truyền tham số cho class
cha, hãy nhớ rằng bạn truyền vào hàm super(thamso1,
thamso2,…). Mặt khác, có thể bạn sẽ tự hỏi vì sao chỉ có
một vài đối số được sử dụng. Ví dụ, nếu chúng ta tạo một
class Child thừa kế từ class Parent:
ActionScript
class Child extends
Parent { private var fName:String =
""; public function Child(lname:String,
fname:String) {
super(lname); // continue
Child's constructor code
fName = fname;
} }
|
|
|
|
|
|
 |
|
| NovaVN
|
Mar 29 2004, 12:33 PM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
Override, Overwrite và
OverloadNhững thuật ngữ trên là một
trong những nguyên nhân làm điên đầu một số lập trình
viên mới bắt đầu nghiên cứu về OOP. Trong AS, chúng ta
chỉ có override và overwrite, không có
overload Override có nghĩa là một method hay một
property được viết lại. Trong ví dụ về Math2.max(),
method max() mới đã override method Math.max(). Thông
thường, override làm việc với nhiều class, method hay
property của class con sẽ override những method hay
property từ class cha. Đây cũng là tính đa dạng của
OOP Overwrite là một khái niệm khác, nó được viết đè
lên một file, một class, method hay property. Trong ví
dụ TestClass ở trên, chúng ta thấy có một đoạn
overwrite:
ActionScript
w.method = function() {
trace("New method"); };
Overload
(không phải là điểm đặc trưng trong AS) là một dạng khác
của tính đa dạng, nó thường được dùng để truyền vào cho
hàm nhiều dạng tham số khác nhau, số lượng tham số khác
nhau, và cách hoạt động cũng khác nhau. Cách overload
phổ biến nhất trong AS là viết một method với số tham số
khác nhau |
|
|
|
|
|
 |
|
| NovaVN
|
Mar 29 2004, 12:34 PM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
Chèn
một class file từ ngoài vàoĐể tổ chức
class tốt hơn và tránh việc việc tên class bị xung đột,
khái niệm packages được giới thiệu trong nhiều ngôn ngữ.
AS 2.0 giới thiệu từ khóa import để thi hành chức năng
này Thế nào là sự đụng độ tên? Hãy tưởng tượng hai
lập trình viên, mỗi người đều có một thư viện mã nguồn
của riêng mình, mà trong mỗi thư viên đó đều có một
class tên là Utilities. Nếu cả hai thư viện đều được sử
dụng cùng một lúc, thì chỉ có một class chỉ có thể
overwrite, hoặc là Flash sẽ không hiểu class Utilities
nào được sử dụng! Đường dẫn đến class là một cách
giải quyết. Bằng việc kết hợp một đường dẫn vào class,
giống như các file trong đĩa cứng, các class cùng tên sẽ
cùng tồn tại. Để truy cập vào một class nào đó, sử dụng
đường dẫn cụ thể theo file
ActionScript
import mx.events.EventDispatcher;
Sau
khi đã import một class vào
ActionScript
class
MyBroadcaster {
public function MyBroadcaster() {
EventDispatcher.initialize(this);
}
}
Chúng ta cũng có
thể sử dụng đường dẫn trực tiếp không cần sử dụng
import
ActionScript
class
MyBroadcaster {
public function MyBroadcaster() {
mx.events.EventDispatcher.initialize(this);
} }
Khi viết một
class, chúng ta hãy đặt nó vào thư mục của project hoặc
để vào thư mục class library của bạn. Đừng để class file
trong thư mục của Flash application (<Thư mục cài đặt
Flash>\<language>\First Run\Classes\) hoặc là
thư mục của người dùng trong My Documents. Điều này có
thể làm cho trình biên dịch bị rối loạn.
ActionScript
import com.quantumwave.alliance.rebel.Commander;
Để
import tất cả các class trong thư mục, sử dụng dấu
*
ActionScript
import com.*;
Trên
đây là cách sử dụng import để chèn class, nhưng chỉ có
những class được sử dụng mới được dịch vào file .swf, vì
thế dung lượng file .swf của bạn cũng sẽ không bị tăng
lên đáng kể. |
|
|
|
|
|
 |
|
| NovaVN
|
Mar 31 2004, 01:11 PM
|
Lập trình dziên...
 
Nhóm: Member Bài viết: 636 Tham
gia: 15-March 04

|
InterfaceTrong
OOP, bên cạnh thừa kế còn có một khái niệm rất quan
trọng là interface. Giống như trong Java và C#, AS không
hỗ trợ đa thừa kế (một class con thừa kế từ nhiều class
cha). Bởi vì đa thừa kế có thể sẽ là ác một trong việc
dò lỗi nếu chúng ta dùng improperty. Đối với những
application được thiết kế một cách cẩn thận thì
interface được dùng nhiều. Interface là một “hợp
đồng” chỉ rõ những method nào được thực thi trong class
implement no, thường thì không có mối quan hệ giữa các
interface và các class implement nó. Trong một
interface, không có code hay property mà chỉ có tên của
các method, interface được viết giống như các class,
ngoại trừ: - Không có property - Chỉ có tên
method, các tham số, kiểu và kiểu trả về - Khai báo
tên method sẽ được kết thúc bởi dấu chấm phẩy, không có
dấu ngoặc đơn Dưới đây là một ví dụ về Draggable
class (tên interface thường được bắt đầu bằng I)
ActionScript
interface
IDraggable { public function
startDrag():Void; public function
stopDrag():Void; public function
isDragging():Boolean; }
Sử
dụng từ khóa implements để sử dụng interface. Ví dụ
class Child sẽ thừa kế class Parent và implement từ
interface Idraggable:
ActionScript
class Child extends
Parent implements IDraggable { public
function Child() {
// add Child constructor code
}
public function startDrag():Void
{ // implement the
code for startDrag(); }
public function stopDrag():Void {
// implement the code for
stopDrag(); }
public function isDragging():Boolean {
// implement the code for
isDragging(); } }
Một điều duy
nhất đáng lưu ý đối với interface là mỗi method đã được
khai báo trong interface đều cần phải implement với tên
cũ, cũng như các tham số…
|
|
|
|
|
|
 |
|
| playboy
|
Apr 7 2004, 01:59 PM
|
non-ActionScriptor
 
Nhóm: Member Bài viết: 960 Tham
gia: 17-March 04

|
bài viết của Nova tỉ mỉ thât. đâý
nhưng mà mình cố đọc mà ko hiểu gì hết cũng có thể mình
ngu  hoặc trình độ có hạn,từ xưa đến
nay có động đến OOP bao giờ đâu xin Nova làm ơn giải
thích thật tỉ mỉ mâý khái niệm mà mình chưa hiểu sau
: prototype, object, class là gì |
|
|
|
| cobetuyet
|
Sep 6 2004, 02:33 AM
|
A new day has come
 
Nhóm: A-Scriptor Bài viết:
872 Tham gia: 21-May 04

|
Nova thân mến: Có thể giải
thích giúp cbt về interface và implements ko?? Theo như
chút kiến thức ít ỏi của cbt hiểu được thì interface là
giao diện và implements giúp cho 1 class thừa kế 1 giao
diện. Vậy interface hay giao diện có nghĩa là gì nói
1 cách chính xác và nó có tác dụng như thế nào
?? Ngoài ra mọi người có thể giải thích giúp cbt
về từ khóa intrinsic ko? Ko hiểu sao cbt lại tìm ko thấy
trong flash, rõ khổ Còn 1 vấn đề nữa là: giúp
cbt giải thích luôn về cái gọi là: method apply ko??
Cảm ơn mọi người rất nhiều |
|
|
|
1
Người đang đọc chủ đề này (1 Khách và 0 Người dấu mặt)
0
Thành viên:
|
 |
 |
 | |
|