1. Trang chủ
  2. » Luận Văn - Báo Cáo

Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường điều khiển ysinh

140 624 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ứng Dụng Công Nghệ Com, Ole, Activex Xây Dựng Hệ Thống Đo Lường - Điều Khiển Ysinh
Trường học Trường Đại Học Khoa Học Tự Nhiên
Chuyên ngành Công Nghệ Thông Tin
Thể loại Luận văn
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 140
Dung lượng 0,98 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thật vậy, trong lĩnh vực ysinh mà cụ thể trong ytế đã xuất hiện các phương pháp mới với thiết bị kỹ thuật tiên tiến có sự trợ giúp đắc lực của công nghệ thông tin nhằm phục vụ chẩn đoán và điều trị bệnh. Có thể thấy rằng một trong những công việc thường xuyên phải làm là đo lường các tham số phản ánh trạng thái của cơ thể. Chính vì vậy để đáp ứng được nhu cầu này trên thực tế đã xuất hiện rất nhiều chủng loại thiết bị kỹ thuật y tế khác nhau như: máy điện tim, máy điện não, máy siêu âm, máy chụp cát lớp, máy chiếu xạ, máy phân tích xét nghiệm..vv trong đó việc ứng dụng công nghệ thông tin đã đóng góp đáng kể cho ngành y tế, tạo điều kiện thực hiện tốt các nhiệm vụ của ngành một cách nhanh chóng, chất lượng.

Trang 1

Đặt vấn đề

Những năm gần đây trong khoa học công nghệ đã có những bớc phát triển đột phá, đặc biệt là trong công nghệ thông tin Những ứng dụng hiệu quả của lĩnh vực này nhanh chóng xâm nhập vào mọi hoạt động khác nhau của cuộc sống

Thật vậy, trong lĩnh vực y-sinh mà cụ thể trong y-tế đã xuất hiện các phơng pháp mới với thiết bị kỹ thuật tiên tiến có sự trợ giúp đắc lực của công nghệ thông tin nhằm phục vụ chẩn đoán và điều trị bệnh Có thể thấy rằng một trong những công việc thờng xuyên phải làm là đo lờng các tham số phản ánh trạng thái của cơ thể Chính vì vậy để đáp ứng đợc nhu cầu này trên thực tế đã xuất hiện rất nhiều chủng loại thiết bị kỹ thuật y tế khác nhau nh: máy điện tim, máy điện não, máy siêu âm, máy chụp cát lớp, máy chiếu xạ, máy phân tích xét nghiệm vv trong đó việc ứng dụng công nghệ thông tin đã đóng góp đáng kể cho ngành y tế, tạo điều kiện thực hiện tốt các nhiệm vụ của ngành một cách nhanh chóng, chất lợng

Nh vậy công nghệ máy tính, kỹ thuật điện tử và công nghệ phần mềm đã trở nên những công cụ vô cùng quan trọng, không thể thiếu đợc trong các thiết bị điện tử y-sinh hiện đại Chúng là những bộ phận cấu thành nên hệ thống thiết bị, giúp thực hiện những nhiệm vụ đặc biệt mà con ngời không thể thực hiện đợc hoặc nếu thực hiện thì rất tốn kém và mất rất nhiều thời gian và thậm chí ảnh hởng đến tính mạng

Đa số các thiết bị điện tử y-sinh hiện đại đều có hệ thống máy tính thu thập và xử lý

số liệu đo lờng y-sinh phục vụ việc phân tích chẩn đoán và ra quyết định điều trị Vì vậy xây dựng hệ thống thu thập số liệu đo lờng y-sinh có sự trợ giúp của máy tính và công nghệ phần mềm là một trong những yêu cầu thiết yếu của ngành y tế trong nớc nói chung và ở trong quân đội nói riêng

Hiện nay hầu hết các phần mềm thu thập số liệu đo lờng nói chung đều đợc xây dựng và phát triển dựa trên cơ sở các công nghệ COM, OLE, ActiveX Do đó hiển nhiên là cần tiến hành nghiên cứu các công nghệ này và các kỹ thuật phát triển phần

Trang 2

mềm dựa trên chúng đồng thời nghiên cứu bản chất, đặc điểm của các tín hiệu điện sinh học để từ đó xây dựng hệ thống máy tính thu thập số liệu đo lờng y-sinh

Với ý đồ nh trên, tôi đã chọn đề tài nghiên cứu " ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lờng - điều khiển y-sinh ", cụ thể là nhằm xây

dựng hệ thống thu thập số liệu 16 kênh tín hiệu từ thiết bị điện não đồ EEG-7400 của hãng NIHON KOHDEN (Nhật bản) thông qua card thu thập số liệu đa kênh AX5210H của hãng AXIOM Hệ thống này có ý nghĩa lớn đối với việc phân tích, chẩn đoán điện não đồ trong các bệnh viện Để thực hiện nhiệm vụ này luận văn sẽ giải quyết những nội dung chính sau:

Chơng 1 Tổng quan về công nghệ COM, OLE, ActiveX

Tìm hiểu các khái niệm và đặc điểm cơ bản của công nghệ COM, OLE, ActiveX Đặc biệt chú trọng đến công nghệ COM và vấn đề lập trình theo giao diện- một phong cách lập trình của COM Bản chất và những u điểm bên trong của COM

sẽ đợc bộc lộ thông qua việc xem xét các đoạn mã lệnh trong C/ C++, Java hoặc Visual Basic

Chơng 2 Tín hiệu điện sinh học và đặc điểm đo lờng các chỉ tiêu y-sinh

Tìm hiểu bản chất, đặc điểm của tín hiệu điện sinh học và đặc điểm đo lờng các chỉ tiêu y-sinh Tạp âm, nhiễu trong tín hiệu điện sinh học, các bộ khuyếch đại tín hiệu điện sinh học và các phơng pháp lọc nhiễu đợc đề cập đến ở đây

Chơng 1 và chơng 2 sẽ làm cơ sở để tiến hành nghiên cứu và tìm hiểu các vấn

đề trong chơng 3

Chơng 3 ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống thu thập

số liệu đo lờng y-sinh

Xem xét tổ chức hệ thống phần cứng thu thập các kênh tín hiệu từ thiết bị điện não đồ EEG-7400 Sử dụng công nghệ COM, OLE, ActiveX xây dựng mô hình, thuật toán và chơng trình thu thập số liệu đồng thời 16 kênh tín hiệu điện não Do công nghệ COM cho phép tận dụng thế mạnh của các ngôn ngữ lập trình khác nhau,

Trang 3

nên chơng trình sẽ đợc xây dựng dựa trên cả hai ngôn ngữ Visual Basic và Visual C+ +

Visual Basic sẽ đợc sử dụng để thiết kế giao diện chơng trình và giải quyết các nhiệm vụ ở mức cao (mức ngời dùng), còn Visual C++

sẽ giải quyết các vấn đề ở mức thấp (mức phần cứng)

Phần kết luận: Trong phần này sẽ tổng kết các vấn đề đã đợc nghiên cứu tìm

hiểu trong luận văn và đa ra kết luận về đánh giá kết quả cũng nh các hớng phát triển tiếp theo

Chơng 1

Tổng quan về công nghệ COM, OLE, ACTIVEX

1.1 Những vấn đề cơ bản về COM

1.1.1 COM là gì?

Trớc hết COM là chữ viết tắt trong thuật ngữ tiếng Anh: Component Object

model nghiã là mô hình đối tợng thành phần Có rất nhiều cách hiểu khác nhau về

thuật ngữ này, dới đây nêu ra một vài quan niệm về COM :

• COM là kiến trúc phần mềm cho phép xây dựng các hệ thống và các ứng dụng

từ các thành phần cung cấp bởi các dịch vụ phần mền khác nhau Nó cũng là kiến trúc cơ sở để xây dựng nền tảng cho các dịch vụ phần mềm ở mức cao hơn

• COM là một đặc tính dùng để viết các phần mềm có khả năng tái sử dụng chạy trên các hệ thống máy tính đợc xây dựng dựa trên cơ sở là các thành phần của nó

• COM là một cấu trúc hạ tầng phức tạp cho phép các khách hàng và các đối ợng giao tiếp thông qua quá trình và phạm vi của máy chủ

t-• COM là một phong cách lập trình chứa tập các quy tắc cần thiết để làm việc trong môi trờng lấy Microsoft làm trọng tâm(làm nhân)

vv

Trang 4

Nhng có lẽ các cách hiểu khác nhau về COM nh vậy có thể thâu tóm lại trong một khái niệm tổng quát nh sau: COM là một công nghệ dùng để giải quyết các vấn

đề trong công nghiệp, trong việc bảo trì và mở rộng các hệ thống lớn

Trong hệ thống phần mềm máy tính, COM dựa trên việc tái sử dụng dới dạng mã nhị phân, gọi là tái sử dụng nhị phân, có nghiã là các thành phần (chơng trình phần mềm) của COM có thể sử dụng lại ở mọi nơi trong một PC hay một mạng LAN hoặc một hệ thống thông tin lớn mà không cần biết về mã chơng trình nguồn

đã xây dựng lên nó, tức là không phụ thuộc vào mã nguồn Đây là một trong những khía cạnh có ý nghĩa vô cùng to lớn của COM

COM đợc xây dựng dựa trên lập trình theo giao diện Đây là một phong cách lập trình mà giao diện đợc tách ra khỏi quá trình thực thi của đối tợng thành phần- là một hay một vài đoạn mã nằm ở nơi nào đó trong bộ nhớ Lập trình giao diện đã đợc khám phá trong các ngôn ngữ nh C/ C++

và SmallTalk bởi các nhà phát triển phần mềm khi họ phát hiện ra rằng việc sử dụng các giao diện riêng biệt sẽ cho phép họ bảo trì và mở rộng các ứng dụng lớn một cách dễ dàng hơn Các giao diện giải quyết đợc nhiều vấn đề liên quan đến việc tái sử dụng mã trong lập trình hớng đối t-ợng Điểm mạnh của lập trình hớng đối tợng OOP(Object-Oriented Programming)

là cho phép kế thừa mã thực thi Kiểu kế thừa này thờng tạo ra sự ảnh hởng, phụ thuộc cứng lẫn nhau giữa các thành phần trong hệ thống, vì vậy gây ra nhiều khó khăn khi bảo trì và mở rộng cho một hệ thống lớn Mặc dù Visual Basic không hỗ trợ tính thừa kế mã thực thi nhng từ Visual Basic 5.0 trở đi đã bổ xung, hỗ trợ việc

định nghĩa và thực thi các giao diện ngời dùng Sau đây sẽ đi tìm hiểu về lập trình

theo giao diện, một phong cách lập trình trong COM

1.1.2 Lập trình theo giao diện

a/.Các lớp, các đối tợng và client

Trang 5

Trong mục này ta coi là đã làm quen với một ngôn ngữ lập trình hớng đối tợng, chẳng hạn nh C/C++ Vì vậy các khái niệm: Class, Object, Client (lớp, đối tợng, khách) trong ngôn ngữ sẽ không đợc đề cập lại ở đây Sau đây chúng ta sẽ tìm hiểu mối quan hệ giữa một client và một lớp.

Trong mô hình hớng đối tợng một client thờng sử dụng một đối tợng đợc tạo ra

từ một lớp Trong Visual Basic, client thờng tạo ra đối tợng bằng cách dùng toán tử

New đi sau tên của một lớp Sau khi đối tợng đã đợc tạo ra, client sử dụng đối tợng

bằng cách truy cập đến một trong các thuộc tính và phơng thức có sẵn của nó thông qua một biến, đó là một tham chiếu dựa vào lớp để truy cập các thành viên chung của một đối tợng Ví dụ, giả sử ta có một lớp Cdog, đoạn mã lệnh trong Visual Basic dới đây sẽ tạo ra đối tợng Dog và sử dụng các thuộc tính và phơng thức của nó:

Dim Dog as Cdog ' Khai báo một biến đối tợng

Set Dog=New Cdog ' Client tạo ra một đối tợng có tên là Dog

Dog.Name="Snoopy" ' Truy cập đến một thuộc tính

Dog.Park ' Thực hiện gọi một phơng thức

Trong ví dụ này rõ ràng việc truyền thông giữa client và đối tợng đợc thực hiện thông qua việc truy cập đến một tập các thuộc tính tiềm ẩn và các phơng thức chung

và tập hợp này đợc biết đến nh là một giao diện chung của đối tợng

Một ích lợi to lớn của lớp là cho phép tái sử dụng mã, có nghĩa là có thể dùng lớp ở mọi chỗ trong một ứng dụng, giúp giảm tối thiểu mã thừa Ngoài ra, các thuộc tính và các phơng thức của lớp có thể loại bỏ đợc nếu nó không phải là thuộc tính và

phơng thức chung Việc cải tiến các phơng thức của lớp chỉ đòi hỏi cú pháp gọi nó

không đợc thay đổi Có nghĩa là chừng nào giao diện chung vẫn đợc giữ nguyên thì

có thể tạo ra bất kỳ sự thay đổi nào để cải tiến, thay đổi mã của một lớp mà không làm ảnh hởng đến mã của client Tuy nhiên một khi đã đa vào giao diện chung của lớp một thuộc tính hoặc một phơng thức thì chúng ta không thể loại bỏ chúng đợc,

Trang 6

khía cạnh này mang tính chất cội nguồn, có nghĩa là giao diện chung phải đợc thiết

kế thật cẩn thận ngay từ đầu và sử dụng các quy tắc mà lớp đề ra Từ đó cho phép cải tiến, mở rộng mã đối tợng mà không phải viết lại mã client bằng cách sửa các lỗi

và nâng cấp thực hiện các phơng thức Các client mới đợc xây dựng sau khi lớp đợc sửa đổi hoặc nâng cấp có thể lấy đợc các u việt của bất cứ những gì đợc bổ xung vào giao diện

Ví dụ, hãy tởng tợng một phơng thức RollOver đợc thực hiện sau khi kết thúc phơng thức sủa Bark của chó, phơng thức RollOver đợc định nghĩa trong lớp Cdog với tham số là số nguyên 16 bit cho phép client yêu cầu số lần lăn của chó sau khi kết thúc sủa:

Public Sub RollOver( ByRef Rolls as Integer)'Mã thực thi của phơng thức này ở đây

End SubMã thực hiện trong client nh sau:

Dim Dog As Cdog, Rolls As IntegerSet Dog = New Cdog

Rolls=2000Dog.RollOver RollsKhi client chỉ yêu cầu số lần lăn nằm trong khoảng số nguyên 16 bit nh trong ví

dụ trên thì ứng xử diễn ra bình thờng Nhng khi client nuốn kích hoạt phơng thức

RollOver với giá trị nằm ngoài khoảng giá trị của số nguyên 16 bit thì sao? Lúc này

phải thay đổi kiểu tham số của phơng thức RollOver cho phù hợp với yêu cầu của client, chẳng hạn sử dụng kiểu số nguyên dài 32 bít (Long Interger) Đây là vấn đề nan giải thuộc về thiết kế và chỉ có hai cách để giải quyết các vấn đề nh thế, đó là: thay đổi dấu hiệu của phơng thức sau đó viết lại toàn bộ mã của client gọi đến nó hoặc để nguyên mọi thứ nh vậy và tìm cách loại bỏ các hạn chế của thiết kế ban đầu

Trang 7

Tuy nhiên với mục đích bảo trì và mở rộng, có một cách trong thiết kế là không định nghĩa một phơng thức hay một thuộc tính ở trong giao diện chung nếu nó không đợc coi là sẽ tồn tại lâu dài Vì vậy các lập trình viên có kinh nghiệm thờng khai báo toàn bộ tiềm năng dữ liệu ở kiểu thuộc tính riêng (Private) và cho phép truy cập vào trạng thái của đối tợng thông qua các phơng thức chung (Public), mà bất kỳ thành viên nào đợc khai báo kiểu riêng đều có thể thay đổi hoặc loại bỏ đợc, do đó ngăn chặn đợc mọi sự phụ thuộc của client vào việc xắp xếp dữ liệu thực của lớp.

b/.Kế thừa thực thi

Đây là đặc điểm rất phổ biến của OOP trong các ngôn ngữ C++, SmallTalk và Java Kế thừa thực thi là một trong những cách để có đợc sự tái sử dụng mã trong mô hình hớng đối tợng Trong kế thừa thực thi khi một lớp đợc định nghĩa nó có thể dùng lại mã của một lớp khác Visual Basic hiện thời cha đợc hỗ trợ tính chất kế thừa thực thi, do đó lấy Java để làm ví dụ giải thích kế thừa thực thi là nh thế nào Xét lớp Cdog của Java nh sau:

Class Cdog

{

Public String Name; // Trạng thái của chó (dog state)

Public void Bark()// Hành vi của chó

{/*Mã thực thi phơng thức ở đây*/}

Public void RollOver(int Rolls)// Hành vi của chó

{/*Mã thực thi phơng thức ở đây*/}

}

Lớp Cdog ở trên đợc xem nh là lớp trên, lớp Cbeagle sau đây, đợc gọi là lớp dới

mở rộng lớp Cdog Nó kế thừa toàn bộ các tiềm năng và phơng thức của lớp Cdog, tức là lớp Cbeagle có thể dùng lại tất cả những gì mà Cdog có:

// Subclass

Trang 8

Class CBeagle extends CDog

{

// Trạng thái chó Beagle:

// Thuộc tính "tên" đợc kế thừa từ Cdog

Public String Color; // Thuộc tính mới thêm vào(màu)

// ứng xử của chó Beagle:

// Phơng thức RollOver() đợc kế thừa từ Cdog

// ẩn thực thi phơng thức Bark() của lớp Cdog:

Public void Bark()

{/* Mã thực thi phơng thức Bark() cho lớp CBeagle */}

// Cbeagle mở rộng CDog bởi việc thêm phơng thức mới:

Public void FetchSlippers()

{/* Mã thực thi phơng thức mới FetchSlippers ()*/}

}

Trong đoạn mã trên chỉ ra rằng: có thể mở rộng Cdog đó bằng cách loại bỏ mã thực thi phơng thức của nó nh trong trờng hợp phơng thức Bark và có thể thêm vào phơng thức mới nh phơng thức FetchSlippers Kế thừa thực thi đợc sử dụng chỉ khi tồn tại mối quan hệ "là"(is a) giữa lớp trên và lớp dới, trong ví dụ trên chúng ta có thể nói "con chó săn là một con chó(a beagle is a dog)", vì vậy nó đã áp dụng kế thừa thực thi và đợc mô tả nh trên hình 1.1

Tơng tự nh vậy cũng có thể bổ xung thêm các tiềm năng mới khi định nghĩa lớp dới Nếu ta tiếp tục định nghĩa một lớp mới sử dụng lại mã của lớp Cbeagle và cứ

nh vậy vv thì sẽ hình thành nên cái gọi là thứ bậc kế thừa trong đó chứa các mức kế thừa đợc mô tả trên hình 2.2 giữa lớp trên và lớp dới Đến đây chúng ta thấy rằng chỉ cần một biến đổi đơn lẻ ở các lớp trên, các lớp dới thứ bậc kế thừa sẽ tự động thừa h-ởng các thay đổi này

Trang 9

H×nh 1.1-KÕ thõa thùc thi cho phÐp mét líp t¸i sö dông tr¹ng th¸i vµ øng xö

cña mét líp kh¸c

H×nh 1.2-Thø bËc kÕ thõa chØ ra c¸c mèi quan hÖ gi÷a c¸c líp trªn vµ c¸c líp

díi trong mét øng dông

Cboxer

BarkScareMailmanName

Cdog

BarkRollOverName

Trang 10

Tóm lại, tính kế thừa thực thi cho phép một lớp tái sử dụng mã của một lớp khác

và nếu tính chất này đợc sử dụng một cách đúng đắn thì nó sẽ trở thành một phơng pháp rất hiệu quả để bảo trì và mở rộng mã

*.Tính đa hình thể (Polymorphism): đây là một đặc điểm rất quan trọng khác nữa của OOP, cho phép một client có thể tham chiếu nhiều đối tợng khác nhau theo cùng một cách thức cho dù chúng đợc tạo ra từ các lớp khác nhau và có những ứng

xử khác nhau, nhng tất nhiên các lớp này phải đợc mở rộng cùng từ một lớp nào đó Hình dới đây mô tả một client có thể sử dụng tham chiếu Cdog để truyền thông với

ba kiểu đối tợng:

Hình 1.3-Kế thừa thực thi mang tính đa hình

Xét đoạn mã Java sau:

// Phơng thức này chấp nhận tất cả các đối tợng tợng tơng thích với lớp Cdog://

Public void MakeDogBark(CDog Dog)

Tham chiếu dựa trên Cdog

Trang 11

Trong đoạn mã này, client tham khảo đến lớp Dog khi biết chắc rằng lớp này

đ-ợc mở rộng từ lớp Cdog (thể hiện trong phần khai báo của phơng thức MakeDogBark) Client không cần quan tâm đến việc các lớp dới Dog có dùng mã thực thi của phơng thức Bark của lớp trên Cdog cấp hay nó thực hiện phơng thức này bởi mã thực thi riêng của nó, mà chỉ đơn giản gọi phơng thức bằng cú pháp gọi đã đ-

ợc định nghĩa trong lớp Cdog (chúng ta đã biết rằng, khi một lớp dới đợc mở rộng từ một lớp trên thì cú pháp gọi của các phơng thức thừa kế từ lớp trên trong lớp dới vẫn phải dữ nguyên nh cũ) Từ đây có thể nêu ra một số vấn đề liên quan đến kế thừa thực thi nh sau:

• Kế thừa thực thi phá vỡ sự trọn vẹn của các thành viên mang tính chất riêng Các ngôn ngữ hỗ trợ tính kế thừa thực thi cung cấp một mức truy cập có bảo vệ cho các tính chất riêng và tính chất chung: trong trờng hợp các thuộc tính và các phơng thức đợc đánh dấu bảo vệ thì nó là ẩn đối với client nhng vẫn truy cập đợc bởi các lớp dới Do mối quan hệ mật thiết giữa lớp trên và lớp dới dẫn đến hình thành nên một loạt các quan hệ phụ thuộc cứng

• Kế thừa thực thi có phong cách phát triển thuộc kiểu tái sử dụng hộp trắng, các lớp trong thứ bậc kế thừa có quan hệ chặt chẽ với nhau Trong các ứng dụng việc thay đổi ký hiệu của một thuộc tính hoặc phơng thức ở tầng trên có thể phá vỡ hàng chục hoặc hàng trăm lớp đang kế thừa ở tầng dới Mặt khác sự bất định trong các giao diện chung đợc bảo vệ của các lớp trên chủ chốt thờng dẫn đến khó khăn cho việc mở rộng hệ thống

Những điều trình bày ở trên chỉ ra rằng kế thừa thực thi chỉ có hiệu quả trong những hoàn cảnh thích hợp, nó đợc sử dụng tốt nhất trong các ứng dụng nhỏ và các tình huống đợc kiểm soát Còn trên thực tế, việc tạo ra một thứ bậc kế thừa lớn, phức tạp để thoả mãn các yêu cầu của một ứng dụng là vợt quá tầm với của tất cả, ngoại

Trang 12

trừ các lập trình viên có kinh nghiệm trong lập trình hớng đối tợng Chính vì hạn chế

nh vậy của kế thừa thực thi mà đã trì hoãn trong thời gian dài sự phát triển của các

hệ thống lớn Để khắc phục các kỹ s lập trình đã tìm ra đợc các phơng pháp tái sử dụng mã mà không làm tổn hại đến khả năng mở rộng của các hệ thống lớn Một trong những phơng pháp đó đã xuất hiện trong phong cách lập trình giao diện cơ sở

và phát triển theo kiểu cấu thành đối tợng Trong kiểu lập trình này, giao diện chung

đợc tách ra khỏi quá trình thực thi của đối tợng

c/.Tách biệt giao diện khỏi quá trình thực thi

Phân tách giữa giao diện và thực thi là để hình thành nên việc tái sử dụng hộp

đen, đây cũng là một cách để cấu thành lên một đối tợng Có nghĩa là giao diện sẽ trở thành thuộc tầng trên cùng, nó là một kiểu dữ liệu độc lập đợc định nghĩa trên chính nó và giao diện chung đợc định nghĩa bên trong của định nghiã lớp, đây là một sự phát triển mạnh của OOP Trong giao diện sẽ chứa tập các ký hiệu định nghĩa cú pháp gọi chung đáp ứng các yêu cầu của client và nh vậy giao diện là một tầng trung gian giữa client và các lớp thực thi, tách biệt các lớp với client sử dụng

nó Ta có thể hình dung giao diện chung nh là một cam kết giữa client với các lớp

Có thể dùng giao diện để tạo một tham chiếu đến đối tợng nhng không thể tạo đối ợng từ giao diện Điều này hoàn toàn có lý bởi vì một đối tợng đợc tạo ra đòi hỏi phải có các tài nguyên dữ liệu và các thực thi phơng thức mà những thứ này lại không có trong giao diện

t-Có thể nhiều lớp thực thi cùng một giao diện: một giao diện định nghĩa cú pháp gọi chính xác và cung cấp ngữ nghĩa không xác định trớc cho các phơng thức, điều này cho phép mỗi tác giả của lớp tự do xác định ứng xử của đối tợng phù hợp với từng phơng thức, phù hợp với yêu cầu riêng của mình

*.Tính hai mặt của kế thừa: nh vậy giờ đây có hai loại kế thừa, đó là kế thừa

thực thi và kế thừa giao diện Cả hai đều đem lại hai tính chất quan trọng là tính chất

Trang 13

tái sử dụng mã và tính đa hình thể, mỗi một kiểu kế thừa đều có những u điểm và hạn chế riêng:

• Kế thừa thực thi dựa trên tái sử dụng hộp trắng, do đó nó mạnh hơn rất nhiều

so với kế thừa giao diện trong việc tái sử dụng trạng thái và các phơng thức Tuy nhiên việc tái sử dụng này thờng phải trả giá cho các hạn chế khi mở rộng các hệ thống lớn

• Kế thừa giao diện dựa trên việc tái sử dụng hộp đen, có nghĩa là giao diện chung của lớp không hề biết gì về các mã thực thi các phơng thức Mã thực thi đợc

đặt trong các lớp tách biệt khỏi giao diện cho phép thiết kế các ứng dụng kiểu leo thang, phát triển dần dần Vì vậy kiểu kế thừa này giải quyết đợc nhiều hạn chế liên quan đến tái sử dụng hộp trắng

Trên đây đã trình bày tóm tắt những khái niệm về lập trình theo giao diện Để có

đợc sự hiểu biết sâu sắc, thành thạo với kiểu lập trình này đòi hỏi phải tốn nhiều thời gian ở đây không đi sâu vào phong cách lập trình này mà chỉ lợc qua để có một cái nhìn chung về những kiến thức căn bản phục vụ việc hiểu những phần dới đây, đặc biệt là về COM

Các ngành công nghiệp đã chấp nhận phong cách lập trình theo giao diện do những giới hạn của việc sử dụng tham chiếu dựa theo lớp và kế thừa thực thi COM

đợc hình thành dựa trên các khái niệm cốt lõi của lập trình theo giao diện:

• COM yêu cầu sự tách biệt về hình thức giữa giao diện và thực thi, nghĩa là nó

đòi hỏi các client truyền thông với các đối tợng thông qua các tham chiếu giao diện

Điều này đảm bảo rằng các client không bao giờ xây dựng các ràng buộc với các lớp phục vụ cho các đối tợng và cho phép các lập trình viên COM xem mã đối tợng của

họ mà không lo ngại về sự phá vỡ mã của client

Trang 14

• Các client có thể nhận đợc các thông tin kiểu thời gian chạy từ các đối tợng bằng cách chất vấn thờng xuyên và hỏi xem đối tợng có hỗ trợ giao diện không Nếu không hỗ trợ, client có thể phát hiện điều này và bỏ qua đối tợng một cách dễ dàng

Điều này cho phép các lập trình viên xem lại các thành phần và các ứng dụng một cách độc lập Các client cũ và các đối tợng cũ vẫn có thể làm việc nhịp nhàng với các client mới và các đối tợng mới: đây chính là chìa khoá để tạo phiên bản trong COM Tuy nhiên COM phải làm việc xuyên qua các thành phần nhị phân và nó phải giải quyết rất nhiều vấn đề tại mức vật lý để lấy đợc những ích lợi của lập trình theo giao diện Tiếp sau đây chúng ta sẽ điểm qua một số đặc trng tiêu biểu của COM, rồi xem xét các thành phần bên trong của nó ở mục tiếp theo

1.1.3 Các đặc trng chủ yếu của COM

• COM cho phép các nhà lập trình có thể gửi đi các tệp nhị phân của mình mà vẫn giấu đợc các thuật toán thực hiện ở bên trong Đặc tính tái sử dụng mã nhị phân của COM cho phép loại trừ đợc nhiều vấn đề xẩy ra trong khi biên dịch lại các ch-

ơng trình hoặc hệ thống chơng trình cải tiến và phát triển trên cơ sở sử dụng lại mã nguồn Điều này thể hiện ở chỗ: sự cải tiến và phát triển hệ thống chơng trình chủ yếu chỉ tác động vào các thành phần COM hoặc biên dịch lại các thành phần của COM dựa trên các thành phần COM đã có Ví dụ đối với một phần mềm ứng dụng

đợc xây dựng dựa trên các mô hình COM, khi muốn thay đổi (chẳng hạn nh sửa lỗi, vv) trong chơng trình thì chỉ cần tác động đến th viện liên kết động ( các tệp dạng FileName.DLL) của nó, do các thành phần mô hình COM đợc chứa trong đó Các th viện này sẽ đợc biên dịch lại và đợc đa trở lại môi trờng mà không phơng hại

đến bất kỳ một ứng dụng nào đang sử dụng nó (các ứng dụng này đợc gọi là các khách hàng) Điều này khoa học và hiệu quả hơn hẳn so với các chơng trình phần

Trang 15

mềm, hệ thống chơng trình đợc xây dựng dựa trên việc tái sử dụng mã nguồn, trong

đó mỗi một sự thay đổi nhỏ đều đòi hỏi phải biên dịch lại từng dòng lệnh trong ứng dụng, một công việc vô cùng nặng nhọc và gây nhiều khó khăn và tốn kém cho việc bảo trì, phát triển và mở rộng hệ thống

• Các thành phần COM cơ sở có thể đợc xây dựng trên các ngôn ngữ lập trình

độc lập, khác nhau Đặc điểm quý báu này của mô hình đối tợng thành phần có ý

nghĩa vô cùng to lớn trong việc tập trung lực lợng và trí tuệ của các lập trình viên ở mọi nơi, đặc biệt khi tiến hành xây dựng các hệ thống hoặc các dự án phần mềm lớn Mỗi lập trình viên hoặc một nhóm lập trình có nhiệm vụ xây dựng lên các thành phần khác nhau của hệ thống trên ngôn ngữ lập trình riêng, phụ thuộc vào chuyên môn và khả năng thực thi của họ Chẳng hạn đối với nhóm yêu cầu mã chơng trình

hệ thống ở mức thấp thì có thể sử dụng ngôn ngữ C++ hoặc hợp ngữ (Assembler), với yêu cầu quản trị cơ sở dữ liệu của hệ thống có thể sử dụng ngôn ngữ lập trình nh Visual Basic để đạt đợc hiệu quả cao hơn Đặc điểm này quyết định sự tồn tại của các hãng phần mềm lớn và họ đã khai thác khía cạnh tuyệt vời này của COM để sử dụng một cách hiệu quả các nhóm lập trình hiện có của mình

• Các thành phần của COM đợc tạo ra dựa trên kiểu lập trình hớng đối tợng OPP, có nghĩa là mô hình đối tợng thành phần liên quan đến quá trình giao tiếp giữa các khách hàng và các đối tợng Lập trình kiểu OOP cho phép việc tái sử dụng nhị phân của COM đạt hiệu quả cao hơn so với các kiểu lập trình khác Các client và các lớp của COM thờng tồn tại trong các tệp nhị phân riêng biệt, chúng sẽ đợc kết nối với nhau trong thời gian chạy

Trang 16

• COM có khả năng liên quá trình, điều này cho phép tạo ra các đối tợng trong các qúa trình hoàn toàn tách biệt và trên các máy tính ở xa Đây là công nghệ cốt lõi

sử dụng trong lập trình phân tán Việc kết hợp sức mạnh của cả hai kiểu lập trình ớng đối tợng và lập trình phân tán sẽ tạo ra một mô hình lập trình mạnh hơn rất nhiều

h-• COM tạo ra khả năng nh nhau cho các client và các đối tợng cho dù chúng

đang giao thiệp với một máy chủ liên tiến trình hoặc một máy chủ ngoài tiến trình

Đây là đặc tính cực mạnh của COM đợc gọi là tính chất "trong suốt vị trí" Toàn bộ các công việc phức tạp để chuẩn bị, gửi, nhận các gói tin của mạng đợc thực hiện bởi cơ sở hạ tầng phân tán của COM

Trớc đây khi cha xuất hiện công nghệ COM, các nhà lập trình xây dựng các phần mềm ứng dụng lớn bằng cách biên dịch và liên kết hàng nghìn tệp mã nguồn

đơn lẻ để tạo ra một file EXE(ứng dụng nguyên khối) chạy độc lập, điều này dẫn

đến kích thớc của các tệp thực hiện lớn và mất nhiều thời gian khi chạy Ngoài ra mỗi khi thực hiện một sửa đổi bất kỳ vào mã nguồn của chơng trình đòi hỏi toàn bộ ứng dụng phải đợc biên dịch lại từ đầu, điều này gây nên nhiều trở ngại cho việc duy trì, sửa chữa, bổ xung, cải tiến và phát triển phần mềm ứng dụng Phát triển thành phần cơ bản đã giải quyết đợc các khó khăn đó và nhiều vấn đề khác liên quan đến kiểu lập trình ứng dụng nguyên khối nh đã nêu ra ở trên Các thành phần nhị phân cho phép cập nhật đến nó một cách độc lập và có thể sử dụng ngay, do đó làm đơn giản hơn việc duy trì và mở rộng ứng dụng sau khi đã đợc cài đặt trong sản phẩm.Với các tính chất đã nêu trên đây, COM thực sự là một công nghệ thành phần cơ bản có ý nghĩa to lớn trong việc phát triển các phần mềm ứng dụng và các hệ thống thông tin lớn

Trang 17

1.1.4 Các thành phần cơ bản của COM

Trớc khi xem xét các thành phần cơ bản của COM, ta tìm hiểu về một số khái niệm quan trọng liên quan đến mô hình đối tợng thành phần:

Chuẩn nhị phân(Binary Standard):

Chuẩn nhị phân là một khái niệm vô cùng quan trọng, là một trong những yếu tố quyết định sự tồn của COM Đối với bất kỳ một nền cơ sở nào đợc đa ra(sự kết hợp của phần cứng và hệ điều hành), COM đều có một cách thức chuẩn để bố trí các

bảng chức năng ảo Vtable (Virtual function table) trong bộ nhớ và một cách thức

chuẩn để gọi các chức năng thông qua con trỏ Vtable Cấu trúc bảng chức năng ảo Vtable trong bộ nhớ đợc gọi là "chuẩn nhị phân" bởi vì ở mức nhị phân nó hoàn toàn đợc xác định bởi giao diện riêng biệt và môi trờng nền Vtable không phụ thuộc vào ngôn ngữ lập trình hoặc công cụ để tạo ra nó, vì vậy bất kỳ ngôn ngữ nào có khả năng gọi các hàm thông qua con trỏ (nh ngôn ngữ C/C++, Small Talk, Ada, và thậm chí cả Basic) đều có thể đợc sử dụng để tạo ra các thành phần có khả năng tơng tác với nhau thông qua Vtable, tức là thông qua chuẩn nhị phân Sự thực hiện hai hớng kép(khách hàng giữ một con trỏ trỏ đến một con trỏ Vtable) cho phép Vtable chia sẻ với nhiều đối tợng (trờng hợp cụ thể của lớp) đợc tạo ra từ cùng một lớp Trong một

hệ thống với hàng trăm đối tợng, sự chia sẻ trong Vtable có thể giảm đáng kể yêu cầu về dung lợng bộ nhớ Nguyên lý bảng chức năng ảo Vtable trong mô hình COM

Function(pObj,ag1,ag2 )…{

………

}

Vtable

Trang 18

Hình 1.4-Client liên kết với đối tợng thông qua Vtable

Đối tợng và thành phần (Object, Component):

Để dễ hiểu, trong COM, một đối tợng là một vài đoạn mã đã đợc biên dịch nhằm cung cấp một vài dịch vụ cho hệ thống Để tránh nhầm lẫn, tốt nhất có thể xem một

đối tơng COM nh là một "đối tợng thành phần"(Component Object) hoặc đơn giản hơn là một "thành phần"(Component) Điều này cho phép phân biệt các đối tợng COM với các đối tợng dạng mã nguồn của ngôn ngữ lập trình hớng đối tợng OPP ví

dụ nh của ngôn ngữ C++ Các đối tợng thành phần hỗ trợ một giao diện cơ sở gọi là

IUnknown (phần sau sẽ tìm hiểu về giao diện này) đồng hành với tất cả các giao

diện khác, phụ thuộc vào các chức năng mà đối tợng thành phần muốn lộ ra

Các đối tợng thành phần thờng có một vài dữ liệu kết hợp Không giống các đối tợng của C++, các đối tợng thành phần COM không bao giờ cho phép truy cập đầy đủ trực tiếp đến một đối tợng khác mà luôn phải thông qua các con trỏ giao diện Đây

là đặc trng cơ bản của mô hình đối tợng thành phần COM, bởi ví nó cho phép COM hoàn toàn duy trì đợc việc thâu tóm và xử lý dữ liệu-một yêu cầu cơ bản của một chuẩn phần mềm thành phần thực sự Khi toàn bộ sự truy cập dữ liệu thông qua các phơng thức nằm ở một đối tợng trung gian(Proxy Object) thì nó cho phép thể hiện tính "trong suốt "(thể hiện ở các lời gọi ngang quá trình hoặc ngang qua mạng)

Nh vậy với những tính chất trên đây, mô hình đối tợng thành phần là chuẩn nhị phân nó đợc xây dựng dựa trên phong cách lập trình theo giao diện, trong đó những yếu tố cơ bản gồm client, giao diện, lớp và đối tợng Các lớp đợc định nghĩa trong các tệp nhị phân (ví dụ nh các th viện liên kết động DLL) gọi là các server Chúng cung cấp các khả năng cho client và tạo ra sự kết nối, tham chiếu giữa client với các

đối tợng có mã nhị phân tơng ứng trong tệp Sau khi client đã kết nối đợc với một

đối tợng, để đạt đợc mục tiêu nó chỉ cần kích hoạt một phơng thức nào đó của đối

Trang 19

t-ợng, tất nhiên điều này chỉ thực hiện đợc trong các môi trờng lập trình hớng đối tợng (OOP).

Trên đây là một vài khái niệm cơ bản trong mô hình đối tợng thành phần Dới

đây sẽ lần lợt đi vào tìm hiểu các thành phần cơ bản trong COM:

a/.Đối tợng

Đối tợng có ba đặc trng cơ bản, gồm: nhận dạng, trạng thái, và các hành vi ứng

xử (phơng thức hoạt động) Nhận dạng là đặc trng mang tính duy nhất để nhận ra

đối tợng từ nhiều đối tợng khác Trạng thái là sự kết hợp dữ liệu với một đối tợng riêng biệt Hành vi ứng xử là thiết lập một phơng thức để hỏi hoặc vận dụng một trạng thái của một đối tợng

Cách tiếp cận để xây dựng mô hình đối tợng trong môi trờng máy tính và hệ thống truyền thông đòi hỏi phải có phơng pháp định vị đợc các thành phần của đối t-ợng một cách chính xác và có tổ chức, chính vì vậy COM đã đa ra mô hình đối tợng thông qua một giao diện chung và sự thực thi của chúng Các chơng trình ứng dụng chỉ có thể tơng tác với các đối tợng thông qua giao diện chung bởi con trỏ giao diện

Đặc tính của đối tợng bằng cách này hay cách khác đợc liên hệ với con trỏ này, còn việc đối tợng đợc định vị ở đâu hoặc nó đợc bố trí nh thế nào trong bộ nhớ sẽ không

đợc COM quan tâm đến Tiếp theo đây xem xét sâu hơn về giao diện trong COM

b/.Giao diện

Giao diện là một cấu trúc dữ liệu trung gian giữa mã của client và sự thực thi của

đối tợng mà thông qua đó client có thể sử dụng các dịch vụ của đối tợng Do đó có thể nói: giao diện là tập hợp các thành viên có quan hệ với nhau xác định chức năng

và cách thức hoạt động cho phép client truy cập thực thi đối tợng, công việc này có thể diễn ra cục bộ hoặc từ xa Trong giao diện không mô tả tỉ mỉ các phơng thức tiến hành mà chỉ cung cấp các thông tin đặc trng phục vụ cho thiết lập các thao tác, chẳng hạn nh các định nghĩa chính xác cú pháp của các phơng thức, định nghĩa ngữ

Trang 20

nghĩa học của giao diện vv Tuy nhiên một giao diện trong COM cần phải tuân theo nguyên tắc sau:

i).Các giao diện đều bắt nguồn( thừa kế) từ giao diện đặc biệt IUnknown.ii).Giao diện chỉ có một từ định danh duy nhất dùng để nhận dạng

iii).Giao diện không thể sửa đổi một khi đã đợc sinh ra

Giao diện IUnknown:

Nh đã nói ở trên, các đối tợng thành phần đều hỗ trợ giao diện IUnknown là giao diện cơ sở của tất cả các giao diện khác Giao diện IUnknown có ba phơng thức:

QueryInterface, AddRef, và Release Có thể mô tả giao diện này nh sau:

Interface IUnknown

{

virtual HRESULT QueryInterface(IID& iid, void** ppvObj) = 0;

virtual ULONG AddRef() = 0;

virtual ULONG Release() = 0;

}

Tất cả các giao diện phải bắt nguồn trực tiếp hoặc gián tiếp từ giao diện

IUnknown- giao diện gốc, có nghĩa là một giao diện bất kỳ để thực hiện một đối

t-ợng COM đều phải kế thừa toàn bộ các phơng thức nhận đợc từ giao diện

IUnknown, bao gồm: QueryInterface, AddRef, và Release Hình 1.5 minh hoạ ba

phơng thức của giao diện IUnknown luôn luôn xuất hiện ở trên cùng của bảng chức năng ảo do con trỏ Vtable chỉ tới.Client

Object

Client

QueryInterfaceAddRef

ReleaseMethod1Method2Method3

IUnknown

Trang 21

Hình 1.5-Các phơng thức của IUnknown bao giờ cũng nằm trên cùng

Để có đợc tính không phụ thuộc vào ngôn ngữ lập trình, COM phải cung cấp một cách thức chung để tạo ra các thông tin về các giao diện và các lớp thành phần

coclass trên cùng của nó, đó chính là ngôn ngữ định nghĩa giao diện IDL (Interface

Definition Language) Có nghĩa là các ngôn ngữ tơng thích COM có thể sử dụng

IDL để thực hiện hoặc sử dụng các định nghĩa từ một file nguồn IDL và các file

nguồn này phải đợc dịch bởi Microsoft IDL(MIDL) Trình biên dịch của Microsoft MIDL sinh ra một vài file nguồn kiểu C và C++

và một cơ sở dữ liệu nhị phân đặc biệt đợc gọi là "type library"(th viện kiểu ) trong đó mô tả các giao diện, các

coclass và các tài nguyên đi kèm Mỗi một giao diện đợc định nghĩa bởi một tập hợp

các phơng thức, mỗi một coclass đợc định nghĩa trong một hay nhiều giao diện Các file kiểu th viện có thể có những loại mang đuôi mở rộng: TLB, DLL, EXE, OLB

và OCX Dới đây là một ví dụ khi mô tả một giao diện COM trong ngôn ngữ IDL:

Trang 22

Trong đó giao diện ISome bao gồm bốn phơng thức: QueryInterface,

AddRef, Release, và SomeMethod, còn giao diện ISomeOther gồm năm phơng thức, trong đó gồm tất cả các phơng thức của giao diện ISome và thêm một phơng thức mới SomeOtherMethod Chúng ta thấy rằng các giao diện ở trên bao giờ cũng có tất cả các phơng thức của giao diện gốc IUnknown

Nh vậy, IUnknown cung cấp ba đặc tính cơ bản gồm: điều hớng giao diện, xác

định phiên bản giao diện, và quản lý thời gian sống của đối tợng Các tính chất này

Trang 23

đối tợng Hai phơng thức AddRef và Release phải tơng đồng với nhau, có nghĩa là phải thực hiện phơng thức Release trớc khi có thể huỷ bỏ một con trỏ Khi tổng số tham khảo đến đối tợng bằng 0 có nghĩa là đối tợng đó đã bị hủy và tất cả các giao diện liên quan đến nó trở nên không hợp lệ

IUnknown::QueryInterface, phơng thức này dùng để điều hớng đối tợng, nó xác

định liệu một đối tợng thành phần có đợc hỗ trợ bởi một giao diện xác định hay không, giao diện này đợc xác định bởi từ định danh IID (Interface IDentifier) do client đa đến Nếu đối tợng hỗ trợ giao diện thì phơng thức QueryInterface sẽ trả về một con trỏ chỉ tới giao diện đó, và sau đó có thể sử dụng các phơng thức của giao diện để giao tiếp với đối tợng Nếu QueryInterface thực hiện thành công trả về một con trỏ chỉ tới giao diện nó sẽ kết thúc bởi gọi phơng thức AddRef để tăng tổng số tham khảo, cho nên ứng dụng phải gọi phơng thức Release để giảm tổng số tham khảo trớc khi huỷ con trỏ chỉ tới giao diện

Phiên bản của giao diện muốn chỉ ra rằng việc sửa đổi một giao diện đã đa ra là rất tối kị, thậm chí sự thay đổi số lợng phơng thức trong giao diện cũng có thể gây ra nguy hiểm cho các ứng dụng Để tránh khỏi những vấn đề này, các giao diện COM không đợc thay đổi về trật tự Sự tồn tại của các client hoàn toàn độc lập với giao diện do đó chúng không chú ý tới có hay không sự thực thi của các thành phần mới Nếu một khách hàng mới ngẫu nhiên truy cập vào các thành phần cũ hơn, nó có thể dùng QueryInterface để dò tìm thật an toàn xác định thành phần đó không đợc hỗ trợ bởi giao diện mới và không cho phép sử dụng các đặc tính mới

Đến đây có thể thấy rằng, các công việc cần làm đối với một đối tợng hỗ trợ bởi một giao diện là: tạo ra, sử dụng và giải phóng chúng Tạo ra đối tợng để nhận đợc một con trỏ giao diện, dùng con trỏ giao diện để tìm và thực hiện các phơng thức của đối tợng và cuối cùng là giải phóng đối tợng thông qua con trỏ giao diện

Trang 24

Chú ý rằng trong Visual Basic không bao giờ thấy đợc giao diện IUnknown một

cách trực tiếp, Visual Basic ẩn tất cả mã liên quan đến IUnknown Khi làm

việc với Visual Basic, chúng ta không phải để ý nhiều về quản lý thời gian sống của đối tợng, chỉ cần nhớ một điều là: giữ các tham khảo đến

đối tợng nếu muốn duy trì đối tợng và loại bỏ các tham khảo khi không còn

dùng đến đối tợng nữa Visual Basic sẽ tự động làm việc với IUnknown, hãy xem xét đoạn mã sau trong Visual Basic, giả sử rằng đã có giao diện IDog:

Sub CreateAndUseDog()

Dim Dog As IDog

Set Dog = New CBeagle ' AddRef thuộc IUnknown đợc gọi.

Dim Dog2 As IDog

Set Dog2 = Dog ' AddRef thuộc IUnknown đợc gọi.

Set Dog2 = Nothing ' Release thuộc IUnknown đợc gọi.

End Sub

Bên trong Visual Basic sẽ tự động thực hiện AddRef và Release để quản lý

tổng số tham khảo chuẩn và một đối tợng trong Visual Basic đợc duy trì chạy nếu client vẫn nối đến nó.

Còn đối với phơng thức QueryInterface cũng bị Visual Basic ẩn mã, nó sẽ

đợc Visual Basic thầm lặng gọi đến khi ấn định một đối tợng vào một kiểu tham khảo xác định

Ví dụ:

Dim Dog As IDog

Set Dog = New CBeagle

' Để đến một giao diện khác:

Dim WonderDog As IWonderDog

Set WonderDog = Dog 'lúc này QueryInterface đợc gọi

WonderDog.FetchSlippers

Trang 25

Đặc điểm của giao diện:

Giao diện là một cách để thể hiện các thuộc tính và chức năng của đối tợng thành phần, cần phân biệt những điểm sau:

• Một giao diện không phải là một lớp: trong khi một lớp có khả năng cụ thể hoá

để hình thành lên một đối tợng thành phần thì một giao diện không thể tự nó để trở thành đối tợng đợc, bởi vì nó bao gồm những thứ không thể thi hành trực tiếp Ngoài

ra các lớp đối tợng thành phần khác nhau có thể thi hành khác nhau đối với một giao diện, phù hợp với các định nghĩa trong giao diện Vì vậy nguyên lý đa hình thái cơ bản áp dụng một cách đầy đủ vào các đối tợng thành phần này

Một giao diện không phải là một đối tợng thành phần: một giao diện chỉ là một nhóm các liên hệ của các chức năng và là một chuẩn nhị phân để các khách hàng và các đối tợng thành phần truyền thông với nhau Đối tợng thành phần có thể thi hành trong bất kỳ ngôn ngữ nào, với điều kiện là nó có khả năng cung cấp các con trỏ chỉ tới các hàm thành viên trong giao diện

• Các client chỉ tơng tác với các con trỏ giao diện: khi một khách hàng đã truy cập đến một đối tợng thành phần, khi đó không có gì hơn bằng một con trỏ mà thông qua nó khách hàng có thể truy cập đến các tiềm năng trong giao diện, con trỏ

đó đợc gọi là con trỏ giao diện Nó không biết gì về các dữ liệu hoặc mã thực thi của các đối tợng thành phần, điều này là trái ngợc với các đối tợng trong ngôn ngữ C++ Trong COM các khách hàng chỉ gọi các phơng thức trong giao diện thông qua một con trỏ Sự thâu tóm này cho phép COM cung cấp một chuẩn nhị phân hiệu quả cho phép có đợc đặc tính "trong suốt vị trí"

• Các đối tợng thành phần có thể thực hiện nhiều giao diện: đó là khi lớp hỗ trợ cho nhiều hơn một tập các dịch vụ Mỗi tập các dịch vụ thuộc một giao diện, do vậy

Trang 26

sẽ có trờng hợp một đối tợng thành phần( cụ thể của lớp) thực hiện cho nhiều giao diện.

• Giao diện có tính phân biệt mạnh: mọi giao diện đều có từ nhận dạng riêng GUID (sẽ đợc đề cập đến ở phần sau), theo cách này hạn chế đợc sự xung đột xảy ra bởi tên của các giao diện, có nghĩa là tên của các giao diện có thể trùng nhau Sự khác nhau giữa các thành phần và các giao diện có hai ẩn ý quan trọng Nếu ngời phát triển tạo ra một giao diện mới thì đồng thời cũng tạo ra một nhận dạng mới cho giao diện (GUID) Khi sử dụng giao diện, chúng ta phải sử dụng từ nhận dạng đó để yêu cầu một con trỏ chỉ tới giao diện Sự nhận dạng rõ ràng này làm tăng độ tin cậy, hạn chế xung đột về tên giao diện mà sẽ dẫn đến kết quả sai trong thời gian chạy

• Giao diện là không thể thay đổi: các giao diện COM không bao giờ đợc đặt phiên bản, điều này có nghĩa là tránh đợc sự xung đột giữa các phiên bản thành phần mới và cũ Một phiên bản mới của giao diện đợc tạo ra bởi cách thêm vào các chức năng hoặc thay đổi về mặt ngữ nghĩa học, là một giao diện hoàn toàn mới với từ nhận dạng mới duy nhất(GUID) Vì vậy một giao diện mới không xung đột với một giao diện cũ ngay cả khi toàn bộ sự vận hành, các nội dung hình thức của các phơng thức hiện hành bị thay đổi với điều kiện cú pháp không bị thay đổi

Trang 27

Một GUID thờng có khuôn dạng nh sau: XXXX-XXXXXXXXXXXX}, trong đó ký hiệu "X" là một số Hex (0, 1, 2, 3, 4, 5,

{XXXXXXXX-XXXX-XXXX-6, 7,8, 9, A, B, C, D, E, F) Các GUID có thể đợc tạo ra bởi một tiện ích nh là GUIDEN.EXE nằm trong bộ công cụ phát triển phần mềm cơ sở của Microsoft(SDK) GUIDEN gọi một hệ thống các thủ tục và hàm thông qua phơng thức CoCreateGuid trong giao diện lập trình ứng dụng API (Aplication Program Interface) để tạo ra GUID Một giao diện COM đợc xác định bởi một từ định danh duy nhất IID (Interface IDentify) mà nó cũng chính là một GUID Mặc dù IID rất tiện lợi cho máy tính nhng thực tế nó lại tỏ ra rất bất tiện cho ngời dùng, cho nên th-ờng thì mỗi một giao diện đều có một chuỗi tên mô tả String Name Theo quy ớc các String name thờng đợc bắt đầu bởi ký tự "I", ví dụ nh ImyCom vv Những tên này chính là những cái thờng đợc sử dụng trong các file mã nguồn, nó không đợc

đảm bảo là duy nhất trên toàn cầu nhng cũng không thể xảy ra việc một ai đó lại dùng hai giao diện khác nhau với cùng một String name trong chơng trình nguồn

d/.Lớp

Tất cả các đối tợng COM đều là trờng hợp cụ thể của các lớp COM Một lớp COM là tên thực thi của một hoặc một vài giao diện Một lớp COM đợc đặt tên bằng việc sử dụng một từ định danh lớp CLSID (Class Idetifier), nó là một dạng của GUID Giống nh các IID, các CLSID cũng đợc bảo đảm là duy nhất, tuy nhiên điều này rất khó cho ngời sử dụng cho nên các lớp COM cũng đợc mô tả bởi một String

name và đợc gọi là ProgID (Programmatic Identifer) sử dụng trong mã nguồn.

Mỗi lớp COM có một đối tợng lớp kết hợp Các đặc trng của COM đợc xác định thông qua một hàm chuẩn CoGetClassObject của API để tạo ra các lớp đối tợng và một giao diện chuẩn IClassFactory để giao tiếp với các đối tợng thuộc lớp đó Ph-

ơng thức quan trong nhất trong giao diện IClassFactory là phơng thức tạo ra một đối tợng và trả về một con trỏ giao diện Vì vậy một client chỉ đơn giản bằng cách gọi

CoGetClassObject là có thể tiếp cận đợc với một lớp đối tợng COM và lấy đợc con

Trang 28

trỏ giao diện chuẩn IClassFactory, sau đó thực hiện phơng thức

IClassFactory::CreateInstance để lấy đợc con trỏ giao diện của đối tợng Lúc này

con trỏ giao diện IClassFactory có thể đợc giải phóng, đối tợng sẽ hiện diện bởi các phơng thức đợc hỗ trợ trong giao diện của nó Trình tự tạo ra một đối tợng nh thế này là rất phổ biến trong các ứng dụng COM, vì vậy COM đã cung cấp một chức năng cho phép thực hiện tất cả các công việc đó chỉ trong một lần gọi, đó là hàm

CoCreateInstance sử dụng trên hệ thống cục bộ hoặc hàm CoCreateInstanceEx nếu

giao tiếp với các hệ thống ở xa

Hình 1.6 minh hoạ các quá trình diễn ra khi client yêu cầu tạo ra một đối tợng trong thời gian chạy(run-time) Trớc hết client gọi CoGetClassObject để cung cấp một con trỏ chỉ tới một giao diện trên lớp đối tợng đợc chỉ định bởi CLSID Thuộc vào một phần của th viện COM là thành phần quản lý điều khiển dịch vụ SCM ( Service Control Manager) có trách nhiệm định vị các lớp thực thi và vận hành chúng SCM đảm bảo rằng mỗi khi có yêu cầu của client thì dịch vụ thích hợp sẽ đ -

ợc kết nối và sẵn sàng nhận nhiệm vụ SCM quản lý cơ sở dữ liệu chứa các thông tin lớp trong đăng ký hệ thống, client lấy đợc các thông tin này thông qua th viện COM cục bộ và gửi đến cho SCM, SCM dựa vào đó để tìm đối tợng lớp cần thiết phục vụ yêu cầu Ngay khi tìm thấy đối tợng lớp, SCM sẽ trả lại con trỏ chỉ đến giao diện

IClassFactory cho client và lúc đó client có thể gọi IClassFactory :: CreateInstance để lấy con trỏ giao diện của đối tợng, và từ đây client có thể sử dụng

các tiềm năng của đối tợng

7.Trả lại con trỏ giao diện

của đối tượng cho client

Component

6.Tạo đối tượng

Class Object

Object

Đăng ký (CLSID) SERVER .DLL

SCM

Trang 29

Hình 1.6-Quá trình tạo ra đối tợng COM

Trong các lớp ngôn ngữ cơ sở (ngôn ngữ lập trình-dới dạng mã nguồn) các lớp COM là hoàn toàn khác nhau Khi một đối tợng đợc tạo ra, các lớp của chúng không liên quan gì với khách hàng mà tất cả sự tơng tác với đối tợng đều xảy ra thông qua các con trỏ giao diện Các con trỏ giao diện không biết chút gì về các lớp thực thi(mã thực thi có thể sẽ nằm ở một nơi nào đó trong bộ nhớ) dùng để tạo ra đối t-ợng và đó là một trong những đặc tính khoá của COM dùng để giấu các thuật toán bên trong của nó

1.2 Công nghệ OLE (Object Linking and Embedding)

1.2.1 Lịch sử phát triển

Chúng ta thấy rằng, các giao diện mức ngời dùng thờng sử dụng rất rộng dãi kỹ thuật "Clipboard" với các lệnh "Copy" , "Cut" và "Paste" để đơn giản hoá các bớc tạo ra một "tài liệu ghép" (một tài liệu mà trong đó chứa đựng cả văn bản, đồ họa và các dạng dữ liệu khác nhau) Trớc khi có kỹ thuật này, chúng ta đã phải in văn bản

và đồ hoạ một cách riêng rẽ sau đó cắt dán chúng lại với nhau thành một tài liệu Tuy các kỹ thuật "Clipboard" (một vùng nhớ đệm, lu tạm thời các dữ liệu) đã đợc áp dụng rất hiệu quả để tạo ra tài liệu ghép, nhng vào cuối những năm 1980 Microsoft

đã bắt đầu nhận thấy các hạn chế của nó, chẳng hạn:

• Soạn thảo, định dạng văn bản dẫn đến phải thay đổi lại vị trí các đồ hoạ

Trang 30

• So¹n th¶o ®å häa cÇn rÊt nhiÒu thao t¸c khã kh¨n ®Ó ®¹t ®Õn khu«n d¹ng gèc cña nã.

ViÖc ph©n ra thµnh c¸c øng dông cña Microsoft ®· lµm xuÊt hiÖn giao thøc trao

®æi d÷ liÖu ®éng ĐE(Dynamic Data Exchange) gi¶i quyÕt c¸c h¹n chÕ trªn Sù cã mÆt cña ĐE ®· thóc ®Èy Microsoft thiÕt kÕ vµ ph¸t hµnh phiªn b¶n OLE 1.0 vµo n¨m 1991, lóc ®ã OLE1.0 dêng nh lµ mét chuÈn cho tÊt c¶ c¸c nhµ ph¸t triÓn phÇn mÒm Nã ®· c¶i tiÕn, n©ng cÊp tuyÖt vêi viÖc t¹o ra vµ qu¶n lý tµi liÖu ghÐp: cho phÐp thùc hiÖn "nhóng c¸c ®èi tîng" hoÆc "liªn kÕt c¸c ®èi tîng" trong tµi liÖu mµ vÉn gi÷ l¹i ®îc nh÷ng d÷ liÖu gèc t¹o ra c¸c ®èi tîng ®ã, hoÆc gi÷ sù liªn kÕt ®Õn d÷ liÖu gèc vµ cho phÐp thùc hiÖn c¸c thao t¸c trªn nã Do ®ã viÖc so¹n th¶o néi dung cho tµi liÖu ghÐp nay ®· trë nªn rÊt ®¬n gi¶n, thËm chÝ chØ b»ng viÖc kÝch ®óp chuét lªn ®èi tîng th× d÷ liÖu cña nã sÏ tù ®éng xuÊt hiÖn trong bé so¹n th¶o gèc- gäi lµ kÝch ho¹t t¹i chç

Tuy nhiªn c¸c nhµ thiÕt kÕ OLE 1.0 còng ®· ph¸t hiÖn ra r»ng "c¸c ®èi tîng v¨n

b¶n ghÐp" thùc sù chØ lµ mét trêng hîp cô thÓ cña c¸c thµnh phÇn phÇn mÒm (c¸c

phÇn tö phÇn mÒm nhá) cã kh¶ n¨ng ghÐp ®îc vµo trong mét øng dông, b»ng c¸ch nµy më réng ®îc chøc n¨ng cña øng dông mµ sÏ kh«ng ph¶i thay ®æi nhiÒụ §èi víi tµi liÖu ghÐp, bé so¹n th¶o lµ c¸i "chøa ®ùng"(container) chung, nã cã thÓ cÊt gi÷ tÊt c¶ c¸c kiÓu néi dung kh¸c nhau cña ®èi tîng Ngêi ta cã thÓ chÌn vµo c¸c biÓu ®å,

©m thanh, video, tranh, ¶nh vµ rÊt nhiÒu kiÓu thµnh phÇn kh¸c mµ kh«ng ph¶i cËp nhËt l¹i container Nh×n mét c¸ch tæng thÓ c¸c thµnh phÇn phÇn mÒm cã tÝnh øng dông râ nÐt h¬n tµi liÖu ghÐp Nã cã m« h×nh "plug-in" v¹n n¨ng, mÒm dÎo, m¹nh h¬n c¸c ph¬ng tiÖn kh¸c, vÝ dô nh c¸c th viÖn liªn kÕt ®éng(DLL), c¸c ®iÒu khiÓn cña Visual Basic(VBX), vv

TiÕp theo OLE 2.0 xuÊt hiÖn vµo n¨m 1993, nã kh«ng nh÷ng hoµn thiÖn nèt c¸c

u thÕ cña tµi liÖu ghÐp trong OLE1.0 mµ cßn x©y dùng mét c¬ së h¹ tÇng réng lín

Trang 31

hỗ trợ cho phần mềm thành phần với các mức độ phức tạp khác nhau Hạt nhân của cơ sở hạ tầng này có kiến trúc đơn giản, tao nhã, rất mạnh và có thể mở rộng đợc, đó chính là mô hình đối tợng thành phần hay COM COM cho phép giải quyết một số vấn đề phức tạp nhất của phần mềm bao gồm việc tạo ra các kiến trúc dịch vụ mở, các đối tợng ở bên ngoài ứng dụng và giải quyết vấn đề về phiên bản Các giải pháp này liên quan đến các thành phần nhị phân trong hệ thống đang chạy hơn là các thành phần mã nguồn trong ứng dụng.

Đến đây có thể đặt ra câu hỏi: cái gì đã làm cho kiến trúc của COM và OLE có tính chất tái sử dụng? Trong nền công nghiệp phần mềm ngời ta đã bàn nhiều đến khả năng tái sử dụng mã và đã chú trọng đến các "kiểu thiết kế" theo hớng tái sử dụng mà vẫn đảm bảo đợc tính mềm dẻo, lựa chọn bổ xung Nh chúng ta sẽ thấy một trong những khái niệm cơ bản trong COM là "giao diện" dùng cho ý tởng về các "kiểu thiết kế" ở trên Chính vì vậy COM và OLE đợc coi là một mô hình lập trình dựa trên các thiết kế có khả năng tái sử dụng cung cấp các dịch vụ cơ bản và mã có thể tái sử dụng Kết quả là Microsoft ngày càng tập trung vào các công nghệ OLE xây dựng dựa trên kiến trúc của OLE2.0, bao gồm sự cải tiến thành COM (OLE mạng-network OLE) và các công nghệ OLE cơ sở xây dựng bên trong hệ điều hành Hơn nữa, kiến trúc này đã cho phép các nhóm bên ngoài Microsoft phát triển, tạo ra các công nghệ quan trọng trong thị trờng dữ liệu thời gian thực, bán hàng tự

động, chăm sóc sức khoẻ và nền công nghiệp bảo hiểm

Thế còn OLE 3.0 thì sao? Tất nhiên, mọi ngời đã bắt đầu hỏi về OLE 3.0 và khi nào nó sẽ đợc phát hành, và liệu có hoặc không có sự thay đổi lớn về bản chất của OLE2.0 hay không so với lần nâng cấp và cải tiến trớc đây( ở đây mô hình lập trình OLE1.0 đã hoàn toàn bị thay đổi) Trong thực tế, sẽ chẳng có phiên bản OLE 3.0 nào cả, bởi vì đã xuất hiện các thành phần tái sử dụng: kiến trúc của OLE sẽ bao hàm đợc các công nghệ mới mà không đòi hỏi phải sửa đổi những thiết kế cơ bản ban đầu Vì vậy cái tên "OLE" dờng nh chỉ coi "Object Linking and Embedding" là

Trang 32

một bộ phận trong kiến trúc của nó và giờ đây ngời ta chỉ đơn giản gọi là OLE Về sau OLE đã chuyển thành một kiến trúc có khả năng tái sử dụng cho các thành phần phần mềm chứa đựng các thiết kế mới và các công nghệ mới Nh vậy cuối cùng OLE là gì?

1.2.2 Khái niệm về OLE

Trớc hết, dù sao OLE vẫn là chữ viết tắt của thuật ngữ tiếng Anh :Object

Linking and Embedding, có nghĩa là liên kết và nhúng đối tợng mà mục đích là để

tạo ra các văn bản ghép phức tạp có thể biểu diễn cả đồ hoạ, âm thanh, hình ảnh vv,

và bất kỳ kiểu thông tin, dữ liệu nào khác

Tuy nhiên trong lịch sử phát triển, đã có rất nhiều sự mô tả khác nhau về OLE

Đôi khi OLE đợc biết đến thông qua các công nghệ nh : công nghệ Compound Documents, Visual Editing, OLE Automation, COM, và OLE Controls Các mô tả

nh vậy về OLE đều chỉ đúng một phần nào đó và không thể trở thành một định nghĩa đầy đủ về OLE đợc bởi vì OLE có kiến trúc mở, luôn đợc phát triển để có thêm những công nghệ mới Do vậy, một định nghĩa về OLE phải đảm bảo đợc tính

đúng đắn của nó theo thời gian Từ quan điểm nh vậy, khái niệm về OLE đợc phát biểu nh sau:

OLE là một môi trờng hợp nhất các dịch vụ cơ bản dựa trên các đối tợng với khả năng tuỳ chỉnh các dịch vụ này, không hạn chế mở rộng kiến trúc thông qua các dịch vụ tuỳ chỉnh với mục đích tăng thêm tổ hợp giữa các thành phần của nó.

OLE đem lại cho chúng ta một giải pháp, các tiêu chuẩn mở và các kỹ xảo cho

t-ơng lai Nó cho phép các nhà phát triển phần mềm đóng gói các nội dung và các chức năng dới dạng các thành phần tái sử dụng tơng tự nh các mạch tổ hợp (các IC-Integrated Circuit) trong lĩnh vực điện tử Nh vậy, thay vì phải xây dựng các chức năng, ngời phát triển phần mềm có thể có đợc hoặc mua đợc chức năng đó mà

Trang 33

không cần biết về sự thực thi bên trong, có nghĩa là xem nó nh hộp đen Giống nh các kỹ s điện tử không phải mua các nguyên liệu để rồi chế tạo ra các IC hoặc các linh kiện, giờ đây OLE cũng cho phép mua các tệp nhị phân và sử dụng các chức năng của chúng thông qua các giao diện Vì vậy ngời sử dụng sẽ tự giải quyết đợc nhanh chóng các vấn đề riêng của mình

1.2.3 Các dịch vụ của OLE

OLE cũng là một mô hình hớng đối tợng Quá trình cải tiến và phát triển từ phiên bản OLE 1.0, rồi OLE 2.0 của Microsofft đã cho phép soạn thảo đợc các văn bản ghép vô cùng phức tạp Giờ đây bên trong OLE chứa tập hợp các công nghệ với một loạt các dịch vụ cơ bản có thể mở rộng tuỳ thích mà nền tảng của nó chính là COM, điều này đợc minh họa trên hình 1.7 Hiện nay các dịch vụ chứa trong OLE bao gồm:

Structured Storage, Monikers( Persistent Naming), Uniform Data Transfer, Drag and Drop, OLE Document, OLE Automation, OLE Controls

Do OLE có kiến trúc mở không hạn chế nên nó có thể nâng cấp và mở rộng mà không cần thay đổi các thiết kế cơ bản ban đầu Khả năng này đợc thể hiện trong OLE Controls OLE không phải là một ngôn ngữ lập trình mà nó là một chuẩn nhị phân cho phép các phần mềm tơng tác lẫn nhau nh các đối tợng và cho phép tái sử dụng các thành phần nhị phân

Automation

Uniorm Data

TransferDrag&Drop

Structured Storage

Event

Propety Pages

Propety Change Activation

COM

OLE Controls OLE

Document

Trang 34

Hình 1.7-Các dịch vụ của OLE đợc xây dựng trên nền COM

Trên phơng diện ngời dùng, OLE dờng nh tích hợp tất cả các kinh nghiệm, tiện ích của các ứng dụng trong một môi trờng thống nhất Tuy nhiên ngời dùng thờng khai thác OLE theo ba dịch vụ chính, đó là: OLE Document, OLE Automation, và

OLE Control Các dịch vụ này có thể trình bày một cách vắn tắt nh sau:

OLE Document(tài liệu OLE):

OLE Document đợc xây dựng dựa trên kiểu lu giữ cấu trúc (Structured Storage), truyền dữ liệu đồng bộ (Uniform Data Transfer), bộ định vị nhận dạng để liên kết

đối tợng (Monikers) trong tài liệu Đây là những khái niệm thuộc OLE Documents

và là các bộ phận do OLE hỗ trợ để tạo ra và quản lý các tài liệu ghép

Có hai thành phần chính đó là:

• Hộp chứa (container) là một vùng điều kiểm tài liệu và quản lý các mối quan

hệ giữa các đoạn thông tin trong tài liệu đó, ví dụ nh sự xắp xếp chẳng hạn

• Đối tợng tài liệu ghép là các phần hợp thành dữ liệu để đặt vào tài liệu và các

bộ phận này đợc cung cấp từ các dịch vụ (nh server-DLL hoặc EXE)

Trang 35

Nh vậy OLE Documents là cách thức tích hợp các hộp chứa và các dịch vụ thông qua đối tợng trung gian - tài liệu ghép Các đối tợng tự chúng có thể đợc tích hợp theo hai cách sau:

"Nhúng": ở đây toàn bộ đối tợng đợc đa vào trong container và các thông tin trạng thái ban đầu của đối tợng đợc lu giữ trong tài liệu Các đối tợng nhúng luôn luôn thực thi giao diện IPersistStorage cho mục đích này

"Liên kết": ở đây hình ảnh của đối tợng đợc hiện diện trong tài liệu bởi moniker (đờng dẫn) tham khảo đến dữ liệu thực của đối tợng Có nghĩa trạng thái gốc của đối tợng tồn tại ở một nơi nào đó và moniker đợc đặt trong tài liệu thay vì phải "liên kết" tới dữ liệu đó Khi moniker bị phức tạp hoá do yêu cầu, các tham khảo từ tài liệu ghép đến tài nguyên liên kết có thể trở nên rất phức tạp Vì vậy một tài liệu khi đó chỉ chứa các đối tợng liên kết tham khảo đến những cái chẳng hạn nh là một file hoặc liên kết phức tạp đến một khối của một bảng trong một cơ sở dữ liệu nào đó ở trên mạng, vv

Trong khi "nhúng" thờng là kỹ thuật tốt nhất cho các đối tợng có tập hợp dữ liệu nhỏ thì kỹ thuật "liên kết" lại rất hiệu quả đối với các đối tợng có tập hợp dữ liệu lớn, đặc biệt trong các trờng hợp phải chia sẻ giữa nhiều ngời dùng trên mạng-mỗi một liên kết là một tham khảo đến một nguồn tài nguyên đơn lẻ còn nhúng có nghĩa

là đã tạo ra một bản copy của đối tợng

OLE Documents bao gồm các dịch vụ sau: kích hoạt tại chỗ (In-Placed

Activation), liên kết và nhúng (Linhking &Embedding) Đặc trng đầu tiên của OLE

Documents là nó chứa các mẫu thông dụng, có nghĩa là các giao diện dùng để truy cập đến các OLE Documents giống nh việc truy cập đến các ứng dụng khác từ một ứng dụng Mẫu thông dụng là đặc trng chính của văn bản có khả năng tích hợp dữ liệu OLE

Trang 36

Một trong những khả năng tích hợp dữ liệu đợc gọi là "liên kết và nhúng đối

t-ợng" mà đã đợc đề cập đến ở trên, trong đó các đối tợng dữ liệu khác nhau đợc tạo

ra từ các ứng dụng khác nhau có thể đợc nhúng và liên kết vào một OLE Document của ứng dụng Ngoài ra ngời dùng có thể thao tác với dữ liệu của đối tợng trực tiếp trong ứng dụng thông qua dịch vụ kích hoạt tại chỗ mà không cần phải quay về khởi

động lại ứng dụng đã tạo ra đối tợng đó Tức là có thể soạn thảo và thay đổi dữ liệu của đối tợng ngay trên ứng dụng nóng, khi đó giao diện ngời dùng sẽ bị thay đổi ở ứng dụng nóng thông qua các menu, toolbar vv của các ứng dụng đã tạo ra đối tợng

OLE Automation(tự động hoá OLE):

Một yếu tố quan trọng khác đối với sự tích hợp các thành phần là khả năng điều hoạt theo chơng trình, tức là tự động hoá điều kiểm các thành phần Xét về mặt kỹ thuật có nghiã là các thành phần bộc lộ các chức năng của nó ở mức cuối ngời dùng (nh là các lệnh menu, làm việc với các hộp đối thoại) thông qua các giao diện Có thể thực hiện các chức năng này bởi chỉ dùng một vài dãy lệnh trong các công cụ soạn thảo kịch bản Có thể xem xét hai khía cạnh liên quan đến vấn đề này: một mặt

là có các thành phần "có thể lập trình đợc" thông qua giao diện mà gọi là các đối

t-ợng tự động hoá (Automation Objects), mặt khác là có một số ứng dụng cung cấp

môi trờng lập trình mà trong đó cho phép tạo ra ứng dụng hoặc viết tệp kịch bản dựa trên các giao diện của các đối tợng tự động này Những cái đó đợc gọi chung là các

bộ điều khiển tự động (Automation Controllers) Vả lại, các đối tợng cần một cách nào đó để xuất ra các giao diện của chúng để lập trình (các tên của phơng thức, và kiểu tham số nh là thuộc tính của đối tợng) trong thời gian chạy mà sau đó các bộ

điều khiển có thể kiểm tra kiểu(kiểu tham số, vv) và hiển thị danh sách các chức năng có thể sử dụng Hỗ trợ cho việc này chính là OLE Automation thực hiện thông qua chủ yếu giao diện IDispatch Nếu các ứng dụng muốn bộc lộ các tiềm năng với các đối tợng ứng dụng khác( nh là khung, các cửa sổ tài liệu, các bộ phận của tài liệu, vv) thì các thành phần của nó phải thực thi giao diện IDispatch Nhng

Trang 37

IDispatch chỉ có một tập hợp cố định các hàm chức năng thành viên, do đó bằng

cách nào mà mỗi một thành phần cung cấp đợc các chức năng riêng của nó?

Câu trả lời là một OLE Automation gọi là dispinterface (Dispatch Interface)

Dispinterface là một giao diện thực thi IDispatch để đáp ứng tập hợp các chức năng

truyền thống của IDispatch Một khung ứng dụng và một tài liệu sẽ đều thực thi giao diện IDispatch thông qua các dispinterface khác nhau, do đó sẽ thực hiện các chức năng khác nhau

Bằng cách nào các công việc trên liên hệ đợc đến IDispatch::Invoke? Có thể tham khảo trên hình 1.8 - một ví dụ mẫu về vấn đề này Tham số dispID (từ nhận dạng) báo cho Invoke phơng thức nào chuẩn bị đợc gọi hoặc thuộc tính nào của đối tợng chuẩn bị đợc lấy ra hoặc đợc thiết lập; tham số wFlags chỉ ra liệu lời gọi này tới Invoke là một phơng thức hay toán hạng lấy thuộc tính hoặc toán hạng thiết lập thuộc tính Tuy nhiên, việc đầu tiên là các dispinterface của đối tợng sẽ gửi tập hợp các dispID (dispID nhận đợc từ hàm GetIDsOfNames hoặc tài liệu của đối tợng) thông qua Invoke tới đối tợng đáp ứng, và tất nhiên là khác nhau với từng đối tợng Khi phơng thức mang các tham số và các thuộc tính thì nó cũng kèm theo luôn cả kiểu của chúng, dispinterface sẽ chứa tất cả các "thông tin kiểu" này Các chức năng khác trong IDispatch còn cho phép các "thông tin kiểu" có thể sẵn dùng cho các bộ tự động hoá điều kiểm, vì vậy có thể sử dụng các "thông tin kiểu" để nâng cấp môi trờng lập trình

Interface IDispatch : Public IUnknown

{

Virtual HRESULT Invoke(DISPID dispID, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pdispparams, VARIANT *pvarResult, EXCEPINFO *pexcepinfo, UINT *puArgErr)=0;

Trang 38

Hình 1.8-Dữ liệu của phơng thức IDispatch::Invoke

Khi tự động hoá một đối tợng(Automation Object), phải tạo ra một file sử dụng ngôn ngữ mô tả đối tợng ODL( Object Description Language) để định nghĩa một

dispinterface Sau đó biên dịch file này bởi một tiện ích đặc biệt mà nó sẽ xuất ra

một "th viện kiểu"(type library) bao gồm thông tin về tất cả các đối tợng tự động và các dispinterface tơng ứng Th viện kiểu này có thể lu trên một file riêng biệt hoặc

đợc dặt vào trong mô đun dịch vụ (DLL hoặc EXE) nh là một tài nguyên Chúng cung cấp cách thức để các bộ điều khiển kiểm tra các đối tợng và các dispinterface nào là sẵn dùng dựa vào các thông tin lấy đợc thông qua giao diện IDispatch mà không phải tạo ra các thành phần thực sự

Th viện kiểu tự nó là một thành phần và thực thi các giao diện ITypeLib, ITypeinfo và ITypeComp Nói chung chúng ta không bao giờ phải viết mã cho các giao diện này; OLE đã cung cấp các thi hành có thể làm việc với bất kể th viện kiểu cơ sở nào Bộ điều khiển tự động sử dụng các giao diện này điều hớng toàn bộ các thông tin trong th viện, để đa ra danh sách các chức năng có thể sử dụng đến ngời lập trình vv

Ngày nay Visual Basic và Visual Basic for Applications(VBA) là một trong các

bộ điều khiển tự động đợc sử dụng rộng rãi Khi bạn chạy một đoạn mã Visual Basic, ví dụ đoạn mã ở hình 1.9, Visual Basic sẽ dịch các lời gọi phơng thức và các tham khảo thuộc tính sau toán hạng dấu chấm "." thành các lời gọi IDispatch::

Invoke đến thành phần yêu cầu Và cuối cùng tất cả các lời gọi đó đều đợc hình

thành thông qua giao diện chuẩn nhị phân, vì vậy Visual Basic không quan tâm đến ngôn ngữ nào đợc sử dụng để thực thi đối tợng

Sub Form_Load ()

Set Cube = CreateObject("CubeDraw.Object") 'Tạo ra một đối tợng tự động

Trang 39

'Mỗi một dòng lệnh sau, gọi IDispatch::Invoke với các cờ (wFlags) khác nhau:

x = Cube.Theta ' Lấy thuộc tính " bởi "Theta"

Cube.Declination=.0522 'Thiết lập thuộc tính" cho "Declination"

Cube.Draw ' Gọi phơng thức

End Sub

Hình 1.9-Mã Visual Basic đựợc dịch để gọi tới IDispatch::Invoke

Điều này thể hiện sức mạnh tổng hợp của OLE Automation: Visual Basic có thể tạo ra và quản lý đồng thời nhiều đối tợng tự động từ nhiều ứng dụng khác nhau và

sử dụng chúng để tổ hợp các thông tin cho chơng trình từ nhiều loại tài nguyên khác nhau Sự tự động hoá có sức mạnh phi thờng đối với các tập đoàn phát triển đang sử dụng các ứng dụng dạng sản phẩm cuối nh là Microsoft Word và Shapeware's Visio để tạo ra các giải pháp th™ ơng mại truyền thống Ngoài ra tự động hoá hỗ trợ cho ứng dụng tiếp cận đợc với nhiều ngời sử dụng Tập đoàn phát triển có thể gói gọn lôgic kinh doanh vào các thành phần, cho phép truy cập các chức năng của nó thông qua các công cụ thứ ba ở mức cao bao gồm các ngôn ngữ lập trình thế hệ thứ

t và thậm chí cả các ngôn ngữ lập trình ứng dụng hiệu quả dạng Macro

Nh vậy OLE Automation cho phép truy cập và sửa đối tợng thông qua các đặc tính và phơng thức tiện dụng ở các ngôn ngữ bậc cao nh VBA Điều này cho phép ngời dùng đối tợng tuỳ ý và liên kết linh hoạt giữa các đối tợng để trình bày các thao tác theo hớng ngời dùng định nghĩa, ví dụ bảng tính Excel là một đối tợng OLE Automation Ngời sử dụng có thể tạo ra một bảng tính Excel bằng cách truy cập vào

đối tợng Graph hoặc truy cập vào cơ sở dữ liệu của đối tợng Access vv

Và cuối cùng có thể thấy rõ đợc đặc trng tiêu biểu của OLE Automation là: dựa vào VBA để tận dụng các lợi thế của OLE Automation cho dù ngời sử dụng không phải

là nhà lập trình Điều này cho phép mở rộng các đối tợng ngời dùng bằng cách tạo

ra các bản ghi mác-crô (Macro Recoder) ghi lại các thao tác ấn phím dới dạng mã

Trang 40

của Visual Basic hoặc một "Object Browser" dùng để "dán" mã chính xác vào nơi yêu cầu, điều này bất kỳ ai cũng có thể thực hiện đợc

OLE Control:

Trong phạm vi OLE, OLE Controls chính là đối tợng tài liệu ghép mở rộng và phát triển bởi OLE Automation nhằm mục đích hỗ trợ các phơng thức và các thuộc tính thông qua giao diện IDispatch, tuy nhiên các "sự kiện" đã làm cho OLE Controls trở nên đặc biệt Một sự kiện là thể hiện một thông báo tới bộ "điều khiển",

nó đợc phát ra mỗi khi có điều gì đó xảy ra, chẳng hạn một sự thay đổi trạng thái hoặc tác động của ngời sử dụng vv Điều khiển là cách thức biến đổi các sự kiện chẳng hạn các sự kiện kích chuột, bấm phím vv thành các sự kiện chơng trình có ý nghĩa Khi sự kiện xảy ra một vài chơng trình con kiểm soát sự kiện sẽ thực thi một

đoạn mã nào đó để chỉ ra một núm bị ấn hoặc sự kiện truyền một ký tự qua một môdem hoặc vv

Phần lớn OLE Controls là tập hợp các mở rộng cho các công nghệ OLE khác, chẳng hạn nh lu giữ cấu trúc (thêm giao diện IPersistStreamInit) và OLE Automation ( thêm các tính chất ODL mới cho các dispinterface, thêm các phơng

thức và các thuộc tính) Nó định nghĩa một kỹ thuật thông báo chung đợc biết đến

nh là các "kỹ thuật nối kết bị động" (Connectable Object) dùng để nối kết các đối ợng thầm nặng (Sink Object) đến tài nguyên mong muốn chứa thực thể các chức năng hiện diện trong một giao diện nào đó thực thi đối tợng Ngoài các điều khiển

t-ra, kỹ thuật này thực sự có ý nghĩa và hữu dụng để thi hành các sự kiện

OLE Controls cũng mang đến một kiểu công nghệ gọi là các trang thuộc tính (property pages) Đây là mô hình giao diện ngời dùng mềm dẻo mà mọi đối tợng

đều có thể dựa vào để cho phép ngời dùng trực tiếp sửa đổi các thuộc tính của nó Các trang thuộc tính của các đối tợng khác nhau có thể dễ dàng tích hợp vào cùng trong một hộp đối thoại chứa Tab, tạo ra một môi trờng nhất quán dễ sử dụng để thao tác với các dữ liệu của đối tợng

Ngày đăng: 26/06/2014, 02:21

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. PTS Nguyễn Tiến Dũng, Kỹ năng lập trình Visual Basic 6.0, Nhà xuất bản thống kê Sách, tạp chí
Tiêu đề: Kỹ năng lập trình Visual Basic 6.0
Nhà XB: Nhà xuất bản thống kê
2. Tạ Đăng Doanh (2001), Khuyếch đại tín hiệu sinh học & khuyếch đại trong máy điện tim, Đồ án tốt nghiệp, Đại học bách khoa Hà Nội Sách, tạp chí
Tiêu đề: Khuyếch đại tín hiệu sinh học & khuyếch đại trong máy "điện tim
Tác giả: Tạ Đăng Doanh
Năm: 2001
3. Phạm Minh Hà(1996), Kỹ thuật mạch điện tử, Nhà xuất bản khoa học và kỹ thuật, Hà Nội Sách, tạp chí
Tiêu đề: Kỹ thuật mạch điện tử
Tác giả: Phạm Minh Hà
Nhà XB: Nhà xuất bản khoa học và kỹ thuật
Năm: 1996
4. Đặng Minh Hoàng(2001),Thực Hành Visual C ++ 6.0, Nhà xuất bản thống kê Sách, tạp chí
Tiêu đề: Thực Hành Visual C++ 6.0
Tác giả: Đặng Minh Hoàng
Nhà XB: Nhà xuất bản thống kê
Năm: 2001
5. TS.Huỳnh Lơng Nghĩa(2002), Các phơng pháp nghiên cứu hệ thống điện tử y- sinh, Học viện kỹ thuật quân sự, Hà Nội Sách, tạp chí
Tiêu đề: Các phơng pháp nghiên cứu hệ thống điện tử y-sinh
Tác giả: TS.Huỳnh Lơng Nghĩa
Năm: 2002
6. Nguyễn Hữu Mộng (2000), Microsoft Visual Basic, Học viện kỹ thuật quân sự, Hà Nội Sách, tạp chí
Tiêu đề: Microsoft Visual Basic
Tác giả: Nguyễn Hữu Mộng
Năm: 2000
7. Phạm Xuân Sinh (2002), Tổ chức chơng trình máy tính ứng dụng các công nghệ COM, OLE, ACTIVEX, Luận văn thạc sĩ kỹ thuật, Học viện kỹ thuật quân sự, Hà Nội Sách, tạp chí
Tiêu đề: Tổ chức chơng trình máy tính ứng dụng các công nghệ COM, OLE, ACTIVEX
Tác giả: Phạm Xuân Sinh
Năm: 2002
8. Ngô Diên Tập (1997), Đo lờng và điều khiển bằng máy tính, Nhà xuất bản khoa học và kỹ thuật, Hà Nội Sách, tạp chí
Tiêu đề: Đo lờng và điều khiển bằng máy tính
Tác giả: Ngô Diên Tập
Nhà XB: Nhà xuất bản khoa học và kỹ thuật
Năm: 1997
9. Đỗ Xuân Thụ, Kỹ thuật điện tử.(1998), Nhà xuất bản giáo dục, Hà Nội Tài liệu tiếng Anh Sách, tạp chí
Tiêu đề: Kỹ thuật điện tử.(
Tác giả: Đỗ Xuân Thụ, Kỹ thuật điện tử
Nhà XB: Nhà xuất bản giáo dục
Năm: 1998
1. AXIOM Technology Co.,Ltd(1999), AX5210H/H+ 16 Channel Data Acquisition / 2 Channel Analog Output Board User's Manual, Taiwan Sách, tạp chí
Tiêu đề: AX5210H/H+ 16 Channel Data Acquisition / 2 Channel Analog Output Board User's Manual
Tác giả: AXIOM Technology Co.,Ltd
Năm: 1999
3. Marry Kirtland(1998),Designing Component-Based Applications, Microsoft Press, Washington Sách, tạp chí
Tiêu đề: Designing Component-Based Application
Tác giả: Marry Kirtland
Năm: 1998
4. Microsoft Corporation(1999), Desktop Applications with Microsoft Visual Basic 6.0 MCSD Training Kit, Microsoft Press, Washington Sách, tạp chí
Tiêu đề: Desktop Applications with Microsoft Visual Basic 6.0 MCSD Training Kit
Tác giả: Microsoft Corporation
Năm: 1999
5. Microsoft Corporation (1999), MCSD Training Kit - Distributed Applications with Microsoft Visual Basic 6.0, Microsoft Press, Washington Sách, tạp chí
Tiêu đề: MCSD Training Kit - Distributed Applications with Microsoft Visual Basic 6.0
Tác giả: Microsoft Corporation
Năm: 1999
6. Guy Eddon and Henry Eddon (1999), Inside MS COM+ Base Services, MicrosoftPress, Washington Sách, tạp chí
Tiêu đề: Inside MS COM+ Base Services
Tác giả: Guy Eddon and Henry Eddon
Năm: 1999
7. Ted Pattison(1998), Programming Distributed Applications with COM and Microsoft Visual Basic 6.0, Microsoft Press, Washington Sách, tạp chí
Tiêu đề: Programming Distributed Applications with COM and Microsoft Visual Basic 6.0
Tác giả: Ted Pattison
Năm: 1998
8. Weiying Chen and Vincent W.Mayfield (1999),ActiveX Programming Unleashed Second Edition, Microsoft Press, Washington Sách, tạp chí
Tiêu đề: ActiveX Programming Unleashed Second Edition
Tác giả: Weiying Chen and Vincent W.Mayfield
Năm: 1999
2. NIHON KOHDEN(2000), Service Manual EEG-7400 Series Khác

HÌNH ẢNH LIÊN QUAN

Hình 1.2-Thứ bậc kế thừa chỉ ra các mối quan hệ giữa các lớp trên và các lớp  dới trong một ứng dụng - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Hình 1.2 Thứ bậc kế thừa chỉ ra các mối quan hệ giữa các lớp trên và các lớp dới trong một ứng dụng (Trang 9)
Hình 1.1-Kế thừa thực thi cho phép một lớp tái sử dụng trạng thái và ứng xử  của một lớp khác - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Hình 1.1 Kế thừa thực thi cho phép một lớp tái sử dụng trạng thái và ứng xử của một lớp khác (Trang 9)
Hình dới đây mô tả một client có thể sử dụng tham chiếu Cdog để truyền thông với  ba kiểu đối tợng: - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Hình d ới đây mô tả một client có thể sử dụng tham chiếu Cdog để truyền thông với ba kiểu đối tợng: (Trang 10)
Bảng chức năng ảo Vtable (Virtual function table) trong bộ nhớ và một cách thức - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Bảng ch ức năng ảo Vtable (Virtual function table) trong bộ nhớ và một cách thức (Trang 17)
Hình 1.6 minh hoạ các quá trình diễn ra khi client yêu cầu tạo ra một đối tợng  trong thời gian chạy(run-time) - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Hình 1.6 minh hoạ các quá trình diễn ra khi client yêu cầu tạo ra một đối tợng trong thời gian chạy(run-time) (Trang 28)
Hình 2.2- Sự phân cực của mô sinh vật - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Hình 2.2 Sự phân cực của mô sinh vật (Trang 54)
Bảng 2.1. Một vài tham số đặc trng của các tín hiệu điện sinh học - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Bảng 2.1. Một vài tham số đặc trng của các tín hiệu điện sinh học (Trang 58)
Bảng 2.2-Phân loại nhiễu trong tín hiệu điện sinh học 2.2.2 Méo tín hiệu - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Bảng 2.2 Phân loại nhiễu trong tín hiệu điện sinh học 2.2.2 Méo tín hiệu (Trang 61)
Bảng 2.3 sau cho thấy mối liên quan và các tính chất của méo và tạp âm. - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Bảng 2.3 sau cho thấy mối liên quan và các tính chất của méo và tạp âm (Trang 63)
Bảng 2.3-Phân loại méo và tạp âm 2.3 Mô hình hoá nguồn tín hiệu điện sinh - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Bảng 2.3 Phân loại méo và tạp âm 2.3 Mô hình hoá nguồn tín hiệu điện sinh (Trang 65)
Sơ đồ khối cơ bản của một thiết bị nhận và ghi tín hiệu sinh học không có máy  tÝnh nh sau: - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Sơ đồ kh ối cơ bản của một thiết bị nhận và ghi tín hiệu sinh học không có máy tÝnh nh sau: (Trang 65)
Hình 2.6-Sơ đồ điện tơng đơng của hệ thống điện cực-cơ thể - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Hình 2.6 Sơ đồ điện tơng đơng của hệ thống điện cực-cơ thể (Trang 66)
Hình 2.9-Sơ đồ khối và mạch điều chế tín hiệu dùng bóng bán dẫn - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Hình 2.9 Sơ đồ khối và mạch điều chế tín hiệu dùng bóng bán dẫn (Trang 71)
Hình 2.11-Mạch khuyếch đại một chiều kiểu điều chế biên độ  cách li bằng biến áp - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Hình 2.11 Mạch khuyếch đại một chiều kiểu điều chế biên độ cách li bằng biến áp (Trang 72)
Sơ đồ khuyếch đại một chiều sử dụng biến đổi độ rộng xung đợc chỉ ra trên hình  2.12. Tín hiệu một chiều đợc so sánh với tín hiệu răng ca tại bộ so sánh dùng  khuyếch đại thuật toán, đầu ra sẽ nhận đợc tín hiệu điều chế độ rộng xung - Ứng dụng công nghệ COM, OLE, ActiveX xây dựng hệ thống đo lường  điều khiển ysinh
Sơ đồ khuy ếch đại một chiều sử dụng biến đổi độ rộng xung đợc chỉ ra trên hình 2.12. Tín hiệu một chiều đợc so sánh với tín hiệu răng ca tại bộ so sánh dùng khuyếch đại thuật toán, đầu ra sẽ nhận đợc tín hiệu điều chế độ rộng xung (Trang 72)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w