ố 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

ố Khoa H  Th ng Thông Tin

ạ ọ

ế

ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T  Lu t

END