Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 122 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
122
Dung lượng
2,41 MB
Nội dung
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN VŨ TẤN HƯNG NGUYỄN THỊ MINH TỒN TÌM HIỂU NGƠN NGỮ LẬP TRÌNH TRONG ADOBE FLASH VÀ XÂY DỰNG ỨNG DỤNG MINH HỌA KHÓA LUẬN TỐT NGHIỆP CỬ NHÂN CNTT TP HCM, NĂM 2008 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN VŨ TẤN HƯNG – 05HC084 NGUYỄN THỊ MINH TỒN – 05HC192 TÌM HIỂU NGƠN NGỮ LẬP TRÌNH TRONG ADOBE FLASH VÀ XÂY DỰNG ỨNG DỤNG MINH HỌA KHÓA LUẬN TỐT NGHIỆP CỬ NHÂN CNTT GIÁO VIÊN HƯỚNG DẪN Thạc sĩ LƯƠNG HÁN CƠ KHÓA 2005 - 2008 Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa LỜI CÁM ƠN Chúng em chân thành cám ơn Thầy Cô Khoa Công nghệ Thông tin trường Đại học Khoa học Tự Nhiên hướng dẫn, giảng dạy tận tình truyền đạt cho chúng em kiến thức vô quý báu suốt năm học vừa qua Chúng em xin gửi lời cám ơn chân thành sâu sắc đến Thầy Lương Hán Cơ tận tụy hướng dẫn, động viên giúp đỡ chúng em suốt thời gian thực đề tài Chúng em xin cám ơn giúp đỡ tận tình Thầy Lương Vĩ Minh Chúng xin gửi lịng biết ơn đến Ơng Bà, Cha Mẹ ln chăm sóc, ủng hộ chúng suốt bước đường học vấn Xin cám ơn anh chị bạn bè động viên giúp đỡ chúng em suốt thời gian học tập nghiên cứu Mặc dù chúng em cố gắng để hoàn thành luận văn cách tốt chắn khơng tránh khỏi thiếu xót Chúng em kính mong nhận cảm thơng tận tình bảo q Thầy Cơ bạn Sinh viên thực Vũ Tấn Hưng – Nguyễn Thị Minh Toàn Vũ Tấn Hưng Nguyễn Thị Minh Tồn Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa MỤC LỤC Chương Tổng quan Chương FLEX 11 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2 2.2.1 2.2.2 2.2.3 2.3 2.3.1 2.3.2 2.3.3 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.5 2.5.1 2.5.2 2.5.3 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.6.6 2.6.7 2.7 2.7.1 2.7.2 Giới thiệu 11 Những công nghệ ứng dụng Flex 11 Sử dụng phần tử Flex 14 Bảo mật Flash Player 15 Làm việc với dịch vụ liệu - Data services .15 Sự khác biệt ứng dụng HTML ứng dụng Flex Web 16 Cách làm việc ứng dụng Flex 16 Làm việc với liệu 17 Sử dụng mơ hình liệu 17 Kết buộc liệu 19 Kết buộc liệu cho lớp tự định nghĩa 21 Giao tiếp liệu từ xa 21 Việc yêu cầu nhận giao tiếp liệu 22 Kết nối Real-Time/ Socket 27 Tải file lên tải file xuống 27 Các thành phần giao diện 28 Khái quát 28 Khởi tạo thành phần giao diện .30 Các thuộc tính phổ biến thành phần giao diện 30 Xử lý kiện 31 Làm việc với Media 33 Những kiểu Media hỗ trợ Flex 33 Cách thêm Media vào ứng dụng 33 Làm việc với loại Media khác 36 Quản lý trạng thái 41 Khởi tạo trạng thái 42 Áp dụng trạng thái 42 Định nghĩa trạng thái dựa trạng thái có sẵn .42 Thêm bớt thành phần .43 Thiết lập thuộc tính 44 Thiết lập kiểu 45 Thiết lập điều khiển kiện - Event Handlers 45 Sử dụng hiệu ứng chuyển tiếp trạng thái 46 Sử dụng hiệu ứng 46 Transitions - Sự chuyển tiếp trạng thái 49 Chương ActionScript 51 3.1 Giới thiệu 51 Vũ Tấn Hưng Nguyễn Thị Minh Tồn Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa 3.2 3.2.1 3.2.2 3.2.3 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.4 3.4.1 3.4.2 3.4.3 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 3.5.7 3.5.8 Các thành phần ActionScript 51 Lớp đối tượng 51 Packages 53 Hàm biến 53 Sự kiện xử lý kiện 57 Sự kiện ActionScript 57 Đăng ký phương thức đăng ký kiện - Event listener 58 Hủy đăng ký phương thức đăng ký kiện - Event listener 61 Đối tượng Target 61 Quyền ưu tiên phương thức đăng ký kiện - Event Listener 61 ActionScript động 62 Biến động .63 Tự động thêm hành vi cho thể 63 Tham chiếu động cho biến phương thức 64 XML E4X 65 Dữ liệu phân cấp XML 65 Truy cập liệu XML 67 Thao tác liệu XML với câu lệnh for-each-in for-in 69 Trích lọc liệu XML 69 Thay đổi tạo nội dung XML 71 Thêm thuộc tính thành phần 72 Xóa thành phần thuộc tính 73 Nạp liệu XML 73 Chương Ứng dụng 75 4.1 Giới thiệu ứng dụng 75 4.2 Yêu cầu chức 75 4.3 Yêu cầu phi chức 76 4.4 Mơ hình use case 76 4.5 Mô tả ứng dụng 77 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6 4.6.1 4.6.2 4.6.3 Màn hình đăng nhập 77 Màn hình đăng ký 79 Màn hình quản lý 80 Màn hình xem ảnh 86 Màn hình tạo slideshow 90 Cơ sở liệu 93 Mô hình quan hệ 93 Thuyết minh mơ hình quan hệ thuộc tính 94 Mô tả ràng buộc khóa .95 Chương Tổng kết 96 Chương Danh mục tài liệu tham khảo 97 Chương Phụ lục 98 Phần 1: FLEX 98 Vũ Tấn Hưng Nguyễn Thị Minh Tồn Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa 7.1 Các kiện hiệu ứng 98 7.2 Chuẩn hóa định dạng liệu 99 7.2.1 7.2.2 7.3 Chuẩn hóa liệu người dùng nhập vào .99 Định dạng liệu 101 Tùy biến giao diện 102 7.3.1 7.3.2 7.3.3 7.3.4 Sử dụng Style 102 Sử dụng Skin .102 Dùng Themes .103 CSS thực thi .104 Phần 2: ActionScript 105 7.4 Điều kiện – Vịng lập – Tốn tử 105 7.4.1 Điều kiện 105 7.5 Phương thức tĩnh biến tĩnh 106 7.6 Kế thừa 106 7.6.1 7.6.2 7.6.3 7.6.4 7.7 Tái định nghĩa – ghi đè phương thức 107 Phương thức Super() 108 Ngăn chặn kế thừa phương thức định nghĩa lại .108 Composition .109 Interfaces 109 7.7.1 7.7.2 7.7.3 7.8 Tại phải dùng Interface? 110 Cú pháp cách sử dụng interface 110 Kế thừa interface 111 Mảng 112 7.8.1 7.8.2 7.8.3 7.8.4 Thêm phần tử vào mảng 112 Xóa bỏ phần tử mảng: 114 Phương thức toString(): .114 Mảng đa chiều .115 7.9 Xử lý lỗi 115 7.10 XML E4X 116 7.10.1 7.10.2 7.10.3 7.10.4 7.10.5 Truy cập nút văn 116 Truy cập nút cha 117 Truy cập nút anh em 118 Truy cập thuộc tính 118 Truy cập nút hậu duệ .119 Vũ Tấn Hưng Nguyễn Thị Minh Toàn Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa DANH MỤC CÁC BẢNG Bảng 1: Các thành phần giao diện 29 Bảng 2: Một số kiện thành phần chuẩn Flex 33 Bảng 3: Những kiểu media hỗ trợ Flex .33 Bảng : Một số hiệu ứng 46 Bảng 5: Các lớp tự nhiên ActionScript 52 Bảng 6: Điều khiển truy xuất biến .54 Bảng 7: Điều khiển truy xuất hàm 54 Bảng 8: Mô tả chi tiết hình đăng nhập 77 Bảng 9: Mơ tả chi tiết hình đăng ký 80 Bảng 10: Mơ tả chi tiết hình quản lý 83 Bảng 11: Mơ tả chi tiết hình xem ảnh dạng thumbnail 87 Bảng 12: Mô tả chi tiết hình xem ảnh dạng carousel 87 Bảng 13: Mơ tả chi tiết hình xem ảnh dạng list 89 Bảng 14: Mơ tả chi tiết hình xem thơng tin ảnh 89 Bảng 15: Mô tả chi tiết hình tạo slideshow 91 Bảng 16:Thuyết minh bảng NGUOIDUNG 94 Bảng 17:Thuyết minh bảng HINH 94 Bảng 18:Thuyết minh bảng ALBUM 94 Bảng 19:Thuyết minh bảng CHITIETALBUM 95 Bảng 20: Mơ tả ràng buộc khóa 95 Bảng 21: Mô tả ràng buộc khóa ngoại 95 Vũ Tấn Hưng Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa DANH MỤC CÁC HÌNH Hình 1: Silverlight .8 Hình 2: Flex .9 Hình 3: Những ứng dụng sử dụng công nghệ Flex 10 Hình 4: Flex SDK 11 Hình 5: Flex Framework 12 Hình 6: Flex Builder 13 Hình 7: Mơ hình nguồn – biên dịch – triển khai ứng dụng Flex 16 Hình 8: Mối quan hệ thành phần giao diện lớp Flash Player 29 Hình 9: Mơ hình use case 76 Hình 10: Màn hình đăng nhập .77 Hình 11: Màn hình đăng ký 79 Hình 12: Màn hình quản lý 81 Hình 13: Màn hình xem ảnh dạng thumbnail 86 Hình 14: Màn hình xem ảnh dạng carousel 87 Hình 15: Màn hình xem ảnh dạng list 88 Hình 16: Màn hình xem thơng tin ảnh 89 Hình 17: Màn hình tạo slideshow 90 Hình 18: Mơ hình quan hệ 93 Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa TÓM TẮT KHÓA LUẬN Nội dung khóa luận chia làm chương: Chương 1: Tổng quan Phân tích đánh giá hướng nghiên cứu có liên quan đến đề tài Lí chọn đề tài, mục đích, đối tượng phạm vi nghiên cứu Chương 2: Tìm hiểu cơng nghệ Flex Giới thiệu cơng nghệ Flex Lí chọn công nghệ Flex để triển khai ứng dụng với ưu khuyết điểm Flex Các kỹ thuật cơng nghệ Flex Chương 3: Tìm hiểu ngơn ngữ ActionScript Giới thiệu ngôn ngữ ActionScript Các thành phần kỹ thuật ActionScript Chương 4: Mô tả ứng dụng Giới thiệu ứng dụng Các yêu cầu ứng dụng Phân tích ứng dụng theo mơ hình UML (Unified Model Language) Một số thành phần, đối tượng kỹ thuật tiêu biểu sử dụng ứng dụng Chương 5: Tổng kết Tổng kết kết đạt mặt hạn chế đề tài đồng thời đưa hướng phát triển cho hệ thống sau Chương 6: Danh mục tài liệu tham khảo Chương 7: Phụ lục Giới thiệu thêm số thành phần kỹ thuật ActionScript Flex Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa Chương Tổng quan Trong thời gian gần đây, hạ tầng CNTT phát triển với băng thông kết nối Internet rộng triển khai đại trà dẫn đến nhu cầu sử dụng ứng dụng trực tuyến (RIA: Rich Internet Appliacation) gia tăng mạnh mẽ RIA ứng dụng triển khai Web, thi hành trình duyện Web có tính đặc điểm ứng dụng máy đơn thông thường (Desktop Application) Những ưu điểm chương trình RIA người dùng khơng cần cài đặt chương trình, việc cập nhật chương trình dễ dàng, nhanh chóng, người dùng sử dụng chương trình từ máy tính có kết nối Internet,vv… RIA làm mờ ranh giới ứng dụng desktop trực tuyến Đây cho tương lai ứng dụng trực tuyến Để tạo RIA, nhà phát triển sử dụng giải pháp sauc: Một dùng DHTML (gồm HTML, CSS, Javascript) kết hợp với AJAX Đây công cụ mạnh, nhiên HTML công cụ trình diễn, mà chuẩn tài liệu Javascript chưa đủ mạnh, thiếu chặt chẽ DHTML thường gặp vấn đề tương thích với trình duyệt Giải pháp thứ hai sử dụng công nghệ SilverLight Microsoft, plug-in hoạt động đa tảng, đa trình duyệt cho chuyên gia phát triển ứng dụng Plug-in cho phép phát triển ứng dụng cách phong phú gồm có media, khả tương tác hoạt ảnh Silverlight plug-in làm việc trình duyệt Internet Explorer Firefox Windows Firefox trình duyệt Safari hệ điều hành Mac Hình 1: Silverlight Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa NOT: ! biểu thức 7.5 Phương thức tĩnh biến tĩnh Khơng có kế thừa Lớp B kế thừa từ lớp A không kế thừa phương thức biến tĩnh lớp A Ví dụ: public class A { public static function s ( ) { trace("A.s( ) was called"); } } public class B extends A { public function B ( ) { B.s(); // Error! Illegal attempt to access A.s( ) through B }} Những phương thức tĩnh hàm tĩnh gọi trực tiếp mà không cần thông qua tên lớp Nhưng để biết nguồn gốc rõ ràng, người ta dùng tên lớp gọi phương thức biến 7.6 Kế thừa Trong lập trình hướng đối tượng, kế thừa mối quan hệ hai nhiều lớp Một lớp kế thừa từ lớp khác sử dụng biến phương thức lớp mà kế thừa Để khai báo lớp A kế thừa từ lớp B, ta dùng từ khóa extends public class A { public var v = 10; public function m ( ) { Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 106 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa trace("Method m( ) was called"); } } public class B extends A { … } Lớp B kế thừa từ lớp A ngồi thuộc tính thừa hưởng từ lớp A, lớp B cịn có thuộc tính riêng Một lớp C kế thừa từ lớp B, thừa hưởng biến hàm lớp B lớp A Nhiều lớp kế thừa từ lớp Nhưng lớp biết lớp kế thừa từ 7.6.1 Tái định nghĩa – ghi đè phương thức Tái định nghĩa phương thức lớp cha cho phép tùy biến lớp có sẵn cho mục đích cụ thể Tái định nghĩa lớp cách thêm vào, bớt chí hủy bỏ nhiều thuộc tính ngun lớp ActionScript cho phép tái định nghĩa phương thức, không cho phép tái định nghĩa biến, phương thức tĩnh biến tĩnh Để tái định nghĩa phương thức lớp cha ta phải định nghĩa tên hàm, cách truy xuất (như public,…), tham số cách trả Sau thêm từ khóa override vào trước Ví dụ: public class A{ public function m ( ) { trace("A's m( ) was called"); } } Tái định nghĩa m(): public class B extends A { override public function m ( ) { Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 107 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa trace("B's m( ) was called"); } } 7.6.2 Phương thức Super() Trong lớp con, để khởi tạo phần kế thừa từ lớp cha, ta gọi hàm super() Ví dụ: public class A { public function A ( ) { }} public class B extends A { public function B ( ) { super( ); }} Phương thức super() phải gọi hàm lớp 7.6.3 Ngăn chặn kế thừa phương thức định nghĩa lại Một lớp muốn ngăn chặn lớp khác kế thừa từ phương thức khơng muốn bị định nghĩa lại, ta khai báo thêm thuộc tính final final public class A { } Vì lớp A khai báo final nên lớp B kế thừa từ lớp A public class B extends A{ } Sẽ bị báo lỗi “Base class is final” Thuộc tính final sử dùng với mục đích: • Trong số tình phương thức final thực thi nhanh phương thức không định nghĩa final • Là cách bảo vệ ứng dụng khỏi khai thác Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 108 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa 7.6.4 Composition Ngoài việc sử dụng kế thừa, cịn cách khác, khơng kế thừa sử dụng thuộc tính lớp khác Trong composition, lớp chứa lớp khác biến Ví dụ: public class BackEnd { public function doSomething ( ) { } } public class FrontEnd{ // Lớp BackEnd chứa biến riêng lớp FrontEnd private var be; public function FrontEnd ( ) { be = new BackEnd( ); } public function doSomething ( ) { be.doSomething( ); } } Lớp FrontEnd mở rộng lớp BackEnd 7.7 Interfaces Interface cấu trúc ngôn ngữ ActionScript (không phải GUI public API) để định nghĩa loại liệu giống lớp định nghĩa loại liệu Tuy nhiên, lớp lúc định nghĩa loại liệu quy định thi hành cho nó, interfaces định nghĩa loại liệu giới hạn trừu tượng không quy định thi hành cho loại liệu Nghĩa lớp khơng định nghĩa phương thức biến, cịn cung cấp hành động cụ thể Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 109 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa thông qua hàm giá trị biến Interfaces thay tự đưa thi hành riêng nó, nhận từ lớp đưa thi hành 7.7.1 Tại phải dùng Interface? Trong ActionScript, lớp kế thừa từ nhiều lớp khác Vì lớp kế thừa từ lớp khác mà muốn sử dụng phương thức lớp khác lớp kế thừa ta dùng đến interface Interface đơn giản danh sách phương thức Ví dụ: public interface LogRecipient { function update(msg:String):void; } class LogUI extends Sprite implements LogRecipient { public function update (msg:String):void { } } Lớp LogUI kế thừa từ lớp Sprite thi hành interface LogRecipient Bởi lớp LogUI thi hành interface LogRecipient nên bắt buộc phải định nghĩa phương thức update() (phương thức khai báo interface LogRecipient), không bị báo lỗi “Interface method update in namespace LogRecipient not implemented by class LogUI.” Vì LogUI định nghĩa thi hành interface LogRecipient nên gọi ỏ đâu kiểu liệu LogRecipient yêu cầu 7.7.2 Cú pháp cách sử dụng interface Cú pháp interface sau: interface SomeName { function method1 (param1:datatype, paramn:datatype):returnType; function method2 (param1:datatype, paramn:datatype):returnType; Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 110 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa function methodn (param1:datatype, paramn:datatype):returnType; } Giống lớp, interface định nghĩa public internal Trong interface, khai báo phương thức khơng có dấu ngoặc {} Khơng có khai báo biến interface Nhưng interface có phương thức get set để giả lập biến Interface định nghĩa package Một lớp muốn thi hành phương thức khai báo interface phải dùng từ khóa implements class SomeName implements SomeInterface {} Lớp SomeName bắt buộc phải thi hành tất phương thức SomeInterface Một lớp implement từ nhiều lớp khác class SomeName implements SomeInterface, SomeOtherInterface { } 7.7.3 Kế thừa interface Giống lớp, interface kế thừa từ interface khác public interface IntA { function methodA ( ):void; } public interface IntB extends IntA { function methodB ( ):void; } Khi lớp thực thi interface IntB phải thi hành methodA() lẫn methodB() Interface ActionScript cung cấp đa kế thừa: public interface IntC { function methodC ( ):void; } public interface IntD { Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 111 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa function methodD ( ):void; } public interface IntE extends IntC, IntD { function methodE ( ):void;} 7.8 Mảng Người ta dùng mảng để chứa liệu người dùng nhập vào Mảng cấu trúc liệu chứa đựng nhiều giá trị liệu riêng lẻ danh sách có thứ tự Điều khác biệt ActionScript so với ngôn ngữ lập trình khác: • Số lượng phần tử mảng không giới hạn Độ dài mảng tự động thay đổi phần tử thêm vào hay bớt • Mảng chứa nhiều kiểu liệu, chí chứa mảng khác Ví dụ: var product:Array = ["ladies downhill skis", 475]; display(product); Khởi tạo mảng mới: new Array(tham số) Khởi tạo mảng với giá trị có sẵn: [expression1, expression2, expression3] Phần tử mảng phần tử thứ Chiều dài mảng: theArray.length 7.8.1 Thêm phần tử vào mảng 7.8.1.1 Phương thức push(): Thêm phần tử vào cuối mảng: theArray.push(item1, item2, itemn); Phương thức push trả chiều dài mảng Ví dụ: var menuItems:Array = ["home", "quit"]; menuItems.push("products"); => menuItems = ["home", "quit", "products"] Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 112 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa 7.8.1.2 Phương thức unshift(): Thêm phần tử vào đầu mảng: theArray.unshift(item1, item2, itemn); Phương thức unshift trả chiều dài mảng Ví dụ: var versions:Array = new Array( ); versions[0] = 6; versions.unshift(5); // versions: [5, 6] versions.unshift(2,3,4); // versions: [2, 3, 4, 5, 6] 7.8.1.3 Phương thức splice(): Thê m xóa phần tử mảng: theArray.splice(startIndex, deleteCount, item1, item2, itemn) startIndex: vị trí phần tử bắt đầu xóa deleteCount: số phần tử xóa mảng Nếu khơng có thuộc tính deleteCount thí tất phần tử phía sau bị xóa item1, item2, itemn: phần tử thêm vào mảng bắt đầu vị trí startIndex Ví dụ: var months:Array = new Array("January", "Friday", "April", "May", "Sunday", "Monday", "July"); months.splice(1,1); => months = ["January", "April", "May", "Sunday", "Monday", "July"] 7.8.1.4 Phương thức concat(): Nối nhiều mảng thành mảng, trả mảng theArray.concat(elementList) Ví dụ 1: var list1:Array = new Array(11, 12, 13); var list2:Array = list1.concat(14, 15); // list2 trở thành [11, 12, 13, 14, 15] Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 113 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa Ví dụ 2: var x:Array = [1, 2, 3]; var y:Array = [[5, 6], [7, 8]]; var z:Array = x.concat(y); // Kết [1, 2, 3, [5, 6], [7, 8]] 7.8.2 Xóa bỏ phần tử mảng: Có cách 7.8.2.1 Hàm delete(): delete theArray[index] Ví dụ: var list = ["a", "b", "c"]; delete list[2]; 7.8.2.2 Sử dùng biến length để cắt bỏ phần tử cuối mảng Ví dụ: var toppings:Array = ["pepperoni", "tomatoes","cheese", "green pepper", "broccoli"]; toppings.length = 3; Array = ["pepperoni", "tomatoes","cheese"] 7.8.2.3 Dùng phương thức splice(), pop(), shift() Splice(): trình bày Pop(): xóa phần tử cuối mảng (ngược với push()) Trả phần tử vừa xóa Shift(): xóa phần tử đầu mảng (ngược với unshift()) Trả phần tử vừa xóa 7.8.3 Phương thức toString(): Dùng để xem nội dung mảng toString() trả chuỗi phần tử mảng theArray.toString( ) Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 114 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa 7.8.4 Mảng đa chiều ActionScript cung cấp mảng chiều Nhưng tạo mảng đa chiều cách tạo mảng mảng, nghĩa tạo mảng phần tử mảng khác Đơn giản mảng chiều Ví dụ: var row1:Array = [6, 2.99]; var row2:Array = [4, 9.99]; var row3:Array = [1, 59.99]; var spreadsheet:Array = [row1, row2, row3]; spreadsheet[0][1] = 2.99 7.9 Xử lý lỗi Trong ActionScript, lỗi phát sinh chế độ chạy thực Flash (Flash runtime) chương trình thực thi Lỗi gây Flash runtime gọi builtin errors, lỗi gây thực thi chương trình gọi custom errors Trong chương trình, phản hồi lại lỗi (cả built-in errors custom errors) cách sử dụng câu lệnh try/ catch/ finally phát sinh lỗi thông qua câu lệnh throw Lệnh throw tạm dừng tất mã thực thi đưa biểu thức đến cho catch block Ví dụ: public function setName (newName:String):void { if (newName.length > VirtualPet.maxNameLength || newName == "") { throw new Error("Invalid pet name specified."); } petName = newName; } Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 115 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa Chúng ta thêm vài ghi lỗi “Invalid pet name specified” tham số Catch block phải xử lý vấn đề Catch block phần câu lệnh try/ catch/ finally try { Thực thi đoạn mã đưa ngoại lệ Mã sử dụng câu lệnh throw để lỗi Nếu khơng có lỗi throw chương trình bỏ qua catch } catch (e:type) { Xử lý lỗi tìm thấy try } finally { Luôn thi hành sau try catch Chứa cleanup mã Cleanup mã phải thi hành try có tìm thấy lỗi hay khơng Ln thực thi trước lệnh return, continue, break để thoát khỏi try catch } 7.10 XML E4X 7.10.1 Truy cập nút văn Như biết phần trước, văn chứa thành phần thể nút XML phân cấp Ví dụ đoạn XML sau, “Mat Ma DaVinci” nút văn bản, biểu diễn thể XML tương tự nút văn “Dan Brown”, “VHTT”: var tieuthuyet:XML= Mat Ma DaVinci Dan Brown VHTT Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 116 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa ; Có nhiều cách để truy cập nút văn Khi cần tham chiếu đến nút văn thể XML, phải sử dụng cú pháp truy cập nút đề cập phần trước Ví dụ để truy cập “Mat Ma DaVinci” ta sử dụng: tieuthuyet.TUA.children()[o] Néu muốn lấy nội dung văn nút, thể nó, ta dùng hàm toString() lớo XML Ví dụ: trace(tieuthuyet.TUA.toString()); // Xuất: Mat Ma Da Vinci Với nút văn đặt rải rác thành phần, ta sử dụng hàm text() để lấy nút văn thành phần Ví dụ: var tieuthuyet:XML= Mat Ma DaVinci Dan Brown VHTT Truyen Rat Day ; Thành phần chứa thành phần nút văn Truyen (nút văn bản) Rat (nút thành phần với nút văn bản) Day (nút văn bản) Để lấy XMLList với hai nút văn Truyen Day., ta dùng: tieuthuyet.MOTA.text() Để truy cập nút văn này, ta dùng toán tử [ ]: tieuthuyet.MOTA.text()[0] 7.10.2 Truy cập nút cha Để truy cập nút cha, ta sử dụng hàm parent() lớp XML Giả sử ta có biến nxb, có tham chiếu đến thành phần var nxb:XML = tieuthuyet.NHAXUATBAN[0]; Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 117 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa Để truy xuất cha , (là ), ta sử dụnng: nxb.parent() Phương thức parent() sử dụng liên tiếp để truy xuất nút tổ tiên Như ví dụ sau: //Tạo XML cấp var doc:XML = ; //gán tham chiếu cho var be:XML = doc.cha.con[0]; // Dùng parent() liên tiếp để truy cập từ var ongnoi:XML = be.parent().parent(); 7.10.3 Truy cập nút anh em Những nút anh em nút bên cạnh nút khác cấp phân cấp XML Ví dụ phân cấp , anh em với Trong E4X, khơng có hỗ trợ xây dựng sẵn cho việc di chuyển nút anh em phân cấp XML Những biến nexSibling, previousSibling DOM không thuộc E4X API Tuy nhiên truy cập nút anh em thông qua số Đoạn mã sau truy cập nút anh em : var tacgia:XML = tieuthuyet.TACGIA[0]; // truy cập nút anh em liền trước trace(tacgia.parent().*[tacgia.childIndex()-1]); // Xuất: Mat Ma Da Vinci //truy cập nút anh em liền sau trace(tacgia.parent().*[tacgia.childIndex()+1]); // Xuất: VHTT 7.10.4 Truy cập thuộc tính Để truy cập XMLList chứa thuộc tính tất thành phần, ta sử dụng phương thức attibutes() thể lớp XML Ví dụ: tieuthuyet.attibutes() Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 118 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Tìm hiểu ngơn ngữ lập trình Adobe Flash - Xây dựng ứng dụng minh họa Hoặc ta dùng kí tự đại diện thuộc tính (@*), như: tieuthuyet.@* // Trả XMLList chứa thuộc tính tieuthuyet Cũng với thành phần, thuộc tính XMLList truy cập qua toán tử mảng ([ ]) Để truy cập thuộc tính (và nhất) thành phần , ISBN, ta viết: tieuthuyet.attributes()[0] tieuthuyet.@*[0] Thông thường, thuộc tính truy cập thơng qua tên Cú pháp sau: thanhphan.attributes(“TenTT”) thanhphan.@TenTT Câu lệnh trả XMLList chứa thuộc tính có tên TenTT thành phần thanhphan Ví dụ, câu lệnh sau trả XMLList chứa thể XML thuộc tính ISBN : tieuthuyet.attribute(“ISBN”) tieuthuyet.@ISBN 7.10.5 Truy cập nút hậu duệ Chúng ta xét đến cách thức truy cập nút thành phần mà nút “hậu duệ” Những nút hậu duệ thành phần nút mà chứa cấp XML phân cấp (như nút cháu, nút chắt,…) Ví dụ: xét đoạn XML mô tả thao tác cho mượn sách phim thư viện: var muon:XML = Mat Ma DaVinci Dan Brown VHTT Hon Ma Stanley MGM Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn Vũ Tấn Hưng 119 Nguyễn Thị Minh Toàn C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn