Bài giảng Lập trình hướng đối tượng: Bài 7 - Nguyễn Khanh Văn
lượt xem 1
download
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.
Bình luận(0) Đăng nhập để gửi bình luận!
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
- 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
- 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
- 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
- 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
- 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
- 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
- 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/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
- 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
- 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
- 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
- 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
- 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
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình hướng đối tượng: Chương 3 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
38 p | 140 | 19
-
Bài giảng Lập trình hướng đối tượng - Chương 2: Đối tượng và lớp
21 p | 171 | 15
-
Bài giảng Lập trình hướng đối tượng: Chương 2 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
14 p | 177 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 3: Kế thừa
18 p | 138 | 10
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Phương pháp lập trình hướng đối tượng
9 p | 142 | 9
-
Bài giảng Lập trình hướng đối tượng (dùng Java): Chương 1 - Trần Minh Thái (2017)
55 p | 81 | 8
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan lập trình hướng đối tượng
53 p | 120 | 8
-
Bài giảng Lập trình hướng đối tượng (Dùng C#): Chương 2 - Trần Minh Thái
35 p | 104 | 8
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan về OOP
0 p | 146 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Thị Anh Thi
7 p | 197 | 7
-
Bài giảng Lập trình hướng đối tượng 1: Chương 1 - ThS. Thái Kim Phụng
39 p | 110 | 7
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 67 | 6
-
Bài giảng Lập trình hướng đối tượng (dùng JAVA): Chương 1 - Trần Minh Thái
40 p | 100 | 5
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - GV. Hà Văn Sang
29 p | 89 | 5
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Tổng quan về lập trình hướng đối tượng
47 p | 12 | 4
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 106 | 4
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Các khái niệm cơ bản trong lập trình hướng đối tượng
36 p | 18 | 3
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 2: Phương pháp lập trình hướng đối tượng
35 p | 11 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn