319
PHỤ LỤC 4
PHÂN TÍCH, THIẾT KẾ VÀ LẬP TRÌNH
HƯỚNG ðỐI TƯỢNG
§
1. PHÂN TÍCH HƯỚNG ðỐI TƯỢNG
1.1. Giới thiệu
Phân tích hệ thống không chỉ có liên quan chặt chẽ với sự xuất hiện của máy
tính, mà thực tế nhu cầu phân tích ñã có trước khi máy tính xuất hiện từ nhiều
thế kỷ. Khi các Vua Pharaon của Ai Cập cổ ñại xây dựng các Kim Tự Tháp, thì
những người thiết kế Kim Tự Tháp có thể ñược coi như những nhà thiết kế hệ
thống, những kiến trúc sư ñại tài, còn những người tổ chức vận chuyển nguyên
vật liệu, huy ñộng nhân công xây dựng Kim Tự Tháp, theo một nghĩa nào ñó,
chính là những người phân tích hệ thống. Từ giữa thế kỷ 19, các nhà tư bản, các
doanh nghiệp muốn có lợi nhuận cao ñã phải tiến hành nghiên cứu phương pháp,
cách tổ chức, phân công lao ñộng hợp lý ñể cho các hệ thống sản xuất, kinh
doanh hoạt ñộng ñạt hiệu quả cao hơn. Chính họ ñã thực hiện phân tích những
hệ thống ñó ñể ñề ra những phương pháp quản lý, cách tổ chức mới, tốt hơn.
Cùng với sự phát triển của công nghiệp ñiện tử, giá thành phần cứng giảm nhiều,
nhưng giá phần mềm lại tăng. Nhất là phí tổn cho bảo trì ñể hệ thống ñáp ứng ñược
như cầu của người sử dụng lại chiếm một tỷ trọng rất lớn trong tổng chi phí cho một
dự án phát triển phần mềm. ðiều này cho thấy vai trò của công việc phân tích hệ
thống là rất quan trọng và cần thiết phải tìm ra phương pháp tốt hơn cho việc phát
triển hệ thống.
Phân tích làm nhiệm vụ phân tách bài toán thành các thành phần nhỏ hơn.
Trong công nghệ phần mềm thì nó còn có nghĩa là phải hiểu rõ quá trình xây
dựng ñặc tả yêu cầu của người sử dụng, nắm ñược các chức năng và cách phân
ñịnh xem hệ thống cần xây dựng sẽ làm cái gì và hoạt ñộng như thế nào.
Trong các phương pháp truyền thống thì mô hình dòng dữ liệu ñược mô tả
thông qua sơ ñồ dòng dữ liệu. Các quá trình trong hệ thống ñược xác ñịnh thông
qua việc phân rã chức năng top-down. Sơ ñồ biến ñổi trạng thái ñược sử dụng ñể
mô tả sự biến ñổi thông tin và dòng ñiều khiển trong hệ thống. Phương pháp
hướng ñối tượng kết hợp hai phương diện dữ liệu với quá trình, gộp chung hành
vi cục bộ với dữ liệu trong một ñơn vị cấu trúc. Phương pháp phân tích hướng ñối
tượng cung cấp cho chúng ta công cụ ñơn giản nhưng ñủ mạnh ñể xác ñịnh các
ñối tượng và xây dựng các ñơn nguyên của hệ thống cần phát triển. Phân tích
hướng ñối tượng bao gồm các bước sau:
+ Tìm hiểu bài toán.
+ Xây dựng các ñặc tả yêu cầu của người sử dụng và của hệ thống phần mềm.
+ Xác ñịnh các ñối tượng và các thuộc tính của chúng.
+ Xác ñịnh các hàm mà các ñối tượng sẽ phải thực hiện (hành vi của các ñối
tượng).
321
+ Xác ñịnh mối quan hệ tương tác giữa các ñối tượng, các thông báo và sự truyền
thông báo giữa các ñối tượng.
Tìm hiểu bài toán
Nhiệm vụ ñầu tiên của quá trình phân tích là phải tìm hiểu kỹ bài toán ứng
dụng. Người phân tích phải gặp gỡ, trao ñổi với những người ñầu tư, những người
sử dụng ñể biết rõ về chức năng, nhiệm vụ của hệ thống cần phát triển. ðồng thời
người phân tích phải tìm hiểu, phát hiện những hệ thống cũ ñã hoặc ñang giải
quyết những vấn ñề tương tự như những vấn dề mà hệ thống cần xử lý. Dựa vào
những kinh nghiệm, kết quả phân tích những hệ thống cũ, những công việ mà
hàng ngàyphải thực hiện ñể xác ñịnh chính xác bài toán. Trên cơ sở ñó làm rõ hơn
những yêu cầu của bài toán và ñịnh nghĩa lại theo quan ñiểm của các kỹ sư phầm
mềm ñể ñảm bảo ñưa ra ñược lời giải tin học (hệ thống thực hiện ñược trên máy
ñịnh các ñối tượng chúng ta có nhiều phương pháp khác nhau, chẳng hạn có thể
sử dụng sơ ñồ dòng dữ liệu hoặc dựa vào phân tích văn bản.
1. Sơ ñồ dòng dữ liệu:
Sơ ñồ dòng dữ liệu là mô hình hệ thống cho cả dữ liệu lẫn quá trình. Thông tin lấy
từ các nguồn dữ liệu, ñược chuyển ñến cho một hay nhiều quá trình xử lý và ngược
lại, một quá trình khi nhận ñủ thông tin vào (input) thì bắt ñầu thực hiện, xử lý thông
tin và cho các kết quả (output) và chúng ñược gửi tới các kho dữ liệu. Trong sơ ñồ
dòng dữ liệu, một quá trình sẽ ñược thực hiện khi có ñủ các thông tin ñầu vào.
Chức năng quan trọng của quá trình là xử lý dữ liệu, biến ñổi thông tin. Dòng dữ
liệu ñược gắn với một tên nhưng không nhất thiết phải là duy nhất. Các dòng dữ liệu,
và tên ñược gắn cho nó phải chỉ ra ñược thông tin logic tương ứng cho một quá trình.
Tên gắn với dữ liệu phải là danh từ. Kho dữ liệu biểu diễn cho một lượng lớn thông
tin cần phải lưu trữ trong một thời gian dài, thường là trong các tệp dữ liệu ñể cho
nhiều người có thể truy nhập vào.
Sơ ñồ dòng dữ liệu có thể sử dụng ñể biểu diễn quá trình xử lý thông tin trong hệ
thống ở nhiều mức ñộ trừu tượng khác nhau, ví dụ có thể làm mịn quá trình "Xử lý
ñơn hàng" thành các quá trình "Xử lý ñơn hàng", "Tập hợp ñơn hàng".
Chúng ta có thể dựa vào ñịnh nghĩa của sơ ñồ dòng dữ liệu ñể xác ñịnh các ñối
tượng. Trong sơ ñồ dòng dữ liệu, những nút dữ liệu, kho dữ liệu có thể ñược xem
như là các ñối tượng, tuy rằng không luôn có sự tương ứng 1-1 giữa những nút biểu
diễn cho dữ liệu, kho dữ liệu trong sơ ñồ dòng dữ liệu với các ñối tượng. Một ñối
tượng có thể là ñại diện của một hay nhiều nút dữ liệu, kho dữ liệu trong sơ ñồ
dòng dữ liệu tuỳ thuộc vào ngữ cảnh của vấn ñề mà nó mô tả.
2. Phân tích văn bản:
Cách thực hiện thứ hai là dựa trên mô tả bằng văn bản của bài toán hoặc lời giải ñể
phân tích. Văn bản mô tả có thể gồm có một hay nhiều câu, một hay nhiều ñoạn,
chương, phần, tuỳ thuộc vào mức ñộ phức tạp của bài toán. Trong ñó các ñối tượng
thường ñược mô tả bằng các danh từ. Danh từ thường ñược phân loại thành danh từ
riêng, danh từ chung, và các danh từ trừu tượng hoặc danh từ chỉ ñại lượng.
ðiều quan trọng cần lưu ý khi phân tích là phải dựa vào ngữ nghĩa và ngữ cảnh ñể
Nam_XB : Năm xuất bản
ðối với lớp DON_HANG
So_hieu : Số hiệu ñơn ñặt hàng
SH_KH : Số hiệu hoặc tên khách hàng
Ngay_DH : Ngày ñặt hàng
Ngay_GH : Ngày giao hàng
ðối với lớp KHACH_HANG
SH_KH : Số hiệu khách hàng
Ten_KH : Tên khách hàng
Dia_chi : ðịa chỉ, nơi giao hàng
TK_KH : Số tài khoản của khách hàng trong ngân hàng
324
Danh sách các thuộc tính của các lớp sẽ ñược tiếp tục xem xét, bổ sung cho ñầy ñủ
trong giai ñoạn thiết kế. Cần lưu ý là phải cân nhắc ñể ñưa ra ñược những thuộc tính
chung nhất, với những tên gọi ñặc trưng cho từng lớp ñối tượng.
Xác ñịnh các hàm
ðể mô tả ñầy ñủ, chính xác các ñối tượng chúng ta cần tiếp tục xác ñịnh các hàm
mô tả hành vi của chúng. Chúng ta có thể dựa vào văn bản mô tả bài toán ñể xác ñịnh
các hàm. Thông thường, trong các câu mô tả thì ñộng từ ñược dùng ñể chỉ một hành
ñộng, sự xuất hiện, phân loại hay cấu thành của các ñối tượng.
Các ñộng từ chỉ hành ñộng và so sánh giúp cho chúng ta xác ñịnh ñược các hàm,
còn ñộng từ chỉ sự xuất hiện, so sánh giúp chúng ta xây dựng ñược cấu trúc phân
loại. ðộng từ sở hữu giúp cho việc xác ñịnh những cấu trúc cấu thành của các ñối
tượng.
Một cách khác là dựa vào sơ ñồ dòng dữ liệu ñể xác ñịnh các hàm, các chức năng
ñược biểu diễn bằng các hình tròn hoặc ellipse. Ví dụ, ñể mô tả cho hành vi của ñối
tượng trong lớp KHACH_HANG chúng ta phải xây dựng các hàm xử lý những thuộc
tính ñã xác ñịnh ở trên như các hàm xác ñịnh những thông tin về khách hàng: số hiệu,
theo nguyên lý che giấu thông tin. Khác với cách tiếp cận truyền thống (hướng chức
năng) là nó xem hệ thống phần mềm là tập hợp các ñối tượng tương tác với nhau.
Mỗi ñối tượng làm việc với trạng thái (dữ liệu) riêng của mình. ðối tượng, khái niệm
cơ sở ñã ñược ñề cập nhiều ở các phần trước là một thực thể có tập các thuộc tính và
tập các hàm tác ñộng trên các thuộc tính ñó.
Tập giá trị các thuộc tính xác ñịnh trạng thái của một ñối tượng. Một ñối tượng
không ñược quyền truy nhập trực tiếp hoặc làm thay ñổi trạng thái của ñối tượng
khác. ðiều này dẫn ñến là các ñối tượng chỉ có thể trao ñổi với nhau bằng các thông
báo. Thông báo sẽ kích hoạt các hàm của ñối tượng nhận thông tin tương ứng. Hoạt
ñộng của cơ chế truyền thông báo giữa các ñối tượng là dị bộ (không ñồng bộ) vì vậy
chương trình ñược thiết kế theo hướng ñối tượng có thể ñược thực hiện song song
hoặc tuần tự tuỳ theo phương pháp lập trình và những công cụ mà chúng ta thực hiện
cài ñặt có cho phép thực hiện song song hay không.
Thiết kế hướng ñối tượng là phương pháp thiết kế hệ thống phần mềm không phụ
thuộc vào ngôn ngữ lập trình. Nhiều ñặc tính như “Che dấu”, “kế thừa” làm cho việc
thực hiện thiết kế trở nên dễ dàng hơn, ñơn giản hơn. Những thiết kế này cũng có thể
ñược cài ñặt bằng ngôn ngữ chưa có ñặc tính ñó như Turbo C, hoặc Pascal, nhưng tốt
nhất là nên sử dụng những ngôn ngữ hướng ñối tượng ñể cài ñặt những thiết kế ñược
thực hiện theo cách tiếp cận hướng ñối. Nhiều ngôn ngữ lập trình hướng ñối tượng
như Eiffel, Object Pascal, Smalltalk, C
++
có những ñặc tính hướng ñối tượng hỗ trợ
cho việc mô tả và thực hiện cài ñặt trực tiếp những thiết kế hướng ñối tượng hiệu quả
hơn.
Tóm lại thiết kế hướng ñối tượng có những ưu ñiểm chính sau:
+ Loại bỏ ñược những miền dữ liệu dùng chung thông qua cơ chế trao ñổi thông
tin giữa các ñối tượng bằng các thông báo.
+ Các ñối tượng ñược thiết kế là các thực thể ñộc lập (theo nghĩa không sử
dụng dữ liệu chung), mọi thay ñổi về trạng thái, bổ sung, sửa ñổi các hoạt ñộng
chức năng của một ñối tượng chỉ sảy ra bên trong của ñối tượng ñó, không ảnh