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 5 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

Định dạng
Số trang 65
Dung lượng 796,06 KB

Nội dung

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

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)