1. Trang chủ
  2. » Tất cả

The Object-Oriented Database System Manifesto

35 1 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Định dạng
Số trang 35
Dung lượng 263,5 KB

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

Nội dung

The Object Oriented Database System Manifesto HỆ THỐNG CSDL HƯỚNG ĐỐI TƯỢNG OBJECT ORIENTED DATABASE MANAGEMENT SYSTEM Tóm tắt Tài liệu này cố gắng định nghĩa một hệ thống CSDL hướng đối tượng Nó mô t[.]

Trang 1

HỆ THỐNG CSDL HƯỚNG ĐỐI TƯỢNG OBJECT ORIENTED DATABASE MANAGEMENT SYSTEM

Tóm tắt:

Tài liệu này cố gắng định nghĩa một hệ thống CSDL hướng đối tượng Nó mô tả các đặc trưng và đặc tính chính mà hệ thống phải có đối với một CSDL hướng đối tượng

Chúng tôi phân các đặc trưng này thành 3 nhóm:

Các đặc trưng bắt buộc, là các đặc trưng mà hệ thống phải thỏa mãn theo

đó trở thành thuật ngữ trong hệ thống CSDL hướng đối tượng Đó là các đối tượng phức hợp, định danh đối tượng (object identity), đóng gói (encapsulation), các kiểu lớp (class type), thừa kế (inheritance), hiệu lực trễ (late binding), mở rộng (extensibility), tính toán hoàn chỉnh ( computational completeness), tính bền vững (persistence), quản lý bộ lưu trữ thứ cấp (secondary storage management), đồng thời (concurrency), các công cụ và truy vấn đặc biệt

Các đặc trưng tùy chọn, là các tính có thể được thêm vào nhằm làm cho hệ thống tốt hơn nhưng không phải là bắt buộc Đó là các đặc tính như đa thừa

kế (multiple inheritance), kiểu kiểm tra và suy diễn, phân tán, thiết kế giao tác và phiên bản

Các đặc trưng mở, các quan điểm mà nhà thiết kế có thể tạo ra một số các lựa chọn Đấy là mô hình lập trình, hệ thống trình diễn, kiểu hệ thống và tính đồng dạng.

Nội dung tài liệu

Giới thiệu

Các đặc trưng bắt buộc: Các nguyên tắc vàng

 Các đối tượng phức hợp (Complex objects)

Trang 2

 Định danh của đối tượng (Object Identity)

 Sự đóng gói (Encapsulation)

 Các kiểu và lớp (Types and Classes)

 Lớp hay kiểu phân cấp chức năng

 Ghi đè, nạp chồng, hiệu lực trễ (Overriding, Overloading, latebinding)

 Tính toán hoàn chỉnh (Computational completeness)

 Mô hình lập trình (Programming paradign)

 Hệ thống trình diễn (Representation system)

 Kiểu hệ thống

 Tính đồng dạng (Uniformity)

Kết luận

Lời giới thiệu:

Hiện nay, các hệ thống CSDL hướng đối tượng đã nhận được nhiều sự chú ý

từ cả thực nghiệm lẫn lý thuyết, và có những cuộc tranh luận đáng chú ý về địnhnghĩa các hệ thống này

Có ba điểm mô tả lĩnh vực ở giai đoạn này: (i) thiếu mô hình dữ liệu phổdụng, (ii) thiếu các thiết lập hình thức và (iii) hoạt động mang tính chất nghiên cứumạnh mẽ

Trang 3

Trong khi đó bài báo nguyên bản của Codd đã đưa ra một đặc tả rõ ràng vềmột hệ thống CSDL quan hệ (mô hình dữ liệu và ngôn ngữ truy vấn), tuy nhiênchưa có đặc tả như vậy dành cho các hệ thống CSDL hướng đối tượng Chúng takhông khẳng định rằng là sẽ không tồn tại một mô hình dữ liệu hướng đối tượnghoàn chỉnh nào, thực tế có nhiều đề xuất được trình bày trong bài chủ đề này, nhưngchủ yếu tập chung vào một mô hình đơn giản Sự đánh giá mang tính bao quát toàn

bộ các đặc trưng của họ các hệ thống hướng đối tượng, tuy nhiên, tại thời điểm hiệntại sẽ không có sự nhất trí rõ ràng nào về một hệ thống hướng đối tượng

Đặc điểm thứ 2 về lĩnh vực này là thiếu các khung lý thuyết đủ mạnh Để sosánh lập trình hướng đối tượng với lập trình logic dường như không có sự tươngđương Sự cần thiết phải có một lý thuyết nền tảng là hiển nhiên: Các ngữ nghĩa học

về khái niệm ví dụ nhiều các kiểu hay các chương trình thường được định nghĩakhông tốt Sự thiếu vắng một khung lý thuyết vững chắc làm cho việc đánh giá về

mô hình dữ liệu trở nên không đạt được

Cuối cùng, có nhiều thực nghiệm nghiên cứu theo hướng: Người ta đangxây dựng các hệ thống thực tế, một trong số các hệ thống này vẫn chỉ là các nguyênmẫu, ngoại trừ một số các sản phầm thương mại Điều quan tâm trong hệ thốngCSDL hướng đối tượng dường như được quyết định bởi nhu cầu thiết kế các hệthống hỗ trợ (tức là CAD, CASE, Các hệ thống thông tin văn phòng – OfficeInformation System) Những ứng dụng này yêu cầu cần phải có CSDL mà có thể xử

lý dữ liệu rất phức tạp, có thể giải quyết một cách êm thấm, và có thể cung cấp hiệusuất cao của các hệ thống tương tác

Tình huống thực hiện là tương tự đối với các CSDL quan hệ giữa những năm

1970 (qua đó có nhiều khởi đầu trong lĩnh vực hướng đối tượng) Đối với các hệthống quan hệ, mặc dù đã có một số các ý kiến khong đồng tình về một số điểm,như là hình thức của ngôn ngữ truy vấn, hoặc liệu các quan hệ có thể là cá tập haycác bao đóng? Những khác biệt này nằm trong các nhiều trường hợp không sâu sắc

và có một mô hình cơ sở chung Người ta đã phát triển chính thức công nghệ thựcthi Ngày nay, chúng ta lựa chọn một cách đồng thời các đặc tả của hệ thống và tạo

ra công nghệ để hỗ trợ cho thực thi của nó

Do đó, đối với các đặc tả của hệ thống, chúng ta lấy cách tiếp cận củaDarwin: Chúng ta hy vọng rằng, ngoài tập các nguyên mẫu thực nghiệm đang đượcxây dựng, một mô hình phù hợp sẽ nổi lên Chúng ta cũng hy vọng rằng công nghệthực thi khả dụng cho mô hình đó sẽ tiến triển một cách đồng thời

Không may thay, với sự tiến triển lên xuống của của thực nghiệm, chúng tađánh liều cho ra hệ thống, không phải vì chúng là phù hợp nhất, mà bởi vì nó là hệthống đầu tiên cung cấp một tập các chức năng có ý nghĩa theo yêu cầu của thịtrường Đó là một mẫu cổ điển và có nhiều rủi ro trong lĩnh vực máy tính mà mộtsản phẩm trước đó trở thành chuẩn de factor và không bao giờ biến mất Mẫu này làđúng chí ít là cho các ngôn ngữ và các hệ điều hành (Fortran, Lisp, Cobol và SQL là

Trang 4

ví dụ tốt về các trường hợp như vậy) Tuy nhiên ta cần chú ý rằng mục đích củachúng ta ở đây không phải là để chuẩn hóa các ngôn ngữ mà là tinh chỉnh thuật ngữ.

Chúng ta vừa phân tách các đặc trưng của các hệ thống CSDL hướng đốitượng thành các mục: Đặc trưng bắt buộc – mandatory (Các đặc trưng mà hệ thốngphải thỏa mãn để khẳng định đó là CSDL hướng đối tượng, các đặc trưng tùy chọn(các đặc trưng mà có thể được bổ sung để làm cho hệ thống tốt hơn nhưng khôngphải là đặc trưng bắt buộc) và tính mở (nơi ở đó nhà thiết kế có thể lựa chọn từ một

số các giải pháp có thể chấp nhận được) Ngoài ra, có một số cách để xác định côngthức tốt nhất cho từng đặc trưng (các đặc trưng bắt buộc cũng như không bắt buộc)

Phần còn này của quyển sách này được tổ chức như sau: Phần 2 mô tả cácđặc trưng bắt buộc của một OODBS Phần 3 mô tả các đặc trưng tùy chọn và phần 4

sẽ trình bày những vấn đề dành cho các nhà thiết kế hệ thống

Cơ sở dữ liệu (CSDL) đã trở thành một bộ phận chủ yếu, không thể thiếutrong các hệ thống thông tin

Trước đây, các hệ thống thông tin (HTTT) thường sử dụng kiểu CSDL Quan

hệ Tuy nhiên, với sự phát triển của Công nghệ thông tin, CSDL Quan hệ đã dầnbộc lộ những yếu điểm và rất nhiều hạn chế, đặc biệt là trong việc xây dựng các ứngdụng có dữ liệu phức tạp, dữ liệu đa chiều, dữ liệu có nhiều mối quan hệ hay các dữliệu đa phương tiện (Multi-media) như hình ảnh, âm thanh, video,…

CSDL Hướng đối tượng là giải pháp cho các vấn đề trên Trong CSDLhướng đối tượng, dữ liệu được lưu trữ dưới dạng các đối tượng của ngôn ngữ lậptrình, nên cho phép lưu trữ được các dạng dữ liệu phức tạp, lượng thông tin lớn Các

dữ liệu không chỉ được lưu trữ đơn thuần, mà cả các hành vi của đối tượng dữ liệucũng được lưu trữ trong CSDL

Cơ sở dữ liệu Hướng đối tượng (Object-Oriented Database) là một kiểuCSDL, mà trong đó, các dữ liệu được lưu trữ dưới dạng các đối tướng Hay CSDLHướng đối tượng được xây dựng bằng cách kết hợp các yếu tố của CSDL và các kĩthuật của Lập trình Hướng đối tượng nhằm mục đích lưu trữ các đối tượng dữ liệu

Từ đó, có thể tận dụng, phát huy được những ưu điểm, lợi ích, và thế mạnh của các

kĩ thuật, công nghệ được sử dụng, đồng thời khắc phục những yếu điểm, khó khăncủa các kiểu CSDL khác

Hình sau minh họa việc tổ hợp các yếu tố của CSDL và các kĩ thuật của lậptrình hướng đối tượng để xây dựng nên CSDL hướng đối tượng

Trang 5

Hình 1: Các thành phần của CSDL hướng đối tượng

Trang 6

2 CÁC ĐẶC TRƯNG BẮT BUỘC: Các nguyên tắc vàng (golden rules)

Một CSDL hướng đối tượng phải thỏa mãn hai tiêu chí: Nó phải là một hệquản trị CSDL DBMS, và nó sẽ là một hệ thống hướng đối tượng, tức là có thể mởrộng, nó thích hợp với một số các ngôn ngữ lập trình hướng đối tượng hiện tại Tiêuchí đầu tiên có thể diễn giải thành 5 đặc trưng: Tính bền vững – persistence, bộquản lý bộ lưu trữ thứ cấp, sự đồng thời, khôi phục và các tiện ích truy vấn đặc biệt.Tiêu chí thứ 2 diễn giải thành 8 đặc trưng: Các đối tượng phức hợp, định danh đốitượng, đóng gói, kiểu hoặc lớp, thừa kế, ghi chồng tổ hợp, khả năng mở rộng vàhoàn chỉnh tính toán

2.1 Các đối tượng phức hợp - Complex objects

Các đối tượng phức hợp được xây dựng từ các đối tượng đơn giản hơn bằngcách áp dụng các cấu tử cho chúng Các đối tượng đơn giản nhất là các đối tượngnhư là các số nguyên, các ký tự, các chuỗi byte với chiều dài bất kỳ, đối tượngboolean và số thực dấu chấm động (một đối tượng có thể bổ sung các kiểu nguyên

tử khác)

Define type Person (Name string(10), Age Numeric(3))

Table Sinhvien(Person, class char(10))

Table Giaovien(Person, Khoa char(10))

Có vô số các cấu tử của đối tượng phức hợp: kiểu tuples, sets, bags, lists vàarray là các ví dụ Tập tối thiểu các cấu tử mà hệ thống cần có là tập hợp – set, danhsách list và tuple Các tập là cần thiết bởi vì chúng là cách tự nhiên để biểu diễn cáctập hợp – collection từ thế giới thực Tuples cần thiết vì chúng là cách tự nhiên đểbiểu diễn các thuộc tính của một thực thể Tất nhiên cả tập hợp và tuple đều quantrọng bởi vì chúng đạt được sự chấp thuận rỗng rãi dưới dạng các đối tượng cấu tửthông qua mô hình quan hệ Danh sách và mảng (list and array) cũng quan trọng bởi

vì chúng bao quát thứ tự mà có thể xảy ra trong thế giới thực, và chúng cũng xuấthiện trong nhiều ứng dụng khoa học ở đó người ta cần đến các ma trận hoặc dữ liệuchuỗi thời gian

Các đối tượng cấu tử phải là trực giao: bất kỳ cấu tử nào cũng cần áp dụngcho bất kỳ đối tượng nào Các cấu tử của mô hình quan hệ là không trực giao, bởi vìtập cấu tử có thể chỉ được áp dụng cho tuple và các cấu tử của tuple có thể được ápdụng với các giá trị nguyên tử

Chú ý rằng để hỗ trợ các đối tượng phức hợp cũng đỏi hỏi các toán tử thíchhợp phải được cung cấp cùng với các đối tượng đó (bất kể tổ hợp của chúng) Đó là

Trang 7

các thao tác đó trên một đối tượng phức hợp phải được nhân rộng tới tất cả cácthành phần của nó Các ví dụ bao gồm thao tác truy xuất hoặc xóa một đối tượngphức hợp toàn thể hoặc kết quả của một thao tác sao chép sâu sắc “deep” (tươngphản với sao chép nông– shallow copy ở đó các thành phần không được nhân bản,

mà thay vào đó được tham chiều bởi bản sao của đối tượng gốc) Tất nhiên, các thaotác bổ sung trên các đối tượng phức hợp có thể được định nghĩa bởi người dùng của

hệ thống (xem nguyên tắc mở rộng phần dưới) Tuy nhiên khả năng này đòi hỏi một

số hệ thống được hỗ trợ dự phòng như là hai kiểu tham chiếu khả phân biệt ( part-of” và “general”)

“is- Phân biệt set, bag, list và array

o Set: các đối tượng thuộc lớp không được trùng, không có thứ tự

o Bag: các đối tượng thuộc lớp được phép trùng, không có thứ tự

o List: các đối tượng thuộc lớp được sắp xếp theo thứ tự, truy xuất tuần

tự

o Array: các đối tượng thuộc lớp được sắp xếp theo thứ tự, truy xuất

ngẫu nhiên

Ví dụ: Định nghĩa cho class LUONG

Vì lớp LUONG chỉ gồm thông tin thuộc tính, không có thông tin về quan hệngữ nghĩa Đây là phần lớn thông tin trong đối tượng NV được tách ra thành lớpriêng nên không đặt tên cho tập đối tượng

Class LUONG

{

attribute float luong_co_ban;

attribute float luong_ngoai_gio;

attribute float thuong;

Trang 8

attribute string ten_nv;

attribute short ma_nv;

attribute LUONG luong_nv;

attribute string ho_ten;

attribute short ma_so;

attribute struct dia_ch;

relationship set <LỚP_HỌC> đăng_ký_dự

o Nếu khai báo tên tập đối tượng thuộc lớp TG thì các đối tượng này sẽ được lưu trữ riêng

Trang 9

 Ví dụ: định nghĩa cho lớp MÔN

relationship set <MÔN> có_môn_tq;

inverse <MÔN> :: là_môn_tq_của;

relationship set <MÔN> là_môn_tq_của;

inverse <MÔN> :: có_môn_tq;

Boolean mở(in unsigned short học_kỳ)

raise (đã có mở)

Boolean hủy(in unsigned short học_kỳ)

raise (không mở)

};

2.1 Định danh đối tượng – Object Identity

Định danh đối tượng đã tồn tại từ lâu trong các ngôn ngữ lập trình Các kháiniệm này có trong các CSDL gần đây Ý tưởng như sau: trong một mô hình vớiđịnh danh đối tượng, một đối tượng có một sự tồn tại mà không phụ thuộc vàochính giá trị của nó Do có hai ý niệm về đối tượng song song tồn tại: hai đối tượng

có thể giống nhau (chúng là cùng một đối tượng) hoặc có thể bằng nhau (chúng cócùng giá trị giống nhau) Điều này có 2 hàm ý: một đối tượng là đối tượng chia sẻ

và một đối tượng là các cập nhật của đối tượng

Trang 10

Đối tượng chia sẻ: Theo mô hình dựa trên định danh, hai đối tượng có thểchia sẻ một thành phần Do đó, phần trình diễn bằng hình tượng của một đối tượngphức hợp là dưới dạng đồ thị, trong khi nó được giới hạn bởi một cây trong một hệthống không có định danh đối tượng Xem xét ví dụ sau: một người có tên, tuổi, cácmột tập các đứa con Giả sử Peter và Susan đều có hai đứa trẻ 15 tuổi tên là John.Trong cuộc sống thực, có 2 trường hợp có thể xuất hiện: Susan và Peter là cha mẹcủa cùng một đứa trẻ Trong một hệ thống mà không có định danh, Peter được biểudiễn như sau:

kể trên

Cập nhật đối tượng –Object Update

Giả sử Peter và Susan thực tế là cha mẹ của một đứa trẻ có tên là John Trongtrường hợp này, tất cả các cập nhật tới con trai của Susan sẽ được áp dụng tới đốitượng John và tương tự như vậy đối tới con trai của Peter Trong một hệ thống dựavào giá trị, cả hai đối tượng con phải được cập nhật một cách riêng biệt Định danhđối tượng còn là một xử lý dữ liệu mạnh mà có thể là các tập cơ bản, tuple, xử lýđối tượng phức hợp đệ quy

Hỗ trợ định danh đối tượng ngụ ý muốn nói đến việc cung cấp các thao tácnhư gán đối tượng, sao chép đối tượng (cả sao chép sâu và nông) và kiểm tra đốivới định danh đối tượng và sự bằng nhau của đối tượng (cả sự bằng nhau sâu vànông)

Tất nhiên, người ta có thể mô phỏng định danh đối tượng trong một hệthống dựa trên giá trị Tuy nhiên, cách tiếp cận này tạo ra gánh nặng đối với người

sử dụng khi cần đảm bảo các sự duy nhất của các định danh đối tượng và khi duy trìtoàn vẹn tham chiếu (và gánh nặng này có thể có nghĩa đối với các thao tác như tậpcác dữ liệu vô nghĩa)

Trang 11

Chú ý rằng ác mô hình định danh dựa trên đối tượng là quy tắc trong cácngôn ngữ lập trình mệnh lệnh: Mỗi đối tượng được xử lý trong một chương trình cómột định danh và có thể được cập nhật Định danh này có thể có từ tên của một biếnhoặc từ một vị trí vật lý trong bộ nhớ Nhưng khái niệm này khá mới trong các hệthống quan hệ nguyên bản, ở đó các quan hệ là dựa trên giá trị.

Sự đóng gói - Encapsulation

Ý tượng của đóng gói có từ (1) sự cần thiết phải phân biệt rõ ràng giữa đặc tả

và thực thi của một thao tác và (ii) sự cần thiết của tính mô đun hóa Mô đun hóa làcần thiết đối với ứng dụng có cấu trúc phức hợp được thiết kế và thực thi bởi mộtnhóm các lập trình viên Nó cũng cần thiết dùng như một công cụ cho bảo vệ và cấpquyền

Có hai cách nhìn nhận về đóng gói: Nhìn nhận theo khía cạnh của ngôn ngữlập trình (đây là quan điểm gốc vì khái niệm được bắt nguồn từ đó) và nhìn nhậntheo hướng CSDL

Ý tưởng của đóng gói trong các ngôn ngữ lập trình bắt nguồn từ các kiểu dữliệu trừu tượng Theo khía cạnh này, một đối tượng có một phần giao diện và mộtphần thực thi Phần giao diện là đặc tả về tập các thao tác mà có thể được thực hiệntrên đối tượng Nó là phần hiện hữu duy nhất của đối tượng Phần thực thi có mộtphần dữ liệu và phần thủ tục Phần dữ liệu là biểu diễn hay trạng thái của đối tượng

ấy và phần thủ tục mô tả, trong mố số ngôn ngữ lập trình là phần thực thi của từngthao tác

Nguyên tắc diễn dịch CSDL là một đối tượng đóng gói cả chương trình lẫn

dữ liệu Trong thế giới CSDL, nó không rõ ràng liệu phần cấu trúc của kiều có hoặckhông phải là phần của giao diện (điều này phụ thuộc vào hệ thống), trong khi ở thếgiới ngôn ngữ lập trình, cấu trúc dữ liệu là phần rõ ràng của thực thi và không phải

là phần của giao diện

Xem xét ví dụ sau về một nhân viên Trong một hệ thống quan hệ, một nhânviên được biểu diễn bởi một tuple Nó được truy vấn bằng cách sử dụng một ngônngữ quan hệ và sau đó một người lập trình ứng dụng viết chương trình để cập nhậtbản ghi này nhằm để hiển thị rõ lương của nhân viên đó hoặc thực hiện sa thải nhânviên Những việc này nhìn chung có thể được viết bằng một ngôn ngữ lập trình chỉthị lệnh với các câu lệnh nhúng DML hoặc ở trong mộ ngôn ngữ lập trình thế hệ thứ

tư và được lưu trong một file hệ thống truyền thống và không có trong CSDL Do

đó, theo cách tiếp cận này có một sự phân biệt rõ nét giữa chương trình và dữ liệu,

và giữa ngôn ngữ truy vấn (cho các truy vấn phi thể thức) và ngôn ngữ lập trình đó(cho các chương trình ứng dụng)

Trang 12

Trong một hệ thống hướng đối tượng, chúng ta định nghĩa Nhân viên là mộtđối tượng có phần dữ liệu (có thể tương tự như bản ghi được định nghĩa trong hệthống quan hệ) và phần thao tác, bao gồm hai thao tác là raise và fire và các thao táckhác để truy cập dữ liệu Nhân viên Khi lưu trữ một tập các Nhân viên, cả phần dữliệu và thao tác được lưu trong CSDL.

Do đó, có một mô hình đơn giản cho dữ liệu và các thao tác, và thông tin cóthể được để ẩn Không có thao tác nào bên ngoài những thao tác được xác địnhtrong phần giao diện có thể được thực hiện Sự hạn chế này ảnh hưởng đến các thaotác cập nhật cũng như truy xuất

Đóng gói cung cấo một mẫu về “sự độc lập dữ liệu logic –logical dataindependence): Chúng ta có thể thay đổi thực hiện của một kiểu mà không cần thayđổi bất kỳ chương trình nào đang sử dụng kiểu đó Do đó, các chương trình ứngdụng được bảo vệ về những thay đổi thực thi trong các lớp thấp hơn của hệ thống

Chúng ta tin rằng đóng gói hợp lý đạt được chỉ khi các thao tác này hiện hữu,phần dữ liệu và thực thi của các thao tác được ẩn giấu

Tuy nhiên, có những trường hợp ở đó đóng gói là không cần thiết và sử dụng

hệ thống có thể được đơn giản hóa đámg kể nếu hệ thống cho phép đóng gói bị viphạm trong một số điều kiện nhất định Ví dụ, các truy vấn không theo thể thức sựcần thiết phải đóng gói được giảm bớt bởi vì các vấn đề như là tính khả duy trì làkhông quan trọng Do đó, một cơ chế đóng gói phải được cung cấp bởi mộtOODBS, nhưng xuất hiện ở những trường hợp mà sự ép buộc là không thích hợp

Các kiểu và lớp – Types and Classes

Vấn đề này bao gồm: Có hai loại hệ thống hướng đối tượng chính, đó là loại

hệ thống hỗ trợ khái niệm về lớp và loại hỗ trợ khái niệm về kiểu Ở loại đầu tiên, làcác hệ thống như là Smalltalk, Gemstone, Vision, và nhìn chung chúng cùng mộtdòng của Smalltalk, Orion, Flavors, G-base, Lore là các hệ thống bắt nguồn từ Lisp

Ở loại thứ hai, chúng ta thấy các hệ thống như là C++, Simula, Trellis, Trellis/Owl,Vbase và O2

Một kiểu – type, trong hệ thống hướng đối tượng, tổng quát hóa các đốitượng chung của một tập các đối tượng có cùng đặc điểm Nó tương ứng với kháiniệm về kiểu dữ liệu trừ tượng Nó có 2 phần: Phần giao diện – interface và phầnthực thi – implementation Chỉ có phần giao diện là hiện hữu đối với người dùngkiểu, phần thực thi của đối tượng chỉ có thể nhìn thấy bởi người thiết kế kiểu Giao

Trang 13

diện bao gồm một danh sách các thao tác cùng với các dấu hiệu của chúng (tức làkiểu của các tham số đầu vào và kiểu của kết quả).

Kiểu thực thi bao gồm phần dữ liệu và phần thao tác Trong phần dữ liệu,chúng mô tả cấu trúc bên trong của dữ liệu đối tượng Phụ thuộc vào năng lực của

hệ thống, cấu trúc của phần dữ liệu này có thể phức tạp hơn hoặc không Phần thaotác bao gồm các thủ tục thực hiện các thao tác của phần giao diện

Trong ngôn ngữ lập trình, các kiểu là các công cụ để tăng hiệu suất làm việccủa người lập trình bằng cách đảm bảo sự đúng đắn của chương trình Bằng cách ápbuộc người dùng khai báo kiểu của các biến và các biểu thức mà người đó xử lý, hệthống suy luận ra sự đúng đắn của chương trình dựa trên định kiểu thông tin Nếukiểu của hệ thống được thiết kể cẩn thận, hệ thống có thể thực hiện kiểm tra kiểu tạithời điểm biên dịch, mặt khác một số được hoãn lại trong thời gian biên dịch Do đócác kiểu thường được sử dụng chính tại thời gian biên dịch để kiểm tra sự đúng đắncủa các chương trình Nhìn chung, trong các hệ thống dựa trên kiểu, một kiểu khôngphải là lớp “công dân” đầu tiên và có các trạng thái đặc biệt và không thể được sửađổi tại thời điểm chạy chương trình

Khái niệm về lớp thì khác so với khái niệm về kiểu Đặc tả của nó cũnggiống với kiểu, nhưng nó thiên về khái niêm thời gian chạy Nó bao gồm hai khíacạnh: Một đối tượng xí nghiệp – object factory và một đối tượng kho hàng –warehouse Đối tượng xí nghiệp có thể được sử dụng để tạo ra những đối tượngmới, bằng cách thực hiện các thao tác new trên lớp hoặc bắt chước một số đối tượngnguyên mẫu đại diện của lớp đó Đối tượng kho hàng có nghĩa là được gắn vào lớpnhư là phần mở rộng của nó, tức là một tập các đối tượng là các thể hiện của lớp.Người dùng có thể xử lý kho hàng bằng cách áp dụng các thao tác trên mọi phần tửcủa lớp Các lớp không được sử dụng cho mục đích kiểm tra sự đúng đắn củachương trình mà để tạo ra và sử lý các đối tượng Trong phần lớn các hệ thống sửdụng lớp – class, các lớp là lớp “công dân” đầu tiên và như vậy có thể được xử lýtại thời gian chạy, tức là được câph nhật hoặc truyền vào dưới dạng các tham số.Trong phần lớn các trường hợp, trong khi cung cấp cho hệ thống khả năng linhđộng được cải thiện và đồng dạng, điều này làm cho việc kiểm tra kiểu thời gianbiên dịch trở nên không thể

Tất nhiên, có một số sự tương đồng lớn giữa các lớp và các kiểu, các tênđược sử dụng với cả hai nghĩa và sự khác biệt có thể không phân biệt rõ ở một số hệthống

Chúng ta không cảm thấy rằng chúng ta nên chọn một trong 2 cách tiếp cậntrên và chúng ta xem xét lựa chọn giữa hai cách đó nên được dành lại cho người

Trang 14

thiết kế hệ thống Tuy nhiên chúng ta yêu cầu hệ thống đó cần cung cấp một số hìnhthức của cơ chế cấu trúc hóa dữ liệu, là lớp hoặc kiểu Do đó, khái niệm cổ điểm vềlược đồ CSDL sẽ được thay thế bằng một tập các lớp và một tập các kiểu.

Tuy nhiên chúng ta không cảm thấy rằng điều đó là cần thiết đối với hệthống để tự động duy trì phạm vi của một kiểu (tức là tập các đối tượng của mộtkiểu được cho trong CSDL) hoặc nếu phạm vi của một kiểu được duy trì để hệthống làm cho nó khả truy cập đối với người dùng Hãy xem xét ví dụ sau về kiểuhình chữ nhật rectangle có thể được sử dụng trong nhiều CSDL bởi nhiều ngườidùng Nó không có nghĩa là về toàn bộ các hình chữ nhật rectangle được duy trì bởi

hệ thống hoặc để thực hiện các thao tác trên chúng Chúng ta nghĩ là nó là hiện thựchơn khi yêu cầu từng người dùng phải duy trì và xử lý tập các hình chữ nhất củachính họ Mặt khác, trong trường hợp một kiểu như là Nhân viên – employee, nó cóthể hỗ trợ tốt để hệ thống tự động duy trì quy mô của Nhân viên

Phân cấp chức năng theo lớp hay kiểu

Thừa kế có hai lợi ích chính: Nó là một công cụ mô hình hóa mạnh, bởi vì nóđưa ra được mô tả súc tích và chính xác về thế giới và nó giúp trong việc tạo ra cácđặc tả được chia sẽ và các thực thi trong các ứng dụng

Một ví dụ sẽ giúp minh họa khả năng hỗ trợ của hệ thống về cơ chế thừa kế.Giả sử rằng chúng ta có Nhân viên và Sinh viên Mỗi nhân viên có tên, tuổi trên 18

và lương, anh hay chị đó có thể chết, lấy chồng/vợ và được trả lương Mỗi sinh viên

có tuổi, tên và một tập các điểm thi Anh/chị sinh viên đó có thể chết, lấy chồng và

có điểm trung bình trung học tập - GPA được tính toán

Trong hệ thống quan hệ, người thiết kế CSDL xác định một quan hệ choNhân viên, một quan hệ cho Sinh viên, viết mã lệnh cho các các thao tác chết, cưới,trả lương đối với quan hệ Nhân viên, và viết mã lệnh cho chết, cưới, và tính toánđiểm trung bình trung học tập - GPA cho quan hệ Sinh viên Do đó người lập trìnhphải viết 6 chương trình

Trong hệ thống hướng đối tượng, sử dụng các thuộc tính kế thừa, chúng tanhận thay rằng các Nhân viên và Sinh viên thuộc đối tượng con người – Persons; do

đó đều có một số điểm chung (thực tế là đối tượng Person), và cũng có một số đặcđiểm cụ thể Chúng ta tạo ra một kiểu là Person có các thuộc tính gồm tên, và tuổi

và viết các thao tác chết và cưới cho kiểu này Sau đó chúng ta khai báo rằng Nhânviên là kiểu đặc biệt của con người – Persons thừa kế các thuộc tính và thao tác và

có một số thuộc tính đặc biệt khác như lương và thao tác đặc biệt là trả lương.Tương tự vậy, chúng ta khai báo kiểu Sinh viên – Student là kiểu đặc biệt củaPersons với thuộc tính đặc biệt là tập các điểm thi nhất định và một thao tác đặc biệt

Trang 15

là tính toán điểm trung bình trung học tập GPA Trong trường hợp này, chúng ta cómột cấu trúc tốt hơn và có mô tả súc tích hơn về lược đồ và chúng ta chỉ cần viết 4chương trình Thừa kế cho phép chúng ta sử dụng lại mã, bởi vì mọi chương trìnhtại mức theo đó số lớn nhất các đối tượng có thể chia sẽ nó.

Có ít nhất 4 kiểu thừa kế: Thừa kế thay thế substitution inheritance, thừa kếbao gộp inclusion inheritance, thừa kế ràng buộc và thừa kế chuyên môn hóa

specialization inheritance

Trong thừa kế thay thế, chúng ta nói rằng một kiểu t thừa kế từ một kiểu t’,nếu chúng ta có thể thực hiện nhiều thao tác trên các đối tượng thuộc kiểu t hơn làtrên kiểu t’ thì bất kỳ ở đâu mà chúng ta có một đối tượng t’ chúng ta đều có thểthay thế nó bằng một đối tượng kiểu t Kiểu thừa kế này được gọi là thừa kế dựatrên hành vi (behavior) và không phải trên giá trị

Thừa kế bao gộp tương ứng với khái niệm về sự phân loại Người ta nói rõrằng t là kiểu con của t’, nếu mọi đối tượng thuộc kiểu t cũng là đối tượng của kiểut’ Kiểu thừa kế này dựa trên cấu trúc chứ không dựa trên thao tác Một ví dụ này làmột kiểu hình vuông square với các phương thức get, set(size), fill-square,fill(color)

Thừa kế ràng buộc là trường hợp con của trường hợp thừa kế bao gộp Mộtkiểu t là một kiểu phụ của kiểu t, nếu nó bao gồm tất cả các đối tượng của kiểu tthỏa mãn một ràng buộc được cho Ví dụ teenager là lớp con của person: teenagerkhông biết nhiều hơn bất kỳ trường nào hay thao tác nào hơn persons nhưng chúngtuân thủ các ràng buộc nhất định (tuổi của chúng được giới hạn từ 13 đến 19)

Với thừa kế chuyên môn hóa, một kiểu t là một kiểu con của kiểu t’, nếu cácđối tượng của kiểu t là các đối tượng có chứa nhiều thông tin cụ thể hơn Các ví dụ

về persons và employees ở đó thông tin về employees là thông tin về persons cóthêm một vài trường bổ sung Có nhiều cấp độ của 4 kiểu thừa kế này được cungcấp bởi các hệ thống đang tồn tại, các nguyên mẫu và chúng ta không quy định mộtphong cách kế thừa cụ thể nào

Overriding, overloading và late binding

(Phân đè, nạp chồng và liên kết sau)

Tương phản với ví dụ trước, có những trường hợp ở đó người ta muốn có cùng tênđược sử dụng cho nhiều thao tác khác nau Hãy xem ví dụ sau, thao tác hiển thịdisplay: nó lấy một đối tượng làm đầu vào và hiển thị nó lên màn hình Phụ thuộc

Trang 16

vào kiểu của đối tượng, chúng ta có thể muốn sử dụng nhiều cơ chế hiển thị khácnhau Nếu đối tượng là một bức ảnh, chúng ta muốn nó xuất hiện trên màn hình.Nếu đối tượng đó là một người, chúng ta muốn một số dạng mẫu của một tupleđược in Cuối cùng nếu đối tượng là đồ thị, chúng ta sẽ biểu diễn chúng dưới dạng

đồ thị Xét ví dụ về hiển thị một tập, kiểu của các thành viên thuộc tập là khôngđược biết ở thời gian biên dịch

Trong một ứng dụng sử dụng một hệ thống thông lệ, chúng ta có 3 thao tác là :hiển hiện người –display-person, hiển thị bitmap – display-bitmap và hiển thị đồhọa Người lập trình sẽ kiểm tra kiểu của từng đối tượng trong tập đó và sử dụngcác thao tác hiển thị tương ứng Điều này áp đặt các nhà lập trình cần phải đảm bảotất cả cá kiểu có thể có của đối tượng trong tập, để đảm bảo thao tác hiển thị liênquan và sử dụng nó một cách phù hợp

for x in X do display(x)

Ở đây, chúng ta đạt được một lợi ích khác: giai đoạn thực thi vẫn viết cùng

số các chương trình Nhưng các lập trình viên không phải lo lắng về 3 chương trìnhkhác nhau Hơn nữa mã nguồn là đơn giản và không có câu lệnh case nào trên kiểu.Cuối cùng mã đó có khả năng duy trì tốt hơn khi một kiểu mới được tạo ra dướidạng một thể hiện mới của kiểu đó được thêm vào, và chương trình hiển thị sẽ tiếp

Trang 17

tục công việc mà không cần có sự sửa đổi (cho phép chúng ta ghi đè phương thứchiển thị cho kiểu mới).

Để có thể cung cấp những tính năng mới này, hệ thống không thể chỉ bóbuộc với các thao tác với tên – name đối với các chương trình ở thời điểm biên dịch

Do đó, thao tác trên tên – name phải được giải quyết (diễn dịch thành địa chỉchương trình) tại thời điểm chạy Việc diễn dịch bị trễ này được gọ là late binding

Computational completeness (Tính toán hoàn chỉnh)

Từ quan điểm ngôn ngữ, đặc tính này là hiển nhiên: nó có nghĩa dơn giản làngười ta có thể biểu diễn bất kỳ chức năng tính toán nào bằng cách sử dụng DMLcủa hệ thống CSDL Theo quan điểm CSDL đây là một tính mới ví dụ như SQL làchưa hoàn chỉnh

Chúng ta không biện hỗ ở đây rằng các nhà thiết kế các hệ thống CSDLhứớng đối tượng thiết kế ra ngôn ngữ lập trình mới: Tính toán hoàn chỉnh có thểđược tạo ra qua một kết nối chấp nhận được đối với ngôn ngữ lập trình đang tồn tại.Phần lớn các hệ thống thực tế sử dụng một ngôn ngữ lập trình đang tồn tại

Chú ý rằng điều khác nhau ở đây là “resource complete”, tức là có khả năngtruy nhập tới mọi tài nguyên của hệ thống (ví dụ màn hình, truyền thông từ xa) bêntrong ngôn ngữ Do đó, hệ thống, thậm chính có hoàn chỉnh tính toán cũng khôngthể biểu diễn một ứng dụng hoàn chỉnh Tuy nhiên nó mạnh hơn một hệ thốngCSDL mà chỉ có lưu trữ và truy xuất dữ liệu và thực hiện các tính toán đơn giảntrên các giá trị nguyên tử

Extensibility (Tính mở rộng)

Hệ thống CSDL ra đời với một tập các kiểu định trước Các kiểu này có thểđược sử dụng theo mong muốn của người lập trình để viết các ứng dụng của họ.Tập kiểu này phải có khả năng mở rộng theo các hướng: có một phương tiện đểđịnh nghĩa các kiểu mới và không có sự phân biệt trong cách sử dụng giữa hệ thốngđược định nghĩa và các kiểu người dùng tự định nghĩa Tất nhiên, có thể có mộtcách thức khác mạnh hơn theo đó kiểu định sẵn của hệ thống và kiểu do người dùng

tự định nghĩa đều được hỗ trợ bởi hệ thống, nhưng điều này sẽ là vô hình đối vớiứng dụng và đối với người lập trình ứng dụng Gọi lại các định nghĩa kiểu này baogồm định nghĩa các thao tác trên kiểu Chú ý rằng các yêu cầu về đóng gói ngụ ý

Ngày đăng: 24/11/2022, 16:56

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

TÀI LIỆU LIÊN QUAN

w