1. Trang chủ
  2. » Cao đẳng - Đại học

Slide lập trình hướng đối tượng chương 9 đại học bách khoa hà nội lập trình tổng quát

65 6 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 1,5 MB

Nội dung

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 IT3100 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 09 Lập trình tổng quát CuuDuongThanCong.com https://fb.com/tailieudientucntt Mục tiêu ◼ ◼ ◼ ◼ 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung 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 Định nghĩa sử dụng Template Ký tự đại diện (Wildcard) Ví dụ tập CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 qt ◼ 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 quát hoá ◼ Thuật tốn xác định Ví dụ: chương trình Phương thức sort() • Số nguyên int • Xâu ký tự String • Đối tượng số phức Complex object • Lớp lưu trữ kiểu ngăn xếp (Stack) • Lớp IntegerStack → đối tượng Integer • Lớp StringStack → đối tượng String • Lớp AnimalStack → đối tượng animal,… ◼ CuuDuongThanCong.com Thuật toán giống nhau, khác kiểu liệu 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 ◼ 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 ◼ ◼ Cho phép trừu tượng hóa kiểu liệu Giải pháp ngơn ngữ lập trình: ◼ ◼ ◼ ◼ 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt Giới thiệu lập trình tổng qt ◼ Ví dụ C: hàm memcpy() thư viện string.h void* memcpy(void* region1, const void* region2, size_t n); ◼ ◼ 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 ◼ ◼ 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt Giới thiệu lập trình tổng qt ◼ Ví dụ: Lập trình Generic từ trước Java 1.5 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 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 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 Danh sách chấp nhận đối tượng có kiểu Integer 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 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 ◼ Chấp nhận kiểu lớp 2DShape Ví dụ: public class Information { 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 Ký tự đại diện (Wildcard) 52 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ký tự đại diện (Wildcard) ◼ ◼ 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 Ví dụ: ◼ ◼ ◼ 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 53 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ký tự đại diện (Wildcard) ◼ 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 class Parent { } class Child extends Parent { } List myList = new ArrayList(); 54 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ký tự đại diện (Wildcard) ◼ ◼ 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) Ký tự đại diện: ? dùng để hiển thị cho kiểu liệu chưa biết collection 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) ◼ Tuy nhiên viết không hợp lệ Collection c = new ArrayList(); c.add("a1"); //compile error, null ◼ 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 56 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ký tự đại diện (Wildcard) ◼ ◼ ◼ "? extends Type": Xác định tập kiểu Type Đây wildcard hữu ích "? super Type": Xác định tập kiểu cha Type "?": Xác định tập tất kiểu kiểu 57 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ký tự đại diện (Wildcard) ◼ Ví dụ: ◼ ◼ ? extends Animal có nghĩa kiểu thuộc loại Animal Hai cú pháp sau tương đương: public void foo( ArrayList

Ngày đăng: 07/07/2021, 10:01

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w