Nội dung bài toán: Hệ thống gồm nhiều trạm đo số liệu và thu nhận thông tin dữ liệu về khí tượng thuỷ văn để dự báo thời tiết. Hệ thống thu nhận dữ liệu theo định kỳ, xử lý dữ liệu cục bộ và truyền những dữ liệu, thông tin cần thiết về cho máy tính trung tâm xử lý tiếp. Dữ liệu mà hệ thống tập hợp bao gồm: nhiệt độ khí quyển, lòng đất; tốc độ, hướng gió; áp suất và lưu lượng mưa.
Một trong những ưu điểm của cách tiếp cận hướng đối tượng là có thể tiến hành thiết kế ngay khi chưa có đủ tất cả các đặc tả yêu cầu và sau đó có thể dễ dàng thay đổi khi cần bổ sung hay sửa đổi các yêu cầu đã nêu. Bài toán mô tả ở trên chưa cho biết về tần số thu thập dữ liệu cũng như cách xử lý dữ liệu, nhưng chúng ta có thể tiến hành ngay xây dựng thiết kế cho hệ thống.
Trước tiên chúng ta cần xác định những thành phần cơ bản của hệ thống, nghĩa là các thực thể sẽ tương ứng với khái niệm đối tượng của hệ thống phần mềm mà chúng ta cần xây dựng. Nói chung, việc xác định các đối tượng được thực hiện theo cách làm mịn dần trong quá trình thiết kế. Hệ thống mà chúng ta xây dựng ở đây là hệ khí tượng thuỷ văn sẽ có cả đối tượng "cứng" lẫn đối tượng "mềm". Đối tượng "cứng" không phải là hoàn toàn máy móc, thiết bị phần cứng mà là những thực thể liên quan đến máy móc, thiết bị. Những đối tượng này được nhúng vào hệ thống phần mềm để điều khiển các phần cứng tương ứng. Ngược lại, đối tượng "mềm" là những đối tượng chỉ tương tác với các đối tượng khác trong hệ thống, nghĩa là giúp các đối tượng "cứng" trao đổi thông tin với nhau. Phân tích kỹ bài toán chúng ta có thể xác định được các đối tượng "cứng" như sau:
+ Trạm khí tượng thuỷ văn + Máy đo nhiệt độ khí quyển + Máy đo nhiệt độ lòng đất + Máy đo sức gió
+ Máy đo hướng gió
+ Máy đo áp suất khi quyển + Máy đo lưu lượng mưa
+ Đồng hồ (xác định thời gian thu nhận dữ liệu và truyền thông báo) + Modem (truyền và nhận thông báo từ máy tính trung tâm)
Nhiệm vụ của từng đối tượng được mô tả như trong Bảng 2.1.
Bảng 3.1. Xác định công việc của các đối tượng "cứng"
Đối tượng Nhiệm vụ Mô tả công việc cụ thể
TRAM_KT
Operate
Self_test Shut_down
Khởi động bằng cách bấm nút khởi động máy. TRAM_KT thu nhận thông tin và làm báo cáo để dự báo thời tiết.
Kiểm tra lại các kết quả đã thu nhận
Bấm nút để dừng hoạt động của máy
May_DKH Evaluate Đo nhiệt độ không khí May_DLD Evaluate Đo nhiệt độ lòng đất May_DSG Evaluate Đo sức gió
May_DHG Evaluate Đo hướng gió, tính theo độ đo góc
May_DLA Evaluate Đo áp suất của không khí May_DLM Evaluate
Reset
Xác định lượng nước mưa kể từ lúc Reset lại
Đặt lại máy đo, xoá các thông số cũ
DONG_HO Time_now() Reset
Xác định thời gian theo yêu cầu Đặt lại thời gian theo yêu cầu
Modem Transmit
Receive
Truyền thông báo cho máy tính trung tâm
Nhận thông báo từ máy tính trng tâm
Để dễ theo dõi, chúng ta nên sử dụng sơ đồ khối để mô tả thiết kế. ở trên chúng ta đã xác định là trong hệ thống sẽ có hai loại đối tượng: cứng và mềm. Những đối tượng đó sẽ được mô tả như sau:
Object Object
Attr. ... Attr. ... Functio ns ... Functio ns ...
a) Đối tượng cứng b) Đối tượng mềm
Các đối tượng "cứng" có quan hệ với nhau trong hệ thống như trong hình 2-6. Đối tượng TRAM_KT thu nhận các thông tin từ các đối tượng con là May_DKH, May_DLD, May_DSG, May_DHG, May_DKA, May_DLM, DONG_HO và Modem để xử lý sơ bộ rồi chuyển thông báo về cho máy tính trung tâm. Một điều chúng ta cần lưu ý ở đây là những đối tượng "cứng" không thể trao đổi thông tin trực tiếp với nhau mà phải thông qua các đối tượng "mềm".
Bước tiếp theo là xác định các đối tượng "mềm". Để làm được điều đó chúng ta cần tìm hiểu thêm một số thông tin về tần suất thu nhận dữ liệu và cách xử lý dữ liệu của hệ thống. Trong quá trình tiếp xúc với những chuyên gia, những người sử dụng hệ thống khí tượng thuỷ văn để xác định bài toán, chúng ta có thêm những mô tả như sau:
Tram_KT ... Operate Self_tes t Shut_do
wn
May_ĐK H
May_ĐKH May_ĐKH May_ĐKH
... ... ... ... Evaluat e Evaluat e Evaluat e Evaluat e May_ĐK H
May_ĐKH May_ĐKH May_ĐKH
... ... ... ... Evaluat e Evaluat e Evaluat e Evaluat e
Hình 2-6. Cấu trúc phân cấp của phần cứng
"Tất cả các tham số về thời tiết, ngoại trừ lượng mưa sẽ được thu thập theo chu kỳ từng phút một. Sau mỗi giờ (sau 60 lần nhận dữ liệu) thì nhiệt độ, tốc độ gió, áp suất sẽ được xử lý để tính giá trị trung bình, giá trị cực
đại, cực tiểu và trong 1 giờ đó, lượng mưa cũng được ghi nhận. Các hướng gió được đo theo độ đo góc ( < 150) cũng sẽ được ghi nhận. Tất cả những thông số đó sẽ được tính toán sơ bộ và được truyền về máy tính trung
tâm để xử lý và dự báo về thời tiết"
Phân tích mô tả bài toán chúng ta thấy có những đối tượng "mềm" sau: + SUC_ GIO Xác định tốc độ của gió
+ H_GIO Xác định hướng gió + ND_KH Đo nhiệt độ không khí
+ L_MUA Đo lưu lượng nước mưa + A_SUAT Đo áp suất khí quyển
Những đối tượng này cung cấp thông tin cho một đối tượng làm nhiệm vụ tổng hợp dữ liệu là:
+ TH_DL Tạo ra các bản ghi thông tin từ các đối tượng con, kiển tra, truyền và nhận thông báo. Chức năng và nhiệm vụ của các đối tượng trên được mô tả chi tiết trong Bảng 2-2.
Bảng 2-2. Mô tả công việc của các đối tượng mềm
Đối tượng
Thao tác Mô tả công việc
TH_DL
Create Check Transmit
Tạo lập DL để dự báo thời tiết Kiểm tra tính hợp lý của DL Gửi thông báo về trung tâm
SUC_GIO
Collect Max Min Mean
Ghi nhận tốc độ của gió theo từng phút
Xác định tốc độ cực đại của gió Xác định tốc độ cực tiểu của gió Xác định tốc độ trung bình của gió
H_GIO
Collect Variances Mean
Ghi nhận các hướng gió
Danh sách hướng gió lớn hơn
Xác định độ đo trung bình DN_KH Collect Max Min Mean
Ghi nhận nhiệt độ không khí theo chu kỳ
Xác định giá trị cực đại của nhiệt độ
Xác định giá trị cực tiểu của nhiệt độ
Xác định giá trị trung bình của nhiệt độ
DN_LD Collect
Max
Ghi nhận nhiệt độ của lòng đất Xác định giá trị cực đại
Min Mean Xác định giá trị cực tiểu Xác định độ đo trung bình L_MUA Collect Max Min Mean
Ghi nhận lượng nước mưa Xác định giá trị cực đại Xác định giá trị cực tiểu Xác định độ đo trung bình A_SUAT Collect Max Min Mean
Đo đo áp suất không khí Xác định giá trị cực đại Xác định giá trị cực tiểu Xác định độ đo trung bình
Nhiệm vụ tiếp theo của thiết kế hướng đối tượng là thiết kế các lớp và xác định mối quan hệ giữa chúng. ở đây chúng ta sử dụng C++ để đặc tả thiết kế các lớp đối tượng.
Trước tiên chúng ta xét lớp TH_DL. Lớp này làm nhiệm vụ tổng hợp dữ liệu, tạo ra các record dữ liệu nhận từ các đối tượng con về nhiệt độ, sức, hướng gió, lượng nước mưa, áp suất khí quyển, kiểm tra tính hợp lý của dữ liệu, truyền và nhận thông báo từ trung tâm. Lưu ý rằng, TH_DL không cần biết gì về cách thu nhập dữ liệu của các đối tượng con. Trong C++ chúng ta mô tả TH_DL như sau:
class TH_DL {
private:
... // Khai báo các biến lưu trữ nhiệt độ, sức gió ... // hướng gió, áp suất, lượng mưa...
public:
void Create(void); // Tạo lập các record dữ liệu void Check(void); // Kiểm tra dữ liệu
void Transmit(void); // Nhận và truyền dữ liệu }
Tương tự, chúng ta có thể xây dựng các lớp con SUC_GIO, H_GIO, ND_KH, ND_LD, L_MUA, A_SUAT. Ví dụ, lớp ND_KH có thể sẽ được mô tả như sau:
class ND_KH {
private:
float t[60]; // Bảng số liệu đo nhiệt độ của không khí // ghi được trong một chu kỳ 1 giờ
public:
float *Collect(); // Thu nhận dữ liệu từ đối tượng "cứng" float Max(); // Tính giá trị cực đại của nhiệt độ đo được float Min(); // Tính giá trị cực tiểu
float Mean(); // Tính giá trị trung bình }
Các lớp SUC_GIO, H_GIO, ND_KH, ND_LD, L_MUA, A_SUAT cung cấp dữ liệu cho lớp TH_DL và quan hệ giữa chúng được mô tả như trong hình 2-7.
TH_DL ... ... Creat Check Transmit SUC_GIO H_GIO NĐ_KH ND_LĐ ... ... ... ... Collect Max Min Mean Collect Variance s Mean Collect Max Min Mean Collect Max Min Mean L_MUA A_SUAT 615 616
... ... Colle Colle ct Max Min Mean Collect Max Min Mean
Hình 2-7. Mô tả quan hệ của các lớp đối tượng "mềm"
ở trên chúng ta đã khẳng định: các đối tượng "cứng" muốn trao đổi thông báo với nhau phải sử dụng các giao diện là các đối tượng "mềm". Dựa vào các chức năng, nhiệm vụ của từng lớp đối tượng và nhiệm vụ chung của hệ thống chúng ta có thể đưa ra thiết kế tổng thể cho hệ thống khí tượng thuỷ văn như sau:
Tram_KT Modem ... ... Operate Self_test Shut_do wn Transmit Receive TH_DL DONG_HO ... ... Creat Check Transmit Mean Time_no w Reset
SUC_GIO H_GIO NĐ_KH TH_DL A_SUAT
... ... ... ... ... Collec Collec t Max Min Collec t Varian ces Collec t Max Min Collect Max Min Mean Collec t Max Min Hình 2-8. Cấu trúc hệ thống khí tượng thuỷ văn
Mean Mean Mean Mean
May_ĐSG May_ĐHG May_ĐKH May_ĐLĐ May_ĐKA ... ... ... ... ... Evalua te Evalua te Evalua te Evaluat e Evalua te May_ĐLM ... Evaluat e Reset
Đ 3. lập trình hướng đối tượng 3.1. Giới thiệu
Với lập trình có cấu trúc, những hệ thống lớn, phức hợp, thì độ phức tạp của chương trình sẽ tăng lên, sự phụ thuộc của nó vào các kiểu dữ liệu mà nó xử lý cũng tăng theo. Các kiểu dữ liệu được xử lý trong nhiều thủ tục bên trong chương trình có cấu trúc, và khi có sự thay đổi trong kiểu dữ liệu thì cũng phải thực hiện thay đổi ở mọi nơi mà dữ liệu đó được sử dụng. Một nhược điểm nữa của lập trình có cấu trúc là khi có nhiều người tham gia xây dựng chương trình, mỗi người được giao viết một số hàm riêng biệt nhưng lại có thể sử dụng chung dữ liệu. Khi có nhu cầu cần thay đổi dữ liệu sẽ ảnh hưởng rất lớn đến công việc của nhiều người.
Lập trình hướng đối tượng dựa trên nền tảng là các đối tượng. Đối tượng được xây dựng trên cơ sở gắn cấu trúc dữ liệu với các phép toán sẽ thể hiện được đúng cách mà chúng ta suy nghĩ, bao quát về thế giới thực. Chẳng hạn, ô tô có bánh xe, di chuyển được và hướng của nó thay đổi được bằng cách thay đổi tay lái. Tương tự, cây là loại thực vật có thân gỗ và lá. Cây không phải là ô tô và những gì thực hiện được với ô tô sẽ không làm được với cây.
Lập trình hướng đối tượng cho phép chúng ta kết hợp những tri thức bao quát về các quá trình với những khái niệm trừu tượng được sử dụng trong máy tính. Chương trình hướng đối tượng xác định chính xác các đặc trưng và hành vi của các kiểu dữ liệu, trong đó có thể tạo ra những đối tượng mới được xây dựng từ những
khuôn khổ có sẵn hay tổ hợp để tạo ra những đặc trưng mới.
Trong chương này chúng ta sẽ giới thiệu những khái niệm cơ bản và các bước cần thực hiện trong lập trình hướng đối tượng.