intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Lập trình hướng đối tượng: Bài 7 - Nguyễn Khanh Văn

Chia sẻ: Minh Vũ | Ngày: | Loại File: PDF | Số trang:0

28
lượt xem
1
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng "Lập trình hướng đối tượng - Bài 7: Đa hình (Polymophism) cung cấp cho người học các kiến thức: Upcasting và Downcasting, liên kết tĩnh và liên kết động, đa hình (Polymophism), lập trình tổng quát (generic prog). Mời các bạn cùng tham khảo nội dung chi tiết.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình hướng đối tượng: Bài 7 - Nguyễn Khanh Văn

  1. 8/24/2011 Nội dung Bộ môn Công nghệ Phần mềm 1. Upcasting và Downcasting Viện CNTT & TT 2. Liên kết tĩnh và Liên kết động Trường Đại học Bách Khoa Hà Nội 3. Đa hình (Polymophism) 4. Lập trình tổng quát (generic prog.) LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 07. Đa hình (Polymophism) 2 Nội dung 1.1. Upcasting 1. Upcasting và Downcasting  Moving up the inheritance hierarchy 2. Liên kết tĩnh và Liên kết động 3. Đa hình (Polymophism) 4. Lập trình tổng quát (generic prog.) 3 4 Ví dụ Ví dụ (2) class Manager extends Employee { Employee assistant; // ... public void setAssistant(Employee e) { assistant = e; } public class Test1 { // ... public static void main(String arg[]){ } Person p; public class Test2 { Employee e = new Employee(); public static void main(String arg[]){ Manager junior, senior; p = e; // ... p.setName(“Hoa”); senior.setAssistant(junior); p.setSalary(350000); } } } 5 6 1
  2. 8/24/2011 Ví dụ (3) 1.2. Downcasting Move back down the inheritance hierarchy public class Test3 { String static teamInfo(Person p1, Person p2){  return "Leader: " + p1.getName() + ", member: " + p2.getName(); } public static void main(String arg[]){ Employee e1, e2; Manager m1, m2; // ... System.out.println(teamInfo(e1, e2)); System.out.println(teamInfo(m1, m2)); System.out.println(teamInfo(m1, e2)); } } 7 8 Ví dụ Nội dung public class Test2 { public static void main(String arg[]){ 1. Upcasting và Downcasting Liên kết tĩnh và Liên kết động Employee e = new Employee(); Person p = e; 2. Employee ee = (Employee) p; 3. Đa hình (Polymophism) Manager m = (Manager) ee; Person p2 = new Manager(); 4. Lập trình tổng quát (generic prog.) Employee e2 = (Employee) p2; Person p3 = new Employee(); Manager e3 = (Manager) p3; } } 9 10 2.1. Liên kết tĩnh (Static Binding) Ví dụ  Liên kết tại thời điểm biên dịch public class Test { public static void main(String arg[]){ Person p = new Person(); p.setName(“Hoa”); p.setSalary(350000); } } 11 12 2
  3. 8/24/2011 2.2. Liên kết động (Dynamic binding) Ví dụ Lời gọi phương thức được quyết định khi public class Test {  public static void main(String arg[]){ thực hiện (run-time) Person p = new Person(); // ... Employee e = new Employee(); // ... Manager m = new Manager(); // ... Person pArr[] = {p, e, m}; for (int i=0; i< pArr.length; i++){ System.out.println( pArr[i].getDetail()); } } } 13 14 Nội dung 3. Đa hình (Polymophism) 1. Upcasting và Downcasting  Ví dụ: Nếu đi du lịch, bạn có thể chọn ô tô, thuyền, hoặc máy bay 2. Liên kết tĩnh và Liên kết động 3. Đa hình (Polymophism) 4. Lập trình tổng quát (generic prog.) 15 16 3. Đa hình (2) 3. Đa hình (3)  Đa hình trong lập trình  Đa hình phương thức:  Đa hình đối tượng 17 18 3
  4. 8/24/2011 3. Đa hình (4) 3. Đa hình (5)  Liên kết động public class Test3 { public static void main(String  Ví dụ: args[]){ Person p1 = new Person(); Person p1 = new Employee(); Person p2 = new Employee(); Person p2 = new Manager(); Person p3 = new Manager(); Employee e = (Employee) p1; // ... Manager m = (Manager) p2; System.out.println(p1.getDetail()); } System.out.println(p2.getDetail()); } System.out.println(p3.getDetail()); 19 20 Ví dụ khác Toán tử instanceof class EmployeeList { public class Employee extends Person {} Employee list[]; public class Student extends Person {} ... public void add(Employee e) {...} public void print() { public class Test{ for (int i=0; i
  5. 8/24/2011 4. Lập trình tổng quát 4. 1. Giới thiệu về lập trình tổng quát  4.1. Giới thiệu  C: dùng con trỏ void  4.2. Java generic data structure  C++: dùng template  4.2.1. Data structure  Java: lợi dụng upcasting  4.2.2. Java collection framework  Java 1.5: template  4.2.3. Các interface trong Java collection framework  4.2.4. Các cài đặt cho các interface – implementation  4.3. Định nghĩa và sử dụng Template  4.4. Ký tự đại diện (Wildcard) 25 26 Ví dụ: C dùng con trỏ void Ví dụ: C++ dùng template void* memcpy(void* region1, template void sort(ItemType A[], int count ) { const void* region2, size_t n){ for (int i = count-1; i > 0; i--) { const char* first = (const char*)region2; int index_of_max = 0; for (int j = 1; j A[index_of_max]) index_of_max = j; char* result = (char*)region1; if (index_of_max != i) { while (first != last) ItemType temp = A[i]; A[i] = A[index_of_max]; *result++ = *first++; A[index_of_max ] = temp; return result; } } } } 27 28 Ví dụ: Java dùng upcasting và Object Nhắc lại – equals của lớp tự viết class MyStack { class MyValue { ... int i; public void push(Object obj) {...} } public Object pop() {...} public class EqualsMethod2 { public static void main(String[] args) { } MyValue v1 = new MyValue(); public class TestStack{ MyValue v2 = new MyValue(); MyStack s = new MyStack(); v1.i = v2.i = 100; Point p = new Point(); System.out.println(v1.equals(v2)); Circle c = new Circle(); System.out.println(v1==v2); s.push(p); s.push(c); } Circle c1 = (Circle) s.pop(); } Point p1 = (Point) s.pop(); } 29 30 5
  6. 8/24/2011 Ví dụ: Java 1.5: Template Ví dụ: Java 1.5: Template (2) List myList = new LinkedList(); myList.add(new Integer(0)); Integer x = myList.iterator().next(); List myList = new LinkedList(); myList.add(new Integer(0)); Integer x = (Integer) myList.iterator().next(); 31 32 4. Lập trình tổng quát 4.2.1. Cấu trúc dữ liệu-data structure  4.1. Giới thiệu  Mảng (Array)  4.2. Java generic data structure  Danh sách liên kết (Linked List)  4.2.1. Data structure  Ngăn xếp (Stack)  4.2.2. Java collection framework  Hàng đợi (Queue)  4.2.3. Các interface trong Java collection framework  Cây (Tree)  4.2.4. Các cài đặt cho các interface – implementation  4.3. Định nghĩa và sử dụng Template  4.4. Ký tự đại diện (Wildcard) 33 34 a. Linked List a. Linked List (2)  Khi chèn/xoá một node trên linked list, không phải class Node dãn/dồn các phần tử như trên mảng. { private int data; private Node nextNode; // constructors and methods ... } 15 10 35 36 6
  7. 8/24/2011 a. Linked List (3) b. Stack  Stack là một cấu trúc theo kiểu LIFO (Last In First Out), phần tử vào sau cùng sẽ được lấy ra trước. firstNode lastNode H D ... Q 37 38 c. Tree d. Queue  Queue (Hàng đợi) là cấu trúc theo kiểu FIFO Nút gốc Nút trong Nút lá 39 40 e. Binary Search Tree e. Binary Search Tree (2) Cây nhị phân là cây mà mỗi node không có quá 2 Ví dụ về Binary Search Tree   node con.  Cây tìm kiếm nhị phân 47 Cây con trái Cây con phải 25 77 11 43 65 93 7 17 31 44 68 41 42 7
  8. 8/24/2011 4. Lập trình tổng quát 4.2.2. Java Collection Framework  4.1. Giới thiệu  Collection là đối tượng có khả năng chứa các đối tượng khác.  4.2. Java generic data structure  4.2.1. Data structure  4.2.2. Java collection framework  4.2.3. Các interface trong Java collection framework  4.2.4. Các cài đặt cho các interface – implementation  4.3. Định nghĩa và sử dụng Template  4.4. Ký tự đại diện (Wildcard) 43 44 4.2.2. Java Collection Framework (2) 4.2.2. Java Collection Framework (3)  Các collection đầu tiên của Java:  Một số lợi ích của Collections Framework  Collections Framework (từ Java 1.2) 45 46 4.2.2. Java Collection Framework (4) 4. Lập trình tổng quát  Collections Framework bao gồm  4.1. Giới thiệu  Interfaces:  4.2. Java generic data structure  Implementations:  4.2.1. Data structure  Algorithms:  4.2.2. Java collection framework  4.2.3. Các interface trong Java collection framework  4.2.4. Các cài đặt cho các interface – implementation  4.3. Định nghĩa và sử dụng Template  4.4. Ký tự đại diện (Wildcard) 47 48 8
  9. 8/24/2011 4.2.3. Interfaces a. Giao diện Collection  List:  Set:  Map: Collection Map Set List SortedMap SortedSet 49 50 b. Giao diện List c. Giao diện Set  Một số phương thức của List  Set kế thừa từ Collection  Object get(int index);  Object set(int index, Object o);  void add(int index, Object o);  Object remove(int index);  int indexOf(Object o);  int lastIndexOf(Object o); 51 52 d. Giao diện SortedSet  SortedSet kế thừa từ Set  Một số phương thức của SortedSet: Object first(); Collection, Set và List   Object last  SortedSet subSet(Object e1, Object e2); 53 54 9
  10. 8/24/2011 e. Duyệt collection e. Duyệt collection (2)  Iterator  Các phương thức của Iterator:  boolean hasNext();  Object next();  void remove(); Collection c; Iterator it = c.iterator(); while ( it.hasNext() ) { Point p = (Point) it.next(); System.out.println( p.toString() ); } Iterator it = c.iterator(); ... 55 56 f. Giao diện Iterator f. Giao diện Iterator (2) - Ví dụ Collection c; // Some code to build the collection Iterator i = c.iterator(); while (i.hasNext()) { Object o = i.next(); // Process this object 57 } 58 g. Giao diện Map g. Giao tiếp Map (2)  Xác định giao diện cơ bản để thao tác với  Map cung cấp 3 cách view dữ liệu một tập hợp bao gồm cặp khóa-giá trị 59 60 10
  11. 8/24/2011 h. Giao diện SortedMap 4. Lập trình tổng quát  Giao diện SortedMap kế thừa từ Map, nó cung cấp thao  4.1. Giới thiệu tác trên các bảng ánh xạ với khoá có thể so sánh được.  4.2. Java generic data structure  4.2.1. Data structure  4.2.2. Java collection framework  4.2.3. Các interface trong Java collection framework  4.2.4. Các cài đặt cho các interface – implementation  4.3. Định nghĩa và sử dụng Template  4.4. Ký tự đại diện (Wildcard) 61 62 4.2.4. Implementations 4.2.4. Implementations (2) LinkedList  Các cài đặt trong Collections Framework chính là các List lớp collection có sẵn trong Java. ArrayList HashSet Set LinkedHashSet SortedSet TreeSet HashMap Map LinkedHashMap SortedMap TreeMap 63 64 4.2.4. Implementations (3) -Mô tả các cài 4.2.4. Implementations (3) -Mô tả các cài đặt đặt  ArrayList:  HashMap:  LinkedList  LinkedHashMap:  HashSet:  TreeMap:  LinkedHashSet:  TreeSet: 65 66 11
  12. 8/24/2011 public class MapExample { 4.2.4. Implementations (3) – Tổng kết public static void main(String args[]) { Map map = new HashMap(); Integer ONE = new Integer(1); for (int i=0, n=args.length; i
  13. 8/24/2011 4. Lập trình tổng quát 4.4. Ký tự đại diện (Wildcard)  4.1. Giới thiệu public class Test { public static void main(String args[]) {  4.2. Java generic data structure List lst0 = new LinkedList(); //List lst1 = lst0;  Error  4.2.1. Data structure //printList(lst0);  Error  4.2.2. Java collection framework }  4.2.3. Các interface trong Java collection framework void printList(List lst) {  4.2.4. Các cài đặt cho các interface – implementation Iterator it = lst.iterator();  4.3. Định nghĩa và sử dụng Template while (it.hasNext()) System.out.println(it.next());  4.4. Ký tự đại diện (Wildcard) } } 73 74 Ví dụ: Sử dụng Wildcards Các ký tự đại diện Java 1.5 public class Test { void printList(List lst) {  "? extends Type”. Iterator it = lst.iterator(); while (it.hasNext())  "? super Type” System.out.println(it.next()); }  "?“ public static void main(String args[]) { List lst0 = new LinkedList(); List lst1 = new LinkedList(); printList(lst0); // String printList(lst1); // Employee } 75 76 } Ví dụ wildcard (1) Ví dụ wildcard (2) public void printCollection(Collection c) { public void draw(List shape) { Iterator i = c.iterator(); for(Shape s: shape) { for(int k = 0;k
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2