Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 40 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
40
Dung lượng
1,1 MB
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 IT3100 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 08 Đa hình CuuDuongThanCong.com https://fb.com/tailieudientucntt Mục tiêu ◼ ◼ ◼ ◼ Giới thiệu upcasting downcasting Phân biệt liên kết tĩnh liên kết động Nắm vững kỹ thuật đa hình Ví dụ tập vấn đề với ngôn ngữ lập trình Java CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung Upcasting Downcasting Liên kết tĩnh Liên kết động Đa hình (Polymorphism) Ví dụ tập CuuDuongThanCong.com https://fb.com/tailieudientucntt Upcasting Downcasting CuuDuongThanCong.com https://fb.com/tailieudientucntt Upcasting Downcasting ◼ Chuyển đổi kiểu liệu nguyên thủy ◼ Java tự động chuyển đổi kiểu Kiểu liệu tương thích ◼ Chuyển đổi từ kiểu hẹp sang kiểu rộng int i; double d = i; ◼ ◼ Phải ép kiểu Kiểu liệu tương thích ◼ Chuyển đổi từ kiểu rộng sang kiểu hẹp int i; byte b = i; byte b = (byte)i; ◼ CuuDuongThanCong.com https://fb.com/tailieudientucntt Upcasting Downcasting ◼ Chuyển đổi kiểu liệu tham chiếu ◼ Kiểu liệu tham chiếu chuyển đổi kiểu ◼ A Kiểu liệu tham chiếu (lớp) tương thích ◼ Nằm phân cấp kế thừa A var1 = new B(); A var1 = new A(); C var2 = (C)var1; ◼ B Hai cách chuyển đổi ◼ ◼ Up-casting Down-casting “dán cho nhãn” C CuuDuongThanCong.com https://fb.com/tailieudientucntt 1.1 Upcasting ◼ ◼ ◼ Up casting: lên phân cấp thừa kế (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 1.1 Upcasting ◼ Ví dụ: public class Test1 { public static void main(String arg[]) { Employee e = new Employee(); Person p; p = e; p.setName(“Hoa”); p.setSalary(350000); // compile error } ? Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String CuuDuongThanCong.com https://fb.com/tailieudientucntt 1.1 Upcasting Person - name: String ◼ - birthday: Date Ví dụ: + setName(String) 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); } } CuuDuongThanCong.com + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String https://fb.com/tailieudientucntt 1.1 Upcasting Person - name: String ◼ - birthday: Date Ví dụ: + setName(String) 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)); } } CuuDuongThanCong.com + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String https://fb.com/tailieudientucntt 10 Đa hình ◼ Polymorphism: Nhiều hình thức thực hiện, nhiều kiểu tồn ◼ ◼ Khả biến tham chiếu thay đổi hành vi theo đối tượng mà giữ Đa hình lập trình ◼ Đa hình phương thức: ◼ ◼ Phương thức trùng tên, phân biệt danh sách tham số Đ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 26 CuuDuongThanCong.com https://fb.com/tailieudientucntt Đa hình ◼ Polymorphism: gia tăng khả tái sử dụng đoạn mã nguồn viết cách tổng quát thay đổi cách ứng xử cách linh hoạt tùy theo loại đối tượng ◼ ◼ Tính đa hình (Polymorphism) Java hiểu trường hợp, hoàn cảnh khác đối tượng có hình thái khác tùy thuộc vào ngữ cảnh Để thể tính đa hình: ◼ ◼ Các lớp phải có quan hệ kế thừa với lớp cha Phương thức ghi đè (override) lớp 27 CuuDuongThanCong.com https://fb.com/tailieudientucntt Đa hình Person - name: String ◼ ◼ Ví dụ: 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 (Java) 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()); - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee ◼ - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String 28 CuuDuongThanCong.com https://fb.com/tailieudientucntt Đa hình Person - name: String ◼ - birthday: Date Ví dụ: class EmployeeList { Employee list[]; public void add(Employee e) { } public void print() { for (int i=0; i Hàng thực phẩm Viết chương trình tạo loại mặt hàng cụ thể Xuất thông tin mặt hàng 38 CuuDuongThanCong.com https://fb.com/tailieudientucntt PhongBan - tenPhongBan: String + tinhLuong(): double + themNV(NhanVien): boolean + inThongTin() Bài tập Xây dựng lớp biểu đồ hình bên ◼ - tenNhanVien: String + SO_NV_MAX: int + inThongTin() ◼ * + LUONG_MAX: double + tinhTongLuong(): double ◼ - soNhanVien: int + xoaNV(): NhanVien ◼ NhanVien Sửa lớp NhanVien thành lớp CanBoCoHuu Cho lớp CanBoCoHuu thừa kế lớp abstract NhanVien Tính tổng lương tất nhân viên phòng ban CuuDuongThanCong.com NhanVienHopDong NhanVienCoHuu - luongCoBan: double - luongHopDong: double - heSoLuong: double + tinhLuong(): double + tinhLuong(): double + inThongTin() + tangHeSoLuong(double): boolean + inThongTin() TruongPhong - phuCap: double - soNamDuongChuc: int + tinhLuong(): double + inThongTin() 39 https://fb.com/tailieudientucntt 41 CuuDuongThanCong.com https://fb.com/tailieudientucntt ... https://fb.com/tailieudientucntt Đa hình ◼ Polymorphism: Nhiều hình thức thực hiện, nhiều kiểu tồn ◼ ◼ Khả biến tham chiếu thay đổi hành vi theo đối tượng mà giữ Đa hình lập trình ◼ Đa hình phương thức: ◼... hành, điện áp, công suất> Hàng sành sứ < mã hàng, tên hàng, nhà sản xuất, giá, loại nguyên liệu> Hàng thực phẩm Viết chương. .. nhận đối tượng thuộc lớp sở đối tượng thuộc lớp dẫn xuất (upcasting) ngược lại (down-casting) Liên kết lời gọi hàm lúc biên dịch (liên kết tĩnh) hay lúc chạy chương trình (liên kết động) Đa hình