Mục đích của Generic
Phương pháp chỉ ra kiểu của các “Đối tượng”
mà một Lớp có thể “chấp nhận”
Hạn chế việc ép kiểu các đối tượng.
Phát hiện sớm các kiểu dữ liệu không phù hợp
tại thời điểm biên dịch chương trình
Ưu điểm và hạn chế của Generics
Ưu điểm
Hổ trợ đặc điểm đa hình của OOP.
Kiểm tra sự chính xác của kiểu dữ liệu tại thời
điểm biên dịch.
Hạn chế việc ép kiểu
Giới hạn
Không thể tạo các hàm dựng ở mức Generic.
T element = new T();
9 trang |
Chia sẻ: candy98 | Lượt xem: 561 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Bài giảng Lập trình hướng đối tượng - Chương 6: Generic - Trần Thị Anh Thi, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
12/29/2015
1
Giảng viên : Trần Thị Anh Thi
Email: tranthianhthi@hui.edu.vn
WebBog:
Chương 6
GENERIC
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 2
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Vấn đề
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 3
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Giải pháp
Output
12/29/2015
2
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 4
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Mục đích của Generic
Phương pháp chỉ ra kiểu của các “Đối tượng”
mà một Lớp có thể “chấp nhận”
Hạn chế việc ép kiểu các đối tượng.
Phát hiện sớm các kiểu dữ liệu không phù hợp
tại thời điểm biên dịch chương trình.
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 5
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Ví dụ
required explicit cast
No required explicit cast
Type of element
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 6
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Ưu điểm và hạn chế của Generics
Ưu điểm
Hổ trợ đặc điểm đa hình của OOP.
Kiểm tra sự chính xác của kiểu dữ liệu tại thời
điểm biên dịch.
Hạn chế việc ép kiểu
Giới hạn
Không thể tạo các hàm dựng ở mức Generic.
T element = new T();
12/29/2015
3
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 7
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Generic ở mức Lớp
Lớp Generic là một cơ chế để chỉ rỏ mối quan hệ giữa
Lớp và kiểu dữ liệu liên quan đến nó (type parameter).
“Các Tham số kiểu” sẽ được xác định tại thời điểm đối
tượng của Lớp được tạo
Quy ước về tên của Tham số kiểu(Type Parameter
Naming Conventions)
Viết hoa, dùng một chữ cái.
E – Element
K – Key
N – Number
T – Type
V – Value
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 8
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Tạo Lớp generic
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 9
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Phương thức Generic
Phù hợp với các phương thức nạp chồng
(Overloading)
Output
12/29/2015
4
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 10
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Tạo phương thức Generic
Cú pháp:
Các “tham số kiểu” được khai báo trong phạm vi
của phương thức.
Tham số kiểu phải được chỉ rõ trước kiểu dữ liệu
trả về của phương thức và đặt trong cặp dấu .
Có thể dùng tham số kiểu cho:
Các tham số của phương thức
Dữ liệu trả về
Biến cục bộ
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 11
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Ví dụ
Output
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 12
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Sử dụng Wildcards trong Generic
"?”
Đại diện cho một kiểu chưa xác
định.
"? extends Type”
Đại diện cho một kiểu là lớp con
của lớp được chỉ ra hoặc chính nó.
e.g. List
"? super Type“
Đại diện cho một kiểu là lớp cha
của lớp được chỉ ra hoặc chính nó.
e.g. List
12/29/2015
5
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 13
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Example of Wildcards
“?”
“? extends type”
“? super type”
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 14
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Generics và việc xử lý các biệt lệ
Tham số kiểu cũng được dùng trong việc đưa ra
(throw) các biệt lệ.
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 15
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Thừa kế và Generics
Một Lớp có thể thừa kế
từ một Lớp Generic, và
chỉ rõ kiểu của Generic,
nếu không lớp con này
phải khai báo như một
lớp Generic
Một “Lớp” chỉ được hiện thực một trường hợp cụ
thể “Giao tiếp generic” (Generic Interface)
12/29/2015
6
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 16
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Ví dụ
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 17
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Ví dụ
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 18
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Interoperability with Generics
Describe how to use Legacy code in Generics
Describe how to use Generics in Legacy code.
12/29/2015
7
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 19
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Legacy Code
Non-generic legacy code
Normal generic type
Collection list = new ArrayList();
Raw type:
Generic type like Collection is used without a type parameter
e.g. Collection col = new ArrayList();
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 20
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Using Legacy Code in Generic Code
Working but dangerous
All the type safety guarantees are void
When compile, Java generates an unchecked
conversion warning
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 21
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Example of Using Legacy Code in
Generic Code
12/29/2015
8
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 22
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Compile
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 23
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Erasure
Generics are implemented as a front end
conversion called erasure.
Erasure removes all generic type information.
All the type information between angle brackets is
thrown out
i.e. a parameterized type like List is
converted into List
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 24
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Example of Erasure
for illustration purposes only
12/29/2015
9
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 25
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Using Generics Code in Legacy Code
Adding type parameter to class or interface
declarations
Adding type parameters to the class or interface
which has been extended or implemented
Adding type parameters to the method
signatures
Adding cast where the return type contains a
type parameter
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 26
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
Example of Using Generics Code in
Legacy Code
Bộ môn Công Nghệ Phần Mềm
Khoa Công Nghệ Thông Tin
Trường Đại Học Công Nghiệp Tp HCM
Slide : 27
Môn Giảng :Lập Trình Hướng Đối Tượng
Chương 6: GENERIC
That’s about all for today!
Introduction to Generics
Generic class.
Generic methods.
More on Generics
Wildcards with generics.
Exception handling with generics
Inheritance with generics.
Interoperability with Generics
Legacy code in Generics
Use Generics in Legacy code.