Chào mừng khách quý đã tới thăm ! ( Đăng nhập | Đăng ký )

3 Pages:  1 2 3 > 
Reply to this topicStart new topicStart Poll

Outline · [ Standard ] · Linear+

> Lập trình OOP trong Flash sử dụng Action script 2., Macromedia Flash MX 2004


NovaVN
post Mar 17 2004, 11:30 AM
Gửi vào: #1


Lập trình dziên...
**

Nhóm: Member
Bài viết: 636
Tham gia: 15-March 04



Bài viết được dịch từ website www.ultrashock.com

Tui xin mạn phép giới thiệu một số bài viết hướng dẫn lập trình hướng đối tượng OOP trong Flash MX 2004 bằng Action Script 2.0, những bài viết này em dịch từ website trên. Em sẽ dịch đưa lên từ từ!
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 17 2004, 11:30 AM
Gửi vào: #2


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
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 17 2004, 11:32 AM
Gửi vào: #3


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.0

Trướ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ã.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 25 2004, 12:39 PM
Gửi vào: #4


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.0

AS 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
-
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 25 2004, 12:41 PM
Gửi vào: #5


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 OOP

Trong 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ư Java

Hã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 );
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
FlasH-lee
post Mar 25 2004, 05:31 PM
Gửi vào: #6


GZone Leader
**

Nhóm: G-Zone
Bài viết: 276
Tham gia: 25-March 04



ultrastock là trang thuộc loại đỉnh nhất để học lập trình hướng đối tượng (Object Oriented Programming). Bài dịch của novavn rất hay.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 26 2004, 09:07 PM
Gửi vào: #7


Lập trình dziên...
**

Nhóm: Member
Bài viết: 636
Tham gia: 15-March 04



Phạm vi và this

Việ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 smile.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 26 2004, 09:08 PM
Gửi vào: #8


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!
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 28 2004, 09:25 AM
Gửi vào: #9


Lập trình dziên...
**

Nhóm: Member
Bài viết: 636
Tham gia: 15-March 04



Dynamic và Static class

Mộ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));
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 28 2004, 09:26 AM
Gửi vào: #10


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;
    }
}
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 29 2004, 12:33 PM
Gửi vào: #11


Lập trình dziên...
**

Nhóm: Member
Bài viết: 636
Tham gia: 15-March 04



Override, Overwrite và Overload

Nhữ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
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 29 2004, 12:34 PM
Gửi vào: #12


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ể.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 31 2004, 01:11 PM
Gửi vào: #13


Lập trình dziên...
**

Nhóm: Member
Bài viết: 636
Tham gia: 15-March 04



Interface

Trong 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ố…
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 31 2004, 01:12 PM
Gửi vào: #14


Lập trình dziên...
**

Nhóm: Member
Bài viết: 636
Tham gia: 15-March 04



Những mặt còn thiếu của AS 2.0

Chúng ta đã được giới thiệu rất nhiều điểm mới của AS 2.0 trong Flash MX 2004, và những sự cải tiến về thời gian chạy trong Flash Player 7, tuy nhiên, sẽ có nhiều điễm bất lợi cho lập trình viên Flash. Có nghĩa là AS sẽ mạnh hơn nếu có thêm một số đặc điểm sau:
- Abstract class
- Final class
- Một phạm vi private thật sự
- Protected class
- Hằng
- Overload
- Kiểm tra dữ liệu lúc chạy chương trình
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 31 2004, 01:13 PM
Gửi vào: #15


Lập trình dziên...
**

Nhóm: Member
Bài viết: 636
Tham gia: 15-March 04



Lọat bài về OOP đến đây là kết thúc, mong các bạn sẽ học được nhiều điều thú vị từ bài viết này!
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Mar 31 2004, 01:30 PM
Gửi vào: #16


Lập trình dziên...
**

Nhóm: Member
Bài viết: 636
Tham gia: 15-March 04



Qua bên phòng thực hành có một bài hướng dẫn thực hành, có thể nói là một ví dụ sinh động cho bài viết này!

http://www.vnfx.com/ipb/index.php?showtopic=83
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
playboy
post Apr 7 2004, 01:59 PM
Gửi vào: #17


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 huh.gif 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ì
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
NovaVN
post Apr 7 2004, 05:54 PM
Gửi vào: #18


Lập trình dziên...
**

Nhóm: Member
Bài viết: 636
Tham gia: 15-March 04



OK, mình sẽ mở một topic mới để nói về một số khái niệm này nhé!
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
cobetuyet
post Sep 6 2004, 02:33 AM
Gửi vào: #19


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ổ sad.gif

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 smile.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
3D-FLASH
post Sep 14 2004, 11:52 PM
Gửi vào: #20


Member
**

Nhóm: Member
Bài viết: 34
Tham gia: 29-July 04



Nova có học Java ko vậy ??
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

3 Pages:  1 2 3 >
Reply to this topicTopic OptionsStart new topic
1 Người đang đọc chủ đề này (1 Khách và 0 Người dấu mặt)
0 Thành viên:
 

: 8th September 2005 - 10:46 AM