ố
ệ
ố 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 vKhái ni m k th a ế ừ ệ vKhái ni m đa hình ệ vGiao 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
ộ ố ặ ể
ạ ớ ố ượ ượ ng có cùng chung m t s đ c đi m, c nhóm l i v i nhau
ế ừ K th a vCác đ i t hành vi đ
Vehicle
Car
vVí dụ
ươ ệ § Xe đ pạ § Xe máy § Xe h iơ § Xe t iả § Ph ng ti n giao thông
ố
ệ
ố 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 vVí 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 vVí d : M t l p con có th là l p cha c a các l p khác ể ụ
Business
RetailBusiness
ServiceBusiness
KMart
Macys
Kinkos
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ớ ừ ệ ử ụ ạ ữ vi c s d ng l i nh ng thành
ế ừ K th a vT o ra các l p m i t ph n c a l p đã có
ớ ạ ầ ủ ớ vL 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 vL p c s (base class): làm c s đ các l p khác
ơ ở ể ơ ở ớ
ế ừ ặ ủ ớ ể vL p nh n (derived class): k th a đ c đi m c a l p
ớ ế ừ k th a ớ ậ c sơ ở vKhai 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 vKhông đ vL p con truy c p b ng t ớ
class HinhHoc { … public HinhHoc(double chuVi, double dienTich) { ChuVi = chuVi; DienTich = dienTich; } } class HinhTron : HinhHoc { … public HinhTron(double chuVi, double dienTich) : base(chuVi, dienTich) { } }
ượ ế ừ c k th a ằ ậ ừ khóa 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 base vDùng đ truy c p đ n thành ph n c a l p c s vM c truy c p: ứ § public § protected
ậ
vKhai 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 vDùng đ khai báo ph ể
ứ ở ớ ậ l p nh n khi đã có
ứ ươ ng th c cùng tên ng th c ở ớ ơ ở l p c s
ươ ph vVí 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 vTrong m t t p các l p có m i quan h huy t th ng ố ng th c gi ng signature y xì (n i dung ng th c khác nhau)
ộ ậ ươ ứ có các ph ươ ph
ể ị
ử ớ
ứ ử ụ ư ộ
ứ vOverriding 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
ứ
vVí d : Nhân viên chính th c và Nhân viên th i v ờ ụ ng, tuy nhiên cách
ươ ươ ẽ ươ ng th c. ụ ề đ u có ph ứ th c tính l ứ ng th c là 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 vVí d mô hình l p NhanVien có ph ớ
ươ ứ ng th c tính
ươ ụ ng. l
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ơ ở ữ l p c s và có thêm nh ng
Đa hình vL p nh n k th a t ậ ớ ặ đ c tính riêng bi vT khóa: ừ § virtual
ế ừ ừ ớ ệ t
ế ầ t thành ph n
• Khai báo trong l p c s , cho bi ớ ể ượ ạ ơ ở ồ c n p ch ng đó có th đ
§ override
ậ ế ầ t thành ph n
• Khai báo trong l p nh n, cho bi ớ ồ ượ ạ 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 vKhi tham chi u đ n đ i t ế ố ượ
ế
ứ § N u đ i t ế ố ượ ng: ớ ơ ở ph ng là l p c s ng th c
ủ ớ ơ ở ượ virtual c a l p c s đ
ố ượ ứ § N u đ i t ế
ớ ng là l p nh n ậ ượ ủ ớ override c a l p nh n đ ươ ệ ự c th c hi n ậ ph ươ ng th c ệ ự 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 vĐa hình đ ườ ü Tr
ợ ng h p:
ườ ượ ạ ừ c t o nên t 2 tr ừ ế ừ ợ ng h p 1: T k th a
Holiday
Holiday day; day = new Christmas();
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 vHinhHoc hh = new HinhHoc(); v//TinhDienTich cua lop HinhHoc vhh.TinhDienTich(); vHinhHoc htr = new HinhTron(); v//TinhDienTich cua lop HinhTron vhtr.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) vInterface 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ả vThà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 vKhai báo
interface TenInterface { //các thành phần }
ầ ng th c ch có ph n khai báo, không có
vM c truy xu t: ấ public ứ vCác ph ỉ ứ ầ ươ ph n thâ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)ụ vL 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)ụ vL 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)ụ vTh 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)ụ vK 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 vInterface có th k th a ể ế ừ vM t l p có th th c hi n ể ự vKhi th c hi n interface, l p đó ph i ớ ệ
ệ ầ ề interface ả th c hi n đ y
ộ ớ ự ữ ặ ệ 1 ho c nhi u ự ả ầ đủ 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ụ vInterface 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ụ vL 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ụ vTh 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ụ vK 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 vT khóa ừ is § True n u đ i t ế § False n u đ i t ế
ố ượ ố ượ ự ệ ệ ng th c hi n interface 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 vT 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