Bài giảng Lập trình hướng đối tượng: Chương 7 - ĐH Bách Khoa Hà Nội

21 7 0
Bài giảng Lập trình hướng đối tượng: Chương 7 - ĐH Bách Khoa Hà Nội

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Lập trình hướng đối tượng: Chương 7 Đa hình (Polymophism) cung cấp cho người học những kiến thức như: 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!

9/18/17 Nội dung 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 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 07 Đa hình (Polymophism) Upcasting Downcasting Liên kết tĩnh Liên kết động Đa hình (Polymophism) Lập trình tổng quát (generic prog.) Nội dung 1.1 Upcasting Upcasting Downcasting Liên kết tĩnh Liên kết động Đa hình (Polymophism) Lập trình tổng quát (generic prog.) n n n Moving up the inheritance hierarchy Up casting khả nhìn nhận đối tượng thuộc lớp dẫn xuất đối tượng thuộc lớp sở Tự động chuyển đổi kiểu 9/18/17 Ví dụ Ví dụ (2) class Manager extends Employee { Employee assistant; // public void setAssistant(Employee e) { assistant = e; } // } public class Test2 { public static void main(String arg[]){ Manager junior, senior; // senior.setAssistant(junior); } } public class Test1 { public static void main(String arg[]){ Person p; Employee e = new Employee(); p = e; p.setName(“Hoa”); p.setSalary(350000); // compile error } Ví dụ (3) 1.2 Downcasting public class Test3 { String static teamInfo(Person p1, Person p2){ return "Leader: " + p1.getName() + ", member: " + p2.getName(); } n n 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)); } n Move back down the inheritance hierarchy Down casting khả nhìn nhận đối tượng thuộc lớp sở đối tượng thuộc lớp dẫn xuất Không tự động chuyển đổi kiểu Phải ép kiểu } 9/18/17 Ví dụ Nội dung public class Test2 { public static void main(String arg[]){ Employee e = new Employee(); Person p = e; // up casting Employee ee = (Employee) p; // down casting Manager m = (Manager) ee; // run-time error Upcasting Downcasting Liên kết tĩnh Liên kết động Đa hình (Polymophism) Lập trình tổng quát (generic prog.) Person p2 = new Manager(); Employee e2 = (Employee) p2; Person p3 = new Employee(); Manager e3 = (Manager) p3; } 10 } 2.1 Liên kết tĩnh (Static Binding) n public class Test { public static void main(String arg[]){ Person p = new Person(); p.setName(“Hoa”); p.setSalary(350000); //compile-time error } } Liên kết thời điểm biên dịch n n n n Ví dụ Early Binding/Compile-time Binding Lời gọi phương thức định biên dịch, có phiên phương thức thực Nếu có lỗi có lỗi biên dịch Ưu điểm tốc độ 11 12 9/18/17 Ví dụ 2.2 Liên kết động (Dynamic binding) n public class Test { public static void main(String arg[]){ 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()); } } } Lời gọi phương thức định thực (run-time) n n n Late binding/Run-time binding Phiên phương thức phù hợp với đối tượng gọi Java mặc định sử dụng liên kết động 13 14 Nội dung Đa hình (Polymophism) Upcasting Downcasting Liên kết tĩnh Liên kết động Đa hình (Polymophism) Lập trình tổng quát (generic prog.) n 15 Ví dụ: Nếu du lịch, bạn chọn ô tô, thuyền, máy bay n Dù phương tiện gì, kết giống bạn đến nói cần đến n Cách thức đáp ứng dịch vụ khác 16 9/18/17 Đa hình (2) n Đa hình (3) Các lớp khác đáp ứng danh sách thơng điệp giống nhau, cung cấp dịch vụ giống n Cách thức đáp ứng thông điệp, thực dịch vụ khác n Chúng tráo đổi cho mà không ảnh hưởng đến đối tượng gửi thơng điệp n Đa hình n n Polymorphism: Nhiều hình thức thực hiện, nhiều kiểu tồn Đa hình lập trình n Đa hình phương thức: n n Phương thức trùng tên, phân biệt danh sách tham số Đa hình đối tượng n n Nhìn nhận đối tượng theo nhiều kiểu khác Các đối tượng khác đáp ứng chung danh sách thơng điệp có giải nghĩa thơng điệp theo cách thức khác 17 18 Đa hình (4) n Đa hình (5) Nhìn nhận đối tượng theo nhiều kiểu khác Upcasting Downcasting n public class Test3 { public static void main(String args[]){ Person p1 = new Employee(); Person p2 = new Manager(); n Các đối tượng khác giải nghĩa thông điệp theo cách thức khác Liên kết động Ví dụ: Person p1 = new Person(); Person p2 = new Employee(); Person p3 = new Manager(); // System.out.println(p1.getDetail()); System.out.println(p2.getDetail()); System.out.println(p3.getDetail()); Employee e = (Employee) p1; Manager m = (Manager) p2; } } 19 20 9/18/17 Ví dụ khác Tốn tử instanceof class EmployeeList { Employee list[]; public void add(Employee e) { } public void print() { for (int i=0; i 0; i ) { int index_of_max = 0; for (int j = 1; j A[index_of_max]) index_of_max = j; if (index_of_max != i) { ItemType temp = A[i]; A[i] = A[index_of_max]; A[index_of_max ] = temp; } } const char* first = (const char*)region2; const char* last = ((const char*)region2) + n; char* result = (char*)region1; while (first != last) *result++ = *first++; return result; } } 29 Ví dụ: Java dùng upcasting Object class MyStack { public void push(Object obj) { } public Object pop() { } } public class TestStack{ MyStack s = new MyStack(); Point p = new Point(); Circle c = new Circle(); s.push(p); s.push(c); Circle c1 = (Circle) s.pop(); Point p1 = (Point) s.pop(); } 30 Nhắc lại – equals lớp tự viết class MyValue { int i; } public class EqualsMethod2 { public static void main(String[] args) { MyValue v1 = new MyValue(); MyValue v2 = new MyValue(); v1.i = v2.i = 100; System.out.println(v1.equals(v2)); System.out.println(v1==v2); } } 31 32 9/18/17 Bài tập n class MyValue { int i; public boolean equals(Object obj) { return (this.i == ((MyValue) obj).i); } } public class EqualsMethod2 { public static void main(String[] args) { Viết lại phương thức equals cho lớp MyValue (phương thức kế thừa từ lớp Object) MyValue v1 = new MyValue(); MyValue v2 = new MyValue(); v1.i = v2.i = 100; System.out.println(v1.equals(v2)); System.out.println(v1==v2); } } Ví dụ: Java 1.5: Template 34 Ví dụ: Java 1.5: Template (2) n Dùng Template: List myList = new LinkedList(); myList.add(new Integer(0)); Integer x = myList.iterator().next(); n //myList.add(new Long(0)); Error Không dùng Template List myList = new LinkedList(); myList.add(new Integer(0)); Integer x = (Integer) myList.iterator().next(); 35 36 9/18/17 Lập trình tổng quát n n 4.1 Giới thiệu 4.2 Java generic data structure n n n n n n 4.2.1 Cấu trúc liệu-data structure n 4.2.1 Data structure 4.2.2 Java collection framework 4.2.3 Các interface Java collection framework 4.2.4 Các cài đặt cho interface – implementation n Cấu trúc liệu cách tổ chức liệu để giải vấn đề Một số cấu trúc liệu phổ biến: n n n 4.3 Định nghĩa sử dụng Template 4.4 Ký tự đại diện (Wildcard) n n Mảng (Array) Danh sách liên kết (Linked List) Ngăn xếp (Stack) Hàng đợi (Queue) Cây (Tree) 37 38 a Linked List n n n n a Linked List (2) Linked list cấu trúc gồm node liên kết với thông qua mối liên kết Node cuối linked list đặt null để đánh dấu kết thúc danh sách Linked list giúp tiết kiệm nhớ so với mảng toán xử lý danh sách Khi chèn/xố node linked list, khơng phải dãn/dồn phần tử mảng Việc truy nhập linked list phải n Thể Node thông qua lớp tự tham chiếu (selfreferential class) class Node { private int data; private Node nextNode; // constructors and methods } 15 39 10 40 10 9/18/17 a Linked List (3) n b Stack Một linked list quản lý tham chiếu tới node đầu node cuối firstNode H n lastNode D n Q Stack cấu trúc theo kiểu LIFO (Last In First Out), phần tử vào sau lấy trước Hai thao tác Stack n Chèn phần tử: Luôn chèn vào đỉnh Stack (push) n Lấy phần tử: Luôn lấy từ đỉnh Stack (pop) 41 42 c Tree n n d Queue Tree cấu trúc phi tuyến (non-linear) Mỗi node có nhiều liên kết tới node khác n Nút gốc n Nút Queue (Hàng đợi) cấu trúc theo kiểu FIFO (First In First Out), phần tử vào trước lấy trước Hai thao tác hàng đợi n Chèn phần tử: Luôn chèn vào cuối hàng đợi (enqueue) n Lấy phần tử: Lấy từ đầu hàng đợi (dequeue) Nút 43 44 11 9/18/17 e Binary Search Tree n n Cây nhị phân mà node khơng có q node Cây tìm kiếm nhị phân nhị phân mà: n n n e Binary Search Tree (2) n Ví dụ Binary Search Tree 47 Giá trị nút thuộc bên trái nhỏ giá trị nút cha Giá trị nút thuộc bên phải lớn giá trị nút cha Cây trái Duyệt nhị phân n n n Cây phải 25 11 Inorder traversal Preorder traversal Postorder traversal 17 77 43 31 44 65 93 68 45 46 Lập trình tổng quát n n n n n n n 4.1 Giới thiệu 4.2 Java generic data structure n n 4.2.2 Java Collection Framework 4.2.1 Data structure 4.2.2 Java collection framework 4.2.3 Các interface Java collection framework 4.2.4 Các cài đặt cho interface – implementation 4.3 Định nghĩa sử dụng Template 4.4 Ký tự đại diện (Wildcard) n Collection đối tượng có khả chứa đối tượng khác Các thao tác thông thường collection n n n n n 47 Thêm/Xoá đối tượng vào/khỏi collection Kiểm tra đối tượng có collection khơng Lấy đối tượng từ collection Duyệt đối tượng collection Xố tồn collection 48 12 9/18/17 4.2.2 Java Collection Framework (2) n Các collection Java: n n n n 4.2.2 Java Collection Framework (3) n Mảng Vector: Mảng động Hastable: Bảng băm n n n Collections Framework (từ Java 1.2) n n Một số lợi ích Collections Framework n Giảm thời gian lập trình Tăng cường hiệu chương trình Dễ mở rộng collection Khuyến khích việc sử dụng lại mã chương trình Là kiến trúc hợp để biểu diễn thao tác collection Giúp cho việc xử lý collection độc lập với biểu diễn chi tiết bên chúng 49 50 Lập trình tổng quát 4.2.2 Java Collection Framework (4) n Collections Framework bao gồm n n n n Interfaces: Là giao tiếp thể tính chất kiểu collection khác List, Set, Map Implementations: Là lớp collection có sẵn cài đặt collection interfaces Algorithms: Là phương thức tĩnh để xử lý collection, ví dụ: xếp danh sách, tìm phần tử lớn n 4.1 Giới thiệu 4.2 Java generic data structure n n n n n n 51 4.2.1 Data structure 4.2.2 Java collection framework 4.2.3 Các interface Java collection framework 4.2.4 Các cài đặt cho interface – implementation 4.3 Định nghĩa sử dụng Template 4.4 Ký tự đại diện (Wildcard) 52 13 9/18/17 4.2.3 Interfaces n n n a Giao diện Collection List: Tập đối tượng tuần tự, nhau, lặp lại Set: Tập đối tượng không lặp lại Map: Tập cặp khóa-giá trị (key-value) khơng cho phép khóa lặp lại Collection Set List n Map n SortedMap SortedSet n 53 54 b Giao diện List n n c Giao diện Set List kế thừa từ Collection, cung cấp thêm phương thức để xử lý collection kiểu danh sách (Danh sách collection với phần tử xếp theo số) Một số phương thức List n n n n n n Xác định giao diện cho thao tác với tập đối tượng n Thêm vào tập hợp n Xóa khỏi tập hợp n Kiểm tra có thành viên Chứa phương thức thao tác phần tử riêng lẻ theo khối Cung cấp phương thức cho phép thực duyệt qua phần tử tập hợp (lặp) chuyển tập hợp sang mảng n n Set kế thừa từ Collection, hỗ trợ thao tác xử lý collection kiểu tập hợp (Một tập hợp yêu cầu phần tử phải khơng trùng lặp) Set khơng có thêm phương thức riêng phương thức 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); 55 56 14 9/18/17 d Giao diện SortedSet n n SortedSet kế thừa từ Set, hỗ trợ thao tác tập hợp phần tử so sánh Các đối tượng đưa vào SortedSet phải cài đặt giao tiếp Comparable lớp cài đặt SortedSet phải nhận Comparator kiểu đối tượng Một số phương thức SortedSet: n n n Collection, Set List Object first(); // lấy phần tử (nhỏ nhất) Object last(); // lấy phần tử cuối (lớn nhất) SortedSet subSet(Object e1, Object e2); // lấy tập phần tử nằm khoảng từ e1 tới e2 57 58 e Duyệt collection n n e Duyệt collection (2) Các phần tử collection duyệt thơng qua Iterator Các lớp cài đặt Collection cung cấp phương thức trả iterator phần tử chúng n n Iterator cho phép duyệt collection Các phương thức Iterator: n n n Collection c; Iterator it = c.iterator(); n boolean hasNext(); Object next(); void remove(); Ví dụ: Iterator it = c.iterator(); while ( it.hasNext() ) { Point p = (Point) it.next(); System.out.println( p.toString() ); } 59 60 15 9/18/17 f Giao diện Iterator n Cung cấp chế thuận tiện để duyệt (lặp) qua toàn nội dung tập hợp, lần đối tượng tập hợp n n n f Giao diện Iterator (2) - Ví dụ Collection c; // Some code to build the collection Giống SQL cursor ListIterator thêm phương thức đưa chất danh sách sở Iterator tập hợp xếp duyệt theo thứ tự tập hợp 61 Iterator i = c.iterator(); while (i.hasNext()) { Object o = i.next(); // Process this object } g Giao diện Map n n n n n g Giao tiếp Map (2) Xác định giao diện để thao tác với tập hợp bao gồm cặp khóa-giá trị n n Thêm cặp khóa-giá trị Xóa cặp khóa-giá trị Lấy giá trị với khóa có Kiểm tra có phải thành viên (khóa giá trị) n n Map cung cấp cách view liệu: n View khoá: Set keySet(); // Trả khoá n View giá trị: Collection values(); // Trả giá trị Cung cấp cách nhìn cho nội dung tập hợp: n 62 n View cặp khoá-giá trị Set entrySet(); // Trả cặp khoá-giá trị Tập khóa Tập giá trị Tập ánh xạ khóa-giá trị n 63 Sau nhận kết collection, ta dùng iterator để duyệt phần tử 64 16 9/18/17 h Giao diện SortedMap n n Lập trình tổng quát Giao diện SortedMap kế thừa từ Map, cung cấp thao tác bảng ánh xạ với khố so sánh Giống SortedSet, đối tượng khoá đưa vào SortedMap phải cài đặt giao tiếp Comparable lớp cài đặt SortedMap phải nhận Comparator đối tượng khoá n n 4.1 Giới thiệu 4.2 Java generic data structure n n n n n n 4.2.1 Data structure 4.2.2 Java collection framework 4.2.3 Các interface Java collection framework 4.2.4 Các cài đặt cho interface – implementation 4.3 Định nghĩa sử dụng Template 4.4 Ký tự đại diện (Wildcard) 65 4.2.4 Implementations n 66 4.2.4 Implementations (2) Các cài đặt Collections Framework lớp collection có sẵn Java Chúng cài đặt collection interface để thể cấu trúc liệu cụ thể Ví dụ: mảng động, danh sách liên kết, đỏ đen, bảng băm List LinkedList ArrayList HashSet Set LinkedHashSet SortedSet TreeSet HashMap Map LinkedHashMap SortedMap 67 TreeMap 68 17 9/18/17 4.2.4 Implementations (3) -Mô tả cài đặt 4.2.4 Implementations (3) -Mô tả cài đặt n n n n n ArrayList: Mảng động, phần tử thêm vào vượt kích cỡ mảng, mảng tự động tăng kích cỡ LinkedList: Danh sách liên kết chiều Hỗ trợ thao tác đầu cuối danh sách HashSet: Bảng băm LinkedHashSet: Bảng băm kết hợp với linked list nhằm đảm bảo thứ tự phần tử TreeSet: Cây đỏ đen (red-black tree) n n n HashMap: Bảng băm (cài đặt Map) LinkedHashMap: Bảng băm kết hợp với linked list nhằm đảm bảo thứ tự phần tử (cài đặt Map) TreeMap: Cây đỏ đen (cài đặt Map) 69 4.2.4 Implementations (3) – Tổng kết 71 70 public class MapExample { public static void main(String args[]) { Map map = new HashMap(); Integer ONE = new Integer(1); for (int i=0, n=args.length; i c) { for(Object o:c) { System.out.println(o); } } Ví dụ wildcard (2) 82 Template Java 1.5 vs C++ public void draw(List shape) { for(Shape s: shape) { s.draw(this); } } n n Template Java không sinh lớp Kiểm tra thống kiểu biên dịch n Các đối tượng chất kiểu Object Khác với: public void draw(List

Ngày đăng: 20/06/2021, 09:06

Tài liệu cùng người dùng

Tài liệu liên quan