Thua ke [oop]
-
Upload
drakenguyen -
Category
Documents
-
view
85 -
download
5
Transcript of 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
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
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 }
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);}
}
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 ?
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
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);}
}
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.
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
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
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;}}
}}
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