1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng lập trình hướng đối tượng – bài 09 lập trình tổng quát

65 4 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

ng c om Bộ môn Công nghệ Phần mềm Viện CNTT & TT Trường Đại học Bách Khoa Hà Nội th a n co IT3100 du on g LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG cu u Bài 09 Lập trình tổng quát CuuDuongThanCong.com https://fb.com/tailieudientucntt Mục tiêu c om Giới thiệu lập trình tổng quát cách thực ngơn ngữ lập trình Giới thiệu collection framework với cấu trúc tổng quát: List, HashMap, Tree, Set, Vector,… Định nghĩa sử dụng Template ký tự đại diện (wildcard) Ví dụ tập vấn đề với ngơn ngữ lập trình Java cu u ◼ du on g th a n ◼ co ng ◼ ◼ CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung om c ng Giới thiệu lập trình tổng quát Lập trình tổng quát Java Giới thiệu collection framework Giới thiệu cấu trúc tổng quát List, HashMap, Tree, Set, Vector u Định nghĩa sử dụng Template Ký tự đại diện (Wildcard) Ví dụ tập cu du on g ◼ th a n ◼ co CuuDuongThanCong.com https://fb.com/tailieudientucntt om c cu u du on g th a n co ng Giới thiệu lập trình tổng quát (Generic programming) CuuDuongThanCong.com https://fb.com/tailieudientucntt Giới thiệu lập trình tổng quát om Tổng qt hóa chương trình để hoạt động với kiểu liệu khác nhau, kể kiểu liệu tương lai Tổng qt hố • Số nguyên int • Xâu ký tự String • Đối tượng số phức Complex object • th a Ví dụ: chương trình cu u Phương thức sort() Thuật tốn giống nhau, khác kiểu liệu du on g ◼ Thuật toán xác định n ◼ co ng c ◼ Lớp lưu trữ kiểu ngăn xếp (Stack) CuuDuongThanCong.com • Lớp IntegerStack → đối tượng Integer • Lớp StringStack → đối tượng String • Lớp AnimalStack → đối tượng animal,… Các lớp có cấu trúc tương tự, khác kiểu đối tượng xử lý https://fb.com/tailieudientucntt Giới thiệu lập trình tổng quát om Lập trình Generic có nghĩa lập trình mà tái sử dụng cho nhiều kiểu liệu ◼ u ◼ C: dùng trỏ không định kiểu (con trỏ void) C++: dùng template Java 1.5 trở trước: lợi dụng upcasting kiểu tổng quát object Java 1.5: đưa khái niệm template du on g ◼ th a n Giải pháp ngơn ngữ lập trình: ◼ cu ◼ Cho phép trừu tượng hóa kiểu liệu co ◼ ng c ◼ CuuDuongThanCong.com https://fb.com/tailieudientucntt Giới thiệu lập trình tổng qt c om Ví dụ C: hàm memcpy() thư viện string.h co Hàm memcpy() bên khai báo tổng quát cách sử dụng trỏ void* Điều giúp cho hàm sử dụng với nhiều kiểu liệu khác du on g ◼ Dữ liệu truyền vào cách tổng qt thơng qua địa kích thước kiểu liệu Hay nói cách khác, để chép liệu, ta cần địa kích cỡ chúng u ◼ th a n ◼ ng void* memcpy(void* region1, const void* region2, size_t n); ◼ cu ◼ CuuDuongThanCong.com https://fb.com/tailieudientucntt Giới thiệu lập trình tổng qt om Ví dụ: Lập trình Generic từ trước Java 1.5 c ◼ th a n co ng public class ArrayList { public Object get(int i) { } public void add(Object o) { } private Object[] elementData; } Lớp Object lớp cha tổng quát → chấp nhận đối tượng thuộc lớp du on g ◼ cu u List myList = new ArrayList(); myList.add("Fred"); myList.add(new Dog()); myList.add(new Integer(42)); ◼ Các đối tượng danh sách khác hẳn Hạn chế: Phải ép kiểu ➔ ép sai kiểu (run-time error) String name = (String) myList.get(1); //Dog!!! CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Lập trình Generic từ Java 1.5 Java 1.5 Template th a du on g Danh sách chấp nhận đối tượng có kiểu Integer n co ng ◼ c ◼ om Giới thiệu lập trình tổng quát cu u List myList = new LinkedList(); myList.add(new Integer(0)); Integer x = myList.iterator().next(); //Không cần ép kiểu myList.add(new String("Hello")); //Compile Error CuuDuongThanCong.com https://fb.com/tailieudientucntt om c cu u du on g th a n co ng Lập trình tổng quát Java (Collection framework) 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt Giới hạn kiểu liệu tổng quát om Ví dụ: c ◼ Chấp nhận kiểu lớp 2DShape ng public class Information { cu u du on g th a n co private T value; public Information(T value) { this.value = value; } public T getValue() { return value; } } Information pointInfo = new Information(new Point()); // OK Information stringInfo = new Information(); // error CuuDuongThanCong.com https://fb.com/tailieudientucntt 51 om c ng co cu u du on g th a n Ký tự đại diện (Wildcard) 52 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ký tự đại diện (Wildcard) c om Quan hệ thừa kế hai lớp khơng có ảnh hưởng đến quan hệ cấu trúc tổng quát dùng cho hai lớp ◼ th a du on g ◼ Dog Cat lớp Animal → Có thể đưa đối tượng Dog Cat vào ArrayList Tuy nhiên, ArrayList, ArrayList lại khơng có quan hệ với ArrayList u ◼ n Ví dụ: cu ◼ co ng ◼ 53 CuuDuongThanCong.com https://fb.com/tailieudientucntt Kiểu khai báo lớp tổng quát (template) khởi tạo phải với kiểu đối tượng thực Nếu khai báo List ➔ Danh sách chấp nhận đối tượng lớp Foo, đối tượng cha lớp Foo không chấp nhận u du on g ◼ th a n co ◼ c Generic ng ◼ om Ký tự đại diện (Wildcard) cu class Parent { } class Child extends Parent { } List myList = new ArrayList(); 54 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ký tự đại diện (Wildcard) om Làm để xây dựng tập hợp dành cho kiểu lớp lớp cụ thể đó? → Giải pháp sử dụng kí tự đại diện (wildcard) co ng c ◼ th a n Ký tự đại diện: ? dùng để hiển thị cho kiểu liệu chưa biết collection du on g ◼ cu u void printCollection(Collection c) { for (Object e : c) { System.out.println(e); } } ◼ Khi biên dịch, dấu ? thay 55 kiểu liệu CuuDuongThanCong.com https://fb.com/tailieudientucntt Ký tự đại diện (Wildcard) om Tuy nhiên viết không hợp lệ c ◼ u du on g Vì khơng biết c đại diện cho tập hợp kiểu liệu ➔ thêm phần tử vào c cu ◼ th a n co ng Collection c = new ArrayList(); c.add("a1"); //compile error, null 56 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ký tự đại diện (Wildcard) c om "? extends Type": Xác định tập kiểu Type Đây wildcard hữu ích co ng ◼ th a n "? super Type": Xác định tập kiểu cha Type du on g ◼ u "?": Xác định tập tất kiểu kiểu cu ◼ 57 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ký tự đại diện (Wildcard) c ? extends Animal có nghĩa kiểu thuộc loại Animal co ◼ om Ví dụ: ng ◼ n Hai cú pháp sau tương đương: th a ◼ u Dùng "T", thường sử dụng muốn T xuất vị trí khác cu ◼ du on g public void foo( ArrayList

Ngày đăng: 28/12/2021, 19:14

Xem thêm:

HÌNH ẢNH LIÊN QUAN

◼ Bảng ánh xạ lưu các phần tử theo khoá và không được có 2 khoá trùng nhau - Bài giảng lập trình hướng đối tượng – bài 09 lập trình tổng quát
ng ánh xạ lưu các phần tử theo khoá và không được có 2 khoá trùng nhau (Trang 24)
◼ HashSet: Bảng băm - Bài giảng lập trình hướng đối tượng – bài 09 lập trình tổng quát
ash Set: Bảng băm (Trang 28)
◼ LinkedHashSet: Bảng băm kết hợp với linked list nhằm đảm bảo thứ tự các phần tử - Bài giảng lập trình hướng đối tượng – bài 09 lập trình tổng quát
inked HashSet: Bảng băm kết hợp với linked list nhằm đảm bảo thứ tự các phần tử (Trang 29)