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 10 0
Bài giảng Lập trình hướng đối tượng – Bài 09: Lập trình tổng quát

Đ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

Những nội dung chính được trình bày trong chương này gồm có: Giới thiệu về lập trình tổng quát và cách thực hiện trong các ngôn ngữ lập trình; giới thiệu về collection framework với các cấu trúc tổng quát: List, HashMap, Tree, Set, Vector; định nghĩa và sử dụng Template và ký tự đại diện (wildcard); ví dụ và bài tập về các vấn đề trên với ngôn ngữ lập trình Java. Mời các bạn cùng tham khảo bài giảng để biết thêm nội dung chi tiết.

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 an co IT3100 du o ng th 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 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 o ng th an ◼ co ng ◼ c om Mục tiêu ◼ CuuDuongThanCong.com https://fb.com/tailieudientucntt ng ng ◼ Giới thiệu collection framework Giới thiệu cấu trúc tổng quát List, HashMap, Tree, Set, Vector co ◼ an Giới thiệu lập trình tổng quát Lập trình tổng quát Java th .c om Nội dung du o u Định nghĩa sử dụng Template Ký tự đại diện (Wildcard) Ví dụ tập cu 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om cu u du o ng th an co ng Giới thiệu lập trình tổng quát (Generic programming) CuuDuongThanCong.com https://fb.com/tailieudientucntt Tổng quát 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ố chương trình Ví dụ: th • Số nguyên int • Xâu ký tự String • Đối tượng số phức Complex object • ng cu u Phương thức sort() Thuật toán giống nhau, khác kiểu liệu du o ◼ Thuật toán xác định an ◼ co ng ◼ c om Giới thiệu lập trình tổng quát 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 qt an Giải pháp ngơn ngữ lập trình: ◼ th ng ◼ 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 o ◼ u ◼ Cho phép trừu tượng hóa kiểu liệu co ◼ ng c 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 ◼ cu ◼ CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 ng du o ◼ Dữ liệu truyền vào cách tổng quát 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 an ◼ ng void* memcpy(void* region1, const void* region2, size_t n); ◼ cu ◼ c om Giới thiệu lập trình tổng quát CuuDuongThanCong.com https://fb.com/tailieudientucntt ◼ c om Giới thiệu lập trình tổng qt Ví dụ: Lập trình Generic từ trước Java 1.5 th an co ng public class ArrayList { public Object get(int i) { } public void add(Object o) { } private Object[] elementData; } ng Lớp Object lớp cha tổng quát → chấp nhận đối tượng thuộc lớp du o ◼ 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 ◼ c om Giới thiệu lập trình tổng quát Ví dụ: Lập trình Generic từ Java 1.5 Java 1.5 Template th ng du o Danh sách chấp nhận đối tượng có kiểu Integer an co ng ◼ 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 .c om cu u du o ng th an 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 c om ◼ Chấp nhận kiểu lớp 2DShape Ví dụ: ng public class Information { cu u du o ng th an 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 .c om ng co cu u du o ng th an Ký tự đại diện (Wildcard) 52 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 ng du o ◼ 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 ◼ an Ví dụ: cu ◼ co ng ◼ c om Ký tự đại diện (Wildcard) 53 CuuDuongThanCong.com https://fb.com/tailieudientucntt Generic 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 o ng ◼ th an co ◼ ng ◼ c 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 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 om Ký tự đại diện (Wildcard) an Ký tự đại diện: ? dùng để hiển thị cho kiểu liệu chưa biết collection ng th ◼ cu u du o 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 ◼ c om Ký tự đại diện (Wildcard) Tuy nhiên viết không hợp lệ u du o ng 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 an co ng Collection c = new ArrayList(); c.add("a1"); //compile error, null 56 CuuDuongThanCong.com https://fb.com/tailieudientucntt "? extends Type": Xác định tập kiểu Type Đây wildcard hữu ích co ng ◼ c om Ký tự đại diện (Wildcard) th an "? super Type": Xác định tập kiểu cha Type du o ng ◼ u "?": Xác định tập tất kiểu kiểu cu ◼ 57 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: ? extends Animal có nghĩa kiểu thuộc loại Animal co ◼ ng ◼ c om Ký tự đại diện (Wildcard) an Hai cú pháp sau tương đương: th ◼ u Dùng "T", thường sử dụng muốn T xuất vị trí khác cu ◼ du o ng public void foo( ArrayList

Ngày đăng: 02/07/2021, 07:24

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 Xem tại trang 24 của tài liệu.
◼ 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 Xem tại trang 28 của tài liệu.
◼ 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ử Xem tại trang 29 của tài liệu.

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

  • Đang cập nhật ...

Tài liệu liên quan