bài giảng môn nguyên lý các ngôn ngữ lập trình C6

20 715 2
bài giảng môn nguyên lý các ngôn ngữ lập trình C6

Đ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

Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại BÀI 6: CÁC KHÁI NIỆM TRONG NGÔN NGỮ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Trên 40 năm, lập trình hướng đối tượng trở thành xu thiết kế cài đặt phần mềm hứa hẹn Các vấn đề trình bày chương thiết kế hướng đối tượng bốn khái niệm ngôn ngữ lập trình hướng đối tượng cách mà khái niệm ngôn ngữ hỗ trợ thiết kế cài đặt hướng đối tượng Đối tượng bao gồm tập thao tác liệu ẩn giấu Một đặc trưng quan trọng đối tượng chúng cung cấp cách thống đóng gói hầu hết kết hợp liệu chức Đối tượng nhỏ số nguyên lớn hệ thống file sở liệu Không phụ thuộc vào kích thước, tương tác với đối tượng xảy qua môi trường thao tác đơn giản mà gọi thông điệp hay lời gọi hàm thành viên Trong sách này, quan tâm đến việc phân biệt có ý nghĩa tính chất ngôn ngữ khác hiểu cách tính chất hỗ trợ kiểu lập trình khác Do đó, thuật ngữ ngôn ngữ lập trình hướng đối tượng sử dụng để nói ngôn ngữ lập trình mà có đối tượng bốn tính chất nhấn mạnh chương này: tìm kiếm động, trừu tượng, kiểu kế thừa 2.1 Thiết kế hướng đối tượng Thiết kế hướng đối tượng bao gồm xác định khái niệm quan trọng sử dụng đối tượng để cấu trúc cách mà khái niệm thể hệ thống phần mềm Các bước sau thiết kế hướng đối tượng đề xuất Grady Booch (Object-Oriented Design with Applications, Benjamin/Cumming, 1991) : • Xác định đối tượng mức trừu tượng cho • Xác định ngữ nghĩa (hành vi mong muốn) đối tượng • Xác định quan hệ đối tượng • Cài đặt đối tượng Thiết kế hướng đối tượng trình lặp dựa việc gắn kết đối tượng với thành phần hệ thống Quá trình lặp thông thường cài đặt đối tượng việc sử dụng số đối tượng con, giống cài đặt thủ tục việc gọi số thủ tục nhỏ Do đó, sau số đối tượng quan trọng hệ thống xác định cài đặt mức trừu tượng, bước lặp xác định tiếp đối tượng cài đặt chúng Quan hệ đối tượng quan hệ giao diện chúng quan hệ cài đặt chúng Ngôn ngữ lập trình hướng đối tượng đại cung cấp chế để sử dụng quan hệ giao diện quan hệ cài đặt trình thiết kế cài đặt Các cấu trúc liệu sử dụng ví dụ trước lập trình top-down rẩt đơn giản tồn bất biến trình làm mịn chương trình Khi việc làm oạAn toàn bảo mật thông itn 13 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại mịn bao gồm thay thủ tục thủ tục chi tiết hơn, ngôn ngữ lập trình cấu trúc Algol, Pascal C đáp ứng Tuy nhiên, toán phức tạp hơn, thủ tục cấu trúc liệu chương trình cần làm mịn Vì đối tượng kết hợp hàm liệu, ngôn ngữ lập trình hướng đối tượng hỗ trợ làm mịn kết hợp hàm liệu hiệu so với ngôn ngữ hướng thủ tục 2.2 Bốn khái niệm ngôn ngữ hướng đối tượng Mọi ngôn ngữ lập trình hướng đối tượng có dạng đối tượng Như nói mục trước, đối tượng bao gồm hàm liệu, truy cập qua giao diện chuyên biệt Trong ngôn ngữ lập trình hướng đối tượng phổ cập, bao gồm Smalltalk, Modula-3, C++, Java, việc cài đặt đối tượng xác định lớp class Trong ngôn ngữ này, tạo đối tượng việc tạo instance lớp chúng Các phần hàm đối tượng gọi phương thức methods hàm thành viên member functons; phần liệu đối tượng gọi biến khởi tạo instance variables, trường fields thành viên liệu data members Ngôn ngữ lập trình với đối tượng lớp thông thường cung cấp tìm kiếm động, trừu tượng, kiểu kế thừa Đây bốn khái niệm quan trọng ngôn ngữ lập trình hướng đối tượng Chúng tóm tắt sau : 14 • Tìm kiếm động (Dynamic lookup) có nghĩa thông điệp gửi tới đối tượng, mã hàm (hoặc phương thức) thực thi xác định theo cách mà đối tượng cài đặt, tính chất tĩnh trỏ biến sử dụng để định danh đối tượng Nói cách khác, đối tượng chọn cách phản hồi đến thông điệp đối tượng khác phản hồi khác đến thông điệp • Trừu tượng (Abstraction) có nghĩa chi tiết cài đặt ẩn giấu bên đơn vị chương trình với giao diện riêng biệt Đối với đối tượng, giao diện thông thường bao gồm tập public functions (hoặc public methods) mà thao tác liệu ẩn giấu • Kiểu (Subtyping) có nghĩa đối tượng a có chức đối tượng khác b, ta sử dụng a tình chờ đợi b • Kế thừa (Inheritance) khả tái sử dụng định nghĩa kiểu đối tượng để định nghĩa kiểu khác đối tượng An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Các thuật ngữ định nghĩa tính chất trình bày chi tiết mục sau: Sau số dạng ngôn ngữ lập trình hướng đối tượng mà không trình bày trực tiếp tài liệu Một dạng ngôn ngữ dựa việc ủy quyền Hai ngôn ngữa dựa ủy quyền Dylan, ban đầu thiết kế cho trợ lý chương trình Apple Newton, Self ngôn ngữ đa dụng phát triển từ việc nghiên cứu cài đặt ngôn ngữ hướng đối tượng Trong ngôn ngữ dựa ủy quyền, đối tượng định nghĩa trực tiếp từ đối tượng khác phương thức bổ sung phương tiện method addition phương thức cũ thay phương tiện method override Mặc dù ngôn ngữ dựa ủy quyền class, chúng có bốn tính chất đặc trưng chất đòi hỏi ngữ hướng đối tượng 2.2.1 Tìm kiếm động Trong ngôn ngữ hướng đối tượng nào, có số cách triệu gọi thao tác gắn kết với đối tượng Cú pháp tổng quát để triệu gọi thao tác đối tượng, với đối số bổ sung Trong Smalltakl, gọi ‘gửi thông điệp đến đối tượng’, trong C+ + gọi ‘gọi hàm thành viên đối tượng’ Để tránh việc chuyển tới, chuyển lui lựa chọn khác thuật ngữ, sử dụng thuật ngữ Smalltalk phần lại mục Trong thuật ngữ Smalltalk, thông điệp bao gồm tên thao tác tập đối số bổ sung Khi thông điệp gửi tới đối tượng, đối tượng phản hồi tới thông điệp cách thực thi hàm gọi phương thức Dynamic lookup có nghĩa phương thức lựa chọn động thời gian thực tùy thuộc vào cài đặt đối tượng mà nhận thông điệp Tính chất quan trọng tìm kiếm động đối tượng khác cài đặt thao tác theo cách khác Chẳng hạn, lệnh gửi thông điệp add(y) đến đối tượng x Nếu đối tượng x số nguyên, phương thức (code cài đặt thao tác này) cộng số nguyên y vào x Nếu x tập hợp, phương thức chèn y vào x Các thao tác có tác động khác oạAn toàn bảo mật thông itn 15 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại cài đặt khác Tuy nhiên, dòng mã lệnh x -> add(y) vòng lặp tạo việc cộng số nguyên lần đầu thực chèn tập hợp lần hai thực hiện, giá trị biến x thay đổi từ số nguyên thành tập hợp lần qua vòng lặp Tìm kiếm động bị nhầm lẫn với tải động (overloading), mà chế dựa kiểu phép toán tĩnh Tuy nhiên, hai khái niệm hoàn toàn khác nhau, thấy Tìm kiếm động tính chất ngôn ngữ có ích phần quan trọng lập trình hướng đối tượng Xét ví dụ sau, chương trình đồ họa đơn giản, mà thao tác hình vẽ chứa hình chữ nhật, đường tròn tam giác Mỗi đối tượng hình chữ nhật chứa phương thức vẽ draw với mã để vẽ hình chữ nhật, đối tượng đường tròn chứa phương thức vẽ draw với mã để vẽ đường tròn, … Khi chương trình muốn hình vẽ cho trước, việc gửi thông điệp draw đến hình hình vẽ làm việc Phần chương trình mà gửi thông điệp draw trước dạng hình nhận thông điệp Thay vào đó, hình nhận thông điệp draw biết cách vẽ hình Điều hoàn toàn có nghĩa người cài đặt hình cụ thể biết rõ cách vẽ dạng hình Chúng ta cần phải hiểu số khía cạnh tìm kiếm động phạm vi việc sử dụng so sánh ngắn gọn với kiểu liệu trừu tượng Sử dụng chế kiểu liệu trừu tượng, ta định nghĩa ma trận sau : Đặc trưng cài đặt ma trận hàm add nhận hai ma trận đối số, với lời gọi có dạng Khai báo kiểu ma trận thao tác gắn kết có phạm vi riêng Trong phạm vi này, add tham chiếu cụ thể đến hàm khai báo cho ma trận Do đó, biểu thức add(x,y), hai biến x y cần phải ma trận Nếu add định nghĩa cho số phức phạm vi bên ngoài, khai báo giấu khai báo ngôn ngữ cần phải cung cấp chế tải chồng tĩnh 16 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Với đối tượng ngôn ngữ dựa vào lớp, khai báo ma trận sau Phương thức add ma trận yêu cầu có ma trận đối số Phương thức triệu gọi biểu thức sau Trong biểu thức trên, thao tác add dường có đối số ma trận mà cộng vào ma trận x mà nhận thông điệp add(y) Có số cách mà tìm kiếm động cài đặt Trong cài đặt, đối tượng chứa trỏ đến bảng tìm kiếm phương thức mà gắn kết thân phương thức với thông điệp định nghĩa cho đối tượng Khi thông điệp gửi đến đối tượng thời gian chạy, phương thức tương ứng chọn từ bảng phương thức đối tượng Vì đối tượng khác có bảng tìm kiếm khác nhau, việc gửi thông điệp đến đối tượng khác có kết việc thực thi đoạn code khác Cũng nghĩ tìm kiếm động dạng thời gian chạy tải chồng Cụ thể hơn, nghĩ tên phương thức tên hàm tải chồng Khi thông điệp m gửi đến đối tượng có tên biến x, x xử lý đối số hàm tải chồng có tên m Tuy nhiên, không giống tải chồng thông thường, code thực thi cần chọn phù hợp với giá trị thời gian chạy x Ngược lại, tải chồng truyền thống sử dụng kiểu tĩnh biến x để định code sử dụng Tìm kiếm động phần quan trọng Smalltalk, C++ Java Trong Smalltalk Java, phương thức lookup thực động theo mặc định Trong C++, có hàm thành viên ảo chọn động Có họ ngôn ngữ lập trình hướng đối tượng mà dựa việc tải chồng thời gian chạy tìm kiếm động Thiết kế bật dạng hệ thống đối tượng Lisp phổ biến (CLOS – common Lisp object system) Trong CLOS, biểu thức tương ứng với oạAn toàn bảo mật thông itn 17 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại xử lý lời gọi f(x,y,z) đến hàm tải chồng với ba đối số Mặc dù tìm kiếm động thông thường chọn thân hàm f dựa cài đặt x, tìm kiếm phương thức CLOS sử dụng ba đối số Tính chất gọi gửi lặp để phân biệt với ngôn ngữ gửi đơn truyền thống hơn, có đối số hàm (đối tượng nhận thông điệp) xác định thân hàm mà gọi thời gian chạy Gửi lặp (multiple dispatch) có ích cài đặt thao tác nhau, phép so sánh tương ứng sử dụng phụ thuộc vào kiểu động đối tượng nhận đối tượng đối số Mặc dù gửi lặp theo số cách tổng quan gửi đơn Smalltalk, C++ vfa Java, có sựu mất tính đóng gói Đặc biệt, để xác định hàm kiểu khác đối số, mà hàm cần truy cập đến liệu bên đối số hàm Vì ngôn ngữ gửi đơn dòng hướng đối tượng, nên tập trung vào ngôn ngữ gửi đơn tài liệu 2.2.2 Trừu tượng Như bàn chương trước, trừu tượng bao gồm hạn chế truy cập đến thành phần chương trình tùy theo giao diện đặc tả Trong ngôn ngữ lập trình đại, truy cập đến đối tượng hạn chế đến tập thao tác public mà chọn người thiết kế cài đặt đối tượng Chẳng hạn, chương trình mà thao tác hình đồ họa, hình biểu diễn đối tượng Chúng ta cài đặt đối tượng biểu diễn đường tròn việc lưu trữ tâm bán kính đường tròn Người thiết kế đối tượng đường tròn chọn hàm thay đổi tâm đường tròn phần giao diện không đặt hàm vào giao diện Nếu hàm public để thay đổi tâm đường tròn, client code thay đổi tâm đường tròn, client code thao tác đối tượng thông qua giao diện chúng Trừu tượng dựa đối tượng tương tự theo nhiều khía cạnh trừu tượng dựa kiểu liệu trừu tượng Các đối tượng kiểu liệu trừu tượng hai kết hợp hàm với liệu, trừu tượng hai trường hợp bao gồm việc phân biệt giao diện công khai cài đặt riêng Tuy nhiên, đặc trưng khác ngôn ngữ hướng đối tượng làm cho trừu tượng ngôn ngữ hướng đối tượng linh hoạt trừu tượng kiểu liệu trừu tượng sử dụng Một cách để hiểu linh hoạt ngôn ngữ hướng đối tượng xem cách mà quan hệ trừu tượng tương tự sử dụng để chứng tỏ ưu 18 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Xét hai kiểu liệu trừu tượng viết theo cú pháp ML Cái thứ kiểu liệu trừu tượng hàng đợi, thứ hai kiểu liệu trừu tượng hàng đợi ưu tiên Để đơn giản, hai hàng đợi hàng đợi ưu tiên định nghĩa cho liệu số nguyên: Trong kiểu liệu trừu tượng này, hàng đợi biểu diễn qua danh sách Thao tác add sử dụng phép toán bổ sung @ ML để chèn phần tử vào cuối danh sách Phép toán first rest đọc loại bỏ phần tử khỏi đầu danh sách Vì client code thao tác trực tiếp biểu diễn hàng đợi, cài đặt trì bất biến: phần tử List xuất theo thứ tự vào trước/ra trước, cho dù hàng đợi sử dụng chương trình client Hàng đợi ưu tiên tương tự hàng đợi, ngoại trừ phần tử loại bỏ theo thứ tự ưu tiên Cụ thể hơn, ưu tiên cho trước cho phần tử, phép toán first remove đọc loại bỏ phần tử hàng đợi mà có độ ưu tiên cao oạAn toàn bảo mật thông itn 19 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Giao diện kiểu liệu trừu tượng danh sách hàm công khai kiểu chúng Hàng đợi hàng đợi ưu tiên có giao diện Cả hai có số thao tác nhau, thao tác có tên thao tác có kiểu hai trường hợp ngoại trừ khác biệt tên kiểu pqueue queue Điểm nhấn ví dụ là, giao diện hàng đợi hàng đợi ưu tiên nhau, tương ứng không sử dụng ngôn ngữ truyền thống với kiểu liệu trừu tượng Trái lại cài đặt hàng đợi hàng đợi ưu tiên ngôn ngữ hướng đối tượng, cần sử dụng tính ưu việt tương tự giao diện hai cấu trúc liệu Nhược điểm kiểu liệu trừu tượng sử dụng ML ngôn ngữ tương tự lộ rõ xét chương trình mà sử dụng hai hàng đợi hàng đợi ưu tiên Chẳng hạn, giả sử xây dựng hệ thống với số hàng chờ, bệnh viện Trong phận khám bệnh bệnh viện, khách hàng phục vụ theo nguyên tắc đến trước phục vụ trước Tuy nhiên, phòng cấp cứu, bệnh nhân chữa theo thứ tự tính nghiêm trọng vết thương đau đớn Trong chương trình bệnh viện, xử lý hàng đợi ưu tiên hàng đợi thông thường Chẳng hạn, đếm số người chờ hàng đợi vào bệnh viện Để viết đoạn code này, muốn có danh sách hai hàng đợi hàng ưu tiên bệnh viện tính tổng độ dài hàng đợi danh sách Tuy nhiên, thao tác tính độ dài khác hàng đợi hàng đợi ưu tiên, phải định gọi q-length pq-length, thao tác xác định liệu Nhược điểm kiểu liệu trừu tượng thông thường loại bỏ ngôn ngữ lập trình hướng đối tượng cách kết hợp kiểu tìm kiếm động Cài đặt hàng đợi ưu tiên cho ta nhược điểm khác kiểu liệu trừu tượng truyền thống Mặc dù hàm add hàng đợi ưu tiên khác với hàm add hàng đợi, năm hàm khác có cài đặt giống Trong ngôn ngữ hướng đối tượng, có 20 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại thể sử dụng kế thừa để định nghĩa hàng đợi ưu tiên từ hàng đợi (hoặc ngược lại), cho thêm hàm add tái sử dụng hàm lại 2.2.3 Kiểu Kiểu quan hệ kiểu mà cho phép giá trị kiểu sử dụng vào chỗ giá trị kiểu khác Mặc dù đơn giản mô tả kiểu ngữ cảnh ngôn ngữ lập trình kiểu tĩnh, quan hệ kiểu ẩn ngôn ngữ lập trình không kiểu Chúng ta bàn tới kiểu với giả thiết ngôn ngữ kiểu Trong hầu hết ngôn ngữ kiểu, áp dụng hàm f cho đối số x đòi hỏi quan hệ kiểu f kiểu x Trong trường hợp chung f cần phải hàm từ kiểu A vào kiểu B A, B đó, x cần biến biểu thức kiểu A Chúng ta cần nghĩ so sánh kiểu so sánh Kiểm tra kiểu tìm kiểu A -> B cho hàm f kiểu C cho x, kiểm tra A=C không Trong ngôn ngữ có kiểu (subtyping), có quan hệ kiểu kiểu Nguyên tắc gắn kết với kiểu khả thay thế: A kiểu B, biểu thức kiểu A sử dụng lỗi kiểu tình mà đòi hỏi biểu thức kiểu B Chúng ta viết AB cho hàm f kiểu C cho x, kiểm tra xem C có kiểu A không Ưu điểm subtyping cho phép thao tác thống kiểu liệu khác Chẳng hạn, subtyping làm cho có cấu trúc liệu không đồng chứa đối tượng thuộc kiểu khác kiểu chung Xét ví dụ hàng đợi chứa tài khoản ngân hàng khác cần phải cân đối Các tài khoản tài khoản tiết kiệm, séc, đầu tư, … Tuy nhiên, kiểu tài khoản kiểu bank_account, hàng đợi phần tử kiểu bank_account chứa kiểu tài khoản oạAn toàn bảo mật thông itn 21 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Subtyping ngôn ngữ hướng đối tượng cho phép chức bổ sung mà không cần điều chỉnh phần chung hệ thống Nếu đối tượng kiểu B hành vi mong muốn đó, ta thay đối tượng kiểu B đối tượng kiểu A khác mà có hành vi mong muốn Trong nhiều trường hợp, kiểu A kiểu B Bằng việc thiết kế ngôn ngữ, cho thay phép, ta bổ sung chức theo cách mà không cần thay đổi chương trình gốc Việc sử dụng subtyping cho phép xây dựng loạt mẫu hệ thống lập lịch sân bay Trong mẫu trước đây, định nghĩa class airplane với phương thức position, orientation, acceleration mà cho phép đối tượng tháp điều hành tác động hướng tiếp đất máy bay Và có lẽ kiểu máy bay khác cần mô hình hóa Nếu ta muốn bổ sung lớp cho Boeing 757 Beechcarft, cần phải có kiểu máy bay, chứa phương thức trường bổ sung phản ánh đặc trưng riêng biệt máy bay này, thuật toán điều hành chung mà áp dụng cho máy bay sử dụng cho Boeing 757 Beechcarft không cần chirng sửa 2.2.4 Kế thừa Kế thừa tính chất ngôn ngữ mà cho phép đối tượng định nghĩa từ có Chúng ta bàn luận dạng kế thừa mà xuất hầu hết ngôn ngữ hướng đối tượng dựa lớp việc sử dụng khái niệm trung lập Class A định nghĩa đối tượng với liệu riêng v phương thức công khai f g Chúng ta định nghĩa class B cách kế thừa khai báo A, định nghĩa lại g bổ sung biến riêng w: 22 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Về mặt nguyên tắc, kế thừa cài đặt cách nhân code Với đối tượng lớp đối tượng định nghĩa kế thừa, có định nghĩa tương ứng mà không kế thừa: nhận cách mở rộng định nghĩa mà code kế thừa nhân Quan trọng kế thừa tiết kiệm nỗ lực nhân code lớp cài đặt kế thừa từ lớp khác, thay đổi tác động sang tác động khác Nó có nêm chặt quan trọng mặt bảo trì chỉnh sửa code Cài đặt trực tiếp kế thừa mà ngăn việc nhân xây dựng cấu trúc liệu liên kết bảng tìm kiếm phương thức Cụ thể hơn, với lớp, bảng tìm kiếm cần phải chứa danh sách thao tác gắn kết với lớp Khi lớp kế thừa từ lớp khác, lớp thứ hai chứa trỏ đến bảng tìm kiếm lớp thứ Nếu phương thức kế thừa, tìm kiếm bảng tìm kiếm phương thức lớp mà định nghĩa gốc Tối ưu quan trọng thực ngôn ngữ kiểu tĩnh C++, tập thông điệp đến đối tượng xác định thời gian dịch Nếu bảng tìm kiếm xây dựng cho lớp lớp cho lưu trỏ lặp vị trí tương đối nhau, offset phương thức bảng tìm kiếm tính thời gian dịch Điều làm giảm giá tìm kiếm phương thức đến việc định hướng đơn giản mà không cần tìm kiếm, theo lời gọi hàm thông thường Chúng ta xem xét cài đặt kế thừa chi tiết chương sau Kế thừa trừu tượng Trong modules kiểu liệu thông thường, có hai cách nhìn trừu tượng: cách nhìn client cách nhìn cài đặt Với kế thừa, có ba cách nhìn lớp: cách nhìn cài đặt, cách nhìn client cách nhìn kế thừa Cách nhìn kế thừa cách nhìn lớp mà kế thừa từ lớp Vì định nghĩa đối tượng có hai clients bên ngoài, có hai giao diện bên ngoài: danh sách giao diện công khai mà client tổng quát có nhìn thấy, danh sách giao diện protected mà người bên nhìn thây (Thuật ngữ lấy từ C++) Trong đa số ngôn ngữ, giao diện công khai tập giao diện protected Trong Smalltalk, giao diện sinh tự động: giao diện công khai bao gồm phương thức đối tượng, giao diện protected phương thức biến khởi tạo Trong C++ người lập trình khai báo tường minh thành phần đối tượng công khai thành phần private visible định nghĩa lớp Chúng ta trao đổi kỹ chương sau 2.2.5 Closures đối tượng Đặc trưng thứ đối tượng, tìm kiếm động, cung cấp ghi (thuật ngữ Pascal ML) structs (thuật ngữ C) Trong ngôn ngữ với closures, mô đối tượng cách sử dụng ghi mà có thành phần hàm Nếu đối tượng có liệu private (hoặc hàm số), chúng oạAn toàn bảo mật thông itn 23 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại ta giấu chúng cách sử dụng phạm vi tĩnh Nó dẫn ta đến việc tìm kiếm closures ghi mô hình đối tượng Sẽ học tốt xem khái niệm có ích không Ký hiệu #field_name(record_value) ký hiệu ML cho việc chọn trường Trong cú pháp tựa Pascal, biểu thức viết record_value.field_name Hàm newStack trả ghi với hai thành phần, thành phần thứ gọi push, thành phần thứ hai gọi pop Vì trường ghi chứa hàm, chúng biểu diễn thời gian chạy closures Các trỏ môi trường cho closures trỏ đến ghi kích hoạt cho hàm newStack mà lưu liệu cục store Giá trị ban đầu store danh sách chứa phần tử ban đầu truyền đối số newStack Nếu bạn lấy ghi kích hoạt closures, bạn nhận sơ đồ mà giống với mà vẽ để biểu diễn đối tượng Tuy nhiên, ngôn ngữ hướng đối tượng tối ưu biểu diễn theo cách Vì closures đối tượng chất có chức giống nhau, lý ta nói lập trình hướng đối tượng thay lập trình hướng closures Nói cách khác ngôn ngữ lập trình hướng đối tượng làm mà ML không làm Câu trả lời subtyping kế thừa Nếu chuyển chương trình hướng đối tượng ngôn ngữ không hướng đối tượng, bạn đánh giá hỗ trợ ngôn ngữ subtyping kế thừa 2.2.6 Kế thừa subtyping Có thể nhầm lẫn chung xung quanh ngôn ngữ lập trình hướng đối tượng khác kiểu kế thừa Sự khác đơn giản kiểu kế thừa : kiểu quan hệ giao diện, kế thừa quan hệ cài đặt 24 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Một lý mà kiểu kế thừa thường bị nhầm lẫn chế lớp kết hợp hai Ví dụ điển hình C++, A công nhận chương trình dịch kiểu B, B lớp sở công khai A Kết hợp kiểu kế thừa định thiết kế lựa chọn, nhiên C++ thiết khác không cần liên kết kiểu với lớp sở công khai theo cách Chúng ta thấy, nguyên tắc, kiểu kế thừa cạnh cách xét ví dụ đề xuất nhà nghiên cứu hướng đối tượng, Alan Snyder Giả sử quan tâm đến việc viết chương trình mà đòi hỏi dequeues, stacks, queues Ở có ba kiểu cấu trúc tương tự, với đặc trưng sau: - Queues: cấu trúc liệu với thao tác insert delete, cho phần tử đầu chèn phần tử đầu loại bỏ (first in, first out) - Stacks: cấu trúc liệu với thao tác insert delete, cho phần tử đầu chèn phần tử cuối loại bỏ (last in, first out) - Dequeues : cấu trúc liệu với hai thao tác insert delete Dequeue hàng đợi kết thúc hai đầu, chất danh sách mà cho phép chèn xóa từ đầu Nếu phần tử chèn vào đầu, phần tử trả từ dãy phép removes từ đầu cuối trả từ dãy phép removes từ đầu ngược lại Phần quan trọng quan hệ stacks, queues dequeues dequeue coi stack queue hai đầu Cụ thể, giả thiết dequeue có thao tác insert insert_front insert_rear thao tác xóa delete_front delete_rear Nếu ta muốn sử dụng insert_front delete_rear, có hàng đợi Tuy nhiên, ta sử dụng insert_front delete_front, ta có ngăn xếp Một cách cài đặt ba lớp trước hết cài đặt dequeue sau cài đặt stack queue việc hạn chế cách thích hợp (và đổi tên) thao tác dequeue Chẳng hạn, nhận stack từ dequeue cách hạn chế truy cập đến thao tác add remove phần tử từ đầu cuối dequeue Tương tự, nhận queue từ dequeue cách hạn chế truy cập đến thao tác add phần tử từ đầu cuối remove phần tử từ đầu Phương pháp định nghĩa stack queue việc kế thừa từ dequeue thực C++ qua việc sử dụng kế thừa private (Điều không phong cách cài đặt mong muốn, ví dụ sử dụng đơn giản để minh họa cho khác biệt subtyping kế thừa) Mặc dù stack queue cài đặt từ dequeue, chúng subtypes dequeue Xét hàm f mà nhận dequeue d đối số sau add phần tử từ hai đầu d Nếu stack queue subtypes dequeue, hàm f cần làm việc tốt cho trước stack s queue q Tuy nhiên, thêm phần tử vào hai đầu không hợp lệ stack queue, stack queue không oạAn toàn bảo mật thông itn 25 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại subtypes dequeue Thực tế, điều ngược lại Dequeue kiểu stack queue, thao tác stack queue thao tác hợp lệ dequeue Vì vậy, kế thừa subtyping quan hệ khác mặt nguyên tắc: hoàn toàn có lý định nghĩa stack queue kế thừa từ dequeue, dequeue subtypes stack queue, ngược lại 2.3 Cấu trúc chương trình Có số khác hệ thống chương trình cấu trúc định hướng hàm (hay gọi hướng thủ tục) chương trình hướng đối tượng Một khác biệt tổ chức hàm liệu Trong lập trình hướng hàm, liệu hàm khai báo riêng biệt Nếu hàm áp dụng cho nhiều kiểu liệu, nói chung sử dụng dạng phân chia trường hợp lệnh switch thân hàm Trong chương trình hướng đối tượng, hàm gắn kết với liệu mà chúng thiết kế để thao tác Sử dụng tìm kiếm động, việc cài đặt ngôn ngữ lập trình lựa chọn hàm cho loại liệu Sự khác chương trình hướng hàm hướng đối tượng thể qua phép so sánh Ví dụ 6.1 6.2 Các ví dụ dài mô tả điều này, viết C C++ mô tả phụ đề B.1 Trong hai Ví dụ 6.1 6.2 xem xét bối cảnh bệnh viện Dữ liệu ví dụ thể doctors, nurses orderly (người phục vụ) Các hàm áp dụng cho kiểu liệu bao gồm hàm thể thông tin employee bệnh viện hàm để thiết lập xác định việc trả thù lao cho employee Ví dụ 6.1 Tổ chức hướng hàm truyền thống Trong chương trình hướng hàm truyền thống, thao tác nhóm lại thành hàm Nếu muốn hàm đơn thể thông tin kiểu nhân viên bệnh viện, ta sử dụng việc kiểm tra thời gian chạy để xác định áp dụng thao tác liệu cho Về tổng thể, codes để thể hàm trả thù lao trông sau: 26 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Ví dụ 6.2 Tổ chức hướng đối tượng Trong chương trình hướng đối tượng, hàm nhóm lại với liệu mà chúng thiết kế để thao tác Đối với ví dụ bệnh viện, lớp doctor, nurse orderly chứa code cho hai hàm Về tổng thể, tạo tổ chức chương trình sau: So sánh ví dụ 6.1 6.2 Dữ liệu thao tác sử dụng ví dụ 6.1 6.2 xếp vào ma trận sau Trong tổ chức hướng hàm truyền thống, code săp xếp thành hàng vào hàm mà làm việc với kiểu liệu Trong tổ chức hướng đối tượng, code xếp thành cột, nhóm trường hợp với kiểu liệu mà thiết kế cho kiểu oạAn toàn bảo mật thông itn 27 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Trong tổ chức hướng hàm, dễ dàng thêm thao tác mới, PayBonus Promote, khó bổ sung kiểu liệu Administrator Intem Trong tổ chức hướng đối tượng, dễ dàng bổ sung kiểu liệu Administrator Intem, rắc rối để thêm thao tác PayBonus Promote, bao gồm thay đổi lớp 2.4 Mẫu thiết kế (Design patterns) Phương pháp mẫu thiết kế tiếp cận phổ biến cho thiết kế phần mềm mà phát triển với lớn mạnh lập trình hướng đối tượng Trong thuật ngữ bản, design pattern giải pháp tổng quát mà đến từ việc trích dẫn lặp vấn đề tương tự Thiết kế mẫu giải pháp phát triển từ nguyên lý code mẫu mà đơn giản khởi tạo cho nhiều mục đích Thay vào đó, mẫu thiết kế dẫn cách tiếp cận để giải kiểu toán mà xảy nhiều dạng cụ thể Giải pháp dựa thiết kế mẫu cần tương tự, áp dụng mẫu thiết kế cho tình cụ thể cần đòi hỏi suy xét Khái niệm mẫu thiết kế sử dụng nguyên lý thiết kế nào, thiết kế khí kiến trúc Công trình kiến trúc sư Christopher Alexander thường tham khảo nguồn cảm hứng cho thiết kế phần mềm Ở có ví dụ kiến trúc, lấy từ số sách Alexander (A Pattern Language : Towns, Buildings, Construction, Oxford Univ Press, 1977) Nó bao gồm mô tả ngữ cảnh toán giải pháp phát triển kết kinh nghiệm: Vòng tròn ngồi Một nhóm ghế, sofa, đống đệm- có hầu hết thứ sống người – cần xếp chúng để người chuyển động sống chúng việc kinh doanh tinh tế Hầu hết việc xếp chỗ ngồi khó, người tránh nó, xảy Số khác tỏ thu xếp sống quanh chúng để tập trung giải phóng lượng Sự khác biệt hai ? 28 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Do đó, đặt không gian ngồi vị trí mà bảo vệ, không cắt ngang đường chuyển động, gần vòng tròn, thực cho thân phòng giúp cho tạo nên vòng tròn với đường hoạt động xung quanh nó, cho người tự nhiên hút phía ghế họ rơi vào tâm trạng muốn ngồi Đặt ghế đệm gần thành vòng tròn có nhiều chỗ Khi chương trình nhận thấy họ giải giải lại kiểu toán theo cách khác đôi chút, sử dụng ý tưởng thiết kế, họ tìm cách đưa mẫu thiết kế chung cho giải pháp họ Sự phổ biến tiến trình dẫn đến việc định danh số lớn mẫu thiết kế phần mềm Theo Jim Coplien, mẫu tốt có đặc tính sau: • Nó giải toán: Mẫu bao gồm giải pháp, không chiến lược nguyên lý trừu tượng • Nó khái niệm chứng minh Mẫu bao gồm giải pháp với ghi dấu vết, lý thuyết nghiên cứu • Giải pháp không hiển nhiên Nhiều kỹ thuật giải vấn đề (như xu phương pháp thiết kế phần mềm) tìm cách đưa giải pháp từ nguyên lý Các mẫu tốt sinh gián tiếp lời giải cho toán – cách tiếp cận cần thiết cho vấn dề thiết kế khó • Nó mô tả quan hệ: mẫu không mô tả mudules mà mô tả sâu cấu trúc chế hệ thống • Các mẫu có thành phần người quan trọng (cực tiểu can thiệp người) Mọi phần mềm phục vụ sư thuận tiên người chất lượng sống, mẫu tốt hữu cách tường minh cho tính thẩm mỹ tiện ích Trước đọc nguyên lý chung mẫu thiết kế, cách tốt học mẫu thiết kế tìm hiểu số ví dụ sử dụng mẫu lập trình bạn Cuốn sách sử dụng rộng rãi Design Patterns : Element of Reusable Object-Oriented Software E.Gamma, R Helm, R Johnson J Vlissides (Addison-Wesley, 1994) Ví dụ 10.3 Singleton Design Patterns Mẫu thiết kế đơn mẫu thiết kế tạo, nghĩa là mẫu dùng để tạo đối tượng theo cách Sau tổng quan ngắn gọn mẫu thiết kế đơn, mà sử dụng kiểu đối tượng tiêu đề sử dụng chung sách thể khác mẫu thiết kế Mục tiêu oạAn toàn bảo mật thông itn 29 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Mẫu thiết kế đơn có ích tình huống, cần khởi tạo đối tượng lớp Mẫu cho phép kiểm soát trực tiếp lớp việc có đối tượng cần tạo Nó tốt buộc lập trình viên có trách nhiệm để tạo instance, việc hạn chế xây dựng chương trình Cài đặt Chỉ cần viết lớp để cài đặt mẫu đơn Lớp sử dụng đóng gói để giữ cho hàm tạo lớp ẩn mã client Lớp có phương thức public mà gọi hàm tạo đối tượng lớp chưa tạo Nếu đối tượng tạo, hàm public trả trỏ đối tượng không tạo đối tượng Code ví dụ Đây ví dụ mẫu đơn tổng quát viết C++ Bạn đọc mà không quen với C++ đọc giải thích quay trở lại sau đọc chương sau Giao diện lớp Singleton cung cấp phương thức public mà cho phép client code yêu cầu khởi tạo lớp đó: Sau cài đặt Ban đầu, trỏ riêng pointer_instance đặt Trong cài đặt phương thức public instance(,) đối tượng tạo gán to_instance lời gọi trước chưa tạo đối tượng lớp : 30 An toàn bảo mật thông tin Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Ví dụ 10.4 Facade Facade mẫu đối tượng cấu trúc (structural object pattern), có nghĩa mẫu việc kết hợp đối tượng thành cấu trúc lớn chứa nhiều đối tượng Mục tiêu Mẫu facade cung cấp đối tượng đơn để truy cập đến tập đối tượng mà kết hợp để tạo thành cấu trúc Muốn vậy, facade cung cấp giao diện mức độ cao gom đối tượng tạo thành họ dễ sử dụng Cài đặt Đây lớp facade, định nghĩa cho tập lớp mà sử dụng để tạo nên cấu trúc ‘bên dưới’ facade Trong việc sử dụng thông thường, đối tượng facade có đoạn code thực tế bé, truyền hầu hết lời gọi đến đối tượng cấu trúc ‘bên dưới’ facade Ví dụ mẫu Facade Facade mẫu phổ biến nhiệm vụ hoàn thành việc kết hợp từ kết số nhiệm vụ Chẳng hạn, chương trình dịch xây dựng việc cài đặt phân tích từ vựng, phân tích cú pháp, phân tích ngữ nghĩa số pha khác Nếu pha cài đặt đối tượng với phương thức mà thực chức nó, thân chương trình dịch đối tượng facade mà nhận chương trình đầu vào sử dụng đối tượng riêng lẻ cài đặt pha để dịch chương trình Người sử dụng chương trình dịch thấy giao diện thể đối tượng chương trình dịch Đây giao diện hữu ích giao diện chi tiết cho đối tượng thành phần mà ẩn giấu facade 2.5 Tóm tắt chương oạAn toàn bảo mật thông itn 31 Trần Văn Dũng BM Khoa học máy tính Bài 4: Mã khối đại Chương trình bày tổng quan thiết kế hướng đối tượng tóm tắt bốn khái niệm gắn kết với ngôn ngữ hướng đối tượng: tìm kiếm động, trừu tượng, kiểu kế thừa • Dynamic lookup nghĩa thông điệp gửi tới đối tượng, mã hàm (hoặc phương thức) mà thực thi xác định theo cách mà đối tượng cài đặt Các đối tượng khác phản hồi thông điệp theo cách khác • Abstraction có nghĩa chi tiết cài đặt che giấu bên đơn vị chương trình với giao diện chuyên biệt Giao diện đối tượng thường tập hợp hàm công khai (hoặc phương thức công khai) mà thao tác liệu che giấu • Subtyping có nghĩa đối tượng a có chức đối tượng khác b, sử dụng a bối cảnh giành cho b • Inheritance khả tái sử dụng định nghĩa kiểu đối tượng để định nghĩa kiểu đối tượng khác Trong ngôn ngữ truyền thống mà cài đặt closures cho phép ghi chứa hàm, ghi cung cấp dạng tìm kiếm động trừu tượng Subtyping inheritance dạng cần thiết để hỗ trợ lập trình hướng đối tượng, nói chung ngôn ngữ truyền thống Nhiều người nhầm lẫn subtyping với inheritance Như thuật ngữ sử dụng sách này, subtyping quan hệ kiểu mà cho phép giá trị kiểu sử dụng vị trí giành cho kiểu khác Còn kế thừa cho phép đối tượng định nghĩa từ đối tượng tồn Trong ngôn ngữ dựa lớp, kế thừa cho phép cài đặt lớp tái sử dụng phần cài đặt lớp khác Cách đơn giản để phân biệt subtyping inheritance là: subtyping quan hệ giao diện inheritance quan hệ cài đặt 32 An toàn bảo mật thông tin [...]... biểu diễn các đối tượng Tuy nhiên, các ngôn ngữ hướng đối tượng tối ưu biểu diễn theo một hoặc một số cách Vì closures và đối tượng về bản chất có các chức năng giống nhau, lý do vì sao ta nói về lập trình hướng đối tượng thay vì lập trình hướng closures Nói cách khác các ngôn ngữ lập trình hướng đối tượng làm gì mà ML không làm được Câu trả lời là subtyping và kế thừa Nếu chúng ta chuyển chương trình. .. và nguyên lý trừu tượng • Nó là khái niệm được chứng minh Mẫu bao gồm giải pháp với bản ghi dấu vết, không phải là lý thuyết hoặc nghiên cứu • Giải pháp là không hiển nhiên Nhiều kỹ thuật giải quyết vấn đề (như các xu thế hoặc phương pháp thiết kế phần mềm) tìm cách đưa ra giải pháp từ các nguyên lý đầu tiên Các mẫu tốt nhất sinh ra gián tiếp lời giải cho bài toán – cách tiếp cận cần thiết cho các. .. Trong các ngôn ngữ truyền thống mà cài đặt closures và cho phép các bản ghi chứa hàm, các bản ghi cung cấp dạng tìm kiếm động và trừu tượng Subtyping và inheritance ở dạng cần thiết để hỗ trợ lập trình hướng đối tượng, nói chung không có trong các ngôn ngữ truyền thống Nhiều người nhầm lẫn subtyping với inheritance Như thuật ngữ sử dụng trong sách này, subtyping là quan hệ trên kiểu mà cho phép các giá... tượng về ngôn ngữ không hướng đối tượng, bạn sẽ đánh giá được sự hỗ trợ của ngôn ngữ đối với subtyping và kế thừa 2.2.6 Kế thừa không phải subtyping Có thể sự nhầm lẫn chung nhất xung quanh các ngôn ngữ lập trình hướng đối tượng là sự khác nhau giữa kiểu con và kế thừa Sự khác nhau đơn giản nhất giữa kiểu con và kế thừa là : kiểu con là quan hệ trên các giao diện, kế thừa là quan hệ trên các cài đặt... chỗ Khi các chương trình nhận thấy rằng họ đã giải quyết đi và giải quyết lại cùng một kiểu bài toán theo các cách khác nhau đôi chút, nhưng sử dụng cùng ý tưởng thiết kế, họ có thể tìm cách đưa một mẫu thiết kế chung cho các giải pháp của họ Sự phổ biến của tiến trình này dẫn đến việc định danh một số lớn các mẫu thiết kế phần mềm Theo Jim Coplien, mẫu tốt có các đặc tính sau: • Nó giải quyết bài toán:... hơn trong chương sau 2.2.5 Closures như các đối tượng Đặc trưng thứ nhất của đối tượng, tìm kiếm động, cũng được cung cấp bởi các bản ghi (thuật ngữ trong Pascal và ML) hoặc structs (thuật ngữ trong C) Trong ngôn ngữ với closures, chúng ta có thể mô phỏng các đối tượng bằng cách sử dụng các bản ghi mà có thành phần hàm Nếu các đối tượng có dữ liệu private (hoặc các hàm số), thì chúng oạAn toàn và bảo... chương sau Kế thừa và trừu tượng Trong modules và kiểu dữ liệu thông thường, ở đây có hai cách nhìn về trừu tượng: cách nhìn client và cách nhìn cài đặt Với kế thừa, có ba cách nhìn về lớp: cách nhìn cài đặt, cách nhìn client và cách nhìn kế thừa Cách nhìn kế thừa là cách nhìn về các lớp mà kế thừa từ một lớp Vì các định nghĩa đối tượng có hai clients bên ngoài, có hai giao diện ra bên ngoài: danh sách... phân tích ngữ nghĩa và một số pha khác nữa Nếu mỗi pha được cài đặt như đối tượng với các phương thức mà thực hiện các chức năng chính của nó, thì bản thân chương trình dịch sẽ là đối tượng facade mà nhận chương trình như đầu vào và sử dụng các đối tượng riêng lẻ cài đặt từng pha để dịch chương trình Người sử dụng chương trình dịch có thể thấy giao diện được thể hiện bằng đối tượng của chương trình dịch... cùng với sự lớn mạnh của lập trình hướng đối tượng Trong thuật ngữ cơ bản, design pattern là giải pháp tổng quát mà đến từ việc trích dẫn lặp của các vấn đề tương tự Thiết kế mẫu không phải là giải pháp phát triển từ các nguyên lý đầu tiên hoặc code mẫu mà có thể đơn giản được khởi tạo cho nhiều mục đích Thay vào đó, mẫu thiết kế là chỉ dẫn hoặc cách tiếp cận để giải quyết kiểu bài toán mà đã xảy ra trong... Nó mô tả quan hệ: các mẫu không chỉ mô tả mudules mà còn mô tả sâu hơn cấu trúc và cơ chế hệ thống • Các mẫu có thành phần con người quan trọng (cực tiểu sự can thiệp của con người) Mọi phần mềm phục vụ sư thuận tiên của con người hoặc chất lượng cuộc sống, các mẫu tốt nhất hiện hữu một cách tường minh cho tính thẩm mỹ và tiện ích Trước khi đọc các nguyên lý chung về mẫu thiết kế, cách tốt nhất học

Ngày đăng: 03/04/2016, 20:35

Từ khóa liên quan

Mục lục

  • Trên 40 năm, lập trình hướng đối tượng đã trở thành xu thế thiết kế và cài đặt phần mềm hứa hẹn. Các vấn đề trình bày trong chương này là thiết kế hướng đối tượng và bốn khái niệm cơ bản trong ngôn ngữ lập trình hướng đối tượng và cách mà các khái niệm ngôn ngữ này hỗ trợ thiết kế và cài đặt hướng đối tượng.

  • Đối tượng bao gồm tập các thao tác trên dữ liệu ẩn giấu nào đó. Một đặc trưng quan trọng của các đối tượng là chúng cung cấp một cách thống nhất đóng gói hầu hết mọi kết hợp giữa dữ liệu và chức năng. Đối tượng có thể nhỏ như một số nguyên hoặc có thể lớn như hệ thống file hoặc cơ sở dữ liệu. Không phụ thuộc vào kích thước, mọi tương tác với đối tượng xảy ra qua môi trường các thao tác đơn giản mà được gọi là thông điệp hay lời gọi hàm thành viên.

  • Trong cuốn sách này, chúng ta quan tâm đến việc phân biệt có ý nghĩa giữa các tính chất ngôn ngữ khác nhau và hiểu được cách các tính chất này hỗ trợ các kiểu lập trình khác nhau. Do đó, thuật ngữ ngôn ngữ lập trình hướng đối tượng được sử dụng để nói về các ngôn ngữ lập trình mà có các đối tượng và bốn tính chất được nhấn mạnh trong chương này: tìm kiếm động, trừu tượng, kiểu con và kế thừa.

  • 2.1. Thiết kế hướng đối tượng

  • 2.2. Bốn khái niệm cơ bản trong ngôn ngữ hướng đối tượng

    • 2.2.1. Tìm kiếm động

    • 2.2.2. Trừu tượng

    • 2.2.3. Kiểu con

    • 2.2.4. Kế thừa

    • 2.2.5. Closures như các đối tượng

    • 2.2.6. Kế thừa không phải subtyping

    • 2.3. Cấu trúc chương trình

    • 2.4. Mẫu thiết kế (Design patterns)

    • 2.5. Tóm tắt chương

Tài liệu cùng người dùng

Tài liệu liên quan