MERSTRASZ & TSICHRn ZIS
OBJECT-ORIENTED
SOFTWARE
COMPOSITION
PR EN T IC E-H A LL
1992
CÂU THÀNH
PHẦN MỂM
HƯỚNG ĐỔI TƯƠNG
HÀ NỒI 1998
Mục lục
Lời nói đ ầ u ..............................................................................................................I
L ờ i giới th iệ u .........................................................................................................I I
Những Icri cảm ơ n ................................................. ...................................... " I X
3
0
1 8
^ 4.^
4
^
7
1
1
3
'
6
'
^ 7 X 7
7
'
9
6
o
5
9
'
'
Chương 3, Tương tác của các ứng dụng hướng đối tượng........................
3. ISử dụng lại các đối tượng từ những môi trường khác nhau.......................
3.2 Tương ĩác hướng thủ tục............................................................................
3.3 Tương tác hướng đối tượng......................................................................
3-4 So sánh các cách tiếp cận hỗ trợ tương tác................................................
3.5 Tương tác hướng đối tượng-Kết nối giao diện..........................................
3.6 Thích nghi giao d iệ n .................................................................................
3.7 ánh xạ đối tư ợng................................ -........................................ ..............
3.8 Những kết luận và các phương pháp nghiẽn cứu......................................
8
w
2 2
Chương 2. Tương tranh trong các ngòn ngữ lập trình hướng đòi tượng,
2.1 Giới thiệu....................................................................................................
2.2 Không gian thiết kế.....................................................................................
2.3 Tiêu chuẩn đánh giá những lựa chọn thiết kế ngôn ngữ..........................
2.4 Khám phá không gian thiết kế ngỏn ngữ..................................................
2.5 Kết luậ n............................................................. .........................................
I8
一
Chương !• cỏ n g nghệ phần mém hướng thành phần.......................................1
1.1 Lời giới th iê u ........................................................................................... ..
1
1.2 Đối tượng và thành phần..................................................................................5
1.3 K ỹ thuật hỗ trợ cho các thành phần................................................................ 7
1.4 Công nghệ thành phần................................................................................. 18
1.5 Kết luân.._______ " .................................................................................... 22
o
^
« L
H
1L
t i
o o o
.
1 1
1
Ỉ
1 1
li
- Ii
ỉ
0 3 6
^
^
C
M
l u
Chương 6 H àm , Bản ghi và tính tương thích trong phép tính 入N .........
6.1 Giới thiệu...................................................................................................
6.2 Phép tính Lambda vói tham số có tên......................................................
6.3 Tính toán tại lúc thực hiện......................................................................
6.4 Mối quan hệ tương th ích ..........................................................................
6 s Kết
l i i A n .................................. .............................................................................. ..................
60
66
71
7h
2
1 1
Chương 5 Phối cảnh thòi gian của những đối tượng phức h ọ p .............. .
5. ỉ Lòi giới th iệ u ............................................................................................
5.2 Logic mênh để có yếu tố thời g ia n ..........................................................
5.3 Đặc tả các đặc tính có thời giaiì...............................................................
5.4 Sự kiểm đ ịn h ........................................................................ ....................
5.6 Những nhận xét và tổng kết......................................................................
^
Chương 4 Các kiểu chính qui cho những đối tượng tích c ự c ...................
4.1 Lời giới th iệ u .............................................................................................
4-2 Các kiểu khả năng thay thế và các đối rích cực........................................
4.3 Giao các kiểu dịch vụ................................................................................
4.4 Khả năng thay thế yèu cầu..................... .................................................. 107
4.5 Xem các đối iưọìig như quá trình chính qui............................................
4.6 Kiểu chính qui con...................................................................................
4.7 Tính thỏa mãn yêu cầu..............................................................................
4.8 Những vấn đề còn bỏ ngỏ.........................................................................
4.9 Những nhận xét và kết luận......................................................................
C hương 7 Sự phân loại thành phan tro ng co sở thòng tin phần m è m ,." 179
7.1 G iới thiệu........................................................................................................ 179
7.2 Cơ sờ thỏne tin phâiig mềm........................................................................... 181
7.3 Sự khôi phục thồng tin và người d ù n g ......................................................... 186
7.4 Sơ đồ phần lớ p ............................................................................................... 189
7.5 Sắp xếp hợp lý hóa quá trình phân lớ p ......................................................... 195
7.6 K inh nghiệm ................................................................................................... 197
7.7 Kết lu ậ n ............................................................................................................202
C hương 8 Quản lý sự tiến hóa lớp tro n g các hệ thống hướng đối tưọng. 205
8.1 Thiết kế và tái thiết kế đối tượng................................................................... 205
8.2 May ghép lớ p ................................................................................................... 207
8.3 Giải phẫu lớ p ...................................................................................................209
8.4 Phiên bản hóa lớp............................................................................................ 216
8-5 Tổ chức lại lớ p .................................................................................................222
8.6 Thay đổi sự hủy bỏ.......................................................................................... 235
8.7 Sự chuyển đ ổ i................................................................................................. 238
8.8 L ọ c ....................................................................................................................241
8.9 Kêì lu ậ n ........................................................................................................... 245
一
Chương 9 Bộ du vệt thủn thu ộc..........................................................................251
9.1 G iới thiệu. . . . . ................... .............................................................................. 251
9.2 Yêu cầu duỵột..................................................................................................257
9-3 Bộ duyệt thân thu ộc....................................................................................... 258
9.4 Bộ duyệt thân thuộc qua ví d ụ ....................................................................... 265
Q s Kết liiA n ..... ....... ............................. ........... ................................................. 278
o
s s
ơ
8
ữỵ V
u .9
T-',
i i yc , i
^ Tì ỉ 2
6
ỉ
ChưuTìg 10 Sự họp thành trự c quan của các ứng dụng phẩn mềm
10-1 Giới thiệu...........................................................................................
10.2 Cổng việc liên quan...........................................................................
10.3 Khung họp thàỉìh trực quan..............................................................
10.4 Vista- mẫu thử công cụ hợp thành trực quan..................................
10.5 Các ứng dụng m ẫ u ............................................................................
10.6 Thảo luận...........................................................................................
10 7 Kết lu A ĩi........................... ......................... .....................................
06
Chương 11 K hung thành phần đa phưong tiệ n .........................................310
11.1 Phương tiện số và đa phương tiệ n ............................................................310
11.2 Hệ thống đa phương tiện và hợp thành đa phương tiện......................... 311
11.3 Khung đa phương tiệ n ................................................................................313
11.4 V í dụ vể khung đa phương tiện-Các thành phần.....................................314
11.5 Các ví dụ ứng dụng Video W idgest........................................................ 318
11.6 Tóm lươc........ :..........................................................................................
322
I■
Chương 12 Gluons và sự hợp tác giữa những thành phần phần mềm .... 325
12.1 G i^ thiêu............... :…二 … 二 … ............. r .......... ........... ...........
........... ........... ........... .
12.2 Tổng quan vể kiểu mẫu hợp tấc................................................................ 328
12.3 Yêu cầu cho một khung tài chính............................................................. 337
12.4 G luons......................................................................................................... 342
12.5 Gluons và khung tài chính......................................................................... 345
12.6 Kết lu â n .......................................................................................................352
Lời nói đầu
Có lẽ, "Vượt ra ngoài các Đ ối tượng " phải là tiêu đề con của tập sách này, vì
phần lớn Iiội dung trái với hình ảnh về "những Đối tượng" quen biết như đã được
thừa nhận từ lâu.
Dạiig thức lập trình hướng đối tương bây giờ đã được chấp nhận vững chắc
ĩrong cộng đổng làm phần mềm vì nó đề xuất một cổng nghệ mạnh và hứa hẹn nhất
cho sự phát triển phán mềnì trong số các công nghệ hiên có, cũng như khả năng diễn
đạt và sức mạnh mô hình hóa của nó được đánh giá cao. Tuy nhiên, một trong những
hứa hẹn lớn nhất mà nó đưa ra vào giai đoạn đầu của nó là một sự cải tiến vượt bậc
trong sự biên soạn và việc sử dụng lại phần mềm, điều mà nó vẫn chưa đạt được.
(Con người đòi khi làm phức tạp hóa với nhữne mạng của những phftn cấp lớp). Và
sự nghiên cứu liếp diễn.
Khoảng mười năm vể trước, Dennis và Oscar, đến từ Toronto, đã thành lập
Nhóm các Hệ thống Đối tượng tại Trườns đại học Geneva, và bắt đầu một số dự án
nghiên cứu nhằm inở rộng dạng thức hướng đối tượng theo những cách khác nhau.
Chỉ vài năm sau. nhóm này đă trờ thành một tru!ì'j; tâm nghiên cứu về công nghệ
hướng đối tượĩis đáng chú ý và nâng nổ ĩihất châu Au. CĨUÌR trong thời gian đó, một
bộ phạn của nhóm đã bị cuốn hút vào dự án ESPRIT lớn được gọi là IT H A C A , dự
án này hướn2 tới việc sản xuất một môi í rường phát triển ứng dụng trên-cư sờ công
nghệ hướng đối tượng- Tập sách nằv giới íhiội! những thành quả của mười năm
nghiên cứu và phát triển của nhóm, dưới sư điều khiển bởi triết học sáng sủa của
Deiinis về nehiẻn cứu và sáng tạo. Nhóm đà giải quyết các vấn đề thực tiễn và
những vấn để có cơ sơ thực tiễn vững chắc. Nghể nghiệp trước đó của Deniìis là nhà
lý thuyết hàm đệ quy học được ờ Alonzo Church tại Princetoỉi, đồng thời được khích
lệ bỏi công việc nềiì tảng trong nhóm, môt vài chương trone tập sách nàv giới thiệu
những kết quả đó.
"Vượt ra ngoài các Đ ối tượng" là tiêu đề của chương trình thảo luận ờ Hội
nghị châu Âu vể lập trình hướng đối tượng (EC00P'91), được tổ chức bởi Oscar
Nierstrasz và Dennis Tsichritzis ở Geneva vào tháng 7/ 1991. Họ đã có cái nhìn rõ
ràng về việc chúng ta/họ đi tới đâu từ "những Đối tượng" mà hứa hẹn trước đây chỉ
hoàn tất phần nào. M ột trong những cái nhìĩì của họ là sự tiếp cận "trên cơ sở thành
phần" cho sự kiến truc phần mểm. Xây dựng phần inềm tương ỉai cho ứng dụng mở
linh hoạt phải được thực hiên bởi sự hợp thành và cấu hình của các thành phần phần
inểm khớp tươim thích mà chúng khái quát hóa các đối tượng, các thành phần và các
hàm. Oscar và Laurent giải thích sự tiếp cận IIày trong chương đầu của tập sách này.
Bây giờ vào giữa thập niên 90’ các nhà nghiên cứu tiên phong đang đấu tranh
để vượt ra ngoài "những Đ ối tượng" trong sự tìm kiếm các cách tiếp cận phát triển
phầa mềm tốt hơn. Thành phần thông minh, những Ngôn ngữ phối hợp, sự tích hợp
của những ràns buộc và những Đối tượng, Phát triển Trên cơ sở Thành phần,..
Những đóng góp trong tập sách này để xuất những chìa khóa quí giá và những
gợi ý cho những người nào muốn vượt lên ưèn "những Đ ối tượng".
ưniversity o f Tokyo, January 1995
A kinori Yonezawa
Lời giới thiệu
Công nghê Hướng đối tượĩig đã cùng với chúng ta từ giữa những nâm 1960, nhưng
nó chỉ bắt đầu có một sự tác đông công nghiệp đáng kể từ giữa những năm 1980. Có
cả các lý do tốt lẫn xấu cho việc tiếp nhận cỏng nghè này, và thậm chí những câu
chuyện thành công cũng nói lên rằng thật không dẻ dàng gì để đưa kỹ thuật hướng
đối tượng vào nơi mà trước kia chưa hề đươc sử dụng. Một vài những lý do đáng ngờ
cần phải thảo thuận "việc đi theo hướng đối tương" là:
•
"Lập trình hướng đối tượng là một kiểu tốt hơn của lập trình có cấu trúc" Có lẽ,
nhưng những phương pháp lặp trình có cáu trúc sẽ không giúp bạn nhiểu trong
viêc phát triển các ứng dung hướng đối tượng. Lập trình hướng đối tượng không
phầbchỉ là lập trình có cấu trúc được khoác lẻn một cái mũ mới.
•
X h ú n g ta sẽ có khả năng xây dựiig những ứng dụng nhanh chóng hơn vì những
đối tượng là sử dụng lại được" - có thể có một chỗ trống lớn giữa phần mểm được
viết ừong một ngôn ngữ hướng đối tượng và một cơ cấu của những lớp đối tượng
có thể thật sự sử dụng lại được. Các cơ cấu khó phát triển, và luôn luôn không dể
dàng để sử dụng.
• "Sẽ là dể dàng hơn để bán các sản phẩm của chúns ta nếu như chúng ta có thể nói
với những khách hàng của ta rằng chúng là hướng đối tượng" - chi phí và sự mạo
hiểm của việc tiếp nhận công nghê hướng đôi tượng có thể là rát cao, và sẽ không
được tiếp nhận dễ dàng.
Hơn nữa, có lý do tốt cho việc tiếp nhận công nghệ hướng đối tượng: nó
dường như để xuất phương tiên tốt nhất để đối phó với sự phức tạp và sự biến đổi
trong các hê thống lớn. Khi nào những họ pủa các hệ (hống giống nhau cần phải xây
dưng, hoặc các hẻ thống đơn độc cần phải trải qua sự thay đổi thường xuyên theo
yẻu cầu, các ngôn ngữ hướng đối tượng, những cồng cụ và những phương pháp đề
xuất phương tiện để nhìn những hệ thốíìs như vậy như sự hợp thành linh hoạt của
những thành phần phần mềm. Điều đó có thể vảii còn yêu cầu nhiều kỹ nâng xây
dựng hệ th ố n g linh h o ạ t m à nó phù hợp với Iihiểu nhu c ầ u k h ác nhau, n h im s lối thiểu
cồng nghệ hướng đối tượng đơn giản hóa nhiệnì vụ.
Sự hợp thành phần mềm hướng đối tượng tiếp nhận quan điểm rằng công nghê
hướng đối tượng chủ yếu là kiến tạo những ứng dụng phần mềm linh hoại từ những
thành phần phần mềm. Mặc dù những còng cụ và những phương pháp ngôn ngữ
hướng đối tượiìg,đã trải qua một chặng đường dài kể từ khi ra đời lập trình hướng đối
tượng, công nghê vẫn chưa được hoàn thiện. Cuốn sách này giới thiệu một loạt kết
quả của những dự án nghiên cứu liên quan tới sự hợp thành phần mềm hướng dôi
tượng mà được thực hiên trong nhóm các hệ thống đối tượng tại Trường đại học
Geneva, hoặc bởi những cộng sư trong các dự ăn nghiên cứu phối hợp, kéo dài
khoảng mười năm.
Cho nên, quyển sách này là một sự nỗ lực để tổng hợp và sắp xếp những ý
tường mà đã được phát triển bởi một nhóm những người cùng sát cánh làm việc qua
vài năm.
Mặc dù nhiều chủ đề khác nhau được nghiên cứu, khi cùng trình bày chúiig,
chúng tôi dự định chỉ ra những ý tưởng và những nguyên lý liên quan chặt chẽ với sự
họp thành phần mềm, khi xem xét thiết kế ngôn ngữ lập trình, đạc tả hình thức ,
những công cụ và những môi trường, hoặc sự phái triển ứng dụng. Những sợi chỉ
đồng hành xuyên suốt quyển sách bao eồm tính tương thích như một cách hình thức
hóa những cách có hiệu lực của cấu thành những thành phán, những đối tượng động
như là nền tảng cơ bản cho sự phát triển của những hệ thống mở, những thủ tục như
một khía cạnh cần thiết của khớp tùv thích cho những đối tượng động, sự hợp thành
chức năng bậc cao hơn nhir sự bổ sung tới sự họp thành đối tượng, và sự tiến triển
của những đối tượng vh những khung đối tượng như mộl khía cạnh quan trọng đối
với sự bắt nhập trong chu kỳ sốne phần mểni.
Quyển sách này lôi cuốn những nhà nghiẽn cứu và những người đang hành
nghể quen thuộc với công nghệ hướng đối tượng, những ai quan tâm đến những
phương hướng nghiên cứu có quan hệ tói sự hợp thànli phán mềm. Mạc dù quyển
sách này chưa được thiết kế như một sách giáo khoa, nó thích hợp cho một xêiniiia
tiền tiến về sự nghiên cứu hướng đối tượng. Những chương riêng lẻ có thể được đọc
độc lập. Thứ tự giới thiệu đã được lựa chọn chủ yếu để minh họa một chuỗi những ý
tưởng toát ra từ thiết kế ngôn ngữ lập trình tới những môi trường và những ứng dụng.
K hổng chì "khung nhìn Genever" của sự phát triển hướng đối lượng được giới tliiệu,
nià đă có cỏ' gắng đáng kể tiên tới đặt cône việc trong ngữ cảnh, và một vài chươne
chứa đựng những sự kiểm soát rộne, lớn của công việc Uên quan.
Nhóm các Hệ thống Đối tương dược thành lập bởi Dennis Tsichritzis vào năm
1985, sau đó Ông ta niấl vài ĩiăm hướng dẫn nghiên cứu trong ĩĩnh vực những Hệ
thống Thông tin Văn phòng. Vào lúc đó, ngày càng rõ ràng (1) mô hình hướng đối
lượng quan trọng cho việc mô hình hóa những hệ íhống văn phòng, nhưng những rnô
hình kiểu này vẫiì chưa được phái triển, và (2) các nguyên mẫu của những công cụ
văn phòng tiền tiến sẽ dễ dàng phát triển hơn khi sử dụng những cổng cụ và kỹ thuật
hướng đối tượng, tuy vậy công nshệ vẫn chưa có sẩn. Hai quan sát này cho phép
chúng ta kết hiận rằng, từ khi tính hưởng đối tượng trở nên một nhân tố đặc biệt tới
hạn cho việc xây dựng các ứng dụng tiền tiến và phức tạp, chúng ta phải tập trung
phát triển công nghê này nhiều hơn là theo đuổi nghiên cứu trong những hệ thống
văn phòng với những công cụ khổng tương xứng và sự hỗ trợ mang tính phương
pháp luận.
Chương đầu tiên của quyển sách này tổng kết m ối liên hệ giữa những cách
tiếp cận hướng đối tượng và sự phát triển hướng thành phần, tổng quan Iihững vấ【
i để
nghiên cứu nguyên lý trong thiết kế các ngổn ngữ lập trình, các công cụ, các môi
trường và những phương pháp để hỗ trợ sự phát triển hợp thành. Sự phân biệt giữa
những đối tượng và những thành phần được tranh luận m ội cách chi tiết và ảnh
hưởng của sự phát triển tạo dựng vào những chu kỳ sống phần mềm cũng được giới
thiệu. Một chủ đề quan trọng xuyên suốt quyển sách này là khái niệm vể vai trò của
niột kỹ sư thành phần - như một người chịu trách nhiẹm xác định những khung thành
phần - cần phải được thể hiện tường minh trong chu kỳ sống phần mềm. Mặc dù
qu y ển s á c h này tập trung vào nội d u n e CÔIÌH nghệ, nó c ó sự liến bộ liên quan giữa
ngôn ngữ và các hệ thống lập trình với những công cụ, những khung và những
phương pháp.
H ai dự án nghiên cứu đầu của nhóm tập trung vào nội dung ngồn ngữ lập
trình. L a i tạo là một cố gắng trưóc đâv để tích hợp những lớp và thừa kế những đặc
tính "trực giao" khác, như chặt chẽ về kiểu, sự trùng nhau và tính liên tục. Knos là
những đối tưựiig động mà có thể di trú lừ máy tính tới máy tính bên trong mạng cục
bộ, và thay hành vi của nó một cách động theo những quy tắc được khởi động bởi
những điều kiện bên trong hoặc trạng thái của nhữns tấm bảng đen truyền tin. Knos
quan hệ chạt với cái mà bây giờ được biết như là "những tác nhân thồng m inh".
Cồng việc lai tạp cuối cùng đưa đến những khảo sát chi tiết hơn bởi Michael
Papathomas trong mối liên hộ giữa sự trùng nhau và sử dụng iại (chương 2), và bời
D im itri Konstantas trong việc hỗ trợ sự phản tán cho những hệ thống inở linh hoạt
(chương 3). Công việc ưén Knos dẫa tớ i cóng việc nền tảng của Eduardo Casais vào
trong những dạng quy củ hơn của sự tiến hóa những thư viện hướng đối tượng và tới
kỹ thuẠl m ới để tổ chức lai những hệ phàĩì cấp lớp (chương 8).
Pha khởi đầu của ihí nghiệm này cho phép chúng ta có được sự hiểu biết sâu
sắc cần thiết cả nội dung lý thuyết lẩn thực hành của những hệ thống đối tượng. Như
một hệ quả đầu tiên, mối quan tàm của nhóm về những khía cạnh hình thức của ngữ
nghĩa nsỏĩì ngữ lập trình và những đặc đi em của những hệ thống đối tượng trở thành
sâu sắc hơii, và dẫn dắt đến công việc thực thi bởi Michael Papathomas và Oscar
Nierstrasz về những khái niệm ,'khóp tương thích" cho những đối tượng động
(chương 4), của CostasArapis về việc mô hình hóa và lập luận vể những khía cạnh
thường tình của việc cộng lác các hệ thống đối tượng (chương 5), và của Laurent
Danii vể những mô hình mới của khả Iiãng hợp thành, tăng cường sự lạo kiểu con
cho Iihữns. đối tượng (chương 6).
Song song với những khảo sát Iv thuyết này, nhóm đà phát Iriển những mối
quan tâm inới về lĩnh vực những dựng cụ phần mềm và những niôi trường phát triểii.
Eugenc Fiume, (người đã đến viếng thăm từ Trưởng đại học Toronto,) và Laiircnt
Dami vào năm 1988 phái triển nguyên mẫu của "ngôn ngữ thảo chương tạm thời"
cho nhữns đối tượng sống động. Đây là đột phá đấu ĩiêĩì của nhóm vào việc áp dụng
công nghệ hướng đối tượng cho lĩnh vực của những ứiig dụng đa phương tiện. Khái
niệm "nguyên bản " như một đặc tả mức cao của sự phối hợp trong một tập những
đối tượĩiH được đóng gói sẵn trở thành một đề tài theii chốt trong nhóm vào ihời gian
đó, tuy ý tưởng về việc có thể được chuyên từ phạm vi của lính linh hoạt tơi Iihững
đối tượng phần mềm nói chung như thế nào.
Vào khoảng thời gian này, chúng tỏi bi lôi cuốn vào trong IT H A C A , một Dự
án tích hợp Công nghê lớn chương trình ESPRIT của Cộng đồng châu Au. Đối tác
đầu tiên là N ix d o rí của hê thống thông tin Berlin (về sau Siemens-NixdorO, và các
cộng tác viên bao gồm Bull (Paris), Datamont (M ilan), T A O - Tècnics en
Autom atitzaciò d'oficines (Barcelona) và FORTH - Quỹ Nghiên cứu và Công nghệ,
Hellas (H eraklion). Mục đích của dự án là sản xuất một môi trường phát triển ứng
dụng đầy đủ, trên nền tảng cồng nghệ hướng đối tượng, bao gồm inột ngôn ngữ lập
Những iời cảm ơn
Có nhiều người tham gia trong nhữiis dự án được thôiig báo ò đây hơn là các tác giả
có thể kể hết. Marc Stadelmaiin và Jan V iie k thực hiện mẫu thử VST đầu liên. Betty
Junod vàSerge Renfer đã góp phần vào IT H A C A và những dự án khác. Gdrald
Bumand, Philippe Comu, Jean-Henry M orin, Prdddric Bình, Vassilis Prevelakis và
D idier Vallet đã đóng góp rất nhiều cho nhóm làm việc. Nhóm cũng thu được nhiều
từ sự íhain gia của những khách mời đà có mặt khắp nơi từ vài tháng tới vài năm.
Jeaiì Chuông, Tín đổ Cơ đốc Breiteneder, Eugene Fiume, Rosario Girardi, Nhà vệ
sinh Hogg,Nigel Horspool, Gerti Kappel, Barbara Pemici, Claudio Trotta’ Peter
W egĩier và Claudia W emer giúp đỡ nhiều tới những ý tưởng của chúng tồi.
Đóng góp của một số người là vô giá trone việc chuẩn bị quvển sách năv.
Chúng tôi đặc biệt cám ơn Jiri Dvorak, Karl Guggisberg, Thilo Eielmann, Markus
Luiĩipe, Theo D irk M e ijler, Jean-Guy Schiieider, Palrick Varone và Jan V itek vì
những sự hiệu đính kỷ lưỡng vài chương của quyển sách này. Chúng tôi đồns ihời
cám ơn những tác giả, và đậc biệi Eduardo Casais, Laurent Dami' Simon Gibbs'
D im itri Konstantas và V icki de Mev vì Iihữns:đóng góp của họ tới những chương
mà họ khổng phải là đồng tác giả. Cuối cùng, chúng tôi cám ơn Isabelle H iiber và
Angela Margiotta vè giilp đỡ của họ trong việc chuẩn bị bản thảo cuối cùng.
Chung tôi đặc biệt biết ơn sự hỗ trợ về tài chính của Qùy Quốc gia Thụy sĩ
cho Sự nghiên cứu Khoa học (FNRS) đã tài trợ một loạt dự án trong nhiều năm.
Chúng tôi cám ƯII ủy ban Thúc đẩv Nghiên cứu Khoa học (CERS) vì iihữnR đóng
Q,óp vào sự tham gia của chúng tỏi trong dự áĩì IT H A C A . Chúng tôi cấm ơn Trường
đại học Geneva vì sự cung cấp cơ sơ hạ tđng và sự hổ trợ cho viộc thực hiện lìhữiis;
nghiên cứu này. Chíing tôi đổng thời cám ơn phương tiên nghiên cứu của Nsân hàns
Liên bang Ubilab của Thuv sỹ vì sự hỗ trợ vể tài chính hào phỏng của muih. Cuối
cùng chung tôi muốn cám ơn nhữìiR đối tác cồng nghiệp và hàn lâm khác nhau về
những sự khuyến khích không ngừns trong thời gian qua.
Geneva
May, J995
Oscar Nierstrasz
Deniiis Tsichritzis
Chương 1
Công nghệ Phần mềm Hướng Thành phần
Oscar Nierstrasz và Laurent Dami
'ĩổ n g quan. Nhửns hộ thống phần mềm hiện đại ngày càng tâng đòi hỏi để trở
thành hê thống mở và phân tán. Nhữns hệ thống mở như vậy không chỉ ờ giới hạn
ơ trong các kết nối mạng và hổ trợ tính tương tác đối trên nền phần cứng và phần
mém không đổne nhất, mà còn trên hết là việc phát triển và thay đổi yêu cầu.
Mặc dù công nghệ hướng đối tượng siới hạn một phần phạm vi rộng cho các
neôii ngữ, nhưns các phương thức và công cụ chưa tập trung vào những yêu cầu
cua hệ thống mỏ. bời V'1 chúng ta khốns thoát khỏi mô hình phát triển phần mềm
iruvển ihống và cho rằng yêu cầu hệ thống khép kín và ổn định. Chúng tôi muốn
chứng minh rằng những yêu cầu hệ thống mờ có thể chỉ được nói đến một cách
đá\ đủ bởi việc chấp nhận cách liếp cận ,'hướng thành phần" đối ngược hoàn toàn
vói phái triển phán mềm hướng đối tượng, bằng cách hướng trọng tâm của việc
láp trình vào sáns tao phần mềm chuyên biệt.
J .1 Lòi giói thiệu
Đă có một xu hướĩìs tiếp tục phát triển ứng dụng phán mềm thoát khỏi những hệ
ĩhóiìg khép kín' liến tới cái được gọi là những hệ thống mờ. Khuynh hướng này
dược áp dụng ĨỘI12 rải cho những cải tiến của công nghệ phần cứng máy tính làm
lãns tliêm khả năng tính toán cho những ứng dụng người dùng cuối cùng. Khả
năng hình thành nhu cầu mới: để tồn tại, những nhà kinh doanh có tính cạnh
iraiih cần phải có khả nàng khai thác công nghệ mới một cách hiệu quả khi nó có
2Ìấ trị, IIhư vậy ứns dụng hiện nay cần phải có khả nãng làm việc theo cách m ới,
pháĩ triển độc lập vói các hệ thống. Lúc đó, chúng ta có thể nhận thấy những hệ
thống mở đó cán phải " mở " theo ít nhất ba cách quan trọng [49]:
1. Tôpô: ứng dụng mỏf chạy trên những mạiig định hình được.
2. Nềii: nền phần cứng và phần mềm là khôiìg đồng nhất.
3. Sự tiến hóa: yêu cầu không ổn định và thường xuyên thay đổi.
Việc phất triển phần mềm hướng đối tượng đáp ứng một phần các yêu cầu
ỉKÌy qua việc khỏng thể hiện dữ liệu và các chi liếl ihanh phần trên các giao diện
hướng đối tượng, như vậy cho phép nhiều thành phần của đối tượng cùng tổn tại
trong khi vẫn bảo vẽ những khách hàng khối những sự thay đổi về thành phần
hoặc thể hiên. Tuy nhiên, sự tiến hóa chỉ được quan tâm một phần, vì những thay
đổi trong các yêu cầu có thể kéo theo những thay đổi theo cách mà đối tượng
được xây dựng cấu trúc và được định hình. Trên thực tế, để chú trọng đến tiến
hóa, cắn phải coi mỗi ứng dụng chỉ là thể hiện một lớp có đặc tính chung của các
ứns dụng, mỗi một gia tăng của những thành phần phần mềm có cấu hình thay
đổi được.
Khái niệm thành phần tổng quát hơn là khái niệm đối tượng và trong trường
hợp đặc biệt có thể tốt hơn hoặc thô hơn. M ột đối tượng đóng gói dữ liệu và hành
VI của đối tượng có liên quan đến dữ liệu, còn thành phần đóng ẹm trừu tương
hóa phần mẻm có ích bất kỳ. Không phải tất các trừu tượng có ícH lihát thiết phải
là đối tượng, chúng ta có thể đánh mất những cơ hội sử dụng lại phần mém linh
hoạt vì quan tâm quá nhiều đến đối tượng. Xem những ứng dụng mờ giống như
những sáng tao cùa các thành phần có thể sử dụng lại và định hình đươc, chúng
tôi hy vong có thể đối phó với yèu cầu tiến hóa băng cách chỉ tháo rời và định
hình lại những phần bị ảnh hưòmg.
1.1.ỉ Thành phần là gì?
Nếu chúng tôi chấp nhận rằng những hệ thống mở cần được xây dựng sẩn một
phương thức hướng thành phần, chúng tôi vẫn cần phải trả lờ i câu hỏi sau: Những
thành phần đích thực là gì, và chúng khác đối tượng như thế nào? Những cơ chế,
ngôn ngữ lập trình và môi trường nào hỗ trợ sự phát triển hướng thành phần?
Những thành phần xuất phát từ đâu trong vòng đời của sự phát triển phần mềm,
tiến trình và phương thức phần mềm chứa đựng chúng như thế nào?
Để thử ưả lời những càu hỏi này, chúng tôi cần phải phân biệt rõ các khía
cạnh phương pháp luận và kỹ thuật, ờ mức phường pháp luận, chúng ta muốn chỉ
ra rằng một thành phần là một thành phần vì đã được thiết kế để hợp thành với
những thành phần khác. Điếu này có nghĩa một thành phần không được thiết kế
bình thường theo cách cô lập, mà là một phần của một khung những thành phần
hợp thành. M ột khung có thể được hiểu như một hệ phân cấp lớp trừu tượng trong
môt ngôn ngữ hướng đối tượng [23]' nhưng tổng quát hơn, những thành phán
không cần là lớp, và những khung không cần là những hệ phàn cấp lớp trừu
tượng. M ixin, hàm, macro, thủ tục, những bảng mẫu và những mô đun tất cả có
thể là ví dụ hợp lệ của thành phầii [3], và những khung thành phần có thể liêu
chuẩn hóa những giao diện và mã chùng loại cho các loại khác nhau của sự trừu
tượng hóa phần mềm. Vả lại, những thành phần trong một khung cũng có thế !à
thực thể khác với phần mểm đích thực, tức là những mò tả, tài liệu, dữ liệu thử,
những ứng dụng thử,.... Tuy nhiên, những thành phần này, sẽ khône được khảo
sát chi tiết trong bài báo này; phần lớii chúng tôi sẽ tập trung vào một vài khía
cạnh kỹ thuật liồn quan tới những thành phần phần mềm.
ở mức công nghệ phần mềm, V tưởng phát triển hướng thành phần là một ý
tường rất cũ, điểu này thể hiện trong những tiến hóa đầu tiên của lập trình có cấu
trúc và tính mồđun [32]. Tuy nhiên, người ta tiếp thu được ý tưởng mới qua cơ
cấLi biêii soạn của những ngôn ngữ lập trình hướng đối tượng, phát triển phần
rnềin hướrie thành nhẩn không dễ dàng thưc hiện vì cả hai Iv do công nghệ và
phương pháp luận.
Static assembty of
components
Dynamic assembty of
cooperating and
communicating ''entities"
(ob)ects. agenls,...)
( g
) ~
o
-------
H ình 1.1 Cái nhìn tĩnh và động của m ột ứng dụng
Đối với một ngôn ngữ lập trình để hỗ trợ phát triển hướng thành phần, cán phải
kết hơp một cách chặt chẽ cà hai khía canh tính toán và biên soan phát triển phán
mém. M ôt ứng dụng có thể đồng thời đươc xem xét như một thực thể tính toán
đưa ra những kết quả, và như kiến trúc nhữne thành phần phần mẻm thích hop đé
đat đươc những kết quả đó (Hình 1.1). M ỗi mỏt thành phần không thực hiện sự
tính toán bất kỳ, nhưng có thể được kết hợp với những phần khác sao cho hơp
thành của chúng thực hiện những tính toán có ích, phần lớn theo cách là mỗi phần
của máy không cẩn thiết thực hiện chức năng riêng nào, nhưng hợp thành chúng
sẽ thực hiện. Tuy nhiên, việc tích hợp của hai khía cạnh này không đơn giàn, vì
những mục tiẻu của chúng có thể xung đột. Lấy ví dụ cụ thể, những cơ chế tranh
chấp tính toán có thẻ xung đột với sự thừa kế, đó là một đặc tính hợp thành, bời vì
những chi tiết bổ sung thường cần phải được đật ngoài các lớp con kế thừa [26]
[31] (xem chương 2 để biết chi tiết về khảo sát các nội dung). Phức tap hơn nữa
là sư khác biệt giữa "thời gian bièn soạn' và "thời gian chạy" khổng luôn rõ như
trong bức tranh ở ưèn: với kỹ thuật như tải đông, tra cứu hoậc khòi phục thòne
điệp động, những ứng dụng cũng có thể hièn soan một phần hoặc biên soạn lại tại
thời gian chay.
^ Để đat
■ đươc
• một
• sư• tích hơp
•£ tốt các đãc tính tính toán và bièn
soạn, cần một nền tảng ngữ nghĩa chung nhờ nó người ta có thể suy luận vẻ các
loại đăc tính và tác động qua lại giữa chúng. Kết quả là, chúng tôi sẽ chấp nhàn
một định nghĩa của thành phần phần mềm mỏt cách đủ trừu tượng trẻn những
dang thức khác nhau này.
Nói tóm lại, chúng tỏi cho rằng một ihành phần là "trừu tưcmg hóa tĩnh kèm
theo các khớp". Qua từ "tĩnh", chúng tôi muôn nói răng một thành phần phần
mém là môt thưc thể sống lâu có thể đươc cất giữ trong một cơ sò phần mềm, độc
làp với những ứng dụng tại đó nó đã được sử dụng. Theo " trừu tượng hóa ",
chúng tôi cho răng một thành phần đặt ranh giới rõ hơn hay mờ hơn qua phán
mểm nó đóng gói.
H ình 1.2 Thảnh phần phần mềm và những khớp cua nó.
"V ớ i các khớp" có nahĩa là có cách định nghĩa tốt để tương tác và truyén tin \ ới
thảnh phàn (tham số, những cổng, những thông điệp, vàn vàn...). Như thế’ nhìn lừ
bèn ngoài, một thành phần có thể trên hình 1.2: là một thực thể đơn, có thế được
bao xung quanh và sao chép, trong trường hợp riêng có thể được khởi tạo trong
một ngữ cảnh đặc biệt, nơi các khớp (những hlnh chữ nhặt màu đen nhỏ) sẽ là
ranh giới với các giá trị hoặc với những thành phần khác.
Trong thực tế, sự trình bày trực quan như vậy của những thành phần có thể
rất lièn lợi cho hỗ trợ hợp thành tương tác những ứng dụng từ những khung thành
phần ( xem chương 10). Lúc đó, bièn soạn phần mểm là quá trình xàv dựng ứii^
dụng từ những thành phần phần mềm ràng buộc nhau qua các khớp của chúng).
Bản chất của các khớp, những cơ chế liẻn kết và tính tương thích quyết định các
thành phần liên kết có thể thay đổi khá ít’ như chúng ta biết, khái niệm cơ bàn
tâm đến những nhu cầu của tất ca thư viện thành phần, kết quả thực sự đó là việc
đóng gói phải thường được thẩm tra để đạt được mức độ mong muốn của phần
mềm sử dụng lại được.
M ộ t ngôn ngữ lập trình hoàn toàn hợp lý để phát triển hệ thống mở không chỉ
cung cấp những đối tượng và sự thừa kế, mà còn cần phân rã kiểu, tương tranh
mạnh. Các kiểu cần hình thức hóa, bảo trì đối tượng và giao diên thành phần, các
đặc tính tương tranh cần phải có sự tương tác giữa các hê thống con tương tranh,
phân tán.
Tính song song mịn đồng thời được quan tâm, nhưng không phải là mối quan tàm
hơn hết. Mặc dù các kiểu và tính tương tranh được giả thiết trực giao với các đối
tượng và sự thừa kế, việc tích hợp chúng không phải là vấn đề đơn giản.
Nguồn gốc của khó khăn đối với các kiểu là ở chỗ những đối tượng không
đơn giản là giá trị đơn lấy riêng lẻ, giống như những số nguyên, chuỗi, hàm bậc
cao, hoặc thậm chí những cấu trúc phức hợp như kiểu dữ liệu trừu tượng. Các đối
tượng chủ yếu thuộc vào một nơữ cảnh toàn cục, và có thể chứa đựng các tham
khảo tới những đối tượng khác cùng ngữ cảnh, v ả lại, vì chúng là những thực thể
động, chúng có thể thay đổi hành vi hoặc trạng thái, và do đó ý nghĩa của những
tham khảo thay đổi theo thời gian. Từ đây, việc rút thông tin kiểu tĩnh từ những
hệ thống động như vậy khó hơn nhiều. Việc làm mô hình thừa kế cũng mơ hồ, vì
hai vai trò khác được thể hiện bời những lớp. Nhiều khó khăn trong những nỗ lực
trước đây để xác định sự thừa kế và tạo kiểu con. Ngược lại, điều trên cho thấy
việc tạo kiểu con và sự thừa kế được công nhận tốt nhất như những khái niệm độc
lập [ I ] [7]. Thậm chí có thể tiện lợi cho cả khái niệm tách biệt vể kiểu giao diện
thừa kế [28].
K h i tính tương tranh cũng được mang vào trong bức tranh, chính những xung
đột đó đã được để ý ở một mức độ cao:
1. Những đặc tính tương tranh có thể xung đột với đóng gói đối tượng nên
khách hàng cần phải ý thức được việc sử dụng những đậc tính nàv của đối
tượng[45] ( xem chương 2).
2. Đóng gói lớp có thể bị xâm phạm nếu những lớp con cần phải cảm nhộn
những chi tiết thành phần [26] [31].
3. Những hệ thống kiểu nói chung quên nhấn mạnh khía cạnh hành vi tương
tranh của những đối tượng mà có thể quan tám tới những khách hàng (như
yêu cầu tuân theo một thủ tục nhất định trong phát sinh những yêu cầu - xem
chương 4).
Nguồn gốc của những khó khăn kỹ thuật này, chúng tôi cho là do sự thiếu một
quan điểm hướng thành phần đầy đủ của những đối tượng. Những thành phần cần
được đoán nhận như những thực thể theo quyền hạn của chúng không phụ thuộc
vào đối tượng. M ột lớp là một bảng mẫu để khởi tạo đối tượng như một loại của
thành phần với một kiểu đặc biệt của giao diện. M ộ t đối tượng là một loại khác
của thành phần với một giao diên đáp ứng yêu cầu khách hàng. M ột lớp là cha
của những lớp phụ vẫn là một loại khác của thành phẩn với một loại giao diện
khác. M ỗ i thành phần có giao diện riêng cho mục đích rất khác nhau. Nó có thể
cung cấp cú pháp bổ trợ để tránh phát sinh những tên cho tất cả vai trò khác nhau,
nhưng những vai trò cần phải được nhận ra k h i ngữ nghĩa biên soạn được công
nhận.
Bài học khác cho biết rằng mỗi phần tử không đơn giản là "phụ kiện để mờ rộng"
cho những phần tử khác. Một nền tảng ngữ nghĩa thích hợp được yêu cầu để
liohièii cứu íihững vấn để lích hợp. Nếu sư thay đổi va tương tranh là íihữns vèu
cửu mo hìiih hóa, thì mội ngữ nghĩa chức íiáng hoàn toàn khòng thích hợp. Nó
như mòl inó hình tính toán đê mô hình hóa cả đối tượng lẫn thành phần và cán
phái hơp nhát cá hai tác nhàn từ những đôi tượng, như thực thè tính todn, và có
thé đươc xem như loại đăc biệt cùa những tác nhàn truyén tin. Trong khi những
thành phán giống như thưc thể cấu tạo thành phần, có thẻ được xem như những
khái niệm trừu tương, hoảc chức riảng trèn không gian đối tượng. Ngoài ra, vì
những thành pháii có thế là các giá in của lớp đầu tiẻn, đãc biệt trong những mòi
trường lạp trình, nơi mà thành phần mới có thế tạo ra một cách linh hoat’ điểu CÒI
yếu là những cái nhìn vể tác nhàn và chức năng đươc tích hcrp đáy đủ. Từ quan
điếm hè thòrm kiểu, ca đối tượng lản những thành phân đươc định nghĩa như
những thực thẽ, mặc dù chúng có thè có các loại kiểu khác nhau.
1.3 Kỹ thuật hỗ trợ cho những Thành phần
Sư phát triển phần mềm hướng thành phần khổng chỉ yèu cầu một sự thay đói
của tập hợp và phương pháp luận mà nó đồng thời yêu cầu sự hổ trợ của công
nghệ mới.
Trong phần này, chúng tôi muốn xem xét những nôi dung:
. Các dạng thức và những cơ chế để liên kết các thành phần với nhau ỉà cái gì?
. Cấu trúc của một thành phần phần mểm là cái gì?
. Trong giai đoạn nào những quyết định hợp thành xảy ra, tức là' chúng ta có thể
mô tả quá trình hợp thành như thế nào?
. Chúng ta xày dựng mô hình hình thức các thành phần và sự hợp thành như thế
nào, và chúng ta có thể kiểm tra những đoạn ấy đã xảy dựng chính xác như ra
sao?
. M ớ rộng một mô hình tính toán tương tranh có ảnh hưởng gì đến sáng tạo phần
mểm?
Những câu hỏi này rõ ràng có liên hệ mật thiết; ngoài ra, chúng phụ thuộc nặng
ỉié vào dạng thức hợp thành được sử dụng, v ể ý tưởng, chúng ta đã lập luận rằng,
mỏt mỏi trường đầy đủ cho sáng tạo phần mềm cung cấp bằng cách này hay bằng
cách khác một tổ hợp của những đối tượng, những hàm và những tác nhàn.
Như Vày, những dạng thức này quả đă có tiến hóa độc lập. Đê kết hợp chúng vào
trong mòt mòi trường chung cần phải tích hợp chúng một cách thuán khiết.
Tiẽp theo, chúng tồi khảo sát những đóng góp đạc biệt của mỏi dạng thức với
sáĩig tao phần mểm, chúng tôi thảo luàn vièc chúng có thể tích hơp như thế nào
và chun« tòi tổng những ván để rìÊ^hièii cứu mở.
L ỈA N hữnẹ dạng thức cho việc lắp ráp các thành phần
Chãc chản, cơ chế horp thành cãn bản nhất đế bàn đến là hợp thành chức nãng.
Trong dang thức này một thực thể trưóc hết được đóng gói và đươc tham sò hóa
giống như môt sự trừu rương hóa chức năng, và '*được hoat hóa,, (khơi tao) hỡi
vièc nhàn những đối số đươc gán với những tham sò cua nó. Rõ ràns: cơ chế hơp
thàiih luiỵ XIKÚ hièn Irong hâu lìét mòi trường lập trinh, và khàng cỏ chi haii che
những Iigòn ngữ lủp irình hàm. Tuv nhiồn, Iihiéu lìíỊòii ngữ khỏnsĩ cho phép
những ĩhưc ihc [)hán mém luy V dươc xem như những gia trị, và bơi vậy khòng
CUÍIÍỊ cáp sư hơp thành chức nảng ờ dạng chung nhát. Chảng han, nhữĩiíí mò đun
đươc tham sô' hóa, ma về sau có thể đươc gán cho các mỏ dun khác vần còn íhiéii
trong nhiéu ngốn ncữ lập trình. Khía canh khác của phạm VI Iiày, những ngón ngữ
hãm sir d iiiìị :hợp thàiih chức nãiií:tai mỏi mức và bởi vộv cho biêt: khía canh bá ỉ
ky cua mòi doaii phan m èm c ó ihc đươc tham s ố hoa vii sau clo dươc gan VOI
thanh phan khấc, do đo cuim cấp lính liỉih hoai cao cho viẹc xác (linh giới han cua
nhữnc thành phân. Va lại, lập trình hàm hồ trợ cho sự hợp thành bậc cao, tưc la
ban thãn các thành phần là dữ liệu, Két quà là, sư hợp thành qiiyél dịiih chính
chúnc có thè được đóng gói như những thành phán, và bởi vậy mối vài bộ phan
của quá trình hợp thành có thể được lự động hóa. Cuối cùng, sự hợp thành chưc
nàng có ưu điểm là dẻ dàng thẩm tra lại’ vì hàm c ó thể đươc xem xét theo Iiehla
rộng gióng như những hộp đen: vói một vài giả thiết về các tham só cua mól hàm.
có thể suy diẻn mổt vài đặc tính của kết quả, từ đó có thế biết kéi qua kia co ihc
được chuvéii an toàn cho hàm khác khống. Các ngón ngữ lập ưình hàm hiện thòi
đã phát ĩriến những hệ thống kiểu phức tạp để kiểm ưa tính chính xác của phán
mẻm đươc biên soan [ 3 7 ] 【21]- Sự hợp thành chức nàng là một cơ chế hợp thành
địa phương, theo nghĩa nó chỉ kéo theo một sự trừu tượng hóa và những giá trị bi
tuyển như những tham số. Ngược lại, những mỏi trường tác nhân chú vếu sử dụiie
một cơ chế hợp thành toàn cục, thường được gọi bảng đen. Bảng đen là khóne
gian dùng chung, mà mổi thành phần đều nhận biết, tại đó thống tin có thể đươc
đem vào và lấy ra tại những vị trí xác định.
Đ ối với những hê thống các tác nhân truyền tin qua các kênh, bảng đen là
không gian loàn cục của các tên kênh. Thậm chí khống có các tác nhân, bộ nhó
toàn cục trong lập trình dòng lệnh ưuyền thống cũng tạo ra một loại bảng đen. Su
hợp thành bảng đen hỗ trợ những lắp ráp n-lần của các thành phần (trong khi
những cơ chế sự hợp thành cục bộ là hai); vả lại, tự do ưuy nhập tới vùng dùng
chung ràng buộc ít hơn vào giao diện các thành phần. Tuy nhiên, mặt khác của
vấn đề là những hệ thống hợp thành bảng đen kia khó khăn hơn nhiều để kiểm tra
tính chính xác do sự tương tác giữa những thành phần đã không được địa phương
hóa một cách chính xác. Giống như phần bù cho vấn đề, những hệ thống hợp
thành bảng đen thường hợp nhất những cơ chế đóng gói cho việc thiết đật nhữiig
ranh giới trong khỏng gian toàn cục, mà trong đó sự can thiệp được hạn ché cho
tập con hiển nhiên của những thành phần. Nhờ phương tiện này, ít nhất một vài
đậc lính địa phương một hệ thống bảng đen có thể được xác minh tĩnh. Chẳng
hạn, f?chữ ký hiệu pi?)-calculus [35] có một toán tử để hạn chế độ nhìn rõ cua
tên; trong thế giới của các đối tượng, các hòn đảo [19] đã được để xuất như mộĩ
phương tiên để bảo vệ tên địa phương và tránh các vấn đề truyền thống chắc chắn
với việc đật bí danh.
Cuối cùng, hệ thống hướng đối tương đã giới thiệu một dạng thức mới cho
biên soạn phần mém với tính khái niệm có thể mở rộng - khả nàng bò SUI12 chức
lìãng cho một thành phán trong khi phần còn lại "tương thích" với các còng duiiị :
trước của nó. Tính có thể mơ rộng,tiêu biểu thu được trong những Iigóii ncữ
hướng đối tượng qua sự thừa kế hoậc uy nhiệm, là m ói nhàn tỏ quan trong cho sư
tiến hóa trôi chảv cua những cấu hình phần mém. Tuy nhién, hiếu chính xác lính
tương thích có nghĩa là gì đó là cáu hỏi tế nhị. Chẳng hạn, lính tương thích giữa
các lớp thường được xác định trén cơ sờ của tập hợp những phương thức mà
chúng cung cấp, có thế cùng với những biểu hiộn của chúng; trong ngữ cảnh của
các đói tượng tích cực, quan điểm Iiày khống quan lâm đến những chuỗi yêu cáu
nào của phương thức được chấp nhàn bời môt đối tượng. Chương 4 nghiên cứi)
cách nắm bắt khía cạnh này qua cái 2ỌÌ là kiéu bình thirờng. Neoài ra, tính tươne
ihích có thể có ý nghĩa không chỉ cho những lơp, mà còn cho nhiều những thực
thể phầii mềm tổng quát; đặc biệt, trong những hê thống hướng đối tượng trên
nềĩi các nguyên mẫu và những ủy nhiệm cắn phải hiểu tính tương thích trực tiếp
tại mức của những đối tượng. Chương 6 khảo sát mộ! phép tính chức năng trong
đó tính tương thích được định nghĩa ờ một mức cơ sở, trực tiếp trên những hàm.
Hình 1.3 là một nỗ lực trình bày trực quan những dạng thức khác nhau. Biên soạn
chức năng được mố tả qua hình ảnh thông thường của các chúc năng như các hộp,
với những tham số đại diện cho các cổng đầu vào và các kết quả tính toán đại
diện cho các cổng đầu ra. Những liên kết giữa các thành phần được thiết lập trực
tiếp và đại diện cho các ràng buộc của những giá trị đối với các tham số hình
thức. Dạng thức bảng đen có một sơ đồ đăiih địa chỉ mà tạo nên không gian toàn
cục; nó đôi khi cũng sử dụng các liên kết trực tiếp, nhưng thêm vào đó, các thành
phần được đặt tại những vị trí xác định, và chúng nó có thể thiết lập những liên
kết với các thành phần khác qua các định vị của chúng, ở đây các định vị được
niồ tả như những tọa độ trong m ột không gian hai chiểu vì mục đích minh họa
trực quan. Trong thực tiễn, thường xuyêii nhất không gian chung sẽ được xây
đựng bòi những fên hoặc bởi những địa chỉ bộ nhớ tuyến tính. Cuốĩ cùng, khả
năng mở rộns được mỏ tả bởi các cổiis bổ sung và những liên kết được bổ sung
cho một thành phẩn hiện hữu, mà khốns ảnh hường đến những đặc tính đã có.
Hình 1.3 N h ữ n g dạng thức khác nhau.
Quan sát ở mức không hình thức này, khá rõ ràng rằng sự chung sống nào đó của
những dạng thức có thể hiểu được, nhưng nó đồng thời nhiều chi tiết cần phải
nghiên cứu cẩn thận. Những mục con tiếp theo thảo luận các khái niệm của
những thành phần (các hộp), những cơ chế (các mũi tên), và những cấu hình phần
mểm (những lắp ráp).
1.3 J Thành phần n h ư khái niệm trừu tượng tình
Trong lời giới thiệu, chúng ta mô tả các thảnh phần bằng thuật ngữ của cách sừ
dune của chúng: môt đoan phần mềm là môt thành phần nếu như nó được thiết kế
đế sư dung lại và là bộ phận cùa một khung. Điều này không kể nhiều vè nhữns
khía canh cấu trúc cùa một thành phán. Môt vai bất bi}n toàn cục có vẻ hợp lệ
bẻn trong dane thức soạn thảo bất kỳ; những thành phần tièu biểu là những thưc
thè tĩnh; neoài ra,chúng luôn luôn bao 2 Óm một vài loại khái niệm trừu tượng. Cả
hai khái niêm, tuv nhiên, xứng đáng được khảo sát cẩn thận hơn.
Có nhiều loại khác nhau của những thưc thể phần mềm tĩnh: các thủ tục, các
hàm, các mò đun, các lớp và vàn vàn... Trong mỗi trường hợp, chúng có một sự
tồn tại bển vững độc lập với ngữ cảnh xung quanh chúng, cho phép chúng được
thao tác và cất giữ riẽng. M ột khi ráp vào trong một chương trìíih, những thực thể
tĩnh này điều khiển sự tạo thành và sự tiến hóa của những thực thể động, mà trong
những ngôn ngữ hiện hữu thường không là những thành phần (những kích hoạt
thủ tục, những đối tượng, những cấu trúc dữ liêu động). Tuy nhiên vài ví dụ có
thể được tìm thấy, của những thực thể động mà có thê đang quan tâm như những
đoạn phần mềm có thể dùng lại, nhưng không thể trực tiếp tham gia vào một soạn
thảo vì những giới hạn của môi trường phần mềm. Chẳng hạn trong hầu hết
những ngôn ngữ hướng đối tượng các lớp là tĩnh' nhưng những đối tượng (những
thể hiện) thì không.
Trong những ngôn ngữ như vậy những chiến lược khác nhau tiêu biểu đươc
sử dung bởi những người lập trình để có những đối tượng như những thực thể có
thể biên soạn, như xác định một lớp đóng bao một đối tượng (sự thể hiện) đơn
độc. Chiến lược khác, được sử dụng nhiểu trong môi trường Next Step [39], phải
xác định những thủ luc lưu trữ phức hợp sao cho các nhóm cùa những đối tươiis
có thể được cất giữ vào trong các lập tin (gọi là những tập tin ,'【
ùb"); khi đó
những tập tin tương ứng có thể được cáu thành và cấu hình phát sinh trong khi
chav thường tái tạo lại tập hợp những đối tượng được xác định trong những nhóm
rièng rẽ. Trong những trường hợp giống như òf đày, khi cấu trúc những đối tượng
cấu thành một giao diện người dùng đươc biết là tĩnh và không được tạo ra khi
thực hiện, khả năng để trực tiếp cất giữ những đối tượng sẻ tiện lợi hơn nhiểu so
với việc lập trình hoặc những tập tin mò tả tái tạo động cấu hình của các đối
tượng.
Hạn chế khác cho việc biên soạn xuất hiên trong tĩnh huống hoàn toàn đào
ngược: nói rằng những thành phán là những thực thể tĩnh không có nghĩa rằng
chúng phải luôn luôn được tập hợp tĩnh. Những hệ thống mờ có một nhu cầu ngày
càn2 tăng để thao tác động và trao đối những thành phần, và liên kết động chúng
với một ứng dụng đang thực hiện. Các ngổn ngữ mới đâv cho những tác nhàn
phân tán như Telescript [56] hoặc O bliq [5] là những ví dụ tốt của phương hướng
mới nàv. Sự lắp ráp động có nghĩa rằng phần mềm có thể được định hình ở giai
đoạn muộn nhất, theo những nhu cầu của người dùng, hoặc vài ứng dụng đang
thực hiện có thể hợp tác động để trao đổi thông tin.
Khái niệm một thành phần cũng quan hệ mật thiết tới khái niêm trừu tượng,
một thực thể kín, với một vài loại ranh giới xung quanh nó, mà về sau có thể được
cấu thành bởi những thực thể khác. M ột thủ tục là một sự trừu tượng cho một dăy
các càu lênh; một lớp là một sự trừu tượng đối với một tập hợp những đối tượng;
một mô đun là một tập hợp của những khái niệm trừu tượng được đặt tên. Việc
nhữns khái Iiiệm trừu tượng có nhữne ranh siới quyẽì định cho sự hơp thành phần
mềm, từ khi nó cung cấp một phương tiện cho việc cấu trúc phần mềm, kiểm soát
sự tương tác giữa những thành phần, và xác minh sự lắp ráp riêng. Đáng tiếc, hầu
hết những mói trường phần mềm áp đặt một vài sự hạn chế lên việc sử dụng
những khái niệm trừu tượng: những ranh giới không thể kéo dài một cách tùy
tiện, theo nhu cầu của người dùng, mà cần phải tuân theo những khuôn mẫu đặc
trưng. Chẳng hạn, hầu hết trong những hệ thống hướng đối tượng, những ranh
giới không thể đan chéo những đường dẫn thừa kế, tức là, m ột lớp khỏng thể được
định nghĩa không có sự tham khảo hiển tới siêu lớp của nó. Chỉ CLOS [27] cung
cấp một khái niệm thừa kế thông qua mixins trong đó siêu lớp không cần được
biết và có thể được giới hạn muộn hơn. Tính linh hoạt đầy đủ để phác họa những
ranh giới khái niệm trừu tượng yêu cầu lất cả các thành phần phần mềm phải
được xem xét như những giá trị của lớp thứ nhất mà có thể được Luyền như
những tham số tới những thành phần khác. Như đã tranh luận ở trên, những ngồn
ngữ tiên tiến nhất theo chiều hướng đó là nhữne ngôn ngữ hàm, ở đó "mọi thứ là
một hàm", và các hàm là dữ liệu.
K h i khái niệm trừu tượng hàm chỉ ỉà cơ chế trừu tượng, những người lập rrình
có tính linh hoai cao troiig việc chọn lựa những khía cạnh để cố định định nghĩa
hàm và để cho phép để ngỏ những tham số. Hơn nữa xem xét những thành phồn
như những giá írị, đặc tính khác của những khái niệm trừu tượng có tác động lớn
đến tính tạo dựng là tính có thể phân mức, lức là khả năng để sử dụng chính
những khái niệm trừu tượng và cơ chế sự hợp thành tại m ồi mức của mội cấu
hình. M ột lần nữa rõ ràng đày là trường hợp với các hàm, mà trong đó một sự lắp
ráp của các hàm lại là một hàm. Cái thuận lợi là tính kinh tế của những khái niệm
và sự kiện mà khổng hề có giới hạn về hạt các thành phần.
Thônsi qua siao diện thừa kế của chúng, những lớp có thể được coi như biến
đổi được, từ những thay đổi tăng cường của một lớp con, cùng với lớp cha, lại một
lần nữa tạo thành một lớp. Trái lại, những mố đun thườĩìe. không biến đổi được:
sự lắp ráp các mỏ đun không còn là một mô đun. Một mỏi trường không có tính
biến đổi được áp đạt một hạt cố định của sự hợp thành (những mô đun chỉ có thể
được ráp vào trong những chương trình), và bời vậy hạn chế tính có thể sử dụng
lại của những thành phần, vả lại, việc thiếu vắng tính biến đổi được thường tạo ra
cho những vấn để cho việc nghiên cứu hình thức của những mồi trường lập trình
và sự hợp thành, bời vì những lý thuyết hình thức thành cỏng nhất khi chúng có
thể cậy vào một lặp nhỏ những toán tử vạn nàng. Một ví dụ hấp dẫn có thể được
quan sát trong miền trùng hợp, nơi mà các nhà lý luận thường sử dụng phép tính
quá trình với tính biến đổi được (một bộ chứa của những tác nhân hoặc những quá
trình chính nó là một quá trình), hầu hết sự thao tác thực tế kéo theo sự trùng
nhau giữa một quá trình và một hệ thống các quá trình.
1 .3 3 Quá trình soạn thảo
Trong những môi trường truyền thống cho sự phát triển phần mềm những pha
khác nhau để xây dựng một ứng dụng được định nghĩa rõ và riêng biệt: trước hết
cần phải viết một tập hợp các mô đun, có lẽ với một vài phụ thuộc bên trong và
với một vài phụ thuộc đối với những mô đun đặt sẵn được cất giữ trong những thư
viện; sau đó cần phải biên dịch những mô đun, để phát sinh mã máy và trong
những hê thống có kiểu chặt chẽ, để kiểm tra tính chính xác về kiểu của những
- Xem thêm -