Bài giảng Lập trình hướng đối tượng: Chương 5 Kết tập và kế thừa với mục tiêu giúp các bạn Giải thích về khái niệm tái sử dụng mã nguồn; Chỉ ra được bản chất, mô tả các khái niệm liên quan đến đến kết tập và kế thừa; So sánh kết tập và kế thừa; Biểu diễn được kết tập và kế thừa trên UML; Giải thích nguyên lý kế thừa và thứ tự khởi tạo, hủy bỏ đối tượng trong kế thừa; Áp dụng các kỹ thuật, nguyên lý về kết tập và kết thừa trên ngôn ngữ lập trình Java.
9/18/17 Mục tiêu học n 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 n n LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 05 Kết tập kế thừa n n n Giải thích khái niệm tái sử dụng mã nguồn Chỉ chất, mô tả khái niệm liên quan đến đến kết tập kế thừa So sánh kết tập kế thừa Biểu diễn kết tập kế thừa UML Giải thích nguyên lý kế thừa thứ tự khởi tạo, hủy bỏ đối tượng kế thừa Áp dụng kỹ thuật, nguyên lý kết tập kết thừa ngôn ngữ lập trình Java Nội dung Nội dung Tái sử dụng mã nguồn Kết tập (Aggregation) Kế thừa (Inheritance) 3 Tái sử dụng mã nguồn Kết tập (Aggregation) Kế thừa (Inheritance) 9/18/17 Tái sử dụng mã nguồn (2) Tái sử dụng mã nguồn (Re-usability) n Tái sử dụng mã nguồn: Sử dụng lại mã nguồn viết n n n Lập trình cấu trúc: Tái sử dụng hàm/chương trình OOP: Khi mơ hình giới thực, tồn nhiều loại đối tượng có thuộc tính hành vi tương tự liên quan đến Làm để tái sử dụng lớp viết? n Các cách sử dụng lại lớp có: n n n Nội dung Ưu điểm tái sử dụng mã nguồn n n n n Sao chép lớp cũ thành lớp khác Dư thừa khó quản lý có thay đổi Tạo lớp tập hợp sử dụng đối tượng lớp cũ có Kết tập (Aggregation) Tạo lớp sở phát triển từ lớp cũ có Kế thừa (Inheritance) Giảm thiểu cơng sức, chi phí Nâng cao chất lượng phần mềm Nâng cao khả mơ hình hóa giới thực Nâng cao khả bảo trì (maintainability) Tái sử dụng mã nguồn Kết tập (Aggregation) Kế thừa (Inheritance) 9/18/17 Kết tập n Ví dụ: n n Điểm n n 2.1 Bản chất kết tập n Tứ giác gồm điểm Kết tập n Kết tập n Kết tập (aggregation) n Quan hệ chứa/có ("hasa") phần (is-a-part-of) Lớp n n Tạo đối tượng lớp có sẵn lớp thành viên lớp Kết tập tái sử dụng thông qua đối tượng Lớp toàn thể (Aggregate/Whole), Lớp cũ n Lớp thành phần (Part) 10 2.1 Bản chất kết tập (2) n 2.2 Biểu diễn kết tập UML Lớp toàn thể chứa đối tượng lớp thành phần n n n n Là phần (is-a-part of) lớp toàn thể Tái sử dụng thành phần liệu hành vi lớp thành phần thông qua đối tượng thành phần n 11 Sử dụng "hình thoi" đầu lớp toàn thể Sử dụng bội số quan hệ (multiplicity) đầu n số nguyên dương: 1, 2, n Dải số (0 1, 4) n *: Bất kỳ số n Khơng có: Mặc định Tên vai trị (rolename) n Nếu khơng có mặc định tên lớp (bỏ viết hoa chữ đầu) TuGiac Diem 12 9/18/17 Ví dụ 2.3 Minh họa Java 13 class TuGiac { private Diem d1, d2; TuGiac Diem private Diem d3, d4; public TuGiac(Diem p1, Diem p2, Diem p3, Diem p4){ d1 = p1; d2 = p2; d3 = p3; d4 = p4; } public TuGiac(){ d1 = new Diem(); d2 = new Diem(0,1); d3 = new Diem (1,1); d4 = new Diem (1,0); } public void printTuGiac(){ d1.printDiem(); d2.printDiem(); d3.printDiem(); d4.printDiem(); System.out.println(); } } class Diem { private int x, y; public Diem(){} public Diem(int x, int y) { this.x = x; this.y = y; } public void setX(int x){ this.x = x; } public int getX() { return x; } public void printDiem(){ System.out.print("(" + x + ", " + y + ")"); } } 14 public class Test { public static void main(String arg[]) { Diem d1 = new Diem(2,3); Diem d2 = new Diem(4,1); Diem d3 = new Diem (5,1); Diem d4 = new Diem (8,4); TuGiac tg1 = new TuGiac(d1, d2, d3, d4); TuGiac tg2 = new TuGiac(); tg1.printTuGiac(); tg2.printTuGiac(); } } 15 16 9/18/17 Cách cài đặt khác Ví dụ khác Kết tập TuGiac class TuGiac { private Diem[] diem = new Diem[4]; public TuGiac(Diem p1, Diem p2, Diem p3, Diem p4){ diem[0] = p1; diem[1] = p2; diem[2] = p3; diem[3] = p4; } public void printTuGiac(){ diem[0].printDiem(); diem[1].printDiem(); diem[2].printDiem(); diem[3].printDiem(); System.out.println(); } } Game … … Diem n n n n n n + countingPoints() 17 18 2.4 Thứ tự khởi tạo kết tập Die - value : int + throw() Khi đối tượng tạo mới, thuộc tính đối tượng phải khởi tạo gán giá trị tương ứng n Các đối tượng thành phần khởi tạo trước Các phương thức khởi tạo lớp đối tượng thành phần thực trước n - name : String - points : int + throwDie() class Game { Die die1, die2, die3; Player player1, player2; Arbitrator arbitrator1; } Người chơi (Player) Súc sắc (Die) Trọng tài (Arbitrator) Trò chơi (Game) Lớp Trò chơi lớp kết tập lớp lại Player Arbitrator - name : String Một trò chơi gồm đối thủ, quân súc sắc trọng tài Cần lớp: 19 20 9/18/17 public class PhongBan { private String tenPhongBan; private byte soNhanVien; public static final SO_NV_MAX = 100; private NhanVien[] dsnv; Bài tập: n Viết mã nguồn cho lớp PhongBan với thuộc tính phương thức biểu đồ phương thức khởi tạo với số lượng tham số cần thiết, biết rằng: n n n Việc thêm/xóa nhân viên thực theo chế stack tongLuong() trả tổng lương nhân viên phòng inTTin() hiển thị thơng tin phịng thơng tin nhân viên phòng PhongBan -tenPhongBan:String NhanVien * -tenNhanVien:String -soNhanVien:byte -heSoLuong:double +SO_NV_MAX:byte = 100 +LUONG_CO_BAN:double=750.000 +themNV(NhanVien):boolean if (soNhanVien > 0) { NhanVien tmp = dsnv[soNhanVien-1]; dsnv[soNhanVien-1] = null; soNhanVien ; return tmp; } else return null; +LUONG_MAX:double=20.000.000 +xoaNV():NhanVien +tangLuong(double):boolean +tongLuong():double +tinhLuong():double +inTTin() +inTTin() // (cont.) public PhongBan(String tenPB){ dsnv = new NhanVien[SO_NV_MAX]; tenPhongBan = tenPB; soNhanVien = 0; } public double tongLuong(){ double tong = 0.0; for (int i=0;i