Trờn cơ sở quản lý được bản đồ số địa chớnh tới từng thửa đất, mỗi thửa đất được gắn một chỉ số duy nhất định danh thửa. Kết hợp với cỏc bảng cơ sở dữ liệu quan hệ chứa cỏc loại thụng tin khỏc nhau, chồng phủ với cỏc loại bản
đồ đơn tớnh khỏc, từ đú cho phộp tra cứu thụng tin đồng thời kết xuất ra cỏc dạng dữ liệu tổng hợp, phõn tớch với nhiều mục đớch khỏc nhau.
Qua nghiờn cứu sử dụng cấu trỳc dữ liệu DCEL cho thấy, cấu trỳc này rất thuận tiện trong việc quản lý dữ liệu bản đồ số địa chớnh vừa thuận tiện cho việc thành lập vừa dễ dàng trong việc cập nhật biến động đất đai cũng như xõy dựng cỏc ứng dụng bản đồ số địa chớnh. Chương tiếp theo nghiờn cứu xõy dựng chương trỡnh thử nghiệm hoàn thiện cụng nghệ và ứng dụng bản đồ số địa chớnh trong điều kiện Việt Nam sử dụng cỏc giải phỏp, thuật toỏn đó phõn tớch ở chương 2 và chương 3.
CHƯƠNG 4. XÂY DỰNG CHƯƠNG TRèNH THỬ NGHIỆM 4.1. Lựa chọn ngụn ngữ lập trỡnh
Khi lập một chương trỡnh ứng dụng bao giờ cũng cần cú hai bước cơ bản đú là chuẩn bị thuật toỏn và dựng ngụn ngữ lập trỡnh để đưa thuật toỏn đú vào mỏy tớnh điện tử. Với cựng một thuật toỏn cú thể dựng nhiều ngụn ngữ lập trỡnh khỏc nhau để cho cựng một kết quả nhưng dựng ngụn ngữ nào cũn phải phụ thuộc vào khả năng của người lập trỡnh. Bờn cạnh đú khi lập trỡnh cần phải chỳ ý đến việc lựa chọn ngụn ngữ sao cho tiết kiệm được thời gian, cụng sức, chương trỡnh cú thể được tối ưu hơn, khối lượng dữ liệu xử lý được nhiều hơn.
Ngày nay, với sự phỏt triển của khoa học kỹ thuật, với hệ điều hành Window phổ biến, cú khỏ nhiều ngụn ngữ lập trỡnh trờn mụi trường Window. Trong số cỏc ngụn ngữ lập trỡnh trực quan trong mụi trường WINDOW, Visual Basic là ngụn ngữ lập trỡnh trực quan hiệu quả, dễ lập trỡnh do tớnh đúng gúi cao, được hỗ trợ rất nhiều tớnh năng của mụi trường hệ điều hành, cú thể sử dụng cỏc đối tượng cú sẵn của hệ thống cũng như rất nhiều nguồn tài nguyờn khỏc. Đặc biệt, ngụn ngữ lập trỡnh này cho phộp sử dụng cỏc hàm thư viện API của WINDOW trong cỏc chương trỡnh ứng dụng, làm tốc độ thực hiện chương trỡnh gần như khụng thua kộm gỡ cỏc chương trỡnh tạo bằng cỏc trỡnh biờn dịch khỏc. Chớnh vỡ vậy, ngụn ngữ này được cả những người lập trỡnh khụng chuyờn nghiệp lẫn những lập trỡnh viờn chuyờn nghiệp sử dụng... Vỡ lẽ đú, chương trỡnh thử nghiệm của tỏc giả sử dụng ngụn ngữ lập trỡnh Visual Basic.
4.2. Khỏi quỏt về ngụn ngữ lập trỡnh Visual Basic
Một chương trỡnh viết bằng ngụn ngữ lập trỡnh Visual Basic cú cấu trỳc tương đối dễ hiểu, bao gồm hai phần là phần giao diện và phần nội dung chương trỡnh.
a. Phần giao diện
Tựy thuộc vào yờu cầu của ứng dụng và thúi quen của người lập trỡnh mà mỗi một chương trỡnh cú giao diện khỏc nhau. Đối với Visual Basic việc thiết kế mà mỗi một chương trỡnh cú giao diện khỏc nhau. Đối với Visual Basic việc thiết kế giao diện đơn giản, tiện lợi cho người lập trỡnh. Vớ dụ, khi muốn thiết kế một nỳt lệnh thỡ chỉ cần bấm đỳp chuột và biểu tượng
Command Button và đặt lại vị trớ nỳt lệnh này ở một vị trớ thớch hợp trờn Form…
Một chương trỡnh cú thể cú một hoặc nhiều Form (biểu mẫu), mỗi Form thiết kế cỏc menu (trỡnh đơn), đặt cỏc đối tượng ở trờn đú. Mỗi đối tượng trờn Form lại cú bảng thuộc tớnh riờng, cú thể thay đổi thuộc tớnh của đối tượng một cỏch dễ dàng thụng qua cửa sổ thuộc tớnh của đối tượng đú hoặc bằng cỏch gỏn giỏ trị cho cỏc thuộc tớnh đú trong khi viết chương trỡnh. Bờn cạnh đú VB cú thể kiểm tra kết quả thiết kế bất cứ lỳc nào nhờ khả năng lập trỡnh trực quan của ngụn ngữ.
b. Phần chương trỡnh
Điều đặc biệt trong Visual Basic là mỗi một thao tỏc, mỗi một nỳt lệnh, mỗi một trỡnh đơn… cú một chương trỡnh con (SUB) riờng biệt, chương trỡnh con này cú thể gọi được chương trỡnh con khỏc mà khụng cần cú thứ tự sắp xếp trước sau hay chỉ dẫn khỏc đến chỳng. Khi muốn lập trỡnh cho một đối tượng nào cú trờn Form chỉ cần nhõp đỳp chuột vào đối tượng đú và đưa đoạn chương trỡnh khi thao tỏc với đối tượng đú. Vớ dụ, hoạt động của chuột trờn Form là Mouse Down, Mouse Up, Mouse Move,… Mỗi đối tượng cú những thuộc tớnh riờng chỉ đạo một hoạt động của đối tượng. Nắm bắt được ý nghĩa cỏc thuộc tớnh của cỏc đối tượng, cú thể xõy dựng một chương trỡnh với những hiệu ứng đặc biệt giỳp cho người sử dụng chương trỡnh cú thể làm việc dễ dàng.
c. Kiểu dữ liệu - biến và hằng
Cỏc đối tượng cú cỏc thuộc tớnh và cỏc phương thức khỏc nhau, sự khỏc biệt đú được thể hiện thụng qua việc định nghĩa chỳng theo cỏc kiểu dữ liệu hoặc gỏn cho chỳng một giỏ trị xỏc định (hằng)… Tương ứng với mỗi thuộc tớnh xỏc định cỏc kiểu phự hợp, như vậy người dựng sẽ hiểu được cỏc đặc tớnh của đối tượng và tối ưu được cỏc đặc tớnh của đối tượng [20].
d. Tựy biến chế độ biờn dịch chương trỡnh bằng Visual Basic 6.0
Trong lập trỡnh ứng dụng bằng ngụn ngữ Visual Basic 6.0, cú thể chạy chương trỡnh theo hai cỏch: thụng dịnh thành mó giả (P-Code) và biờn dịnh thành mó mỏy (Native Code) để chạy. P-code là một kĩ thuật dựng để biểu thị những thao tỏc của một chương trỡnh mỏy tớnh hay một giải thuật bằng cỏch dựng cỏc ngụn ngữ tự nhiờn. Đõy là những cõu lệnh điều khiển mỏy tớnh như cỏc ngụn ngữ lập trỡnh khỏc nhưng thay thế bằng cỏc ngụn ngữ mụ tả cấp cao trực quan hơn gần gũi hơn bằng cỏc từ khúa như: Do Repeat, Until … Vớ dụ: Open book to first page, Do read page, Turn to next page, Until end of book. Chớnh vỡ là “ngụn ngữ giả” nờn việc để mỏy tớnh hiểu được cỏc lệnh do lập trỡnh viờn đưa ra thỡ cần dịch từ P-Code sang cho mỏy tớnh hiểu, đú chớnh là cụng việc của cỏc file thư viện Dll mà VB lỳc nào cũng trang bị kốm theo khi tạo bộ cài đặt: MSVBVM60.DLL và CTL3D32.DLL. Tuy P-Code cú những lợi thế riờng nhưng cỏc lập trỡnh viờn vẫn thường dựng chức năng biờn dịch thành mó mỏy (Native Code) bởi với lựa chọn này, cho phộp sự tối ưu húa bổ sung. Một số ngụn ngữ lập trỡnh cú thể tạo cỏc file *.Exe độc lập thỡ VB lại cần cú file thư viện đi kốm mới chạy được. Thụng thường, Native Code chạy nhanh hơn P-Code, tuy nhiờn, với sự phỏt triển của phần cứng hiện nay thỡ thật khú để nhận ra điều này. Phần biờn dịnh chương trỡnh thành mó mỏy, ngụn ngữ lập trỡnh Visual Basic cung cấp cú những tựy chọn nõng cao được đề cập dưới đõy:
Hỡnh 4.1. Cỏc tuỳ chọn biờn dịch an toàn
- Assume No Aliasing: Nếu được lựa chọn sẽ bỏo với trỡnh biờn dịch
rằng chương trỡnh khụng sử dụng những bớ danh (Alias), tức là chương trỡnh khụng tham chiếu đến cựng một vựng bộ nhớ bằng những tờn khỏc nhau, điều này xảy ra khi sử dụng cỏch truyền tham số theo kiểu tham chiếu ByRef. Lựa chọn cỏch này, trỡnh biờn dịch sẽ ỏp dụng tối ưu húa cho cỏc biến được khai bỏo dạng registers (cỏc biến số được khai bỏo theo cỏch này sẽ được lưu trong phần bộ nhớ đệm (Cache) của mỏy tớnh, vựng này cú tốc độ truy xuất nhanh) và tối ưu húa vũng lặp[15].
- Remove Array Bounds Checks : Kiểm tra giới hạn của mảng. Theo
mặc định, Visual Basic kiểm tra tất cả cỏc truy cập đến mảng để xỏc định chỉ số của phần tử cú vượt qua phạm vi của mảng hay khụng. Với những chỉ số vượt quỏ giới hạn của mảng chương trỡnh sẽ bỏo lỗi. Nếu lựa chọn này tắt (khụng chọn), tốc độ thao tỏc với mảng cú thể tăng lờn đỏng kể. Tuy nhiờn, với chương trỡnh truy cập đến mảng với một chỉ số ngoài giới hạn của mảng, dự vị trớ bộ nhớ khụng hợp lệ nhưng vẫn khụng cú cảnh bỏo nào, điều này cú thể gõy ra những tỏc dụng bất ngờ và cú thể treo chương trỡnh.
- Remove Integer Overflow Checks : Lựa chọn này cú tỏc dụng vụ hiệu húa kiểm tra tràn số nguyờn. Theo mặc định trong Visual Basic, một kiểm tra được thực hiện trờn mọi phộp tớnh với một biến số cú kiểu dữ liệu nguyờn (Byte, Integer, Long, và Currency) để đảm bảo rằng giỏ trị kết quả nằm trong phạm vi của kiểu dữ liệu. Nếu giỏ trị đú ngoài giới hạn số nguyờn, lỗi sẽ xảy ra. Nếu tắt lựa chọn này, chương trỡnh sẽ tăng tốc độ tớnh toỏn với số nguyờn. Khi đú, nếu ngoài giới hạn số nguyờn, khụng cú lỗi xảy ra nhưng kết quả tớnh toỏn sẽ cú thể sai.
- Remove Floating Point Error Checks: Kiểm tra lỗi dấu phẩy động.
Theo mặc định trong Visual Basic, một kiểm tra được thực hiện trong mọi tớnh toỏn với một biến số cú kiểu dấu phẩy động (Floating-point) là Single hoặc Double để đảm bảo chắc chắn rằng giỏ trị kết quả nằm trong phạm vi của kiểu dữ liệu. Nếu giỏ trị này cú độ lớn ngoài phạm vi, một lỗi sẽ xảy ra. Việc kiểm tra lỗi cũng được thực hiện để xỏc định liệu cú phộp toỏn chia cho 0 (khụng) hoặc một phộp toỏn khụng hợp lệ đang cố thực hiện. Để tăng tốc độ tớnh toỏn cú thể bỏ lựa chọn này. Tuy nhiờn cú thể đưa lại những kết quả khụng chớnh xỏc.
- Allow Unrounded Floating Point Operations: Lựa chọn này cho
phộp trỡnh biờn dịch so sỏnh những biểu thức chứa dấu phẩy động mà khụng cần làm trũn với độ chớnh xỏc đỳng. Những phộp tớnh với số thực thường tự động làm trũn với một độ chớnh xỏc nhất định (vớ dụ Single hay Double) trước khi so sỏnh được thực hiện. Lựa chọn này cho phộp trỡnh biờn dịch thực hiện so sỏnh dấu phấy động trước khi làm trũn, như vậy sẽ hiệu quả hơn. Điều này cú thể làm tăng tốc độ tớnh toỏn, tuy nhiờn cú thể dẫn đến tớnh toỏn được duy trỡ với một độ chớnh xỏc cao hơn dự kiến.
- Remove Safe Pentium FDIV Checks : Nếu lựa chọn sẽ vụ hiệu húa
việc kiểm tra cho an toàn với cỏc phộp toỏn chia 0 (khụng) của Pentium (Pentium Floating-point Division) và tắt cỏc mó đặc biệt của bộ vi xử lý Pentium với cỏc lỗi FDIV. Trỡnh biờn dịch mó gốc (The native code compiler)
tự động thờm cỏc code bổ sung cho cỏc phộp toỏn floating-point để đảm bảo cho cỏc phộp toỏn này được an toàn khi chạy trờn bộ vi xử lý Pentium cú lỗi FDIV. Lựa chọn tựy chọn này làm cho chương trỡnh chạy nhanh hơn, nhưng cú thể trong những trường hợp hiếm hoi tạo ra kết quả khụng đỳng trong bộ xử lý Pentium với cỏc lỗi FDIV.
Những tựy biến chế độ biờn dịch chương trỡnh đều cú những ưu khuyết điểm của riờng, nờn việc hiểu rừ cỏc chế độ tựy biến để lựa chọn sẽ làm tăng tốc độ khi lập trỡnh ứng dụng, tuy nhiờn cần cú những phộp kiểm tra thớch hợp để đảm bảo chương trỡnh khi chạy khụng gõy lỗi.
4.3. Xõy dựng chương trỡnh thử nghiệm
Chương trỡnh được tỏc giả xõy dựng bằng ngụn ngữ lập trỡnh Visual Basic 6.0.
4.3.1. Giao diện chương trỡnh
Chương trỡnh được thiết kế với giao diện một cửa sổ đồ họa, hệ thống trỡnh đơn bằng tiếng Việt và hệ thống thanh cụng cụ như hỡnh 4.2.
Hỡnh 4.2. Giao diện chương trỡnh
4.3.2. Cỏc trỡnh đơn
Hỡnh 4.3. Trỡnh đơn Tệp *. Trỡnh đơn Vẽ: Hỡnh 4.4. Trỡnh đơn vẽ *. Trỡnh đơn Hiển thị: Hỡnh 4.5. Trỡnh đơn Hiển thị *. Trỡnh đơn Tiện ớch: Hỡnh 4.5. Trỡnh đơn Tiện ớch
4.3.3. Giải phỏp tạo thư viện liờn kết động phục vụ xõy dựng chương trỡnh
Trong IDE (Integrated Development Environment-mụi trường phỏt triển tớch hợp) của VB6, khi chọn dịch chương trỡnh thành file DLL (kể cả khi dịch chương trỡnh thành file EXE) thỡ IDE sẽ trước tiờn gọi file C2.exe để dịch mó lệnh thành cỏc file *.OBJ. Sau đú, gọi tiếp file Link.exe để liờn kết cỏc file *.OBJ lại tạo ra file *.DLL hoặc file *.EXE. Vậy file Link.exe đúng
vai trũ liờn kết cỏc file OBJ để tạo ra tệp dạng Binary (Exe hoặc DLL) cuối cựng. Cả file C2.Exe và file Link.exe đều nằm trong C:\Program
Files\Microsoft Visual Studio\VB98.
Trong VB6, khi IDE gọi file Link.exe để liờn kết cỏc file *.OBJ lại, sẽ truyền cho file Link.exe một loạt cỏc tham số như: đường dẫn của cỏc file *.OBJ, kiểu file đớch sẽ tạo ra (*.DLL hay *.EXE), đường dẫn của đớch sẽ được tạo ra và một số cỏc tham số khỏc nữa. Tuy nhiờn, trong nhiều tham số này, lại thiếu mất một tham số là "/DEF". Tham số "/DEF" chớnh là tham số chỉ ra đường dẫn của cỏc tệp Module Definition (cỏc tệp *.DEF). Thiếu cỏc tệp này, DLL tạo ra sẽ khụng thể sử dụng được cỏc hàm Public (dựng chung) bằng phương phỏp Declare (Cụng khai). Vỡ lẽ đú, VB6 cài đặt chuẩn khụng tạo được DLL dựng chung. Giải phỏp xử lý là xõy dựng lại file Link.exe để thờm tham số này vào lỳc biờn dịch. [18].
Như vậy, cần tạo ra 1 file Link.exe giả đặt trong thư mục C:\Program Files\Microsoft Visual Studio\VB98, cũn file Link.exe thật thỡ đổi tờn thành 1 file khỏc (vớ dụ là LinkThat.exe). Khi IDE gọi file Link.exe giả (xõy dựng lại) thỡ file Link.exe này sẽ làm nhiệm vụ đọc cỏc tham số được IDE truyền sang, thờm tham số "/DEF" vào và gọi file LinkThat.exe với tham số mới (đó cú /DEF). Tất nhiờn là phải kiểm tra, nếu cú tồn tại cỏc file *.DEF và Project (dự ỏn) cần tạo là Project kiểu DLL thỡ mới thờm tham số.
Khi xõy dựng thư viện liờn kết động tạo một Project mới trong VB6, kiểu Project là ActiveX DLL. Để nguyờn Class1 mà VB6 đó tạo sẵn, khụng cần viết mó lệnh gỡ vào đú cả, nhưng vẫn phải giữ lại vỡ VB6 cần phải cú 1 Class trong Project kiểu ActiveX DLL thỡ mới chạy. Sau đú, thờm vào một module để chứa cỏc hàm cần xõy dựng bỡnh thường như cỏc Sub hay Function với khai bỏo Public (dựng chung).
Tiếp theo, tạo tệp Module Definition File (*.DEF): Sử dụng trỡnh soạn thảo NotePad soạn một file cựng tờn với tờn thư viện cần tạo và cú đuụi là DEF với nội dung:
NAME Ten
LIBRARY Tenthuvien
DESCRIPTION "Mo ta cua tep DLL" EXPORTS DllMain @1
...
Theo sau EXPORTS là tờn cỏc hàm (phõn biệt hoa-thường), con số sau ký tự @ là thứ tự của hàm đó viết trong Module ở trờn, lưu tệp soạn thảo này vào thư mục chứa file Project DLL đó tạo ở trờn.
Tiếp theo, dịch Project đó tạo ở bước trờn tạo thành file DLL dạng Standard, khi đó cú thư viện liờn kết động dạng *.DLL (vớ dụ:
MyLibrary.Dll). Kết quả, được thư viện liờn kết động *.DLL dạng chuẩn, cú thể sử dụng trong cỏc ngụn ngữ lập trỡnh khỏc.
Trong VB6, sử dụng DLL bằng cấu trỳc:
Private Declare Function TenHam Lib "TenDLL" (DSB) As KieuHam
Trong đú TenHam là tờn hàm đó được định nghĩa trong thư viện liờn kết động cú tờn TenDLL; DSB là danh sỏch biến của hàm TenHam; KieuHam là kiểu dữ liệu trả về của hàm TenHam.
Vớ dụ: Private Declare Function Min Lib "MyLibrary.Dll" ByVal a As Integer, Byval b As Integer) As Integer
Trong vớ dụ trờn, thư viện MyLibrary.Dll cú chứa hàm Min với cỏc biến a, b cú kiểu số nguyờn, trả ra giỏ trị nhỏ nhất của hai giỏ trị đưa vào ứng với a, b và là số nguyờn.
Bằng cỏch tạo thư viện liờn kết động như vậy, cỏc hàm chương trỡnh đó xõy dựng cú thể sử dụng được ở cỏc ngụn ngữ lập trỡnh và chương trỡnh khỏc.
4.3.4. Giải phỏp tăng tốc độ tớnh toỏn của chương trỡnh
Ngày nay, với khối lượng dữ liệu tớnh toỏn ngày càng lớn trong cỏc bài toỏn xử lý số liệu, cấu hỡnh mỏy tớnh ngày càng mạnh, việc chọn một thuật toỏn và giải phỏp tăng tốc độ tớnh toỏn để giảm thiểu thời gian thực hiện là một cụng việc quan trọng đối với người xõy dựng chương trỡnh ứng dụng. Đõy là một đỏnh giỏ quan trọng ảnh hưởng lớn đến mức độ hài lũng của người sử dụng đối với sản phẩm ứng dụng.
Theo [27], khi bàn về mỗi thuật toỏn, hiệu quả được coi là một thành tố