CHƯƠNG 1: TỔNG QUAN VỀ MÔ HÌNH HÓA CHUYÊN BIỆT MIỀN Trong chương này chúng tôi sẽ tập trung vào trình bày các khái niệm về mô hình hóa, mô hình hóa chuyên biệt miền, ngôn ngữ mô hình hóa chuyên biệt miền và đặc điểm của mô hình hóa chuyên biệt miền. Khái niệm mô hình và mô hình hóa Trong một số giai đoạn của quy trình phát triển phần mềm có sử dụng mô hình hóa mục đích chung, ngôn ngữ UML được sử dụng để xây dựng các biểu đồ trong pha phân tích và thiết kế hệ thống. Các mô hình được mô hình hóa bởi UML thường sử dụng có ý nghĩa làm tài liệu cho dự án là chủ yếu, nếu có phát sinh mã nguồn thì chỉ dừng lại ở mức thô, muốn sinh mã nguồn hoàn toàn tự động thì phải sử dụng một ngôn ngữ mô hình hóa chuyên biệt miền để sinh mã nguồn từ miền đó [3]. Khái niệm mô hình Mô hình là hình thức biểu diễn một cách tổng quát các thành phần cơ bản trong một hệ thống.
Mô hình sẽ cho phép chúng ta hiểu rõ hơn về hệ thống mà chúng ta cần phát triển. Khái niệm mô hình hóa Mô hình hóa là một quá trình chuyển thế giới thực thành các mô hình bằng cách [3] loại bỏ các chi tiết không cần thiết và giữ lại các chi tiết quan trọng để biểu diễn bằng các đối tượng hình học, khi đó các mô hình sẽ giúp chúng ta dễ dàng hiểu thế giới thực hơn. Mô hình hoá trực quan Là một phương thức tư duy về vấn đề sử dụng các mô hình được tổ chức xoay quanh các khái niệm đời thực. Mô hình giúp chúng ta hiểu vấn đề, giao tiếp với mọi người có liên quan đến dự án (khách hàng, chuyên gia lĩnh vực thuộc đề án, nhà phân tích, nhà thiết kế, …).
TIEU LUAN MOI download : skknchat@gmail.com 13 Ví dụ mô hình về chiếc ô tô: Hình 1.1: Nhìn vấn đề ô tô của người bình thường Mô hình Ô tô Thân xe Bánh xe Động cơ Cửa xe Hình 1.2: Nhìn vấn đề ô tô của chuyên gia phân tích 1. Mô hình hóa mục đích chung Trong pha phân tích và thiết kế của vòng đời phát triển phần mềm có sử dụng ngôn ngữ mô hình hóa mục đích chung (Ví dụ như UML) để mô hình hóa phần mềm nhưng không phải lúc nào phần mềm cũng được triển khai như mô hình ban đầu; và nếu có sử dụng mô hình để tự động sinh ra code thì code được sinh ra thường chỉ là mã khung thô và cần sử dụng tay để code hoàn thiện và các mô hình ở đây mang ý nghĩa làm tài liệu nhiều hơn mục đích sinh code tự động. Hình dưới đây là một ví dụ về mô hình hóa với UML.3: Mô hình UML cho cửa sổ Windows Với mô hình hóa sử dụng ngôn ngữ mô hình hóa UML có thuận lợi là: Cho đến nay UML đã được phát triển tương đối hoàn thiện và được người dùng sử TIEU LUAN MOI download : skknchat@gmail.com 14 dụng khá rộng rãi. Nhưng khi thay đổi code hoặc mô hình thay đổi thì mô hình hóa với UML là có thể bị lỗi thời hoặc cần có chi phí thời gian, tài nguyên, để đồng bộ giữa mô hình với code, điều này dẫn đến làm tăng chi phí của dự án phần mềm [3].
Vì vậy mô hình hóa chuyên biệt miền có thể khắc phục những nhược điểm trên của phương pháp mô hình hóa mục đích chung nếu có sự thay đổi. Mô hình hóa chuyên biệt miền Mô hình hóa chuyên biệt miền (Domain Specific Modeling - DSM) là việc sử dụng ngôn ngữ mô hình hóa chuyên biệt miền để tạo ra các mô hình và sinh mã nguồn từ các mô hình đó với bộ sinh code (code generator) [4]. Mô hình hóa chuyên biệt miền là một phương pháp phát triển phần mềm sử dụng ngôn ngữ mô hình chuyên biệt miền (DSL) để thiết kế và phát triển sản phẩm [12]. Nó sử dụng một hệ thống các khái niệm cụ thể để miêu tả và mô hình hóa các khía cạnh khác nhau của hệ thống.
Mục đích sử dụng DSM để thực hiện 2 công việc chính: Thứ nhất, nâng cao mức độ trừu tượng bằng cách xác định các giải pháp từ những khái niệm và quy tắc trong một miền vấn đề cụ thể. Thứ hai, tạo ra sản phẩm cuối cùng trong một ngôn ngữ lập trình được lựa chọn từ mô hình và máy sinh mã. Cấu trúc của mô hình hóa chuyên biệt miền Để có được những lợi ích của mô hình hóa chuyên biệt miền như nâng cao năng suất, chất lượng, và ẩn đi sự phức tạp. Mô hình hóa chuyên biệt miền đề xuất một kiến trúc các tầng trên một môi trường mục tiêu, nó được minh họa trong Hình 1.4: Cấu trúc của mô hình hóa chuyên biệt miền TIEU LUAN MOI download : skknchat@gmail.com 15 - DSML cung cấp một cơ chế trừu tượng để làm cho vấn đề trở nên đơn giản hơn trong một miền nhất định.
Nó được thực hiện bằng cách cung cấp các khái niệm và quy tắc miêu tả những điều trong lĩnh vực cụ thể, nó không phải là khái niệm về một ngôn ngữ lập trình. Vì vậy, ngôn ngữ này cho phép các nhà phát triển làm việc trực tiếp với các khái niệm miền. - Một máy sinh mã quy định cụ thể các thông tin được tạo ra từ các mô hình và chuyển đổi thành mã (code). Trong các trường hợp đơn giản, mỗi biểu tượng có một mã cố định.
Máy sinh mã cũng có thể tạo ra các mã khác nhau tùy thuộc vào các giá trị trong biểu tượng, từ các mối quan hệ đã có với các biểu tượng khác, hoặc các thông tin khác trong mô hình. Mã này sẽ được liên kết với một khung có sẵn và biên soạn thành một chương trình có thể chạy ngay. - Một khuôn khổ miền nằm giữa mã tạo ra bởi máy sinh mã và nền tảng của môi trường. Nó cung cấp giao diện giữa các mã và tạo ra các nền tảng cơ bản để chương trình có thể chạy.
Trong một số trường hợp, các mã được tạo ra có thể gọi trực tiếp các thành phần nền tảng là chạy được. Khuôn khổ miền cung cấp một số mã tiện ích thêm hoặc các thành phần để làm cho các mã được tạo ra từ mô hình đơn giản hơn. Khung này có thể lấy các thành phần tồn tại từ những sản phẩm được phát triển trước đó. Mô hình kiến trúc của mô hình hóa chuyên biệt miền Trong Hình 1.5, phía trên bên trái mô tả định nghĩa DSM, phía bên phải mô tả cách sử dụng DSM, chúng ta đều thấy yếu tố mô hình xuất hiện trong cả hai trường hợp.
Ngôn ngữ được quy định bởi một metamodel và tất cả các mô hình mô tả các ứng dụng hoặc tính năng đều tuân theo metamodel này [12]. Như vậy mô hình không thể khởi tạo những gì mà ngôn ngữ không cho phép. Điều này đảm bảo rằng các nhà phát triển ứng dụng luôn phải tuân theo các khái niệm và quy tắc của miền trong mô hình. Trong DSM, mô hình là đối tượng chính để làm việc.
TIEU LUAN MOI download : skknchat@gmail.5: Mô hình kiến trúc của mô hình hóa chuyên biệt miền. Máy sinh mã trong DSM có thể được xem như một trình biên dịch trong ngôn ngữ C. Vì vậy việc sửa đổi các mã được tạo ra là không cần thiết. Kiến trúc DSM cũng cho thấy rằng tất cả các mã không nhất thiết phải được tạo ra từ mô hình.
Chúng ta có thể sử dụng các mã có sẵn từ khuôn khổ miền hoặc ở môi trường mục tiêu. Ngôn ngữ mô hình cung cấp sự trừu tượng cho sự phát triển phần mềm. Trong DSM, nó được sử dụng như mã nguồn. Để ngôn ngữ mô hình được hình thành một cách chính xác, ta cần áp dụng các khái niệm và ràng buộc về một vấn đề cụ thể.
Điều này có nghĩa là ngôn ngữ của miền cụ thể sẽ không áp dụng được ở các miền khác. Nói chung các khái niệm chính trong miền cụ thể sẽ trở thành các đối tượng trong mô hình, các thứ còn lại sẽ thành thuộc tính, kết nối, vai trò của các đối tượng. Điều này làm cho người dùng DSM cảm thấy mình làm việc trên chính miền đó. Ngôn ngữ mô hình hóa chuyên biệt miền Ngôn ngữ mô hình hóa chuyên biệt miền (Domain Specific Modeling Language - DSML) là một ngôn ngữ chuyên biệt miền cụ thể, nó được sử dụng để xây dựng các mô hình đồ họa cho các hệ thống phần mềm.
Việc định nghĩa ngôn ngữ mô hình hóa chuyên biệt miền và bộ sinh code được thực hiện bởi các chuyên gia miền vì họ là người hiểu về miền nhất. Khi đó, họ có thể cung cấp mã nguồn có chất lượng cao cho miền [4]. TIEU LUAN MOI download : skknchat@gmail.com 17 Ngôn ngữ chuyên biệt miền (Domain specific language - DSL) là một ngôn ngữ chương trình hoặc ngôn ngữ đặc tả thực thi, bằng cách tích hợp các khái niệm trừu tượng của tri thức miền vào trong ngôn ngữ dưới dạng các ký hiệu có tính biểu cảm cao. DSL tăng mức độ trừu tượng bằng cách sử dụng các khái niệm quen thuộc với các chuyên gia miền và thường được giới hạn trong một miền vấn đề cụ thể nào đó [4].
Các thành phần đầu tiên là định nghĩa các khái niệm của mô hình và thuộc tính của nó bằng cách xác định metamodel; metamodel đóng một vai trò cho các ngôn ngữ văn bản. Cú pháp trừu tượng (Abstract Syntax) là các lớp nguyên thủy tạo nên ngôn ngữ mô hình. Như đã đề cập ở trên, metamodel chỉ xác định cú pháp trừu tượng, nhưng không phải là cú pháp cụ thể của ngôn ngữ, muốn thể hiện cú pháp trừu tượng trong mô hình người dùng phải xây dựng các cú pháp cụ thể (Concrete Syntax) [13]. Dưới đây là một ví dụ về mô hình chuyên biệt miền của trò chơi Snake: Chúng ta sẽ xây dựng những khái niệm của miền này: State: chỉ các trạng thái của rắn.
Apple: chỉ thức ăn của rắn. Event: chỉ những sự kiện xảy ra. Action: chỉ những hoạt động của rắn. Transition: chỉ quá trình chuyển đổi giữa các trạng thái.
Grow: chỉ sự lớn lên của rắn. Eat: chỉ hoạt động săn mồi của rắn. Từ những khái niệm trên chúng ta sẽ thêm chúng vào các mối quan hệ, quy tắc ràng buộc. Ví dụ: con rắn sẽ có hành động “Turn” nếu gặp sự kiện “Button”, sẽ có hành động “Grow” nếu gặp sự kiện “Apple”, sẽ chuyển qua trạng thái “Death” nếu đâm vào thân của nó.6 là metamodel của ngôn ngữ mô hình chuyên biệt miền của trò chơi Snake.
Sau đó chúng ta vẽ hình minh họa cho từng khái niệm và quy tắc.