Tải bản đầy đủ (.pdf) (8 trang)

Class & Object (tt)Thiết kế và cài đặt lớp & đối tượng1 1OOP in C# - GV: docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (988.67 KB, 8 trang )

1
OOP in C# - GV: Phạm Đình Sắc –
1
Class & Object (tt)Class & Object (tt)
1
Thiết kế và cài đặtThiết kế và cài đặt
lớp & đối tượnglớp & đối tượng
Thiết kế và cài đặtThiết kế và cài đặt
lớp & đối tượnglớp & đối tượng
OOP in C# - GV: Phạm Đình Sắc –
2
8.8. Tham chiếu thisTham chiếu this
KhiKhi mộtmột đốiđối tượngtượng đangđang thựcthực thithi mộtmột phươngphương
thứcthức (không(không phảiphải làlà phươngphương thứcthức tĩnh),tĩnh), thamtham
chiếuchiếu thisthis tựtự độngđộng trỏtrỏ đếnđến đốiđối tượngtượng nàynày
CóCó 33 trườngtrường hợphợp sửsử dụngdụng thamtham chiếuchiếu thisthis::
 TránhTránh xungxung độtđột têntên khikhi thamtham sốsố củacủa phươngphương
thứcthức trùngtrùng têntên vớivới têntên biếnbiến dữdữ liệuliệu củacủa ObjectObject
 DùngDùng truyềntruyền đốiđối tượngtượng hiệnhiện tạitại làmlàm thamtham sốsố
chocho mộtmột phươngphương thứcthức kháckhác (VD(VD gọigọi đệđệ qui)qui)
 DùngDùng vớivới mụcmục đíchđích chỉchỉ mụcmục (Index)(Index)
2
OOP in C# - GV: Phạm Đình Sắc –
3
Vd: thisVd: this Xem thêm vd trang 25Xem thêm vd trang 25 2626
publicpublic classclass PointPoint
{{ privateprivate intint x,yx,y;;
publicpublic Point(Point(intint ox,ox, intint oy)oy)
{{
thisthis xx == oxox;; //// tươngtương đươngđương xx == oxox;;
thisthis yy == oyoy;; //// tươngtương đươngđương yy == oyoy;;


}}
}}
//// GiảGiả sửsử trongtrong hàmhàm MainMain tata khaikhai báobáo nhưnhư sausau::
PointPoint AA == newnew Point(Point(33,,44));;
NoteNote::
Trong trường hợp này tham số truyền choTrong trường hợp này tham số truyền cho thisthis
chính đối tượng A. Do đó:chính đối tượng A. Do đó: thisthis.x chính là A.x.x chính là A.x
Tóm lại:Tóm lại: Tham số truyền cho đốiTham số truyền cho đối thisthis chính làchính là
đối tượng đi kèm với phương thức trong lời gọiđối tượng đi kèm với phương thức trong lời gọi
phương thức.phương thức.
OOP in C# - GV: Phạm Đình Sắc –
4
9. Đóng gói dữ liệu với thuộc tính9. Đóng gói dữ liệu với thuộc tính
ThuộcThuộc tínhtính làlà kháikhái niệmniệm chocho phépphép truytruy cậpcập trạngtrạng
tháithái củacủa lớplớp thaythay vìvì thôngthông quaqua truytruy cậpcập trựctrực tiếptiếp
cáccác biếnbiến thànhthành viên,viên, nónó sẽsẽ đựơcđựơc thaythay thếthế bằngbằng
việcviệc truytruy cậpcập thôngthông quaqua phươngphương thứcthức củacủa lớplớp
NóiNói cáchcách kháckhác ThuộcThuộc tínhtính làlà cáccác phươngphương thứcthức lấylấy
giágiá trịtrị ((getget)) vàvà gángán giágiá trịtrị ((setset))::
 Chỉ đọcChỉ đọc ((readread onlyonly):): chỉ có phương thứcchỉ có phương thức getget
 Chỉ ghiChỉ ghi ((writewrite onlyonly):): chỉ có phương thứcchỉ có phương thức setset
 Vừa đọc vừa ghiVừa đọc vừa ghi ((read/writeread/write):): có cả hai phươngcó cả hai phương
thứcthức getget vàvà setset
3
OOP in C# - GV: Phạm Đình Sắc –
5
Khai báo Phương thức cho thuộc tínhKhai báo Phương thức cho thuộc tính
publicpublic <Return_Type><Return_Type> <Property_name><Property_name>
{{
//// phương thức lấy giá trị của thuộc tínhphương thức lấy giá trị của thuộc tính

getget
{{ // trả về một giá trị cùng kiểu với biến thành viên// trả về một giá trị cùng kiểu với biến thành viên
returnreturn BiểuThứcTrảVề;BiểuThứcTrảVề;
}}
//// phương thức gán giá trị cho thuộc tínhphương thức gán giá trị cho thuộc tính
setset
{{
BiếnThànhViên =BiếnThànhViên = valuevalue ;;
}}
}}
OOP in C# - GV: Phạm Đình Sắc –
6
VD minh họaVD minh họa
Public class Time
{ int _Hour, _Minute, _Second ;
public int Hour
{ set { _Hour = value ; }
get { return _Hour; }
}
public int Minute
{ set { _Minute = value ; }
get { return _Minute ; }
}
public int Second
{ set { _Second = value ; }
get { return _Second ; }
}
}
4
OOP in C# - GV: Phạm Đình Sắc –

7
VD minh họaVD minh họa Xem thêm vd trang 28Xem thêm vd trang 28 2929
Public class CSinhVien
{ string _MaSV, _Ten;
int _NamSinh ;
string _TenNguoiYeu; // No Access-Modifier
public string MaSV
{ // mã sinh viên read-only
get { return _MaSV; }
}
public string Ten
{ set { _Ten = value ; }
get { return _Ten ; }
}
public int NamSinh
{ set { _NamSinh = value ; }
get { return _NamSinh ; }
}
}
OOP in C# - GV: Phạm Đình Sắc –
8
10. Toán tử (operator)10. Toán tử (operator)
TrongTrong C#C# toántoán tửtử làlà mộtmột phươngphương thứcthức tĩnhtĩnh (static(static
method)method) dùngdùng đểđể quáquá tảitải (overload)(overload) mộtmột phépphép
toántoán nàonào đóđó trêntrên cáccác đốiđối tượngtượng
MụcMục đíchđích củacủa toántoán tửtử làlà đểđể viếtviết mãmã chươngchương trìnhtrình
gọngọn gàng,gàng, dễdễ hiểuhiểu hơn,hơn, thaythay vìvì phảiphải gọigọi phươngphương
thứcthức
VdVd:: giảgiả sửsử tata cócó lớplớp PhânPhân SốSố cócó pp thứcthức CongCong
PhanSoPhanSo psps11 == newnew PhanSo(PhanSo(22,,44)) ;;

PhanSoPhanSo psps22 == newnew PhanSo(PhanSo(11,,33)) ;;
thaythay vìvì viếtviết:: psps33 == psps11 Cong(psCong(ps22))
tata viếtviết:: PhanSoPhanSo psps33 == psps11 ++ psps22;; nếunếu tata dùngdùng
operatoroperator overloadedoverloaded
5
OOP in C# - GV: Phạm Đình Sắc –
9
10. Toán tử (operator) tt10. Toán tử (operator) tt
Ta có thể quá tải các toán tử sau:Ta có thể quá tải các toán tử sau:
 Toán học: + ,Toán học: + , , * , / , %, * , / , %
 Cộng trừ một ngôi: ++ ,Cộng trừ một ngôi: ++ , ,,
 Quan hệ so sánh: == , != , > , < , >= , <=Quan hệ so sánh: == , != , > , < , >= , <=
 Ép kiểu: ()Ép kiểu: ()
Cú pháp khai báo nguyên mẫu của một toán tử T:Cú pháp khai báo nguyên mẫu của một toán tử T:
public staticpublic static KiểuTrảVềKiểuTrảVề operatoroperator T (CácThamSố)T (CácThamSố)
{{
//các câu lệnh trong thân toán tử//các câu lệnh trong thân toán tử
}}
OOP in C# - GV: Phạm Đình Sắc –
10
10. Chú ý quá tải toán tử (operator overloaded)10. Chú ý quá tải toán tử (operator overloaded)
Tham số của toán tử phải là tham trịTham số của toán tử phải là tham trị (không(không
dùng các từ khóa ref, out).dùng các từ khóa ref, out).
Không được quá tải toán tửKhông được quá tải toán tử == (gán),(gán), &&&& ,, |||| (and,(and,
or logic),or logic), ?:?: (điều kiện),(điều kiện), checkedchecked,, uncheckedunchecked,,
newnew,, typeoftypeof,, asas,, isis
[ ] không được xem là một toán tử[ ] không được xem là một toán tử
Khi quá tải các toán tử dạng:Khi quá tải các toán tử dạng: ++,, ,, **,, // ,, %% thì cácthì các
toán tửtoán tử +=+=,, ==,, *=*=,, /=/= ,, %=%= được quá tải tự độngđược quá tải tự động
Khi quá tải toán tử thì nên quá tải theo cặp đốiKhi quá tải toán tử thì nên quá tải theo cặp đối

ngẫu. Chẳng hạn, khi quá tải toán tửngẫu. Chẳng hạn, khi quá tải toán tử ==== thì quáthì quá
tải thêm toán tửtải thêm toán tử !=!= ……
6
OOP in C# - GV: Phạm Đình Sắc –
11
10. Chú ý quá tải toán tử (operator overloaded)10. Chú ý quá tải toán tử (operator overloaded)
KhiKhi quáquá tảitải toántoán tửtử ==,==, !=!= thìthì nênnên phátphát triểntriển thêmthêm
cáccác phươngphương thứcthức Equals()Equals(),, GetHashCode()GetHashCode() đểđể
đảmđảm bảobảo luậtluật “hai“hai đốiđối tượngtượng bằngbằng nhaunhau theotheo toántoán
tửtử ==== hoặchoặc phươngphương thứcthức EqualsEquals sẽsẽ cócó cùngcùng mãmã
băm”băm”
KhiKhi địnhđịnh nghĩanghĩa toántoán tửtử épép kiểukiểu tata phảiphải chỉchỉ rara đâyđây
làlà toántoán tửtử épép kiểukiểu ngầmngầm địnhđịnh (implicit)(implicit) hayhay tườngtường
minhminh (explicit)(explicit)
Cú pháp định nghĩa toán tử ép kiểu:Cú pháp định nghĩa toán tử ép kiểu:
publicpublic staticstatic [[ implicitimplicit || explicitexplicit ]] operatoroperator KiểuTrảVềTKiểuTrảVềT (Type V)(Type V)
Trong đóTrong đó Type VType V là biến cần ép sang kiểulà biến cần ép sang kiểu KiểuTrảVềTKiểuTrảVềT
OOP in C# - GV: Phạm Đình Sắc –
12
VD minh họaVD minh họa
Public class PhanSo
{
int Tu, Mau;
public PhanSo(int TuSo, int MauSo)
{
Tu = TuSo;
Mau = MauSo;
}
public static PhanSo operator + (PhanSo ps1, PhanSo ps2)
{

int MauMoi = ps1.Mau * ps2.Mau ;
int TuMoi = ps2.Mau * ps1.Tu + ps1.Mau * ps2.Tu;
return new PhanSo(TuMoi, MauMoi);
}
}
Xem thêm vd trang 31Xem thêm vd trang 31 3333
7
OOP in C# - GV: Phạm Đình Sắc –
13
11. Chỉ mục (Index)11. Chỉ mục (Index)
ViệcViệc địnhđịnh nghĩanghĩa chỉchỉ mụcmục chocho phépphép tạotạo
cáccác đốiđối tượngtượng củacủa lớplớp hoạthoạt độngđộng giốnggiống
nhưnhư mộtmột mảngmảng ảoảo
TứcTức làlà cáccác đốiđối tượngtượng cócó thểthể sửsử dụngdụng
toántoán tửtử [[ ]] đểđể truytruy cậpcập đếnđến mộtmột thànhthành
phầnphần dữdữ liệuliệu nàonào đóđó
ViệcViệc địnhđịnh nghĩanghĩa chỉchỉ mụcmục tươngtương tựtự nhưnhư
việcviệc địnhđịnh nghĩanghĩa mộtmột thuộcthuộc tínhtính
OOP in C# - GV: Phạm Đình Sắc –
14
11. Cú pháp tạo Chỉ mục (Index)11. Cú pháp tạo Chỉ mục (Index)
publicpublic KiểuTrảVềKiểuTrảVề thisthis [DanhSáchThamSố][DanhSáchThamSố]
{{ //Hàm đọc//Hàm đọc
getget
{{
// thân hàm đọc// thân hàm đọc
}}
// Hàm ghi// Hàm ghi
setset
{{

// thân hàm ghi// thân hàm ghi
}}
}}
vd trang 34vd trang 34 3535
8
OOP in C# - GV: Phạm Đình Sắc –
15
11. Ghi chú về chỉ mục (Index)11. Ghi chú về chỉ mục (Index)
MộtMột chỉchỉ mụcmục phảiphải cócó ítít nhấtnhất mộtmột thamtham số,số, vàvà
thamtham sốsố cócó thểthể cócó kiểukiểu bấtbất kỳkỳ
ChỉChỉ mụcmục cócó thểthể chỉchỉ cócó phươngphương thứcthức getget
MặcMặc dùdù chỉchỉ mụcmục làlà mộtmột đặcđặc điểmđiểm thúthú vịvị củacủa
C#C# nhưngnhưng cầncần phảiphải sửsử dụngdụng đúngđúng mụcmục đíchđích
(sử(sử dụngdụng đểđể đốiđối tượngtượng cócó thểthể họathọat độngđộng nhưnhư
mảng,mảng, mảngmảng nhiềunhiều chiều)chiều)
MộtMột lớplớp cócó thểthể cócó nhiềunhiều chỉchỉ mụcmục nhưngnhưng
chúngchúng phảiphải cócó cáccác dấudấu hiệuhiệu phânphân biệtbiệt vớivới
nhaunhau (tương(tương tựtự nhưnhư quáquá tảitải phươngphương thức)thức)
OOP in C# - GV: Phạm Đình Sắc –
16
Q&AQ&A
Bài tập:Bài tập:
1. Đọc lại bài giảng1. Đọc lại bài giảng
2. Làm các bài VD & bài tập trong GT2. Làm các bài VD & bài tập trong GT
3. Đọc bài:3. Đọc bài: Kế thừaKế thừa
4. Buổi tới thảo luận & kiểm tra bài cũ4. Buổi tới thảo luận & kiểm tra bài cũ
16

×