Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

quá trình ánh xạ (mapping) từ ngôn ngữ đặc tả sang ngôn ngữ cài đặt.doc.DOC
Nội dung xem thử
Mô tả chi tiết
Lêi nãi ®Çu
Ngµy nay cïng víi viÖc ph¸t triÓn cña m¹ng m¸y tÝnh viÖc viÕt mét øng
dông trªn mét m¸y ®¬n côc bé kh«ng cßn ®îc a chuéng vµ thÝch hîp n÷a . C¸c
ch¬ng tr×nh vµ øng dông hiÖn ®¹i ph¶i tÝch hîp vµ triÖu gäi lÉn nhau trªn m¹ng
Intranet (m¹ng côc bé), m¹ng Internet (m¹ng toµn cÇu).
Tuy nhiªn mét vÊn ®Ò n¶y sinh ra , ®iÓm bÊt ®ång gi÷a c¸c ng«n ng÷ lËp
tr×nh . C¸c ®èi tîng thiÕt kÕ b»ng ng«n ng÷ nµo th× sau khi biªn dÞch ra d¹ng nhÞ
ph©n (binary) chØ cã m· lÖnh t¬ng øng víi ng«n ng÷ ®ã míi cã kh¶ n¨ng truy
xuÊt ®îc ®èi tîng . §èi tîng C++ kh«ng dÔ g× truy xuÊt ®îc tõ m· lÖnh Delphi
hay Visual Basic mét c¸ch tù nhiªn . (MÆc dï cã mét sè kÜ thuËt nh sö dông th
viÖn liªn kÕt ®éng DLL nhng ®ã kh«ng ph¶i lµ c¸c gi¶i ph¸p toµn diÖn ).
C¸c nhµ lËp tr×nh lu«n mong muèn t×m ®îc mét tiÕng nãi chung cho tÊt c¶
c¸c ng«n ng÷ lËp tr×nh hiÖn cã . Vµ thÕ lµ CORBA ra ®êi .
CORBA ( Common Object Request Broker Achitecture) - t¹m dÞch lµ
KiÕn tróc m«i giíi gäi c¸c ®èi tîng th«ng dông . CORBA ®îc h×nh thµnh tõ
mét tæ chøc nghiªn cøu quèc tÕ OMG (Object Management Group ) víi sù hîp
t¸c cña h¬n 800 c«ng ty . Tham väng cña OMG lµ ®a ra c¸ch ®Ó c¸c ®èi tîng
viÕt b»ng nh÷ng ng«n ng÷ kh¸c nhau cã thÓ triÖu gäi lÉn nhau theo m« h×nh ®èi
tîng ph©n t¸n .
CORBA kh«ng ph¶i lµ ng«n ng÷ lËp tr×nh nh C++ hay Java . CORBA lµ
mét ng«n ng÷ ®Æc t¶ (description language) .
Sau ®©y sÏ tr×nh bµy qu¸ tr×nh ¸nh x¹ (mapping) tõ ng«n ng÷ ®Æc t¶ sang
ng«n ng÷ cµi ®Æt
- 1 -
I. ¸nh x¹ tõ IDL sang C++
1. Giíi thiÖu:
¸nh x¹ IDL sang C++ ph¶i tho· m·n c¸c yªu cÇu sau :
- ¸nh x¹ ph¶i cã tÝnh trùc quan vµ dÔ sö dông
- ph¶i b¶o tån ng«n ng÷ chung cña C++ vµ ph¶i gÇn gièng víi C++ thêng
- ph¶i an toµn vÒ kiÓu
- sö dông cã hiÖu qu¶ chu kú cña CPU vµ bé nhí
- thùc hiÖn trªn c¸c cÊu tróc cña bé nhí ®o¹n vµ bé nhí vËt lý
- ph¶i ®îc híng néi sao cho nã cã thÓ dïng trong m«i trêng ph©n luång
- ¸nh x¹ ph¶i b¶o toµn tÝnh che giÊu côc bé (tÝnh trong suèt)
ViÖc ¸nh x¹ sang C++ phøc t¹p vµ réng lín nhng kh«ng ph¶i qu¸ khã. Thø
nhÊt, ¸nh x¹ lµ thuËn tiÖn vÝ dô b¹n hiÓu râ vÒ c¸ch tæ chøc vµ qu¶n lý bé
nhí cña kiÓu String, vµ c¸c luËt qu¶n lý ®èi víi kiÓu d÷ liÖu Variablelength, thø hai, viÖc ¸nh x¹ lµ an toµn, kh«ng yªu cÇu s¾c th¸i vµ b¾t lçi dÔ
dµng trong lóc biªn dÞch
Thø 3, sù ¸nh x¹ nµy lµ dÔ nhí mÆc dï líp cã nhiÒu hµm thµnh viªn, nhng
b¹n chØ cÇn gäi mét sè hµm chÝnh, cßn mét sè hµm kh¸c tån t¹i mÆc ®Þnh
®Ó cung cÊp c¸c chuyÓn ®æi tham sè truyÒn vµ kh«ng cÇn ph¶i gäi râ rµng
2. ¸nh x¹ cho tªn:
Các tên của IDL được bảo toàn khi ánh xạ sang C++. Để minh hoạ cho
điều này ta xét ví dụ sau:
- Trong IDL:
enum color {red, green, blue};
- Khi ánh xạ sang C++:
enum color {red, green, blue};
Các ánh xạ sang C++ cũng bảo toàn các toán tử phạm vi. Ví dụ nếu như
trong IDL toán tử phạm vi Outer :: Inner là hợp lệ thì khi ánh xạ sang C+
+ nó cũng vẫn là Outer :: Inner.
Một vấn đề phát sinh khi trong IDL ta dùng tên trùng với từ khoá trùng
với các từ khoá của C++:
Ví dụ định nghĩa sau là hoàn toàn hợp lệ trong IDL:
Enum class {if, this, while, case };
nhưng khi ánh xạ sang C++ thì nó sẽ tự động được thêm vào tiền tố:
_cxx_. Vì vậy nó sẽ có dạng như sau:
enum _cxx_class { _cxx_if, _cxx_this, _cxx_while, _cxx_case };
- 2 -
các tiền tố này làm cho các câu lệnh trở nên khó đọc, do vậy tốt nhất là ta
nên tránh dùng chúng.
Bây giờ chúng ta sẽ đi xét chi tiết vào từng kiểu dữ liệu một
3. Ánh xạ các kiểu dữ liệu cơ bản
Các kiểu dữ liệu cơ bản được ánh xạ sang C++ được mô tả ở bảng sau:
OMG IDL C++ C++ Out Type
short CORBA::Short CORBA::Short_out
long CORBA::Long CORBA::Long_out
unsigned short CORBA::UShort CORBA::UShort_out
unsigned long CORBA::ULong CORBA::ULong_out
float CORBA::Float CORBA::Float_out
double CORBA::Double CORBA::Double_out
char CORBA::Char CORBA::Char_out
boolean CORBA::Boolean CORBA::Boolean_out
octet CORBA::Octet CORBA::Octet_out
4. Các kiểu dữ liệu phức:
Các kiểu dữ liệu phức ở trong IDL được ánh xạ sang C++ như sau:
OMG IDL C++
Object CORBA::Object_ptr
struct C++ struct
union C++ class
enum C++ enum
string char *
Sequence C++ class
array C++ array
a>. String
Một chuỗi trong IDL được ánh xạ sang C++ là char *. Cả chuỗi giới hạn
và chuỗi không giới hạn độ dài thì đều được ánh xạ sang C++ là char *.
Các chuỗi CORBA trong C++ được kết thúc bởi con trỏ NULL. Nếu một
chuỗi mà có chứa một kiểu tự định nghĩa khác, ví dụ như kiểu struct, thì
nó được ánh xạ sang kiểu C ORBA::String_v ar. Điều này đảm bảo rằng
- 3 -