Thua ke [oop]

12
OOP in C# - GV: Phm Đình Sc – [email protected] 1 Kế th tha a ( inheritance) inheritance) 1 Xây dng lp có tính kế tha Xây d Xây dng l ng lp p có tí nh k nh kế th tha OOP in C# - GV: Phm Đình Sc – [email protected] 2 Kh Khá i ni i nim k m kế th tha trong C# a trong C# Kế th tha l a là cơ ch cơ chế cho ph cho phé p đ p đị nh ngh nh nghĩ a m a mt t lp m p mi (k i (kế th tha t a tlp cha) p cha) Sau đ Sau đó xây d xây dng thêm c ng thêm cá c thu c thuc t c tí nh v nh và cá c c phương th phương thc riêng c c riêng ca l a lp đ p đó. Lp cha trong s p cha trong skế th tha đư a được g c gi l i là lp p cơ s cơ s(base class) (base class) Lp con trong s p con trong skế th tha đư a được g c gi l i là lp p dn xu n xut (derived class) t (derived class) Derived class Derived class có hu hết các thành phn ging như lp cơ str???? private,constructor, static, destructor

Transcript of Thua ke [oop]

Page 1: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

KKếế ththừừa a ((inheritance)inheritance)

1

Xây dựng lớp có tính kế thừaXây dXây dựựng lng lớớp p

ccóó ttíính knh kếế ththừừaa

OOP in C# - GV: Phạm Đình Sắc – [email protected]

KhKháái nii niệệm km kếế ththừừa trong C#a trong C#

KKếế ththừừa la làà cơ ch cơ chếế cho phcho phéép đp địịnh nghnh nghĩĩa ma mộột t llớớp mp mớới (ki (kếế ththừừa ta từừ llớớp cha)p cha) Sau đSau đóó xây dxây dựựng thêm cng thêm cáác thuc thuộộc tc tíính vnh vàà ccáác c phương thphương thứức riêng cc riêng củủa la lớớp đp đóó..LLớớp cha trong sp cha trong sựự kkếế ththừừa đưa đượợc gc gọọi li làà llớớp p cơ scơ sởở (base class)(base class)LLớớp con trong sp con trong sựự kkếế ththừừa đưa đượợc gc gọọi li làà llớớp p ddẫẫn xun xuấất (derived class)t (derived class)Derived class Derived class có hầu hết các thành phần giống như lớp cơ sở trừ ???? private,constructor, static, destructor

Page 2: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

KhKháái nii niệệm km kếế ththừừa trong C#a trong C#

Quan hệ “là 1”: Kế thừa được sử dụng thông dụng nhất để biểu diễn quan hệ "là 1" VD:

Một sinh viên là một con ngườiMột tam giác là một đa giác

Kế thừa thường được dùng theo 2 cách: Để phản ánh mối quan hệ giữa các lớp Để phản ánh sự chia sẻ mã chương trình giữa các lớp

OOP in C# - GV: Phạm Đình Sắc – [email protected]

Lớp Con Gà:Có chânCó mắt Có cánh

Biết chạyBiết ngủBiết bayBiết vẫy cánh

Lớp Con Chó:Có chânCó mắt Có đuôi

Biết chạyBiết ngủBiết sủaBiết vẫy đuôi

4

KhKháái nii niệệm km kếế ththừừa trong C#a trong C#

Mã lệnh bị trùng

Mã lệnh bị trùng

Page 3: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

Lớp động vật:Có chânCó mắt

Biết chạyBiết ngủ

5

KhKháái nii niệệm km kếế ththừừa trong C#a trong C#

Lớp Con Gà:Có cánh

Biết bayBiết vẫy cánh

Lớp Con Chó:Có đuôi

Biết sủaBiết vẫy đuôi

OOP in C# - GV: Phạm Đình Sắc – [email protected]

SyntaxSyntax

Cú pháp định nghĩa lớp dẫn xuất (lớp con):class TênLớpCon : TênLớpCha{ // Thân lớp con}Hoặcclass TênLớpDẫnXuất : TênLớpCơSở{ // Thân lớp dẫn xuất}class DerivedClass: BaseClass{ // body of derived class }

Page 4: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

VDVD

// Lớp cơ sở Point2D

class Point2D {

public int x,y;public void Xuat2D() {

Console.WriteLine("({0}, {1} )", x, y);}

}

OOP in C# - GV: Phạm Đình Sắc – [email protected]

VDVD

// Lop dan xuat Point3D ke thua tu lop Point2D

class Point3D:Point2D {

public int z;public void Xuat3D() {

Console.WriteLine("({0}, {1} , {2})", x, y, z);}

}

Page 5: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

VDVDpublic static void Main(){ Point2D p2 = new Point2D(); p2.x = 1; p2.y = 2; p2.Xuat2D();

Point3D p3 = new Point3D(); p3.x = 4; p3.y = 5; p3.z = 6; // ?p3.Xuat3D(); p3.Xuat2D(); // ? Console.ReadLine();

}

OOP in C# - GV: Phạm Đình Sắc – [email protected]

VD:VD:

Xây dựng Person class và Student class ?

Page 6: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

GGọọi Constructor ci Constructor củủa la lớớp Cơ sp Cơ sởở

Vì lớp dẫn xuất không thể kế thừa phương thức tạo lập (ConstructorConstructor) của lớp cơ sởnên một lớp dẫn xuất phải thực thi phương thức tạo lập riêng của mình.

Nếu lớp cơ sở có một phương thức tạo lập mặc định (tức là không có phương thức tạo lập hoặc phương thức tạo lập không có tham số) thì phương thức tạo lập của lớp dẫn xuất được định nghĩa như cách thông thường.

OOP in C# - GV: Phạm Đình Sắc – [email protected]

GGọọi Constructor ci Constructor củủa la lớớp Cơ sp Cơ sởở

Nếu lớp cơ sở có phương thức tạo lập có tham số thì lớp dẫn xuất phải định nghĩa phương thức tạo lập có tham số theo cú pháp sau:

TênLớpCon(ThamSốLớpCon):base(ThamSốLớpCha) {

// Khởi tạo giá trị cho các thành phần của lớp dẫn xuất }

/Note: giáo trình Tr. 42 ghi nhầm cú pháp

Page 7: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

VDVD

// Lớp cơ sở Point2D class Point2D {

public int x,y;public Point2D(int a, int b) {

x = a ; y = b;}public void Xuat2D() {

Console.WriteLine("({0}, {1} )", x, y);}

}

OOP in C# - GV: Phạm Đình Sắc – [email protected]

VDVD// Lop dan xuat Point3D ke thua tu lop Point2Dclass Point3D:Point2D {

public int z;public Point3D(int a,int b,int c) : base(a,b) {

z = c ;}public void Xuat3D() {

Console.WriteLine("({0}, {1} , {2})", x, y, z);}

}

Page 8: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

VDVD

public static void Main(){ Point2D p2 = new Point2D(1,2);

Console.Write("Toa do cua diem 2 D :");

p2.Xuat2D();

Point3D p3 = new Point3D(4,5,6);

Console.Write("Toa do cua diem 3 D :");

p3.Xuat3D();

Console.ReadLine();

}

OOP in C# - GV: Phạm Đình Sắc – [email protected]

ĐĐịịnh nghnh nghĩĩa la lạại phương thi phương thứức cc củủa la lớớp dp dẫẫn xun xuấấtt

T.H derived class có property or method trùng tên với base class thì trình biên dịch sẽ cócảnh báo dạng như sau:

“keyword new is required on ‘LớpDẫnXuất.X’ because it hides inherited member on ‘LớpCơSở.X ‘”.

Để khắc phục việc này ta dùng từ khóa newngay câu lệnh khai báo thành phần đó.

Từ khóa new trong T.H này có tác dụng che dấu thành phần kế thừa đó đối từ base class.

Page 9: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

ĐĐịịnh nghnh nghĩĩa la lạại phương thi phương thứức cc củủa la lớớp dp dẫẫn xun xuấấtt

Nếu phương thức của derived class muốn truy cập đến thành phần X của base class ?

Sử dụng từ khóa base theo cú pháp: base.X

vd trang 45vd trang 45

OOP in C# - GV: Phạm Đình Sắc – [email protected]

Tham chiTham chiếếu thuu thuộộc base classc base class

Một tham chiếu thuộc base class có thể trỏ đến một đối tượng thuộc derived class

Nhưng nó chỉ được phép truy cập đến các thành phần được khai báo trong lớp cơ sở

vd trang 47vd trang 47

Page 10: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

MMứức đc độộ truy ctruy cậập cp củủa la lớớp dp dẫẫn xun xuấấtt

19

Access ModifierOf Derived classAccess ModifierAccess ModifierOf Derived classOf Derived class

OOP in C# - GV: Phạm Đình Sắc – [email protected]

MMứức đc độộ truy ctruy cậập cp củủa la lớớp dp dẫẫn xun xuấấtt

ĐiĐiềều khiu khiểển quyn quyềền truy xun truy xuấất dt dùùng đng đểể ggáán n quyquyềền truy xun truy xuấất cho t cho thuthuộộc tc tíính nh hohoặặc c phương thphương thứức c ttừừ đ đốối tưi tượợng hay tng hay từừ llớớp p ddẫẫn xun xuấất ct cóó đư đượợc phc phéép truy xup truy xuấất thut thuộộc c ttíính nh ởở llớớp mp màà nnóó đư đượợc khc kháái bi bááo hay o hay không. không. CCáác tc từừ khkhóóa thưa thườờng dng dùùng lng làà: public: public,,privateprivate,, protectedprotected

Page 11: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

MMứức đc độộ truy ctruy cậập cp củủa la lớớp dp dẫẫn xun xuấấtt

Access ModifierAccess Modifier QuyQuyềền hn hạạnn

publicpublic Công cCông cộộng, ng, không gikhông giớới hi hạạnn

privateprivate Riêng tưRiêng tư, , chchỉỉ đư đượợc truy xuc truy xuấất t trong ntrong nộội bi bộộ ccủủa la lớớp đp đóó mmàà thôithôi

protected protected

ĐưĐượợc bc bảảo vo vệệ, , chchỉỉ đư đượợc truy xuc truy xuấất t trong ntrong nộội bi bộộ ccủủa la lớớp đp đóó vvàà ccáác c llớớp con (lp con (lớớp dp dẫẫn xun xuấất) kt) kếế ththừừa ta từừllớớp đp đóó

OOP in C# - GV: Phạm Đình Sắc – [email protected]

VD:VD:

classclass TauTau{{ // private or protected// private or protected

publicpublic intint nhienlieu = 0;nhienlieu = 0;

publicpublic voidvoid Chay()Chay(){{

nhienlieu = 10;nhienlieu = 10;}}

}}

22

classclass TauChien:Tau TauChien:Tau { {

publicpublic void Chay()void Chay(){{

nhienlieu = 20;nhienlieu = 20;}}

}}

Page 12: Thua ke [oop]

OOP in C# - GV: Phạm Đình Sắc – [email protected]

VD:VD:classclass Program {Program {

static void static void Main(string[] args)Main(string[] args){{

Tau a = Tau a = newnew Tau();Tau();a.Chay();a.Chay();ConsoleConsole.WriteLine(a.nhienlieu);.WriteLine(a.nhienlieu);TauChien b = new TauChien();TauChien b = new TauChien();b.Chay();b.Chay();ConsoleConsole.WriteLine(b.nhienlieu);.WriteLine(b.nhienlieu);

}}} } // nhienlieu of Tau class khai b// nhienlieu of Tau class khai bááo private or protected ?o private or protected ?

23

OOP in C# - GV: Phạm Đình Sắc – [email protected]

Q&AQ&A

BBàài ti tậập:p:1.1. Đ Đọọc lc lạại bi bàài gii giảảngng2. L2. Lààm cm cáác bc bàài VD & bi VD & bàài ti tậập trong GTp trong GT3.3. Đ Đọọc bc bàài: i: KKếế ththừừaa4. Bu4. Buổổi ti tớới thi thảảo luo luậận & kin & kiểểm tra bm tra bàài ci cũũ

24