Bài giảng Kỹ thuật lập trình - Chương 5: Kế thừa và đa hình
Kế thừa
Các đối tượng có cùng chung một số đặc điểm,
hành vi được nhóm lại với nhau
Ví dụ
Xe đạp
Xe máy
Xe hơi
Xe tải
Phương tiện giao thông
Kế thừa
Tạo ra các lớp mới từ việc sử dụng lại những thành
phần của lớp đã có
Lợi ích
Nhất quán
Thuận tiện
Tái sử dụng code
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 5: Kế thừa và đa hình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Kỹ thuật lập trình - Chương 5: Kế thừa và đa hình
Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Chương 5 Kế thừa và đa hình Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Nội dung Khái niệm kế thừa Khái niệm đa hình Giao diện (interface) Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Kế thừa Các đối tượng có cùng chung một số đặc điểm, hành vi được nhóm lại với nhau Ví dụ Xe đạp Xe máy Xe hơi Xe tải Phương tiện giao thông Vehicle Car Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Kế thừa Ví dụ: Windows form Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Kế thừa Ví dụ: Một lớp con có thể là lớp cha của các lớp khác Business KMart Macys ServiceBusiness Kinkos RetailBusiness Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Kế thừa Tạo ra các lớp mới từ việc sử dụng lại những thành phần của lớp đã có Lợi ích Nhất quán Thuận tiện Tái sử dụng code Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Khai báo Kế thừa Lớp cơ sở (base class): làm cơ sở để các lớp khác kế thừa Lớp nhận (derived class): kế thừa đặc điểm của lớp cơ sở Khai báo class LopNhan : LopCoSo Ví dụ: • class XeDap : PhuongTienGiaoThong • class XeMay : PhuongTienGiaoThong Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Constructor Không được kế thừa Lớp con truy cập bằng từ khóa base class HinhHoc { public HinhHoc(double chuVi, double dienTich) { ChuVi = chuVi; DienTich = dienTich; } } class HinhTron : HinhHoc { public HinhTron(double chuVi, double dienTich) : base(chuVi, dienTich) { } } Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Từ khóa base Dùng để truy cập đến thành phần của lớp cơ sở Mức truy cập: public protected Khai báo class { (list_of_argument){ } } class : { base.( ); } Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Từ khóa new Dùng để khai báo phương thức ở lớp nhận khi đã có phương thức cùng tên ở lớp cơ sở Ví dụ public new void TinhDienTich() {} Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Overriding Methods Trong một tập các lớp có mối quan hệ huyết thống có các phương thức giống signature y xì (nội dung phương thức khác nhau) Overriding methods giúp lập trình viên có thể định nghĩa cách hành xử khác nhau ứng với các đối tượng khác nhau nhưng cùng sử dụng một tên phương thức. Ví dụ: Nhân viên chính thức và Nhân viên thời vụ đều có phương thức là Tính Lương, tuy nhiên cách thức tính lương của 2 đối tượng này sẽ khác nhau. Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Overriding Methods Ví dụ mô hình lớp NhanVien có phương thức tính lương. Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Đa hình Lớp nhận kế thừa từ lớp cơ sở và có thêm những đặc tính riêng biệt Từ khóa: virtual • Khai báo trong lớp cơ sở, cho biết thành phần đó có thể được nạp chồng override • Khai báo trong lớp nhận, cho biết thành phần đó được nạp chồng Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Đa hình Khi tham chiếu đến đối tượng: Nếu đối tượng là lớp cơ sở phương thức virtual của lớp cơ sở được thực hiện Nếu đối tượng là lớp nhận phương thức override của lớp nhận được thực hiện Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Đa hình Đa hình được tạo nên từ 2 trường hợp: Trường hợp 1: Từ kế thừa Holiday day; day = new Christmas(); Holiday Christmas Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Đa hình Trường hợp 1: Từ kế thừa StaffMember teo; teo = new Executive(); Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Đa hình Trường hợp 2: Từ Interface Mammal thiNo; thiNo = new Woman(); Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ Đa hình class HinhHoc { public virtual void TinhDienTich() { Console.WriteLine("Dien tich " + loaiHinh); } } class HinhTron : HinhHoc { public override void TinhDienTich() { base.TinhDienTich(); DienTich = BanKinh * BanKinh * Math.PI; } } Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ Đa hình HinhHoc hh = new HinhHoc(); //TinhDienTich cua lop HinhHoc hh.TinhDienTich(); HinhHoc htr = new HinhTron(); //TinhDienTich cua lop HinhTron htr.TinhDienTich(); Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Giao diện (Interface) Interface là một giao ước, khi một lớp thực hiện inteface thì phải tuân theo đúng những gì interface đó mô tả Thành phần Property Method Event Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Interface Khai báo Mức truy xuất: public Các phương thức chỉ có phần khai báo, không có phần thân interface TenInterface { //các thành phần } Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ interface ILamViec { string LamViec(string tenViec); } Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ(tt) Lớp SinhVien thực hiện interface ILamViec class SinhVien : ILamViec { public string MSSV { get; set; } public string Nganh { get; set; } public string HoTen { get; set; } public string LamViec(string tenViec) { return "Sinh Vien " + HoTen + " dang " + tenViec; } } Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ(tt) Lớp NhanVien thực hiện ILamViec class NhanVien : ILamViec { public string MSNV { get; set; } public string Phong { get; set; } public string HoTen { get; set; } public int HsLuong { get; set; } public virtual int Luong { get { return HsLuong * 800000; } } public string LamViec(string tenViec) { return "NhanVien " + HoTen + " dang " + tenViec; } } Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ(tt) Thực thi interface static void Main(string[] args) { SinhVien a = new SinhVien(); a.HoTen = "SVA"; NhanVien b = new NhanVien(); b.HoTen = "NVB"; ILamViec lv1 = a; Console.WriteLine(lv1.LamViec("hoc bai")); ILamViec lv2 = b; Console.WriteLine(lv2.LamViec("lam bao cao")); } Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ(tt) Kết quả Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Interface Interface có thể kế thừa Một lớp có thể thực hiện 1 hoặc nhiều interface Khi thực hiện interface, lớp đó phải thực hiện đầy đủ những thành phần interface đó mô tả Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ Interface IQuanTri interface IQuanTri { string GiaoViec(string tenViec, string tenNguoiNhan); } class SinhVien : ILamViec, IQuanTri { // các thành phần khác public string GiaoViec(string tenViec, string nguoiNhan) { return "Sinh vien " + HoTen + " dang giao viec " + tenViec + " cho " + nguoiNhan; } } Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ Lớp QuanLy kế thừa NhanVien, thực hiện IQuanTri class QuanLy : NhanVien, IQuanTri { public string LamViec(string tenViec) { return "Quan ly " + HoTen + " dang " + tenViec; } public string GiaoViec(string tenViec, string nguoiNhan) { return "Quan ly " + HoTen + " dang giao viec " + tenViec + " cho " + nguoiNhan; } } Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ Thực thi giao diện IQuanTri SinhVien a = new SinhVien(); a.HoTen = "SVA"; NhanVien b = new NhanVien(); b.HoTen = "NVB"; QuanLy c = new QuanLy(); c.HoTen = "QLC"; IQuanTri qt1 = a; Console.WriteLine(qt1.GiaoViec("truc nhat", "SVB")); IQuanTri qt2 = c; Console.WriteLine(qt2.GiaoViec("dat hang", b.HoTen)); Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Ví dụ Kết quả Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Kiểm tra thực hiện Interface Từ khóa is True nếu đối tượng thực hiện interface False nếu đối tượng không thực hiện interface kt = a is IQuanTri; //kt =true kt = b is IQuanTri; //kt =false Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật Kiểm tra thực hiện Interface Từ khóa as Thực hiện chuyển đổi sang interface Nếu đối tượng không thực hiện interface null IQuanTri qt3 = a as IQuanTri; IQuanTri qt4 = b as IQuanTri; //null Khoa Hệ Thống Thông Tin Đại Học Quốc Gia TP.HCM Đại Học Kinh Tế Luật END
File đính kèm:
- bai_giang_ky_thuat_lap_trinh_chuong_5_ke_thua_va_da_hinh.pdf