Bài giảng lập trình hướng đối tượng – bài 07 đa hình (polymophism)

21 3 0
Bài giảng lập trình hướng đối tượng – bài 07 đa hình (polymophism)

Đ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

9/18/17 Nội dung co ng LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 07 Đa hình (Polymophism) om 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.) c 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 th an on n du 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 cu u 1.1 Upcasting g Nội dung 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 Ví dụ Ví dụ (2) om 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); } } co ng c 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 } th an 1.2 Downcasting on g Ví dụ (3) public class Test3 { String static teamInfo(Person p1, Person p2){ return "Leader: " + p1.getName() + ", member: " + p2.getName(); } du n cu u 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 } CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 Ví dụ Nội dung ng Person p2 = new Manager(); Employee e2 = (Employee) p2; co Person p3 = new Employee(); Manager e3 = (Manager) p3; } } 10 th an 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.) om .c 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 n n n n Ví dụ public class Test { public static void main(String arg[]){ Person p = new Person(); p.setName(“Hoa”); p.setSalary(350000); //compile-time error } } du Liên kết thời điểm biên dịch 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 độ cu u n on g 2.1 Liên kết tĩnh (Static Binding) 11 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 Ví dụ 2.2 Liên kết động (Dynamic binding) 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()); } } } 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 co ng n om Lời gọi phương thức định thực (run-time) c n 14 th an 13 on n du 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.) cu u Đa hình (Polymophism) g Nội dung 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 15 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 Đa hình (2) 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: Phương thức trùng tên, phân biệt danh sách tham số .c n n om 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 Đa hình đối tượng 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 ng n Đa hình (3) n co n 18 th an 17 on Nhìn nhận đối tượng theo nhiều kiểu khác Upcasting Downcasting n du n Đa hình (5) g Đa hình (4) cu u 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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; } } ng c const char* first = (const char*)region2; const char* last = ((const char*)region2) + n; char* result = (char*)region1; while (first != last) *result++ = *first++; return result; co } } 30 th an 29 on g 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(); } Nhắc lại – equals lớp tự viết cu u du 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 Bài tập Viết lại phương thức equals cho lớp MyValue (phương thức kế thừa từ lớp Object) c om 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) { } } 34 th an co ng MyValue v1 = new MyValue(); MyValue v2 = new MyValue(); v1.i = v2.i = 100; System.out.println(v1.equals(v2)); System.out.println(v1==v2); du n Không dùng Template Dùng Template: List myList = new LinkedList(); myList.add(new Integer(0)); Integer x = myList.iterator().next(); cu u n Ví dụ: Java 1.5: Template (2) g on Ví dụ: Java 1.5: Template //myList.add(new Long(0)); Error List myList = new LinkedList(); myList.add(new Integer(0)); Integer x = (Integer) myList.iterator().next(); 35 36 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 Lập trình tổng quát n n n 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) ng n co n 38 th an 37 a Linked List n n n n a Linked List (2) g n n 4.3 Định nghĩa sử dụng Template 4.4 Ký tự đại diện (Wildcard) 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/xoá node linked list, dãn/dồn phần tử mảng Việc truy nhập linked list phải du 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 om 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: c n n on n 4.1 Giới thiệu 4.2 Java generic data structure cu u n 4.2.1 Cấu trúc liệu-data structure 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 10 39 40 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 a Linked List (3) D Q co ng H n lastNode 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) c firstNode n om Một linked list quản lý tham chiếu tới node đầu node cuối 42 th an 41 n on 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út gốc Nút n du n d Queue g c Tree n cu u n b Stack 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 e Binary Search Tree n om n Ví dụ Binary Search Tree 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 Duyệt nhị phân n n n 47 Cây trái c n n 11 Inorder traversal Preorder traversal Postorder traversal ng 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à: 17 Cây phải 25 77 43 65 31 44 93 68 co n e Binary Search Tree (2) 46 th an 45 n n n n n n g 4.2.2 Java Collection Framework n du n 4.1 Giới thiệu 4.2 Java generic data structure 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 cu u n on Lập trình tổng quát 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 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 47 48 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 4.2.2 Java Collection Framework (2) n n n n n Collections Framework (từ Java 1.2) n n n 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 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 ng n Mảng Vector: Mảng động Hastable: Bảng băm Một số lợi ích Collections Framework om n n c Các collection Java: co n 4.2.2 Java Collection Framework (3) 50 th an 49 Lập trình tổng quát n n n n du Collections Framework bao gồm 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 cu u n on g 4.2.2 Java Collection Framework (4) 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) 51 52 13 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 4.2.3 Interfaces Set om Collection Map List 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 c n n ng n 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 SortedMap n SortedSet co n a Giao diện Collection 54 th an 53 n on 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 du n n n n n n n n cu u n c Giao diện Set g b Giao diện List 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 d Giao diện SortedSet n n om c 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 ng 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: co n 58 th an 57 on du n 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 Collection c; Iterator it = c.iterator(); cu u n e Duyệt collection (2) g e Duyệt collection n n Iterator cho phép duyệt collection Các phương thức Iterator: n n n 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 f Giao diện Iterator 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 om Iterator i = c.iterator(); while (i.hasNext()) { Object o = i.next(); // Process this object } 61 62 th an n 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 ng n Giống SQL cursor c n Collection c; // Some code to build the collection co n f Giao diện Iterator (2) - Ví dụ n 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 du n n on 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 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 Map cung cấp cách view liệu: n View khoá: Set keySet(); // Trả khoá cu u n g Giao tiếp Map (2) g g Giao diện Map n View cặp khoá-giá trị Set entrySet(); // Trả cặp khố-giá trị Tập khóa Tập giá trị Tập ánh xạ khóa-giá trị n Sau nhận kết collection, ta dùng iterator để duyệt phần tử 63 64 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 h Giao diện SortedMap n n 4.1 Giới thiệu 4.2 Java generic data structure 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 ng n om n 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 khố .c n Lập trình tổng quát n co n 66 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 4.2.4 Implementations (2) du List LinkedList ArrayList HashSet cu u n on 4.2.4 Implementations g th an 65 4.3 Định nghĩa sử dụng Template 4.4 Ký tự đại diện (Wildcard) Set LinkedHashSet SortedSet TreeSet HashMap Map LinkedHashMap SortedMap 67 TreeMap 68 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt 9/18/17 4.2.4 Implementations (3) -Mô tả cài đặt 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) .c ng co 70 an 69 th n n 4.2.4 Implementations (3) – Tổng kết g n n on n n du 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) cu u n om 4.2.4 Implementations (3) -Mô tả cài đặt 71 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); } } co ng n public void printCollection(Collection c) { Iterator i = c.iterator(); for(int k = 0;k

Ngày đăng: 28/12/2021, 19:14

Hình ảnh liên quan

1. Upcasting và Downcasting - Bài giảng lập trình hướng đối tượng – bài 07 đa hình (polymophism)

1..

Upcasting và Downcasting Xem tại trang 3 của tài liệu.
3. Đa hình (Polymophism) - Bài giảng lập trình hướng đối tượng – bài 07 đa hình (polymophism)

3..

Đa hình (Polymophism) Xem tại trang 3 của tài liệu.
3. Đa hình (Polymophism) - Bài giảng lập trình hướng đối tượng – bài 07 đa hình (polymophism)

3..

Đa hình (Polymophism) Xem tại trang 4 của tài liệu.
3. Đa hình (Polymophism) - Bài giảng lập trình hướng đối tượng – bài 07 đa hình (polymophism)

3..

Đa hình (Polymophism) Xem tại trang 7 của tài liệu.
n Hastable: Bảng băm - Bài giảng lập trình hướng đối tượng – bài 07 đa hình (polymophism)

n.

Hastable: Bảng băm Xem tại trang 13 của tài liệu.
n HashSet: Bảng băm. - Bài giảng lập trình hướng đối tượng – bài 07 đa hình (polymophism)

n.

HashSet: Bảng băm Xem tại trang 18 của tài liệu.

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

  • Đang cập nhật ...

Tài liệu liên quan