Xem mẫu

  1. 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 om .c ng IT3100 co an LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG th o ng du Bài 09. Lập trình tổng quát u cu CuuDuongThanCong.com https://fb.com/tailieudientucntt
  2. Mục tiêu om ◼ Giới thiệu về lập trình tổng quát và cách thực .c hiện trong các ngôn ngữ lập trình ng Giới thiệu về collection framework với các co ◼ cấu trúc tổng quát: List, HashMap, Tree, Set, an th Vector,… ng Định nghĩa và sử dụng Template và ký tự đại o ◼ du diện (wildcard) u cu ◼ Ví dụ và bài tập về các vấn đề trên với ngôn ngữ lập trình Java 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  3. Nội dung om 1. Giới thiệu về lập trình tổng quát .c 2. Lập trình tổng quát trong Java ng Giới thiệu về collection framework co ◼ an ◼ Giới thiệu về các cấu trúc tổng quát List, th HashMap, Tree, Set, Vector ng Định nghĩa và sử dụng Template o 3. du Ký tự đại diện (Wildcard) u 4. cu 5. Ví dụ và bài tập 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  4. om .c 1. Giới thiệu về lập trình tổng quát ng (Generic programming) co an th o ng du u cu 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  5. 1. Giới thiệu về lập trình tổng quát om ◼ Tổng quát hóa chương trình để có thể hoạt động với các kiểu dữ liệu khác nhau, kể cả kiểu dữ liệu .c trong tương lai ng Tổng quát hoá co ◼ Thuật toán đã xác định chương trình an ◼ Ví dụ: • Số nguyên int th • Xâu ký tự String ng Thuật toán giống nhau, Phương thức sort() • Đối tượng số phức chỉ khác về kiểu dữ liệu o Complex object du • ... u • Lớp IntegerStack → đối Các lớp có cấu cu tượng Integer trúc tương tự, Lớp lưu trữ kiểu • Lớp StringStack → đối khác nhau về tượng String kiểu đối tượng ngăn xếp (Stack) • Lớp AnimalStack → đối xử lý 5 CuuDuongThanCong.com tượng animal,… https://fb.com/tailieudientucntt
  6. 1. Giới thiệu về lập trình tổng quát Lập trình Generic có nghĩa là lập trình mà có thể om ◼ tái sử dụng cho nhiều kiểu dữ liệu .c ng ◼ Cho phép trừu tượng hóa kiểu dữ liệu co ◼ Giải pháp trong các ngôn ngữ lập trình: an C: dùng con trỏ không định kiểu (con trỏ void) th ◼ C++: dùng template ng ◼ o ◼ Java 1.5 trở về trước: lợi dụng upcasting và kiểu tổng du quát object u cu ◼ Java 1.5: đưa ra khái niệm về template 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  7. 1. Giới thiệu về lập trình tổng quát om ◼ Ví dụ C: hàm memcpy() trong thư viện string.h .c void* memcpy(void* region1, const void* region2, size_t n); ng ◼ Hàm memcpy() bên trên được khai báo tổng co quát bằng cách sử dụng các con trỏ void* an Điều này giúp cho hàm có thể sử dụng với nhiều th ◼ kiểu dữ liệu khác nhau o ng Dữ liệu được truyền vào một cách tổng quát thông du ◼ qua địa chỉ và kích thước kiểu dữ liệu u cu ◼ Hay nói cách khác, để sao chép dữ liệu, ta chỉ cần địa chỉ và kích cỡ của chúng 7 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  8. 1. Giới thiệu về lập trình tổng quát om ◼ Ví dụ: Lập trình Generic từ trước Java 1.5 public class ArrayList { .c public Object get(int i) { . . . } ng public void add(Object o) { . . . } co . . . private Object[] elementData; an } th Lớp Object là lớp cha tổng quát nhất → có thể chấp nhận ng ◼ các đối tượng thuộc lớp con của nó o du List myList = new ArrayList(); Các đối tượng u myList.add("Fred"); trong một danh cu myList.add(new Dog()); sách khác hẳn myList.add(new Integer(42)); nhau ◼ Hạn chế: Phải ép kiểu ➔ có thể ép sai kiểu (run-time error) String name = (String) myList.get(1); //Dog!!! 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  9. 1. Giới thiệu về lập trình tổng quát om ◼ Ví dụ: Lập trình Generic từ Java 1.5 .c ◼ Java 1.5 Template ng co an Danh sách chỉ chấp nhận các đối tượng có kiểu là th Integer o ng du List myList = u new LinkedList(); cu myList.add(new Integer(0)); Integer x = myList.iterator().next(); //Không cần ép kiểu myList.add(new String("Hello")); //Compile Error 9 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  10. om .c 2. Lập trình tổng quát trong Java ng (Collection framework) co an th o ng du u cu 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  11. 2. Lập trình tổng quát trong Java om ◼ Collection – tập hợp: Nhóm các đối tượng lại thành một đơn vị duy nhất .c ng ◼ Java Collections Framework: co ◼ Biểu diễn các tập hợp an Cung cấp giao diện tiêu chuẩn cho hầu hết các tập hợp th ◼ cơ bản ng Xây dựng dựa trên o ◼ du ◼ Interface: thể hiện tính chất của các kiểu tập hợp khác nhau như u List, Set, Map cu ◼ Class: các lớp cụ thể thực thi các giao diện ◼ Thuật toán: cài đặt một số thao tác đơn giản, là các phương thức tĩnh để xử lý trên collection như tìm kiếm, sắp xếp… 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  12. 2. Lập trình tổng quát trong Java om ◼ Java Collections Framework: .c ◼ List: Tập các đối tượng tuần tự, kế tiếp nhau, có ng thể lặp lại co ◼ Set: Tập các đối tượng không lặp lại an Map: Tập các cặp khóa-giá trị (key-value) và th ◼ không cho phép khóa lặp lại ng Liên kết các đối tượng trong tập này với đối các đối o ◼ du tượng trong tập khác như tra từ điển/danh bạ điện thoại. u cu 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  13. 2. Lập trình tổng quát trong Java om ◼ Cây cấu trúc giao diện Collection > .c > Map Collection HashMap ng co HashTable > an Sorted Map th > > Set List ng Tree Map o du HashSet > u Array List Vector LinkedList cu Sorted Set Tree Set 13 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  14. 2. Lập trình tổng quát trong Java om ◼ So sánh Tập hợp và mảng .c Tập hơp Mảng ng Tập hợp (có thể) truy xuất theo Mảng truy xuất 1 cách tuần tự co dạng ngẫu nhiên an Tập hợp có thể chứa nhiều loại Mảng chứa 1 loại đối tượng/dữ th đối tượng/dữ liệu khác nhau liệu nhất định ng Dùng theo kiểu tập hợp xây Dùng tổ chức dữ liệu theo o du dựng sẵn của Java chỉ khai báo mảng phải lập trình hoàn toàn và gọi những phương thức đã u cu được định nghĩa Duyệt các phần tử tập hợp Duyệt các phần tử mảng tuần thông qua Iterator tự thông qua chỉ số mảng 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  15. 2. Lập trình tổng quát trong Java om ◼ Các giao diện và lớp thực thi trong Collection framework của Java đều được xây dựng theo .c template ng co ◼ → cho phép xác định tập hợp các phần tử cùng kiểu nào an đó bất kỳ th ◼ Cho phép chỉ định kiểu dữ liệu của các Collection ➔ hạn ng chế việc thao tác sai kiểu dữ liệu o du u cu 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  16. 2. Lập trình tổng quát trong Java om ◼ Ví dụ .c public interface List { ng void add(E x); co Iterator iterator(); an } Ví dụ th ng ◼ o List myList = new ArrayList(); du myList.add("Fred"); // OK u cu myList.add(new Dog()); //Compile error! String s = myList.get(0); 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  17. Giao diện Collection om ◼ Xác định giao diện cơ bản cho các thao tác với một tập các đối .c tượng ng ◼ Thêm vào tập hợp co ◼ Xóa khỏi tập hợp an th ◼ Kiểm tra có là thành viên ng ◼ Chứa các phương thức thao tác o trên các phần tử riêng lẻ hoặc du theo khối u cu ◼ Cung cấp các phương thức cho phép thực hiện duyệt qua các phần tử trên tập hợp (lặp) và chuyển tập hợp sang mảng 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  18. Giao diện Collection public interface Collection { om // Basic Operations .c int size(); boolean isEmpty(); ng boolean contains(Object element); co boolean add(Object element); an boolean remove(Object element); Iterator iterator(); th ng // Bulk Operations o boolean addAll(Collection c); du boolean removeAll(Collection c); u boolean retainAll(Collection c); cu …. // Array Operations Object[] toArray(); Object[] toArray(Object a[]); } 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  19. om ◼ Các giao diện con kế thừa giao .c diện Collection ng co an th o ng du u cu 19 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  20. Giao diện Set om ◼ Set kế thừa từ Collection, hỗ trợ các thao tác xử lý trên collection kiểu tập hợp .c ng ◼ Ví dụ: co ◼ Set of cars: an {BMW, Ford, Jeep, Chevrolet, Nissan, Toyota, VW} th ◼ Nationalities in the class ng ◼ {Chinese, American, Canadian, Indian} o ◼ du ◼ Một tập hợp các phần tử không được trùng lặp. u cu ◼ Set không có thêm phương thức riêng ngoài các phương thức kế thừa từ Collection. 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt
nguon tai.lieu . vn