1
Chương 3
Chương 3
Xây dưng lơp va giao diêṇ ́ ̀ ̣
Xây dưng lơp va giao diêṇ ́ ̀ ̣
N i dungộ
N i dungộ
Lâp trinh h ng đôi t ng la gi?̣ ̀ ướ ́ ượ ̀ ̀
Khai báo l pớ
Khai bao interfacé
Constructor & destructor
Thu c tính (field)ộ
Method
Inheritance
Protected fields
Overriding method
2
Nôi dung̣
Nôi dung̣
Polymorphism (Đa hình)
Down cast – up cast
Abstract class
Sealed class, nested class
Interface
3
Overview
Overview
“Everything is an object! At least, that is the view from
inside the CLR and the C# programming language. This is
no surprise, because C# is, after all, an object-oriented
language. The objects that you create through class
definitions in C# have all the same capabilities as the other
predefined objects in the system…”
Apress-Accelerated C# 2008
4
Object-oriented Programming (OOP)
Object-oriented Programming (OOP)
Ky thuât lâp trinh truyên thông ( procedural ̃ ̣ ̣ ̀ ̀ ́
programming):
all functionality is contained in a few modules of
code (often just one)
Kho thay thê cai tiêń ́ ̉ ́
Ky thuât OOP :̃ ̣
S dung nhiêu modules of code, môi module cung ử ̣ ̀ ̃
câp 1 ch c năng riêng va co thê đ c cô lâp ́ ứ ̀ ́ ̉ ượ ̣
(isolated) hay thâm chi đôc lâp hoan toan v i ̣ ́ ̣ ̣ ̀ ̀ ớ
nhau.
Dê dang s dung lai cac modulẽ ̀ ử ̣ ̣ ́
5
What is an Object?
What is an Object?
An object is a building block of an OOP
application
Objects in C# are created from types, just like
the variables.
The type of an object is known by a special
name in OOP, its class.
You can use class definitions to instantiate
objects, which means creating a real, named
instance of a class.
6
Câu truc cua object́ ́ ̉
Câu truc cua object́ ́ ̉
Môt object gôm co: ̣ ̀ ́
Field
Method
7
Life Cycle of an Object
Life Cycle of an Object
Gôm 2 giai đoan (two important stages):̀ ̣
➤ Construction: đôi t ng cân đ c kh i tao, va đ c th c ́ ượ ̀ ượ ở ̣ ̀ ượ ự
thi b i ham constructor ở ̀
➤ Destruction: khi đôi t ng bi huy bo, 1 sô nhiêm vu clean-́ ượ ̣ ̉ ̉ ́ ̣ ̣
up cân đ c th c thi đê giai phong bô nh ̀ ượ ự ̉ ̉ ́ ̣ ớ ham ̀
destructor.
8
T o l p trong C#ạ ớ
T o l p trong C#ạ ớ
Khai báo l pớ
N u ko khai báo l p c s thì C# m c đ nh xem ế ớ ơ ở ặ ị
l p c s là objectớ ơ ở
L p luôn là ớ ki u d li u tham chi u (reference ể ữ ệ ế
type) trong C#
9
[access modifier] class <class name> [: base class]
{
// class body
}
Khóa truy xu t cho classấ
Khóa truy xu t cho classấ
(Access modifier)
(Access modifier)
M t class ch có 2 khóa truy xu tộ ỉ ấ
Internal: ch cho phép s d ng bên trong project ỉ ử ụ
hiên hanh (default)̣ ̀
internal class MyClass
{
// Class members.
}
Public: cho phép cac project bên ngoài truy ́
xu tấ
public class MyClass
{
// Class members.
}
10
Interface la gi?̀ ̀
Interface la gi?̀ ̀
Interface la 1 tâp h p cac method va property điên hinh ̀ ̣ ợ ́ ̀ ̉ ̀
chung nao đo đ c nhom lai cung nhau đê đong goi ̀ ́ ượ ́ ̣ ̀ ̉ ́ ́
(encapsulate) 1 ch c năng nao đo. ứ ̀ ́
Interface không ch a ma đê th c thi, no chi đinh nghia ứ ̃ ̉ ự ́ ̉ ̣ ̃
cac thanh phân cua chinh no.́ ̀ ̀ ̉ ́ ́
Sau khi đinh nghia interface, co thê th c thi no trong 1 ̣ ̃ ́ ̉ ự ́
class class se hô tr (support) moi property va thanh ̃ ̃ ợ ̣ ̀ ̀
phân đ c xac đinh trong interface. ̀ ượ ́ ̣
Interfaces cannot exist on their own không thê kh i tao ̉ ở ̣
1 interface (‘‘instantiate an interface’’)
11
Biêu diên interface băng UML̉ ̃ ̀
Biêu diên interface băng UML̉ ̃ ̀
12
Khai bao interfacé
Khai bao interfacé
Khai bao interface cung t ng t nh khai bao l p:́ ̃ ươ ự ư ́ ớ
interface IMyInterface
{
// Interface members.
}
Cac khoa truy xuât: internal (default), public, không ́ ́ ́
đ c phep dung astract hay sealedượ ́ ̀
Tinh kê th a cua interface cung t ng t nh tinh ́ ́ ừ ̉ ̃ ươ ự ư ́
kê th a cua clasś ừ ̉
public interface IMyInterface : IMyBaseInterface, IMyBaseInterface2
{
// Interface members.
}
13
So sanh Interface va clasś ̀
So sanh Interface va clasś ̀
Tât ca class đêu kê th a t l p c s System.Object theo ́ ̉ ̀ ́ ừ ừ ớ ơ ở
dang cây phân câp (inheritance hierarchy)̣ ́
Interfaces không phai la class, vi vây không kê th a t ̉ ̀ ̀ ̣ ́ ừ ừ
System.Object.
Không thê kh i tao (instantiate) môt interface nh kh i tao ̉ ở ̣ ̣ ư ở ̣
1 class.
14
Các thành ph n c a classầ ủ
Các thành ph n c a classầ ủ
L p có th ch a các ph n sauớ ể ứ ầ
Constructor và destructor
Field và constant
Method
Property
Indexer
Event
Ch a các ki u khác (nested): class, struct, enumeration, ứ ể
interface và delegate
15
Constructor
Constructor
Co cung tên v i class, co thê không co tham sô nao ́ ̀ ớ ́ ̉ ́ ́ ̀
(parameter) va không tra vê bât ky gia tri nao (kê ca void). ̀ ̉ ̀ ́ ̀ ́ ̣ ̀ ̉ ̉
Môi class phai co it nhât 1 constructor. Nêu ban không tao ̃ ̉ ́ ́ ́ ́ ̣ ̣
constructor cho 1 class thi compiler se t đông phat ra 1 ̉ ̃ ự ̣ ́
default constructor
Cho phép overload constructor đ t o ra nhi u cách ể ạ ề
kh i t o đ i t ngở ạ ố ượ
16
Phân loai Constructoṛ
Phân loai Constructoṛ
Constructor m c đ nhặ ị
Không có tham số
Kh i t o đ i t ng t class khi ch a bi t thông tin gì v nóở ạ ố ượ ừ ư ế ề
Constructor sao chép
Tham s vào là đ i t ng cùng l pố ố ượ ớ
T o ra đôi t ng nh b n sao c a đôi t ng đ u vàoạ ́ ượ ư ả ủ ́ ượ ầ
Constructor không măc đinh khac̣ ̣ ́
Có m t hay nhi u tham s vàoộ ề ố
T o đôi t ng khi bi t m t s thông tin nào v nóạ ́ ươ ế ộ ố ề
17
Constructor
Constructor
18
class HocSinh
{
//
public HocSinh()
{
hoTen = “unknown";
namSinh = 1990;
diemVan = diemToan = 0;
}
public HocSinh(HocSinh hs)
{
hoTen = hs.hoTen;
namSinh = hs.namSinh;
diemVan = hs.diemVan;
diemToan = hs.diemToan;
}
public HocSinh(string ht)
{
hoTen = ht;
}
}
Constructor m c đ nhặ ị
Constructor m c đ nhặ ị
Constructor sao chép
Constructor sao chép
Constructor khác
Constructor khác
(t o h c sinh khi bi t h tên)ạ ọ ế ọ
(t o h c sinh khi bi t h tên)ạ ọ ế ọ
Constructor
Constructor
Khai báo private cho constructor s ko cho phép kh i t o ẽ ở ạ
đ i t ngố ượ
19
Ko th t o ể ạ
th hi n/objể ệ
class Car
{
// The 'state' of the Car.
public string petName;
public int currSpeed;
// A custom default constructor.
public Car()
{
petName = "Chuck";
currSpeed = 10;
}
// Here, currSpeed will receive the
// default value of an int (zero).
public Car(string pn)
{
petName = pn;
}
// Let caller set the full 'state' of the Car.
public Car(string pn, int cs)
{
petName = pn;
currSpeed = cs;
}
}
20
A custom default
constructor
Instance Constructors
static void Main(string[] args)
{
// Make a Car called Chuck
going 10 MPH.
Car chuck = new Car();
chuck.PrintState();
// Make a Car called Mary going
0 MPH.
Car mary = new Car("Mary");
mary.PrintState();
// Make a Car called Daisy
going 75 MPH.
Car daisy = new Car("Daisy",
75);
daisy.PrintState();
}
Th t th c thi cac constructorứ ự ự ́
Th t th c thi cac constructorứ ự ự ́
In C#, constructors are called using the new
keyword.
Khi l p dân xuât đ c kh i tao, l p c s cua no ớ ̃ ́ ượ ở ̣ ớ ơ ở ̉ ́
cung phai đ c kh i tao. Va khi l p c s nay đ c ̃ ̉ ượ ở ̣ ̀ ớ ơ ở ̀ ượ
kh i tao thi l p c s cua chinh no cung phai đ c ở ̣ ̀ ớ ơ ở ̉ ́ ́ ̃ ̉ ượ
kh i tao va c thê cho đên khi tiên đên l p ở ̣ ̀ ứ ́ ́ ́ ́ ớ
System.Object
21
Vi dú ̣
Vi dú ̣
public class MyBaseClass
{
public MyBaseClass()
{
}
public MyBaseClass(int i)
{
}
}
public class MyDerivedClass :
MyBaseClass
{
public MyDerivedClass()
{
}
public MyDerivedClass(int i)
{
}
public MyDerivedClass(int i, int j)
{
}
}
22
Vi du 1́ ̣
Vi du 1́ ̣
Co thê kh i tao MyDerivedClass nh sau:́ ̉ ở ̣ ư
MyDerivedClass myObj = new MyDerivedClass();
Chuôi s kiên sau se lân l t th c hiên:̃ ự ̣ ̃ ̀ ượ ự ̣
➤ The System.Object.Object constructor will execute.
➤ The MyBaseClass.MyBaseClass() constructor will
execute.
➤ The MyDerivedClass.MyDerivedClass() constructor will
execute
23
Vi du 2́ ̣
Vi du 2́ ̣
MyDerivedClass myObj = new MyDerivedClass(4, 8);
Chuôi cac constructor se lân l t th c hiên nh sau:̃ ́ ̃ ̀ ượ ự ̣ ư
➤ The System.Object.Object constructor will execute.
➤ The MyBaseClass.MyBaseClass() constructor will
execute.
➤ The MyDerivedClass.MyDerivedClass(int i, int j)
constructor will execute.
Hay
➤ The System.Object.Object constructor will execute.
➤ The MyBaseClass.MyBaseClass(int i)constructor will
execute.
➤ The MyDerivedClass.MyDerivedClass(int i, int j)
constructor will execute.
24
Constructor initializer
Constructor initializer
Co thê s dung constructor initializer đê xac đinh loai ́ ̉ ử ̣ ̉ ́ ̣ ̣
constructor nao cân th c hiêǹ ̀ ự ̣
Vi du: xac đinh constructor cua l p c ban nao cân dung ́ ̣ ́ ̣ ̉ ớ ơ ̉ ̀ ̀ ̀
trong đinh nghia cua constructor cua l p suy dân (derived ̣ ̃ ̉ ̉ ớ ̃
class)
public class MyDerivedClass : MyBaseClass
{
public MyDerivedClass(int i, int j) : base(i)
{
}
}
25