ngÔn ngỮ thỐng kÊ r -...
TRANSCRIPT
![Page 1: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/1.jpg)
Click to edit Master subtitle style
THỪA KẾ
Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học, TP.HCM
CHƯƠNG 5:
1
![Page 2: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/2.jpg)
Vấn đề tái sử dụng code & các hình thức Lý do thừa kế Lớp cơ sở Lớp dẫn xuất Sử dụng lớp cơ sở Constructor và thừa kế Access modifier: protected Lớp cơ sở của mọi lớp: Lớp object Lớp sealed và lớp partial
NỘI DUNG
2
![Page 3: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/3.jpg)
Xuất phát từ nhu cầu: Sử dụng lại những đoạn code có sẵn Hoặc phát triển thêm từ những code có sẵn mà không phải viết lại từ đầu
Ưu điểm: Giảm chi phí Nâng cao khả năng bảo trì và khả năng mô hình hóa
Vấn đề tái sử dụng code
3
![Page 4: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/4.jpg)
Lập trình cấu trúc: chương trình con OOP: nhiều loại đối tượng có thuộc tính, hành vi tương tự nhau tái sử dụng các lớp đã viết Trong một lớp vẫn tái sử dụng phương thức
Vấn đề tái sử dụng code
4
![Page 5: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/5.jpg)
Có 3 hình thức: Sao chép lớp cũ thành 1 lớp khác Hạn chế: Dư thừa, khó quản lý khi có thay đổi
Kết tập (Aggregation): Lớp mới là tập hợp hoặc sử dụng (không thay đổi) các lớp đã có Thừa kế (Inheritance): Lớp mới phát triển thêm các thuộc tính hoặc phương thức từ lớp đã có
Các hình thức tái sử dụng code
5
![Page 6: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/6.jpg)
KẾT TẬP (AGGREGATION)
6
![Page 7: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/7.jpg)
Thành phần lớp mới chứa các đối tượng của lớp cũ
Lớp mới: Lớp chứa/Lớp toàn thể Sử dụng các thuộc tính và phương thức của lớp thành phần thông qua đối tượng
Lớp cũ: Lớp thành phần
Ví dụ: Lớp cũ: Điểm (Point) Lớp mới: Tam giác (Triangle) có 3 điểm
Kết tập (Aggregation)
7
![Page 8: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/8.jpg)
Số lượng lớp thành phần trong lớp chứa có thể:
1 số nguyên dương (1, 2, 3, ...) Dải số (0..1, 1..n) Bất kỳ giá trị nào: * Không ghi: mặc định là 1
Ký hiệu quan hệ kết tập
8
![Page 9: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/9.jpg)
Ví dụ quan hệ kết tập
9
public class Point { private int x; private int y; //Định nghĩa các phương thức }
public class Triangle { Point dinhA; //Đỉnh A Point dinhB; //Đỉnh B Point dinhC; //Đỉnh C //Định nghĩa các phương thức }
![Page 10: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/10.jpg)
Cài đặt lớp Point và lớp Triangle có chức năng: Nhập Xuất Tính chu vi Tính diện tích
(Mỗi lớp phải có: Property get, set; constructor; kiểm tra ràng buộc nếu có)
Cài đặt lớp ListTriangle chứa danh sách các Triangle có chức năng: nhập, xuất và cho biết thông tin tam giác có diện tích lớn nhất
Bài tập tại lớp
10
![Page 11: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/11.jpg)
Xây dựng chương trình trò chơi xúc xắc với cách chơi như sau:
Mỗi xúc xắc sẽ có giá trị ngẫu nhiên từ 1 đến 6 Quy định số lần gieo xúc xắc Hai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt gieo, số điểm của lượt đó được tích lũy vào số điểm của người chơi tương ứng Sau các lượt gieo theo quy định, người thắng cuộc là người có tổng số điểm lớn hơn
Bài tập ví dụ
11
![Page 12: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/12.jpg)
Xúc xắc (XucXac) Thuộc tính: giá trị của mặt (giaTri) Phương thức: sinh ngẫu nhiên giá trị mặt của xúc xắc (SinhGiaTri())
Người chơi (NguoiChoi) Thuộc tính: tên (ten), điểm (diem) Phương thức: gieo xúc xắc (GieoXucXac())
Phát hiện lớp và thông tin của lớp
12
![Page 13: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/13.jpg)
Trận đấu (TranDau) Thuộc tính: xúc xắc (xucXac), 2 người chơi (nguoiChoi), số vòng chơi (soVong), người thắng cuộc (nguoiThang) Phương thức: bắt đầu (BatDau()), kết thúc (KetThuc), hiển thị thông tin (HienThi()), thực hiện trận đấu (ThucHienTranDau())
Phát hiện lớp và thông tin của lớp
13
![Page 14: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/14.jpg)
Sơ đồ lớp
14
![Page 15: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/15.jpg)
public class XucXac
private int giaTri; //Định nghĩa Constructor và Property get, set //tại đây … public void SinhGiaTri() { Random random = new Random(); this.giaTri = random.Next(1, 7); }
![Page 16: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/16.jpg)
public class NguoiChoi
private String ten; private int diem; //Định nghĩa constructor, property get, set //tại đây ... public void GieoXucXac(XucXac xucXac) { Console.Write("> Nhan Enter …"); Console.ReadLine(); xucXac.SinhGiaTri(); this.diem += xucXac.GiaTri; //get giá trị xucXac Console.Write(" - Diem hien tai = " + this.diem); }
![Page 17: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/17.jpg)
public class TranDau private XucXac xucXac; private NguoiChoi nguoiChoi1; private NguoiChoi nguoiChoi2; private NguoiChoi nguoiThang; private int soVong; //Định nghĩa constructor, property get, set tại đây... public void BatDau() { Console.WriteLine("Tran dau bat dau..."); for (int i = 1; i <= this.soVong; i++) { Console.WriteLine("***** Vong {0} *****", i); Console.WriteLine(nguoiChoi1.Ten+" gieo xuc xac"); nguoiChoi1.GieoXucXac(xucXac); Console.WriteLine(nguoiChoi2.Ten+" gieo xuc xac"); nguoiChoi2.GieoXucXac(xucXac); } }
![Page 18: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/18.jpg)
public class TranDau
public void KetThuc() { int diem1 = nguoiChoi1.Diem; int diem2 = nguoiChoi2.Diem; if (diem1 > diem2) this.nguoiThang = this.nguoiChoi1; else if (diem2 > diem1) this.nguoiThang = this.nguoiChoi2; }
![Page 19: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/19.jpg)
public class TranDau public void HienThi() { Console.WriteLine("*** Ket qua tran dau ***"); Console.WriteLine("- Diem cua {0}: {1}", nguoiChoi1.Ten, nguoiChoi1.Diem); Console.WriteLine("- Diem cua {0}: {1}", nguoiChoi2.Ten, nguoiChoi2.Diem); if (nguoiThang != null) Console.WriteLine("Nguoi thang: " + nguoiThang.Ten); else Console.WriteLine("Tran dau hoa!!!"); } public void ThucHienTranDau() { BatDau(); KetThuc(); HienThi(); }
![Page 20: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/20.jpg)
Hãy viết lại các lớp trong Bài tập ví dụ trên để thoả yêu cầu sau:
Có thêm thuộc tính soBanThang ghi lại số bàn thắng Cho biết số ván đấu (>2), nếu người chơi nào thắng quá bán đầu tiên thì sẽ thắng VD: Giả sử 2 người chơi phải chơi 3 ván đấu. Nếu người chơi nào thắng trước 2 ván thì người chơi đó thắng cả trận đấu Nếu hòa thì tính điểm để kết luận người thắng
Bài tập về nhà
20
![Page 21: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/21.jpg)
THỪA KẾ
21
![Page 22: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/22.jpg)
Đóng gói (Encapsulation) và Giao diện (Interface) Ẩn chi tiết của lớp (Đóng gói), chỉ cung cấp các phương thức cần thiết để dùng (Giao diện)
Thừa kế (Inheritance) Tạo lớp mới thừa kế lớp đã có
Đa hình (Polymorphism) Khả năng tạo ra các lớp dẫn xuất, cài đặt cùng một method của lớp cơ sở theo những cách khác nhau (tùy từng lớp dẫn xuất)
3 nguyên tắc lập trình hướng đối tượng
22
![Page 23: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/23.jpg)
Tạo lớp mới bằng cách phát triển từ lớp đã có
Lớp mới thừa kế những thành viên đã có trong lớp
cũ
Lớp cũ: Lớp cha (superclass), lớp cơ sở (baseclass)
Lớp mới: Lớp con (subclass), lớp dẫn xuất (derived
class)
Thừa kế (Inheritance)
23
![Page 24: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/24.jpg)
Lớp cơ sở Lớp tổng quát hơn trong mối quan hệ “is-a” Có cùng tập thuộc tính và hành vi
Lớp dẫn xuất Lớp cụ thể hơn trong một quan hệ “is-a” Có cùng tập thuộc tính và hành vi (do kế thừa từ lớp cơ sở), cộng thêm tập thuộc tính và hành vi của riêng nó
Kế thừa
24
![Page 25: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/25.jpg)
Ký hiệu kế thừa
![Page 26: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/26.jpg)
Lớp Student thừa kế Person Lớp Student tái sử dụng mọi thứ của lớp Person Mọi thay đổi của lớp Person sẽ tự động thay đổi trong lớp Student
Ví dụ
26
![Page 27: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/27.jpg)
Kết tập vs Kế thừa
Kế thừa Kết tập
Tái sử dụng mã nguồn
thông qua lớp
Tái sử dụng mã nguồn
thông qua đối tượng
Quan hệ “là một loại” Quan hệ “là một phần”
Ví dụ: Tam giác vuông là một
loại tam giác
Ví dụ: Tam giác có 3 đỉnh
![Page 28: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/28.jpg)
Đơn kế thừa (single inheritance): chỉ có một lớp
cha
Đa kế thừa (multiple inheritance): có nhiều lớp cha
Các dạng kế thừa
28
![Page 29: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/29.jpg)
Nhận biết kế thừa?
class A
class B
class AB
class A class B
![Page 30: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/30.jpg)
LỚP CƠ SỞ
30
![Page 31: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/31.jpg)
Lớp cơ sở (base class, superclass, parent class) là bất kỳ lớp thông thường nào mà được dùng cho lớp khác thừa kế
Lớp cơ sở
class Person { public string Email { get; set; } public string Name { get; set; } public Person() { Email = ""; Name = ""; }
public Person(string name) { Name = name; } public Person(string name, string email) { Name = name; Email = email; } }
31
![Page 32: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/32.jpg)
LỚP DẪN XUẤT
32
![Page 33: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/33.jpg)
Lớp dẫn xuất (derived class, subclass, child class) là lớp dựa trên hay mở rộng một lớp khác
Lớp dẫn xuất
Lớp Student dẫn xuất từ lớp Person Lớp Student thừa kế từ lớp Person
33
![Page 34: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/34.jpg)
Tạo lớp dẫn xuất
Lớp dẫn xuất
class Student : Person { // ... }
class Student : Person { public string StudentID { get; set; } public Student(string studentID) { StudentID = studentID; Name = "NA"; Email = "NA"; } }
34
![Page 35: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/35.jpg)
Lớp Student có Property: StudentID Thừa kế các biến, các properties, các methods của Person
• Name • Email
Chú ý: Một lớp có thể thừa kế từ lớp mà lớp đó lại thừa kế từ lớp khác.
Giải thích
35
![Page 36: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/36.jpg)
SỬ DỤNG LỚP DẪN XUẤT
36
![Page 37: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/37.jpg)
Cách 1: Sử dụng như bất kỳ lớp nào khác Cách 2: Student là một kiểu đặc biệt của Person nên có thể đặt Student vào trong biến kiểu Person
Biến person là một student có mã 15TH123456 Nhưng person chỉ được dùng những thứ có trong person
Sử dụng lớp dẫn xuất
Person person = new Person(“Khánh Phương”); Student student = new Student(“15TH123456”);
Person person = new Student(“15TH123456”);
37
![Page 38: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/38.jpg)
Ví dụ: int x = 20.5; //error? double y = 10; //OK?
Upcasting: đối tượng lớp dẫn xuất được nhìn nhận như đối tượng lớp cơ sở: Thực hiện tự động Downcasting: đối tượng lớp cơ sở được nhìn nhận như đối tượng lớp dẫn xuất: Phải ép kiểu
Kiểm tra kiểu và ép kiểu (casting)
38
![Page 39: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/39.jpg)
person là một Student có mã 15TH123456 nhưng lại dùng như Person Để kiểm tra đối tượng có kiểu gì: từ khóa is
Kiểm tra kiểu và ép kiểu (casting)
Person person = new Student(“15TH123456”);
Person person = new Student(“15TH123456”); if (person is Student) { Student student = (Student) person; // Làm những gì chúng ta muốn với student }
39
![Page 40: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/40.jpg)
Thay vì ép kiểu, có một cách khác để chuyển một kiểu đối tượng sang kiểu khác :
Dùng từ khóa ‘as’
Từ khóa ‘as’
Person person = new Student(“15TH123456”); Student student = person as Student;
40
![Page 41: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/41.jpg)
So sánh casting và as
Từ khóa ‘as’
class Person { } class Student : Person { } class Teacher : Person { }
41
![Page 42: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/42.jpg)
So sánh casting và as
Từ khóa ‘as’
Person person = new Teacher(); Student = (Student) person;
Person person = new Teacher(); Student = person as Student; if (person != null) { //… }
42
![Page 43: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/43.jpg)
Một thuận lợi là chúng ta có thể tạo một mảng của lớp cơ sở, và đặt bất kỳ lớp dẫn xuất nào vào đó
Dùng thừa kế trong mảng
Person[] people = new Person[5]; people[3] = new Student(“15TH123456”); people[4] = new Teacher();
43
![Page 44: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/44.jpg)
CONSTRUCTOR VÀ THỪA KẾ
44
![Page 45: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/45.jpg)
Lớp dẫn xuất sẽ thừa kế Fields Methods, Properties, Indexers, Events
Lớp dẫn xuất không thừa kế constructor
Không thể dùng constructor của lớp cơ sở để tạo lớp dẫn xuất Chúng ta phải tự tạo constructor của lớp dẫn xuất
Constructor trong thừa kế
45
![Page 46: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/46.jpg)
Khi lớp dẫn xuất định nghĩa constructor, nó cần gọi một trong những constructor của lớp cơ sở Mặc định, constructor của lớp dẫn xuất gọi constructor không tham số của lớp cơ sở
Constructor trong thừa kế
46
![Page 47: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/47.jpg)
Tình huống: Nếu lớp cơ sở Không có constructor không tham số Constructor của lớp dẫn xuất muốn gọi constructor khác (không phải constructor không tham số)
Giải pháp: Dùng từ khóa “base”
Constructor trong thừa kế
47
![Page 48: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/48.jpg)
Constructor trong thừa kế
class Person { // … public Person() { Email = ""; Name = ""; } public Person(string name) { Name = name; } // … }
class Student : Person { // … public Student(string studentID) : base(“No name”) { StudentID = studentID } // … }
48
![Page 49: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/49.jpg)
ACCESS MODIFIER: PROTECTED
49
![Page 50: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/50.jpg)
Đã học, thành viên lớp: private public
Khi thừa kế, chúng ta có thêm
protected • Trong lớp có thể dùng • Lớp dẫn xuất có thể dùng
Thành viên protected
50
![Page 51: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/51.jpg)
LỚP OBJECT
51
![Page 52: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/52.jpg)
Bất kỳ lớp nào chúng ta tạo ra đều dẫn xuất từ một lớp đặc biệt: lớp object Lớp object: Lớp cơ sở của mọi lớp (trực tiếp hay gián tiếp) Có thể dùng lớp object để lưu lớp dẫn xuất
Lớp object
object student = new Student(“15TH123456”);
52
![Page 53: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/53.jpg)
Trả về chuỗi biểu diễn (mô tả) đối tượng
Phương thức ToString()
class Student { … public override string ToString() { return Name; } }
class Point { double x, y; … public override ToString() { return “(” + x + “,” + y + “)”; } }
53
![Page 54: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/54.jpg)
LỚP SEALED VÀ LỚP PARTIAL
54
![Page 55: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/55.jpg)
Có lúc cần ngăn cản một lớp cho thừa kế Dùng từ khóa sealed
Lớp sealed
sealed class Student: Person { }
sealed class Something { }
55
![Page 56: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/56.jpg)
Đôi lúc một lớp trở nên lớn Chia lớp thành các lớp nhỏ hơn Chia lớp thành nhiều file hay nhiều section (dùng từ khóa partial)
Lớp partial
public partial class Something { public void DoSomething { } }
public partial class Something { public void DoSomethingElse { } }
56
![Page 57: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/57.jpg)
Thiết kế các lớp cần thiết (áp dụng kỹ thuật kế thừa) để quản lý thông tin của một giảng viên và sinh viên
Đối với sinh viên gồm các thông tin và hành vi: Họ tên Tuổi Tên trường học Số tín chỉ đã tích luỹ Cập nhật số tín chỉ Hiển thị thông tin
Bài tập
57
![Page 58: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/58.jpg)
Đối với giảng viên gồm các thông tin và hành vi: Họ tên Tuổi Tên trường công tác Học vị Hệ số lương Mức lương cơ bản Hiển thị thông tin
Bài tập …
58
![Page 59: NGÔN NGỮ THỐNG KÊ R - fit.huflit.edu.vnfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-05.Thua-ke.pdfHai người lần lượt gieo 1 hạt xúc xắc Sau mỗi lượt](https://reader030.vdocuments.pub/reader030/viewer/2022040421/5e0ae8ef9a5b7d6ec55d96be/html5/thumbnails/59.jpg)
Thừa kế là cách tái sử dụng code bằng cách mở rộng lớp cơ sở thành lớp cụ thể (lớp dẫn xuất) Bất kỳ lớp nào cũng có thể làm lớp cơ sở (trừ lớp sealed) Lớp dẫn xuất thừa kế các thành viên của lớp cơ sở (trừ private)
Fields Methods, Properties, …
Thừa kế: class Something : Another {…} protected access modifier: mọi nơi trong lớp có thể truy cập và lớp dẫn xuất cũng có thể truy cập
ĐIỂM CHÍNH
59