1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng cấu trúc dữ liệu chương 2 nguyễn xuân vinh

38 346 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 38
Dung lượng 385,85 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

• Lập trình Generic được đề xướng bởi ngôn ngữ Ada năm 1983.• Cho phép các giải thuật có thể dựa trên các kiểu được xác định sau, và các kiểu này sẽ được thể hiện khi cần thiết.. • Các k

Trang 1

Source: Nguyễn Văn Khiêm

Trang 2

• Giới thiệu về Generic.

• Generic trong Java.

Trang 3

• Lập trình Generic được đề xướng bởi ngôn ngữ Ada năm 1983.

• Cho phép các giải thuật có thể dựa trên các kiểu được xác định sau, và các kiểu này sẽ được thể hiện khi cần thiết

• Định nghĩa các kiểu ở mức trừu tượng

• Các kiểu này có thể được thay thế bằng nhiều kiểu cụ thể (class,

interface) khác khi sử dụng.

• Hiện nay Generic có trong Ada, Java, Template trong C++, C#,

Visual Basic, Net, Eiffel và Haskell

Trang 6

void add(Student element) { }

}

Nhưng, khi cần một danh sách chỉ chứa đối tượng Teacher?

Copy-paste?

Trang 9

• Là lớp với một hoặc nhiều biến kiểu.

Các biến kiểu khai báo cách nhau bởi dấu phẩy

Trang 10

• Là lớp với một hoặc nhiều biến kiểu.

Các biến kiểu khai báo cách nhau bởi dấu phẩy

Sử dụng các biến kiểu để khai báo thuộc tính

Trang 15

Lỗi biên dịch

Trang 16

• Cần phải giới hạn T trong Interface Comparable.

Giới hạn T

Trang 17

• Một kiểu biến có thể có nhiều giới hạn.

Giới hạn T vừa có thể so sánh, vừa có thể sao chép

Trang 18

Không biết kiểu Generic là gì.

Các kiểu Generic được khai báo nhưng không được sử

dụng

Chúng ta muốn kiểu Generic là “read-only”.

Trang 19

 Upper bound (Wildcard biên trên)

 List<? extends Fruit> items at least Fruits

So, it can contain Fruits and Apple, Oranges, but not Pigs

 Lower bound (Wildcard biên dưới)

 List<? super Fruit> items most Fruits

So, it can contain Fruits and Objects but not Apples

 Unknown bound (Wildcard không biên)

List<?> any items

So, it can contain any things.

Trang 20

The rule is: PECS (Producer-Extends, Comsumer-Super)

 Use <? extends T> when parameterized instance is a T producer (for reading/input)

 Use <? super T> when parameterized instance is a T comsumer (for writing/output)

Trang 21

 Giả sử, cần thêm một lúc nhiều phần tử và Stack<E>

void pushAll(Collection<? extends E> src);

Trang 23

sử dụng

Trang 24

Lỗi biên dịch

Trang 26

• Generic chỉ được cài đặt ở trình biên dịch.

• Trình chuyển đổi erasure sẽ loại bỏ hết Generic

trước khi cho xuống máy ảo.

• Máy ảo không có thay đổi nào và hoàn toàn tương thích với các phiên bản trước.

Trang 29

• Giả sử chúng ta có lớp IntegerFoo như sau:

Lớp IntegerFoo sẽ được chuyển

Trang 31

• Xác định kiểu mà lớp Collection đang chứa.

Nếu chèn kiểu không khớp sẽ báo lỗi biên dịch

Việc thêm bớt phần tử không cần ép kiểu

• Tương thích ngược với dạng kiểu thô.

Có thể phát sinh các cảnh báo biên dịch (warning).

Trang 33

• Không cho phép kế thừa một Generic.

• Không cho phép khởi tạo Generic.

• Không sử dụng Generic với static.

• Không dùng Generic để bắt ngoại lệ.

Trang 34

• Các ví dụ Generic sau đây là không đúng trong Java:

Foo< int > foo = new Foo< int >();

class ABC<T> extends T {}

Trang 35

• Template/ Generic trong C++/C#:

– dùng được các kiểu dữ liệu nguyên thủy và cho các class.

– Không cho phép kế thừa một Template/Generic.

– Cho phép sử dụng Template/Generic với static.

• Trong Net, giống như Java, cung cấp sẵn một namespace

System.Collections.Generic, bao gồm một vài lớp Collection

viết sẵn

Trang 36

• Generic là một phần không thể thiếu trong các ngôn

ngữ lập trình hướng đối tượng.

• Làm tăng tính đa hình trong Java.

• Hạn chế tối đa các lỗi khi chạy.

• Khả năng sử dụng lại code là không có giới hạn.

• Tuy nhiên dùng quá nhiều Generic làm code trở nên

phức tạp, khó sử dụng.

Ngày đăng: 03/12/2015, 06:40

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm