Bài giảng môn Lập trình hướng đối tượng: Bài 8 - Đa hình

37 3 0
Bài giảng môn Lập trình hướng đối tượng: Bài 8 - Đa hình

Đ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: Bài 8 - Đa hình được biên soạn bao gồm các nội dung chính sau: Giới thiệu về upcasting và downcasting; Phân biệt liên kết tĩnh và liên kết độ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.

Bài 8: Đa hình 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 Nội dung Upcasting Downcasting Liên kết tĩnh Liên kết động Đa hình (Polymorphism) Ví dụ tập Nội dung Upcasting Downcasting Liên kết tĩnh Liên kết động Đa hình (Polymorphism) Ví dụ tập 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 khơng 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; Upcasting Downcasting ❖ Chuyển đổi kiểu liệu tham chiếu ▪ Kiểu liệu tham chiếu chuyển đổi kiểu • Kiểu liệu tham chiếu (lớp) tương thích A • Nằm phân cấp kế thừa A var1 = new B(); A var1 = new A(); C var2 = (C)var1; B ▪ Hai loại chuyển đổi • Up-casting • Down-casting C 1.1 Upcasting ❖ Upcasting: lên phân cấp thừa kế (moving up the inheritance hierarchy) ❖ Upcasting 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 Ví dụ Upcasting Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String public class Test1 { Employee public static void main(String arg[]) { - salary: double Employee e = new Employee(); + setSalary(double) Person p; p = e; + getDetails(): String p.setName(“Hoa”); p.setSalary(350000); // compile error } Ví dụ Upcasting Person class Manager extends Employee { - name: String Employee assistant; - birthday: Date // + setName(String) public void setAssistant(Employee e) { + setBirthday(Date) assistant = e; + getDetails(): String } // Employee } - salary: double public class Test2 { public static void main(String arg[]) { + setSalary(double) + getDetails(): String Manager junior, senior; // senior.setAssistant(junior); Manager } - assistant: Employee } + setAssistant(Employee) + getDetails():String Ví dụ Upcasting 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)); } } Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String 10 Đa hình (Polymophism) ❖ Ví dụ: Nếu du lịch, bạn chọn tơ, thuyền, máy bay ▪ Dù phương tiện gì, kết giống bạn đến nói cần đến ▪ Cách thức đáp ứng dịch vụ khác 23 Đa hình ❖ 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 ◼ ◼ ◼ Cách thức đáp ứng thông điệp, thực dịch vụ khác Chúng tráo đổi cho mà không ảnh hưởng đến đối tượng gửi thơng điệp → Đa hình 24 Đ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à tham chiếu tới ❖ Đ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 25 Đa hình Person - name: String ❖ Nhìn nhận đối tượng theo nhiều kiểu khác → Upcasting Downcasting public class Test3 { public static void main(String args[]){ Person p1 = new Employee(); Person p2 = new Manager(); - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Employee e = (Employee) p1; Manager m = (Manager) p2; } } Manager - assistant: Employee + setAssistant(Employee) + getDetails():String 26 Đa hình ❖ 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()); 27 Đa hình ❖ 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()); Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String 28 Toán tử instanceof public class Employee extends Person {} public class Student extends Person {} public class Test{ public doSomething(Person e) { if (e instanceof Employee) { } else if (e instanceof Student) { ){ } else { } } } 29 Nội dung Upcasting Downcasting Liên kết tĩnh Liên kết động Đa hình (Polymorphism) Ví dụ tập 32 Bài tập ❖ Cho biểu đồ lớp: Phương thức printLine() lớp sử dụng trường hợp đây, biết z đối tượng lớp F? Giải thích ngắn gọn? z.printLine(1) z.printLine(2, "Object-Oriented Programming") z.printLine("Java") z.printLine("Object-Oriented Programming", "Java") z.printLine("Object-Oriented Programming", 3) 33 Bài tập ❖ Những điều kiện trả true? (Có thể xem Java documentation để biết quan hệ thừa kế lớp) Biết System.out đối tượng lớp PrintStream System.out System.out System.out System.out System.out System.out instanceof instanceof instanceof instanceof instanceof instanceof PrintStream OutputStream LogStream Object String Writer 34 Bài tập ❖ Kiểm tra đoạn mã sau vẽ sơ đồ lớp tương ứng 35 Bài tập ❖ Giải thích đầu (hoặc lỗi có) cho chương trình thử nghiệm sau: 36 Bài tập ❖ Phân tích xây dựng lớp mơ tả sau: ▪ Hàng điện máy ▪ 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 trình tạo loại mặt hàng cụ thể Xuất thông tin mặt hàng 37 PhongBan - tenPhongBan: String NhanVien 1 * - tenNhanVien: String - soNhanVien: int + LUONG_MAX: double + SO_NV_MAX: int + tinhLuong(): double + themNV(NhanVien): boolean + inThongTin() + xoaNV(): NhanVien + tinhTongLuong(): double + inThongTin() Bài tập ❖ Xây dựng lớp biểu đồ hình bên ▪ Tính tổng lương tất nhân viên phòng ban NhanVienCoHuu NhanVienHopDong - luongCoBan: double - luongHopDong: double - heSoLuong: double + tinhLuong(): double + tinhLuong(): double + inThongTin() + tangHeSoLuong(double): boolean + inThongTin() TruongPhong - phuCap: double - soNamDuongChuc: int + tinhLuong(): double + inThongTin() 38 40 ... thơng điệp → Đa hình 24 Đ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à tham chiếu tới ❖ Đa hình lập trình ▪ Đa hình phương... 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 25 Đa hình Person - name:... 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 Nội dung Upcasting Downcasting Liên kết tĩnh Liên kết động Đa hình (Polymorphism) Ví dụ tập Nội dung

Ngày đăng: 26/01/2023, 17:44

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

Tài liệu liên quan