Bài giảng Lập trình hướng đối tượng – Bài 08: Đa hình
lượt xem 5
download
Những nội dung chính được trình bày trong chương này gồm có: Giới thiệu về upcasting và downcasting, phân biệt liên kết tĩnh và liên kết động, nắm vững kỹ thuật đa hình, ví dụ và bài tập về các vấn đề trên với ngôn ngữ lập trình java. Mời các bạn cùng tham khảo bài giảng để biết thêm 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 08: Đa hình
- 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 08. Đa hình u cu CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Mục tiêu om ◼ Giới thiệu về upcasting và downcasting .c ◼ Phân biệt liên kết tĩnh và liên kết động ng Nắm vững kỹ thuật đa hình co ◼ an ◼ Ví dụ và bài tập về các vấn đề trên với ngôn ngữ lập trình Java th o ng du u cu 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Nội dung om 1. Upcasting và Downcasting .c 2. Liên kết tĩnh và Liên kết động ng Đa hình (Polymorphism) co 3. an 4. Ví dụ và bài tập th o ng du u cu 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- om .c ng 1. Upcasting và Downcasting co an th o ng du u cu 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Upcasting và Downcasting om ◼ Chuyển đổi kiểu dữ liệu nguyên thủy .c ◼ Java tự động chuyển đổi kiểu khi ng ◼ Kiểu dữ liệu tương thích co ◼ Chuyển đổi từ kiểu hẹp hơn sang kiểu rộng hơn an int i; th double d = i; ng ◼ Phải ép kiểu khi o Kiểu dữ liệu tương thích du ◼ ◼ Chuyển đổi từ kiểu rộng hơn sang kiểu hẹp hơn u cu int i; byte b = i; byte b = (byte)i; 5 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Upcasting và Downcasting om ◼ Chuyển đổi kiểu dữ liệu tham chiếu .c ◼ Kiểu dữ liệu tham chiếu có thể được chuyển đổi kiểu khi ng ◼ Kiểu dữ liệu tham chiếu (lớp) tương thích A co ◼ Nằm trên cùng một cây phân cấp kế thừa A var1 = new B(); an A var1 = new A(); th ng B C var2 = (C)var1; o du ◼ Hai cách chuyển đổi u Up-casting cu ◼ “dán cho nó một cái nhãn” ◼ Down-casting C 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.1 Upcasting om ◼ Up casting: đi lên trên cây phân cấp thừa kế (moving up the inheritance hierarchy) .c ng ◼ Up casting là khả năng nhìn nhận đối tượng thuộc co lớp dẫn xuất như là một đối tượng thuộc lớp cơ sở. an Tự động chuyển đổi kiểu th ◼ ng o du u cu 7 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.1 Upcasting om ◼ Ví dụ: public class Test1 { Person .c public static void main(String arg[]) { - name: String ng Employee e = new Employee(); - birthday: Date co Person p; + setName(String) p = e; ? an + setBirthday(Date) p.setName(“Hoa”); th + getDetails(): String p.setSalary(350000); ng // compile error o } du Employee - salary: double u cu + setSalary(double) + getDetails(): String 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.1 Upcasting Person - name: String - birthday: Date om ◼ Ví dụ: + setName(String) class Manager extends Employee { .c + setBirthday(Date) Employee assistant; + getDetails(): String ng // ... co public void setAssistant(Employee e) { Employee an assistant = e; th } ng - salary: double // ... + setSalary(double) } o + getDetails(): String du public class Test2 { u public static void main(String arg[]) { cu Manager Manager junior, senior; - assistant: Employee // ... senior.setAssistant(junior); + setAssistant(Employee) } + getDetails():String 9 } CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.1 Upcasting Person - name: String - birthday: Date om ◼ Ví dụ: + setName(String) public class Test3 { .c + setBirthday(Date) String static teamInfo(Person p1, + getDetails(): String ng Person p2) { co return "Leader: " + p1.getName() + Employee an ", member: " + p2.getName(); th } ng - salary: double public static void main(String arg[]) { + setSalary(double) Employee e1, e2; o + getDetails(): String du Manager m1, m2; u // ... cu Manager System.out.println(teamInfo(e1, e2)); - assistant: Employee System.out.println(teamInfo(m1, m2)); System.out.println(teamInfo(m1, e2)); + setAssistant(Employee) } + getDetails():String 10 } CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.2 Downcasting om ◼ Down casting: đi xuống cây phân cấp thừa kế (move back down the inheritance hierarchy) .c ng ◼ Down casting là khả năng nhìn nhận một đối tượng co thuộc lớp cơ sở như một đối tượng thuộc lớp dẫn an xuất. Không tự động chuyển đổi kiểu th ng ◼ o → Phải ép kiểu. du u cu 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.2 Downcasting Person - name: String - birthday: Date om ◼ Ví dụ: + setName(String) public class Test2 { .c + setBirthday(Date) public static void main(String arg[]) { + getDetails(): String ng Employee e = new Employee(); co Person p = e; // up casting Employee an Employee e1 = (Employee) p; th // down casting ng - salary: double Manager m = (Manager) ee; + setSalary(double) // run-time error o + getDetails(): String du u Person p2 = new Manager(); cu Manager Employee e2 = (Employee) p2; - assistant: Employee } } + setAssistant(Employee) + getDetails():String 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Toán tử instanceof om ◼ Kiểm tra xem một đối tượng có phải là thể hiện của một lớp nào đó không .c Trả về: true | false (nếu đối tượng là null thì trả về ng ◼ co false) an public class Employee extends Person {} th public class Student extends Person {} ng public class Test{ o du public doSomething(Person e) { u if (e instanceof Employee) {... cu } else if (e instanceof Student) {... } else {... } } 13 } CuuDuongThanCong.com https://fb.com/tailieudientucntt
- om 2. Liên kết tĩnh và liên kết động .c ng (Static binding & dynamic binding) co an th o ng du u cu 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Liên kết lời gọi hàm om ◼ Liên kết lời gọi hàm (function call binding) là quy trình xác định khối mã hàm cần chạy khi một lời gọi .c hàm được thực hiện ng co ◼ C: đơn giản vì mỗi hàm có duy nhất một tên an ◼ C++: chồng hàm, phân tích chữ ký kiểm tra danh sách th tham số o ng du u cu 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Trong ngôn ngữ Hướng đối tượng om ◼ Liên kết lời gọi phương thức .c ◼ Đối với các lớp độc lập (không thuộc cây thừa kế ng nào), quy trình này gần như không khác với co function call binding an so sánh tên phương thức, danh sách tham số để tìm định th ◼ nghĩa tương ứng ng một trong số các tham số là tham số ẩn: con trỏ this o ◼ du u cu bar.foo (); → lời gọi này bị ràng buộc với định nghĩa của phương thức mà nó gọi 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2.1 Liên kết tĩnh om ◼ Liên kết tại thời điểm biên dịch .c ◼ Early Binding/Compile-time Binding ng Lời gọi phương thức được quyết định khi biên co ◼ dịch, do đó chỉ có một phiên bản của phương an thức được thực hiện th ng ◼ Nếu có lỗi thì sẽ có lỗi biên dịch o du ◼ Ưu điểm về tốc độ u C/C++ function call binding, và C++ method cu ◼ binding cơ bản đều là ví dụ của liên kết tĩnh (static function call binding) 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2.1 Liên kết tĩnh om ◼ Thích hợp cho các lời gọi hàm thông thường .c ◼ Mỗi lời gọi hàm chỉ xác định duy nhất một định ng nghĩa hàm, kể cả trường hợp hàm chồng. co Phù hợp với các lớp độc lập không thuộc cây an ◼ th thừa kế nào ng Mỗi lời gọi phương thức từ một đối tượng của lớp o ◼ du hay từ con trỏ đến đối tượng đều xác định duy u nhất một phương thức cu 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2.2 Liên kết động om ◼ Lời gọi phương thức được quyết định khi .c thực hiện (run-time) ng Late binding/Run-time binding co ◼ Phiên bản của phương thức phù hợp với đối an ◼ tượng được gọi th ng ◼ Java trì hoãn liên kết phương thức cho đến thời o du gian chạy (run-time) - đây được gọi là liên kết u động hoặc liên kết trễ cu ◼ Java mặc định sử dụng liên kết động 19 CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Ví dụ Person - name: String - birthday: Date om public class Test { + setName(String) public static void main(String arg[]){ .c + setBirthday(Date) Person p = new Person(); + getDetails(): String ng // ... co Employee e = new Employee(); Employee an // ... th Manager m = new Manager(); - salary: double // ... ng + setSalary(double) Person pArr[] = {p, e, m}; o + getDetails(): String du for (int i=0; i< pArr.length; i++){ System.out.println( u cu pArr[i].getDetail()); Manager } - assistant: Employee } Tuỳ thuộc vào đối tượng + setAssistant(Employee) } gọi tại thời điểm thực thi + getDetails():String chương trình (run-time) 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - TS. Trần Công Án
57 p | 89 | 13
-
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 | 174 | 12
-
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 | 140 | 9
-
Bài giảng Lập trình hướng đối tượng C++ - Chương 2: Lập trình hướng đối tượng
53 p | 46 | 8
-
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 | 80 | 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 | 103 | 8
-
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: Bài 1 - ThS. Trịnh Thành Trung
53 p | 87 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Minh Thái
40 p | 116 | 6
-
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 | 100 | 6
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 63 | 5
-
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 | 99 | 5
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 104 | 4
-
Bài giảng Lập trình hướng đối tượng: Nhập môn - Trần Phước Tuấn
15 p | 139 | 4
-
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 | 11 | 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 | 15 | 3
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Nguyễn Khanh Văn
0 p | 83 | 2
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