Tải bản đầy đủ (.pdf) (19 trang)

Phân tích, thiết kế, lập trình hướng đối tượng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (288.8 KB, 19 trang )


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


rã hệ thống vật lý thành các ñơn thể (module). Theo phương pháp truyền thống
thì ñiều ñó thường ñược thực hiện theo cách tiếp cận trên-xuống (top-down),
sử dụng phương pháp phân tích có cấu trúc. Phân tích hướng ñối tượng cho
phép mô tả hệ thống gần với thế giới thực hơn, xác ñịnh rõ các ñối tượng, trừu
tượng hoá các yêu cầu ñể trên cơ sở ñó xây dựng ñược cấu trúc của hệ thống.
Phương pháp hướng ñối tượng giải quyết ñược hố ngăn cách giữa phân tích và
thiết kế hệ thống.


320

1.2. Các bước thực hiện trong phân tích hướng ñối tượng
ðể xây dựng một hệ thống phần mềm thì phải giải quyết ba vấn ñề chính sau:
+ Dữ liệu, lớp các ñối tượng và cấu trúc của chúng.
+ Những hành vi thể hiện các chức năng cục bộ, những quá trình trong hệ
thống.
+ ðiều khiển hành vi tổng thể của hệ thống.
Trong thực tế, cấu trúc dữ liệu và yêu cầu về hành vi của hệ thống thường xuyên
thay ñổi. Do vậy phải phân tích kỹ bài toán, lựa chọn phương pháp phát triển hệ
thống thích hợp ñể cho hệ thống có tính chất mở, dễ thích nghi giúp cho công việc
bảo trì hệ thống ñỡ tốn kém.
Người phân tích hệ thống là người có kiến thức bao quát, có kinh nghiệm trong
quá trình phân tích nhiều hệ thống ứng dụng khác nhau, ñồng thời phải có khả năng
giao tiếp, trao ñổi và hiểu ñược những người ñầu tư, thiết kế và những người sử dụng
hệ thống.
Nhiệm vụ của phân tích hệ thống là phải trả lời cho ñược câu hỏi "Hệ thống làm
cái gì?" và "Tại sao?". ðể xác ñịnh ñược bài toán và trả lời ñược những câu hỏi nêu
trên thì người phân tích cũng cần phải phát hiện, tìm hiểu kỹ những hệ thống ñã có
hoặc ñang hoạt ñộng trong thực tế. Có thể ñó chưa phải là hệ thống tin học hoá. Trên
cơ sở nghiên cứu những hệ thống cũ, xác ñịnh rõ yêu cầu của người sử dụng ñể quyết

ñị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

tính). Các khẳng ñịnh về bài toán phải ñơn giản và rõ ràng, mạch lạc về văn phạm.
ðiều này giúp cho các kỹ sư phần mềm có ñiều kiện tập chung nhiều hơn vào việc
xây dựng lời giải cho bài toán. Dựa trên những khẳng ñịnh của bài toán ñể xây
dựng các ñặc tả yêu cầu của người sử dụng lẫn của cả hệ thống phần mềm.
Xây dựng các ñặc tả yêu cầu
Khi ñã ñịnh nghĩa rõ bài toán thì bước tiếp theo là phải tìm hiểu xem hệ thống dự
kiến sẽ yêu cầu làm cái gì? ðiều quan trọng ở ñây là phải xây dựng ñược danh sách
các yêu cầu của người sử dụng. Rõ ràng là ở ñây cần có sự trao ñổi, hiểu biết giữa
người sử dụng và người phát triển hệ thống về những ñiều mà họ mong muốn. Dựa
trên những yêu cầu của người sử dụng, người phát triển ñưa ra các ñặc tả cho hệ
thống. Người xây dựng hệ thống phải trả lời ñược các câu hỏi:
+ ðầu ra (output) của hệ thống là cái gì?
+ Hệ thống sẽ phải làm cái gì ñể có kết quả mong muốn, nghĩa là phải xử lý cái
gì?
+ ðầu vào (input) của hệ thống là cái gì?
+ Những tài nguyên mà hệ thống yêu cầu là cái gì?
Phải hiểu rõ nguồn gốc, các dạng thông tin cần cung cấp cho hệ thống hoạt ñộng.
Hệ thống sẽ giải quyết vấn ñề gì, những kết quả cần phải có là gì. Xác ñịnh ñược mối
quan hệ giữa ñầu vào/ra (input/output), nghĩa là xác ñịnh ñược những khẳng ñịnh về
mối quan hệ giữa tiền ñiều kiện và hậu ñiều kiện cho các quá trình trong hệ thống.
Các ñặc tả chi tiết phục vụ cho việc xây dựng và trắc nghiệm hệ thống ñể kiểm tra
xem những nhiệm vụ ñặt ra có ñược hoàn thành hay không.


322


Xác ñịnh các ñối tượng
Thông thường các ñối tượng sẽ ñược xác ñịnh thông qua các thực thể trong
thế giới thực và ñược trừu tượng hoá thành các ñối tượng trừu tượng. ðể xác

ñị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 ñể

phân loại danh từ. Một từ có thể là danh từ chung trong ngữ cảnh này song nó cũng
có thể là danh từ trừu tượng hoặc danh từ chỉ ñại lượng trong ngữ cảnh khác. Cũng

323

cần lưu ý là không phải tất cả các danh từ ñều ñược dùng ñể biểu diễn cho những ñối
tượng cần thiết cho hệ thống của chúng ta.
Tóm lại, chúng ta có thể sử dụng một trong hai công cụ trên ñể xác ñịnh danh sách
các ñối tượng của bài toán ứng dụng và sau ñó tiếp tục: Xác ñịnh những ñối tượng
chỉ nằm trong không gian bài toán, không gian lời giải, và những ñối tượng nằm
trong không gian bài toán nhưng nằm ngoài giới hạn của hệ thống phần mềm và xây
dựng các thuộc tính cho các ñối tượng của không gian lời giải.
Sau khi ñã xác ñịnh ñược các ñối tượng thì nhiệm vụ tiếp theo là xác ñịnh những
thuộc tính mô tả các tính chất của từng lớp ñối tượng. Người phân tích có thể dựa vào
ba nguồn cung cấp thông tin cơ bản sau ñể tập hợp, xây dựng những thuộc tính cho
từng lớp ñối tượng:
+ Từ những kinh nghiệm, tri thức của người phân tích hệ thống về thực tế công
việc trong lĩnh vực tập trung nghiên cứu ñể dự ñoán, xác ñịnh danh sách các thuộc
tính.
+ Từ những người sử dụng, thông qua các cuộc phỏng vấn, trao ñổi và tìm hiểu
bài toán cụ thể ñể lập danh sách các thuộc tính.
+ Từ những hệ thống cũ, những bảng biểu, báo cáo và các tài liệu khoa học ñược
sử dụng thường xuyên trong lĩnh vực ñang nghiên cứu ñể chọn lọc ra những thuộc
tính cho lớp các ñối tượng ñã xác ñịnh.
Ví dụ trong một hệ quản lý kinh doanh sách chúng ta có thể ñề xuất danh sách
những thuộc tính cho các lớp SACH, DON_HANG và KHACH_HANG như sau:
ðối với lớp SACH
Tac_gia : Tên tác giả của cuốn sách
Ten_sach : Tên gọi, tiêu ñề của cuốn sách
Nha_XB : Nhà xuất bản

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,

họ và tên, ñịa chỉ, tài khoản, ...
Xác ñịnh mối quan hệ giữa các ñối tượng
Bước tiếp theo là xác ñịnh mối quan hệ giữa các ñối tượng, nghĩa là sự trao ñổi
thông tin giữa chúng. Như chúng ta thấy, trong một hệ thống mỗi thực thể phải có
quan hệ ít nhất với một thực thể khác. Chẳng hạn, trong hệ thống quản lý kinh doanh
của công ty phát hành sách, khách hàng muốn mua sách thì phải ghi vào ñơn ñặt
hàng, nghĩa là ñối tượng KHACH_HANG sẽ phải gửi một thông báo (ñơn ñặt hàng)
cho ñối tượng DON_HANG. Tương tự, DON_HANG lại có quan hệ với SACH vì
những cuốn sách sẽ ñược bán cho khách hàng khi nhận ñược các ñơn ñặt hàng. Quan
hệ giữa các lớp ñối tượng có thể có những kiểu khác nhau và ñược phân thành ba
kiểu sau:
+ Quan hệ một – một
+ Quan hệ một – nhiều
+ Quan hệ nhiều - nhiều
§
2. THIẾT KẾ HƯỚNG ðỐI TƯỢNG
2.1. Giới thiệu
Mục này sẽ mô tả phương pháp thiết kế phần mềm dựa trên các ñối tượng. Phương
pháp hướng ñối tượng nhằm che dấu thông tin ở mức tối ña và vì vậy hỗ trợ cho việc
thiết kế những hệ thống với những cặp bộ giữa các thành phần là cực tiểu nhưng mức
ñộ cố kết hệ thống lại cao hơn cách tiếp cận chức năng. Chúng ta sẽ tập trung nghiên

325

cứu các bước cần thực hiện trong thiết kế hướng ñối tượng và ví dụ mô tả cách thiết
kế các lớp, xây dựng cấu trúc hệ thống trong quá trình phát triển phần mềm.
Che giấu thông tin là chiến thuật thiết kế sao cho có thể giấu ñược nhiều nhất
lượng thông tin ở bên trong các thành phần cơ sở của một thiết kế. ðiều này có nghĩa
là sự trao ñổi giữa các thực thể của thiết kế là cực tiểu và vì vậy thiết kế dễ dàng thay
ñổi hơn. Thiết kế hướng ñối tượng (TKHðT) là phương pháp thiết kế ñược thực hiện

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

hưởng ñến các ñối tượng khác. Mọi sự thay ñổi trong thiết kế, trong hệ thống
phần mềm chỉ sảy ra cục bộ ñối với một số ñối tượng liên quan. ðiều này ñảm
bảo hệ thống có tính dễ mở rộng và dễ thích nghi, ñáp ứng ñược nhiều tính
chất quan trọng của sản phẩm phần mềm.

×