Bài giảng Lập trình hướng đối tượng - Chương 6: Generic - Trần Thị Anh Thi

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();

pdf9 trang | Chia sẻ: candy98 | Lượt xem: 460 | Lượt tải: 0download
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.