ĐẠI HỌC QUỐC GIA HÀ
NỘI
TRƯỜNG ĐẠI HỌC CÔNG
NGHỆ
NGUYỄN VĂN DŨNG TÌM HIỂU MÔ HÌNH MIỀN CHUYÊN BIỆT
VÀ ỨNG DỤNG VÀO BÀI TOÁN CHUYỂN
ĐỔI DỮ LIỆU CƯỚC
Hà Nội -
2011
ĐẠI HỌC
QUỐ
C GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG
NGHỆ
NGUYỄN VĂN DŨNG
Hà Nội –
2011I
Lời cam đoan
Tôi xin cam đoan luận văn “Tìm hiểu mô hình miền chuyên biệt và ứng dụng vào
bài toán chuyển đổi dữ liệu cước” là do tôi tự nghiên cứu và hoàn thành dưới sự hướng
dẫn của TS. Đặng Đức Hạnh.
Tôi xin chịu hoàn toàn trách nhiệm về lời cam đoan này.
Hà nội, ngày 21 tháng 06 năm 2011
2.2.1. Định nghĩa các luật 20
2.2.2. Định nghĩa các ràng buộc 21
2.3. Đặc trưng 3: Khả năng phát sinh code 21
2.4. Đặc trưng 4: Khả năng trình diễn 22
2.5. Đặc trưng 5: Khả năng cài đặt 31
Chương 3 – ỨNG DỤNG MIỀN CHUYÊN BIỆT TRONG THIẾT KẾ HỆ THỐNG
CHUYỂN ĐỔI DỮ LIỆU CƯỚC 33
3.1. Phân tích miền định dạng dữ liệu cước 33
3.1.1. Tìm hiểu một số chính sách cước 33
3.1.2. Khảo sát một số khuôn dạng dữ liệu cước 39
3.2. Thiết kế hệ thống chuyển đổi dữ liệu cước 55
3.2.1. Xây dựng ý tưởng về hệ thống chuyển đổi dữ liệu cước 55
3.2.2. Mô tả hệ thống 57
3.2.3. Thiết kế hệ thống chuyển đổi dữ liệu cước 69
3.2.4. Mô hình vật lý của hệ thống 78
3.3. Cài đặt miền chuyên biệt định dạng dữ liệu cước để tạo ra các thư viện liên kết động 79
3.3.1. Định nghĩa miền chuyên biệt định dạng dữ liệu tổng đài 79
3.3.2. Định nghĩa các luật ràng buộc 83
3.3.3. Sinh thư viện liên dữ liệu tổng đài liên kết động 86
KẾT LUẬN 87
TÀI LIỆU THAM KHẢO 89
PHỤ LỤC 90
IV
Danh mục các ký hiệu, các chữ viết tắt
Thuật ngữ,chữ viết tắt
Giải thích
DSM
Hình 2-3: Project Debugging 18
Hình 2-5: Nút “Transform All Templates” 22
Hình 2-6: Thể hiện của một model trong designer kết quả 23
Hình 2-7: Định nghĩa diagram cho Issue State DSL 25
Hình 2-8: Định nghĩa của editor cho Issue State DSL 27
Hình 3-1. Sơ đồ kết nối của các cuộc gọi liên tỉnh trong VNPT 34
Hình 3-2. Sơ đồ kết nối các cuộc gọi quốc tế qua VTN 34
Hình 3-3. Các cuộc gọi quốc tế không qua VTN 34
Hình 3-4. Sơ đồ kết nối của các cuộc gọi VOIP liên tỉnh trong VNPT 35
Hình 3-5. Sơ đồ kết nối các cuộc gọi VOIP quốc tế trong VNPT 35
Hình 3-6. Sơ đồ kết nối các cuộc gọi di động qua VTN 36
Hình 3-7. Các cuộc gọi di động không qua VTN 36
Hình 3-8. Sơ đồ kết nối cuộc gọi VOIP liên tỉnh có qua POP 37
Hình 3-9. Sơ đồ kết nối cuộc gọi VOIP quốc tế đi không qua VTN 38
Hình 3-10. Cấu trúc của các file AMA 40
Hình 3-11. Lưu trữ và truyền file AMA 41
Hình 3-12. Bộ đệm chứa các bản ghi AMA 41
Hình 3-13. Đưa dữ liệu ra ngoài theo phương pháp giảm bộ đệm động 43
Hình 3-14. Đưa dữ liệu ra ngoài theo phương pháp điều chỉnh động 43
Hình 3-15. Quá trình ghi dữ liệu cước 44
Hình 3-16. Hoạt động của file ghi vòng 45
Hình 3-17. Thiết lập vùng copy trong file ghi vòng 47
Hình 3-18. Yêu cầu truyền FTAM bị ngắt 47
Hình 3-19. Cấu trúc gói tin AMA 48
Hình 3-30. Ý tưởng hệ thống chuyển đổi dữ liệu cước 55
Hình 3-22. Sơ đồ khối của hệ thống thu thập và xử lý dữ liệu 58
Hình 3-23. Quy trình tổng thể của hệ thống thu thập và xử lý số liệu 59
Hình 3-24. Sơ đồ hoạt động của hệ thống thu thập và xử lý dữ liệu 68
Hình 3-25. Quy trình hoạt động của khối điều khiển 70
Hình 3-26. Cấu trúc thư mục của giai đoạn chuyển đổi 71
sinh ra bởi các đặc tả mức cao. Quá trình tự động này là khả thi bởi vì cả ngôn ngữ và
bộ sinh code đều chỉ cần thỏa mãn yêu cầu của công ty và miền (domain). Luận văn
tập trung tìm hiểu mô hình chuyên biệt miền và vận dụng vào thiết kế bài toán chuyển
đổi dữ liệu cước.
Luận văn được bố cục thành 5 chương. Chương 1 tập chung tìm hiểu khái niệm
và lợi ích khi sử dụng mô hình miền chuyên biệt.Chương 2 trình bày về một tiếp cận
mô hình chuyên biệt miền bằng công cụ Microsoft DSL.Chương 3 minh họa việc ứng
dụng mô hình chuyên biệt miền trong thiết kế bài toán chuyển đổi dữ liệu cước.
2
Chương 1 – TÌM HIỂU MÔ HÌNH MIỀN CHUYÊN BIỆT
Chương 1 tập chung tìm hiểu khái niệm và lợi ích khi sử dụng mô hình miền
chuyên biệt. Nội dung của chương được bố cục thành 5 mục. Mục 1 trình bày tổng
quan về khái niệm và giải pháp mô hình miền chuyên biệt. Mục 2 nêu ra những lợi ích
khi sử dụng miền chuyên biệt. Mục 3 trình bày về định nghĩa mô hình cho một miền
chuyên biệt. Mục 4 mô tả chức năng phát sinh code. Mục 5 mô tả về cách thực thi
miền chuyên biệt.
1.1. Khái niệm và giải pháp mô hình miền chuyên biệt
Những thách thức về vấn đề sinh code có thể được xử lý theo cách xử lý tương tự
với các ngôn ngữ lập trình trước đây. Bằng cách tiếp tục nâng dần mức trừu tượng.
Các mô hình không nên là code nhìn thấy được (visualize code), mà là mô hình mô tả
mức trừu tượng cao hơn ngôn ngữ lập trình. Tương tự, như trước đây việc chuyển sang
sử dụng ngôn ngữ C để nâng mức trừu tượng thì tốt hơn là ngôn ngữ hình tượng hóa
đầu tiên: code Assembler (visualizing Assembler code)
Trong mô hình miền chuyên biệt (DSM: Domain-Specific Modeling), các thành
phần mô hình đại diện mô tả các đặc trưng trong thế giới miền, không phải như trong
thế giới code. Ngôn ngữ mô hình tuân theo mức trừu tượng và ngữ nghĩa miền, cho
phép người thiết kế mô hình biết được họ đang làm việc trực tiếp với khái niệm miền
nào. Các quy tắc của miền có thể được đưa vào ngôn ngữ lập trình như các ràng buộc,
triển cũng đều phải thiết kế chúng trong miền chuyên biệt “phone”. Điều này kéo theo
việc áp dụng những thuật ngữ và quy tắc của chiếc điện thoại, như là danh bạ, phím
nóng, views, tin nhắn văn bản, và các hành động của người sử dụng. DSM sẽ áp dụng
trực tiếp những khái niệm tương tự này trong ngôn ngữ mô hình.
Một ví dụ của ngôn ngữ mô hình miền chuyên biệt được mô tả trong Hình 1-1.
Nếu bạn đã quen với một số ứng dụng phone, giống như phone book hoặc lịch, thì bạn
gần như đã hiểu hết ứng dụng này dùng để làm gì. Một người sử dụng có thể đăng ký
cuộc họp bằng cách sử dụng tin nhắn văn bản, lựa chọn một phương thức thanh toán,
hiển thị chương trình và dữ liệu giọng nói, duyệt chương trình hội thảo qua web hoặc
cũng có thể hủy đăng ký.
Mô hình thiết kế trực tiếp dựa trên các khái niệm miền, như Note, Pop-up, Text
Message, Form, và các truy vấn. DSM sử dụng những widgets và services của điện
thoại như là những khái niệm mô hình và đảm bảo các điều kiện ràng buộc mà mô
4
hình lập trình phone được tuân thủ. Nó cũng ngăn chặn rất nhiều những thiết kế không
hợp lệ hoặc không mong muốn - Như là: dẫn đến giảm hiệu năng hệ thống. Sau đó, bộ
sinh code cụ thể sẽ sinh ra code hoàn thiện từ mô hình thiết kế, được gọi là các dịch vụ
nền của phone (phone‟s platform services), và thực thi kết quả trong bộ giả lập hoặc
thiết bị cuối. (Hình 1-2)
Hình 1-1. DSM cho thiết kế ứng dụng điện thoại di động
5 Hình 1-2. Sinh code và thực thi code theo mục đích
Ở đây, DSM cho phép tăng mức độ trừu tượng một cách đáng kể mà không làm
mất đi tính linh động. Ngay cả trong trường hợp thay đổi nguyên tắc cơ bản trong kiến
trúc hoặc dịch vụ nền xảy ra thì cũng chỉ tương ứng với việc chỉ thay đổi bộ sinh code
hay ngôn ngữ mô hình.
8
Bộ sinh mã tạo ra code assembler với chức năng cần thiết để đánh địa chỉ bộ nhớ,
tính toán … (Hình 1-6). Cần lưu ý rằng, mặc dù nền đích và mã là ở mức thấp, nhưng
ngôn ngữ DSM vẫn có thể thao tác trên các khái niệm miền thuần, như là: menu item,
voice message and menu selection. Vì thế, bằng cách thay đổi trình sinh code chúng ta
có thể sinh ra cho các đối tượng C từ các thiết kế tương tự.
Hình 1-5. DSM for voice menu design
9 Hình 1-6. Generated 8-bit code to microcontroller
1.2. Những lợi ích mô hình miền chuyên biệt cho người phát triển
Các ví dụ ở trên mô tả: DSM như thế nào và có thể giúp gì cho các nhà phát triển.
Mức trừu tượng cao thì thường tạo ra năng suất cao hơn. Điều này có nghĩa là không
chỉ tiết kiệm thời gian và tài nguyên để thiết kế phần mềm ban đầu, mà còn tiết kiệm
được cả trong quá trình bảo trì sản phẩm.
Những thay đổi yêu cầu thường do miền vấn đề (problem domain) chứ không
phải do miền thực thi (implementation domain), cho nên việc tạo ra những sự thay đổi
trong ngôn ngữ mô hình, mà sử dụng thuật ngữ miền, thì dễ hơn. Thêm vào đó, trong
một số miền, không cần có lập trình viên cũng có thể tạo ra đặc tả hoàn chỉnh và chạy
bộ sinh code để tạo ra code.
10 Giữ các đặc tả ở mức trừu tượng hóa cao hơn đáng kể so với mã nguồn truyền
thống. Bởi vì một ngôn ngữ cần phù hợp với chỉ một miền cụ thể, thường miền đó là
khai.
Kiến thức về miền được tạo ra rõ ràng cho nhóm phát triển, và được nắm bắt
trong ngôn ngữ mô hình và hỗ trợ các tiện ích.
Sự cài đặt DSM không phải đầu tư bổ sung thêm nếu người thiết kế quan tâm đến
tất cả chu trình từ thiết kế đến sinh mã. Hơn nữa, nó lưu các tài nguyên phát triển:
Thông thường tất cả các người phát triển đều làm việc với các khái niệm miền vấn đề
xử lý và ánh xạ chúng tới các khái niệm thực thi một cách thủ công. Và giữa các nhà
phát triển, có một sự khác nhau lớn. Một số thì làm tốt, nhưng không phải là ai cũng
làm tốt. Vì thế để những người phát triển có kinh nghiệm định nghĩa ra các các khái
niệm và ánh xạ chúng, và những người còn lại không cần làm điều đó nữa. Nếu hàm
sinh code đặc biệt chuyên nghiệp, nó sẽ cho ra những những dụng chất lượng tốt hơn
so với việc phát triển thủ công.
1.3. Định nghĩa ngôn ngữ mô hình cho một miền chuyên biệt
Định nghĩa một ngôn ngữ mô hình bao gồm ba dạng: các khái niệm miền, ký hiệu
đồ họa sử dụng để đại diện cho các mô hình, và các luật để hướng dẫn tiến trình của
mô hình. Định nghĩa một ngôn ngữ hoàn chỉnh là một công việc khó nhưng đó là điều
cần thiết nếu bạn muốn xây dựng một ngôn ngữ chuyên biệt cho tất cả. Công việc đó
dễ hơn đáng kể nếu bạn tạo nó duy nhất cho một miền bài toán trong một công ty.
Chìa khóa cho việc tìm kiếm những khái niệm miền là sự cung cấp kinh nghiệm
bởi các chuyên gia miền. Điển hình, chuyên gia là những người phát triển có kinh
nghiệm phát triển một vài sản phẩm trong miền đó. Họ có thể thiết kế kiến trúc đằng
sau các sản phẩm, hoặc phải chịu trách nhiệm cho việc tạo ra các thư viện đối tượng.
Anh ta có thể dễ dàng nhận ra những khái niệm miền từ các mô tả hệ thống và đối
tượng dịch vụ.
Trong ví dụ ứng dụng phone, các khái niệm miền đến từ các thành phần UI (ví
dụ: Form,Popup), menu và cấu trúc các button (các khóa người sử dụng có thể định
nghĩa) và các dịch vụ ngầm (ví dụ: text messages, web browsing). Bằng những khái
niệm được gán cho ngôn ngữ mô hình và có thể định nghĩa lại chúng trong tương lai,
12
những code tiện ích framework mở rộng để tạo cho việc sinh code nhanh hơn. Như
13
vậy các đối tượng có thể đã tồn tại từ kết quả của sự phát triển trước và các sản phẩm
mới được tạo tạo ra chỉ cần một ít sự tác động lên các đối tượng đã có.
Trong ví dụ của chúng ta, framework ứng dụng chuyên nghiệp Symbian/Series
60 đã đưa ra một tập các dịch vụ tốt, ở mức cao hơn so với nền Series 60.domain
framework như vậy chỉ thêm hai chức năng: một bộ điều phối để thực hiện luồng logic
của ứng dụng, và hiển thị sự quản lý cho các ứng dụng nhiều khung nhìn.
1.4. Phát triển sinh code
Sau cùng, chúng ta muốn đóng khoảng trống giữa mô hình và code bởi định
nghĩa cách sinh code. Những vấn đề đặc biệt khi sinh code là làm cách nào các thông
tin được đưa ra từ các mô hình và chuyển chúng vào trong code. Code đó sẽ được liên
kết với framework và biên dịch thành có khả năng thực thi cuối cùng mà không cần bổ
sung thêm các điều kiện một cách thủ công. Code được sinh ra đơn giản là một trung
gian từ sản phẩm trong quá trình tới khi kết thúc sản phẩm,giống như các file .o trong
quá trình biên dịch C.
Chìa khóa đưa ra trong việc xây dựng một bộ sinh code là các khái niệm mô hình
được ánh xạ với code như thế nào. Domain framework và thư viện đối tượng có thể
tạo ra các nhiệm vụ một cách dễ dàng bằng cách tăng dần các mức trừu tượng phía
code. Trong trường hợp đơn giản nhất, mỗi một biểu tượng mô hình sản sinh ra code
cố định, bao gồm các giá trị được nhập vào các biểu tượng như là các tham số. Hàm
sinh có thể sinh ra các code khác nhau phụ thuộc vào các giá trị trong các biểu tượng,
các mối quan hệ nó có cùng với các biểu tượng khác, hoặc các thông tin khác trong mô
hình.
1.5. Cách thực thi DSM
Để có được lợi ích DSM cải tiến về năng suất, chất lượng và giảm đi độ phức tạp,
chúng ta cần một ngôn ngữ miền chuyên biệt mô tả miền và bộ sinh code. Trước đây,
người thiết kế vẫn phải cần một công cụ hỗ trợ cài đặt, thực thi. DSM hỗ trợ tất cả các
tính năng đó.
Components Models: Các box với các port.
Classes Diagrams: Tương tự như lược đồ lớp UML (UML class
diagram).
Task Flows: Tương tự như lược đồ hoạt động UML (UML activity
diagram).
Các mục tiếp theo là đặt tên cho ngôn ngữ và namespace của source code cho
trình thiết kế (designer) và các công cụ phát sinh (generation tools), ta cũng đặt tên cho
phần mở rộng tên file mà sẽ được sử dụng để chứa các model (mô hình).
Hình 2-2: Một DSL Solution
Gần như tất cả code từ các file khác trong 2 project được phát sinh từ việc định
nghĩa DSL. Khi ta muốn thay đổi từ các template DSL sang DSL của ta, thì ta sẽ làm
việc trên DSL definition.
Code trong 2 project bao gồm 3 phần chính:
Trình thiết kế (Designer) (hay ngôn ngữ mà ta đang định nghĩa) – Trình
soạn thảo mà DSL user sẽ vẽ các model
17
Trình phát sinh mã (Code generators) – sẽ nhận lấy các model (mô hình)
và text template
Trình xuất bản (Serializer) – được thiết kế để lưu các model và trong các
file có phần mở rộng mà ta đặt tên lúc đầu và tải chúng lên một lần nữa.
Trình Serializer được sử dụng trong trình designer và trong trình code
generator, và có thể được sử dụng trong bất cứ ứng dụng tách biệt nào
mà tác giả DSL chọn để viết
a.Các thành phần trong DSL Solution:
Hai project được tạo lúc ban đầu bởi DSL creation wizard là Dsl và DslPackage.
Project Dsl cung cấp:
Một serializer/deserializer (bộ xuất bản/hủy xuất bản) để đọc và ghi các
thể hiện DSL của bạn xuống file.