ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ươ
Ch
ng 4
ố ượ
ớ
L p và đ i t
ng
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ố
ậ
ề
ng đ i t
ng
ướ ậ ố ượ ớ ớ i L p và Đ i t
ố ượ ng
ươ
ự ộ
vL p trình truy n th ng và l p trình h vCác khái ni m liên quan t ệ vCác m c truy xu t ấ ứ vCác thành ph n c a l p ầ ủ ớ vThu c tính, ph ứ ộ ng th c vOperator vService Method và Support Method vOverloading method vParameter list method vAlias và c ch gom rác t ơ ế
đ ng
ộ N i dung
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ố ề ậ L p trình truy n th ng
q Ph
ươ ế ậ ủ ậ ố ề ng pháp ti p c n c a l p trình truy n th ng
ü L p trình tuy n tính.
ế ậ
ü L p trình c u trúc
q
ậ ấ
Ư ể u đi m
ü Ch
ươ ễ ể ễ ng trình rõ ràng, d hi u, d theo dõi.
ü T duy gi
ư ả ậ i thu t rõ ràng.
ể ế q Khuy t đi m
ü Không h tr vi c s d ng l
ỗ ợ ệ ử ụ ạ ồ i mã ngu n.
ü Khi thay đ i c u trúc d li u, ph i thay đ i gi
ổ ấ ữ ệ ả ổ ả ậ i thu t.
ả ữ ế ệ ầ ố ả ü Ph i gi i quy t các m i quan h vĩ mô gi a các module ph n
ự ề ớ m m trong các d án l n.
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ậ ướ ố ượ L p trình h ng đ i t ng
ơ ả ặ ể q Đ c đi m c b n
ậ ữ ệ ü T p trung vào d li u thay cho các hàm.
ü Ch
ươ ượ ố ượ ng trình đ c chia thành các đ i t ộ ậ ng đ c l p.
ü C u trúc d li u đ
ữ ệ ượ ấ ế ế ố ượ c thi t k sao cho đ c t ặ ả ượ đ c các đ i t ng.
ü D li u đ
ữ ệ ượ ấ ọ c che gi u, bao b c.
ü Các đ i t
ố ượ ổ ớ ng trao đ i v i nhau thông qua các hàm.
ü Ch
ươ ượ ế ế ướ ế ậ ừ ướ ng trình đ c thi t k theo h ng ti p c n t d i lên.
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ậ ướ ố ượ L p trình h ng đ i t ng
ộ ố ư ể ổ ậ q M t s u đi m n i b t
ü Không có nguy c d li u b thay đ i t
ơ ữ ệ ổ ự ị ươ do trong ch ng trình.
ü Khi thay đ i c u trúc d li u c a m t đ i t
ộ ố ượ ổ ấ ữ ệ ủ ầ ng, không c n
ồ ủ ố ượ ổ thay đ i mã ngu n c a các đ i t ng khác.
ü Có th s d ng l
ể ử ụ ạ ồ ế ệ i mã ngu n, ti t ki m tài nguyên.
ü Phù h p v i các d án ph n m m l n, ph c t p.
ứ ạ ự ề ầ ợ ớ ớ
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ng
đ i t
ậ (object) trong l p trình ụ ể ư ộ ố ượ ng c th
ộ
ố ượ ớ ệ Khái ni m L p và Đ i t ng
ố ượ ố ng gi ng nh m t đ i t ự i th c. ng có các thu c tính và các hành vi
ả ặ
ủ
ể
ố
(attribute) mô t
đ c đi m c a đ i
ượ
vKhái ni m ệ ố ượ ướ ng đ i t h ế ớ trong th gi vM i đ i t ố ượ ỗ riêng. § Thu c tính ộ ng.
t
ứ
ủ
ộ
ố
ọ ắ
ượ
§ Hành vi là ph t là ng, g i t
t
ng th c ho t đ ng c a đ i ứ (method). ươ
ươ ph
ạ ng th c
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ố
ố ượ ệ ớ ng
vThao tác
§ C ng, tr , nhân, chia ừ ộ § T i gi n ả ố § Ngh ch đ o ả ị
Khái ni m L p và Đ i t vVí d : Phân s ụ vĐ c đi m ể ặ § T sử ố § M u sẫ ố
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ố ượ ệ ớ ng
Khái ni m L p và Đ i t vVí d : xe h i ơ ụ § Màu tr ngắ § 4 c aử § 4 bánh § Hi u Toyota ệ § Ch y t ạ ớ i § Ch y lui ạ § Xe d ngừ § …
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ố ượ
ng:
ố ượ
vTên đ i t
ng
vThu c tính ộ
ươ
vPh
ứ ng th c
ố ượ ệ ớ ng
Khái ni m L p và Đ i t vĐ i t vXeHoi vHi u xe ệ vMàu xe vS bánh xe ố vS c a ố ử vCh y t ạ ớ i vCh y lui ạ vD ng xe ừ
ố
ệ
ố 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ác đ c đi m (thu c tính và c gom nhóm thành ễ ố ượ ng khác và d
t v i các đ i t
ố ượ ng
ố ượ
ng
(cid:222) M t ộ l pớ (class) là s phân lo i c a các đ i t ự
ủ ố ượ
ể
hay là ki u (type) c a đ i t
ạ ủ ng.
vVí d : ụ
ộ ớ
ế
− Các chi c xe Toyota, Honda, Porsche thu c l p
xe h i.ơ
ữ
ể
ộ
• Các con chó gi
nhà, chó săn, chó ki ng thu c
ớ l p chó.
ệ ớ Khái ni m L p và Đ i t vCác đ i t ố ượ ứ ố ươ ph ng th c) gi ng nhau đ ể ộ ớ m t l p đ phân bi ả qu n lý.
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ừ ượ
v Nh v y
ộ ư ậ L pớ là m t khái ni m tr u t
ệ ố ượ
ặ
ỉ ộ ậ
ợ
ng, dùng ệ ng có m t trong h
ể đ ch m t t p h p các đ i t th ng.ố
ng th c: ứ
ứ ớ
ố ượ ớ ệ Khái ni m L p và Đ i t ng
ộ v L pớ có thu c tính và ph ủ ớ ươ § Thu c tính c a l p t
ươ ộ ng ng v i thu c tính c a đ i
ủ ố
ứ ủ ớ ươ ứ ủ ộ ớ ng th c c a l p t ng ng v i các hành đ ng c a ượ t § Ph
ộ ng. ươ ố ượ đ i t ng.
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ộ v M t ộ L pớ có th có m t trong các kh năng sau:
ố ượ ớ ệ Khái ni m L p và Đ i t ng
ươ ứ
ỉ ỉ ứ
ả ng th c. ộ ng th c, không có thu c tính. ứ ng th c, tr
ươ ườ ả ợ ng h p này là
ươ
ứ
ộ
ể ộ § Ho c ch có thu c tính, không có ph ươ § Ho c ch có ph ộ § Ho c có c thu c tính và ph ấ Ø L p không có thu c tính và ph
ớ
ố ượ
ừ ượ
ng. Các l p này không có đ i t
ng th c nào là các ng
ớ ớ l p tr u t ươ ứ ng ng. t
ặ ặ ặ ổ ế ph bi n nh t.
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
v Không gian tên (namespace)
ố ượ ớ ệ Khái ni m L p và Đ i t ng
§ M t nhóm các l p (classes) và giao di n (interfaces) đ ị
ượ ệ ớ
ứ ứ ộ ơ ộ c ả ch c thành m t đ n v qu n lý theo hình th c không
ọ ủ ợ ế ạ ệ ố ổ t gian tên g i là namespace. § L i ích c a namespace là t ch c s p x p l
ự ọ
ự ệ ấ ổ i h th ng ớ thông tin các l p trong d án m t cách khoa h c, giúp cho ả vi c theo dõi b o trì d án đ ứ ắ ộ ượ ố c t t nh t.
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ừ ượ
ng:
ố ượ ớ ệ Khái ni m L p và Đ i t ng
ừ ượ ố ượ ng, đ i t ng là
ộ § L p (Class) là m t khái ni m tr u t ể ệ ụ ể ủ ớ ệ m t th hi n c th c a l p.
ế ế ủ
v Tính tr u t ớ ộ Ø Ví d : ụ ả § B n thi § Chi c xe h i đ
ế ế ế ố ượ ế t k c a chi c xe h i là l p. ơ ượ ạ c t o ra t ơ ớ ừ ả b n thi t k là đ i t ng.
Object
Class
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ừ ượ
ố ượ ớ ệ Khái ni m L p và Đ i t ng
ừ ượ ố ng gi ng nhau: tr u t ng hóa thành
§ Ch đ a ra các thu c tính và ph
ộ ươ ế ủ ứ ầ ng th c c n thi t c a
ng: v Tính tr u t ố ượ ữ ừ § T nh ng đ i t ộ ớ m t l p: ỉ ư ố ượ đ i t v Ví d : ụ
ậ ng trong l p trình.
Trừu tượng hóa
Class
Objects
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ố ượ ớ ệ Khái ni m L p và Đ i t ng
ự ứ ệ ộ c xây d ng đ th c hi n m t nhóm ch c
ủ ể ự năng đ c tr ng c a riêng l p đó.
ố ượ ấ ng khác ph i đ ng này qua đ i t
v Tính đóng gói: ượ ỗ ớ § M i l p đ ư ặ ấ ả ọ ố ượ đ i t ở b i các ph ữ ệ d li u.
ươ ố ượ ứ ủ ớ ữ ệ ừ § T t c m i thao tác truy xu t vào thành ph n d li u t ệ ự c th c hi n ứ ng ch a ầ ả ượ ng th c (method) c a chính đ i t
§ Tính đóng gói cho phép d u thông tin c a đ i t
ấ ủ ố ượ
ươ ứ ằ ng b ng ế ng th c liên quan đ n
ố ượ ế ợ cách k t h p thông tin và các ph thông tin trong đ i t ng.
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
v Tính đóng gói: v Ví d :ụ
ngungXe()
chayToi()
chayLui()
mucXang
ngungXe() chayToi() chayLui() kiemTraXang()
Yes, I can drive !
ố ượ ớ ệ Khái ni m L p và Đ i t ng
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ế ừ
v Tính k th a:
ớ ự
§ Cho phép xây d ng m t l p m i d a trên các
ự ộ ớ ớ
ủ ọ
ớ
ớ
ọ
§ L p đã có g i là l p Cha, l p m i phát sinh g i là
ộ ớ ị đ nh nghĩa c a m t l p đã có. ớ ớ l p Con ớ
ủ ớ
ầ
ế ừ ấ ả § L p con k th a t ể ở ộ
ế ừ
ầ
ớ
t c các thành ph n c a l p ầ Cha, có th m r ng các thành ph n k th a và ổ b sung thêm các thành ph n m i.
ẽ
ệ
Ø Khái ni m này s trình bày chi ti
ế ở ươ ch
t
ng sau
ố ượ ớ ệ Khái ni m L p và Đ i t ng
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ế ừ
v Tính k th a: v Ví d :ụ
ố ượ ớ ệ Khái ni m L p và Đ i t ng
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ớ
ự ầ
ủ
, ký t
đ u tiên c a
nên vi
ắ ặ ớ ớ ỗ ừ m i t ớ ớ ớ
ớ ị Đ nh nghĩa L p
ị
ự ế ố ượ
ượ
ươ
v Quy t c đ t tên L p trong C# ộ ừ § Tên l p nên là m t danh t ề ừ ể ồ § Tên l p có th g m nhi u t ế t hoa ặ ơ ớ ả ễ § Tên l p nên đ t đ n gi n, d nh , và có ý nghĩa ượ ủ ớ ừ c trùng v i t § Tên l p không đ khóa c a Java ố ằ ể ắ ầ § Tên l p không th b t đ u b ng s . ộ ự làm sao xác đ nh v Trong m t d án th c t ộ ớ ng, thu c tính và c các L p, các đ i t ứ ủ ố ượ ng th c c a đ i t
ng???
đ ph
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ớ ị Đ nh nghĩa L p
ế
class TenLop { //khai báo bi n lớp kieubien tenBien1; kieubien tenBien2;
//khai báo phương thức PhuongThuc1(); PhuongThuc2(); }
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ớ
ị
ị ớ
ế
class PhanSo { //khai báo bi n lớp int tuSo; int mauSo;
//khai báo phương thức ... }
Đ nh nghĩa L p vĐ nh nghĩa l p Phân S : ố
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ử ụ
ự
ế
vKhông c n khai báo thu c tính, s d ng tr c ti p ộ
ầ Properties:
public class PhanSo { public int TuSo { get; set; } public int MauSo { get; set; } public override string ToString() { return this.TuSo+"/"+this.MauSo; } }
ể ị ớ Đ nh nghĩa L p ki u POCO
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ở ạ ố ượ
ể ấ
ỏ ớ
ộ ố ượ ng. psA và xeHoiB là 2 bi n đ i t
ố new dùng đ c p phát b nh cho đ i ế i 2
ớ ng tr t
ớ ượ ấ
§ PhanSo psA = new PhanSo(); § XeHoi xeHoiB = new XeHoi(); ừ T khóa ượ t vùng nh đ
c c p phát trong thanh RAM
xeHoiB
RAM
YY Y
XX X
psA
Kh i t o đ i t ng vTenLop tenBien = new TenLop(); vVí d :ụ
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ể
ấ ở ọ ơ
§ Có th truy xu t
m i n i khác
ấ ứ M c truy su t vpublic
vprivate
ấ ở
ỉ
§ Ch có th truy xu t ể
trong class
vprotected
ấ ở
ặ
§ Ch có th truy xu t ể
ế trong class ho c class k
ỉ th aừ
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ạ
ữ
ng
ư ử ụ
ườ
ng
ế ớ
§ public int tuSo; § private int mauSo § protected int soBanhXe;
ế ớ
vTruy xu t bi n l p: ấ
§ tenDoiTuong.bienLop
Bi n L p vL u tr tình tr ng c a đ i t ủ ố ượ vS d ng cách khai báo bi n thông th ế vThêm m c truy xu t ấ ứ vVí dụ
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ả
ạ ộ ứ ấ
ủ ố ượ ấ ứ ng th c
ứ ươ
• PhanSo a = new PhanSo(); • a.ToiGian(); • PhanSo b = a.NhanMotSo(2);
Ph ng th c (Method) vCác hàm bên trong l pớ vMô t ng ho t đ ng c a đ i t vThêm m c truy xu t khi khai báo vTruy xu t ph ươ § tenBien.TenPhuongThuc(); § Ví d :ụ
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ụ
ộ
ượ t
ng c th
ể
ự ế ừ ỉ
ượ ươ
ượ
ữ
c nh ng thành viên
ụ ể v Có th truy c p trong b n thân l p ớ ả ậ v Đ c truy c p tr c ti p t ớ ậ tên l p v Ph ậ ứ ng th c static ch truy c p đ ủ ớ static c a l p
v Truy c p: ậ
§ TenLop.TenBien § TenLop.TenPhuongThuc() ớ
ể ể
ẻ
ố ượ
ế ề
ộ
ổ
v Có th hi u static là ô nh chia s chung, khi bi n ng đ u
ấ ự
ổ
ị static thay đ i giá tr thì toàn b các đ i t th y s thay đ i này.
static v Dùng cho các thành ph n l p không ph thu c vào đ i ố ầ ớ
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ở ạ
ầ
ố ượ
ng khi khai báo
ả ề
ở ạ
class TenLop { public TenLop() { ... } }
Hàm kh i t o (Constructor) vKh i t o giá tr ban đ u cho đ i t ị vCùng tên v i tên l p ớ ớ vKhông khai báo ki u tr v ể vKhai báo:
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ự
ệ ở ạ
ả
ặ
ủ
ủ
ị
vN u không khai báo constructor thì trình biên d ch s ẽ ặ ị
ặ ị
t
Constructor m c đ nh vLà constructor không có tham s và không th c hi n ố ộ ố ệ ệ ự ệ l nh gì c (ho c th c hi n m t s l nh kh i t o ặ ị ậ m c đ nh theo ch ý c a L p trình viên) ế ự thêm constructor m c đ nh
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ộ ớ
ề
ể
ề
ố
ở ạ
ươ
ng đ
ng
vĐ i t ứ
§ S tham s ố ố § Ki u tham s ố ể ượ ố ượ c kh i t o theo constructor t ng khi khai báo
vChú ý: Khi khai báo constructor khác, constructor
ố ử ụ
ả
ế ặ ị m c đ nh s không có. N u mu n s d ng thì ph i khai báo l
ẽ i.ạ
Constructor vM t l p có th có nhi u constructor vCác constructor khác nhau v tham s
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ế
class PhanSo { //khai báo bi n lớp private int tuSo; private int mauSo;
public PhanSo() { tuSo = 0; mauSo = 1; }
public PhanSo(int ts, int ms) { tuSo = ts; mauSo = ms; } }
Constructor
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ố ượ
ố
ử ố
ẫ ố
ng phân s có t
s = 0, m u s =
ố ượ
ố
ử ố
ẫ ố
1: § PhanSo a = new PhanSo(); § PhanSo b = new PhanSo(0, 1); ng phân s có t
vKh i t o đ i t ở ạ
s = 1, m u s =
2: § PhanSo c = new PhanSo(1, 2)
Constructor vKh i t o đ i t ở ạ
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ế
ệ ng hi n hành
ế
ợ
ớ
ế
class PhanSo { private int tuSo; private int mauSo;
public PhanSo(int tuSo, int mauSo) { this.tuSo = tuSo; this.mauSo = mauSo; } }
Tham chi u this vTham kh o đ n đ i t ố ượ ả vTrong tr ố ặ ườ ng h p đ t tên tham s trùng v i tên bi n ể ỉ ế ớ ử ụ this đ ch bi n l p ớ l p, s d ng
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ể
ế ng là ki u tham chi u ế
ế ớ
ố ượ
ng th c
ươ
ươ ề ố ượ ứ ng th c ng vào ph
ị ứ đ i t ứ ng th c.
Truy n đ i t vĐ i t ố ượ vN u có câu l nh tác đ ng đ n giá tr các bi n l p ộ ế ệ ủ ố ượ ươ ị ng trong ph c a đ i t ng b ấ ổ t ph thay đ i sau khi hoàn t
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ổ
ở
ữ
ậ ả ệ ế ớ
ế thay đ i code
ỗ nh ng ch
ị ế
ổ i dùng thay đ i giá tr bi n?
ợ ệ
ị ế
khi gán giá tr bi n?
ạ ể ế
ỉ ọ
ệ ử
ả ủ
ế
ế
ậ
ị
dùng bi n?ế vH n ch ng ế ườ vKi m tra h p l vBi n ch đ c (read only)? vTruy c p giá tr là k t qu c a vi c x lý các bi n
l p?ớ
B o v truy c p bi n l p vThay đ i tên bi n ổ
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ế ớ
ể
ậ
ậ ả ệ
public int LayTuSo() { return tuSo; } public void GanTuSo(int gt) { tuSo = gt; } }
ế ớ B o v truy c p bi n l p v Không cho phép truy c p bi n l p ậ v dùng hàm đ truy c p class PhanSo { private int tuSo; public int mauSo;
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ể ả
ậ
ả
ưở
ng
ỉ ươ
ề
ế
nhi u đ n ch
ộ Thu c tính vDùng đ b o v vi c truy c p bi n l p ế ớ ệ ệ vCho phép ch nh s a code không làm nh h ử ng trình
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ộ Thu c tính
class PhanSo { private int tuSo;
private int mauSo; public int TuSo { get { return tuSo; } set { tuSo = value; } }
public int MauSo
{ get { return mauSo; } set { mauSo = value; } }
}
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
class PhanSo { private int tuSo; private int mauSo; public int TuSo { … }
public int MauSo
{
get { return mauSo; } set {
if(value == 0)
mauSo = 1;
else
mauSo = value;
}
}
}
ợ ệ ể Ki m tra h p l
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ử
ị ế i dùng s a giá tr bi n
ộ
ỉ class PhanSo { private int tuSo; private int mauSo; private double giaTri; public double GiaTri { get { return giaTri; } } public double LayGiaTri() { giaTri = (double)tuSo / (double)mauSo; return giaTri; } }
ỉ ọ Thu c tính ch đ c vKhông cho ng ườ vCh có get, không có set
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
class PhanSo {
private int tuSo; private int mauSo; private double giaTri; public int TuSo{…} public int MauSo{…}
public double GiaTri { get { return (double)tuSo / (double)mauSo; } } }
ả ử ộ ế Thu c tính là k t qu x lý
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ụ d ng đ
ạ
ầ
ử
i dùng t o cũng c n toán t
ự ể ử ượ c toán t . v Các ki u do ng ườ ể § Ví d : ụ
• Phân số • S La Mã ố
Toán tử vCác phép tính +, , *, / vPhép so sánh >, <, >=, <= vCác ki u xây d ng s n (int, string, double…) s ử ẵ
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ể ự
ự
ệ
ằ ệ ự
class PhanSo { private int tuSo; private int mauSo; public PhanSo Cong(PhanSo b) { PhanSo c = new PhanSo(); c.TuSo = this.MauSo * b.TuSo + this.TuSo * b.MauSo; c.MauSo = this.MauSo * b.MauSo; return c; } }
Th c hi n b ng Hàm vXây d ng hàm đ th c hi n tính toán
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
public static PhanSo operator +(PhanSo trai, PhanSo phai)
{
PhanSo c = new PhanSo(); c.TuSo = trai.MauSo * phai.TuSo + trai.TuSo * phai.MauSo;
c.MauSo = trai.MauSo * phai.MauSo; return c;
}
ử ụ ử S d ng toán t
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ả
ớ
ử
logic ph i đi đôi v i nhau
ử ử ụ
S d ng toán t vCác toán t § > và < § >= và <= § == và !=
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ỗ ợ
ử ụ
ử ụ
ử
(toán t
+ thì nên
ử ụ
ử ể ự
ệ ơ
ệ
ả
là phép c ng)ộ vS d ng toán t
đ th c hi n công vi c đ n gi n
L u ýư vS d ng toán t ử đúng ch , h p lý vNên s d ng đúng ý nghĩa toán t ử
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ề
ứ
ươ
ươ
ng th c, có nh ng ph
ấ
ữ ố ượ
ươ
ọ
ỉ ử ụ
ứ
ọ
ộ ớ ng ử ứ ng khác s th c cung c p ra ngoài cho các đ i t ụ d ng (public, g i là Service method), có ph ng ớ ph c ch s d ng trong l p (private, g i là Support Method).
ẽ ổ ợ
vCác support method s b tr cho Service method
Service Method và Support Method vM t l p có nhi u ph
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
public class TamGiac { public int CanhA { get; set; } public int CanhB { get; set; } public int CanhC { get; set; } private bool laHopLe() { if (CanhA > 0 && CanhB > 0 && CanhC > 0 && (CanhA + CanhB) > CanhC && (CanhB + CanhC) > CanhA && (CanhA + CanhC) > CanhB) return true; return false; } public int ChuVi() { if (laHopLe() == false) return 1; return CanhA + CanhB + CanhC; } }
Service Method và Support Method
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ặ
ề
ứ
ươ
ng th c
ể
ặ
ư ü Signature bao g m: S l
ớ ề ng các đ i s ho c ki u
ố ượ ặ
ả ề
ử ụ
ủ
i
ồ ố ố ữ ệ d li u các đ i s ho c th t ü Ki u d li u tr v không đ ể ữ ệ ü L i ích c a Overloading là ợ ươ ph
ệ ọ ườ
ệ
ợ
ố ố ứ ự ố ố các đ i s . ượ c tính vào signature ạ ả kh năng tái s d ng l ể . ể ng th c và giúp vi c g i hàm “uy n chuy n” ủ ặ t c a
ng h p đ c bi
ứ ü Các Constructor là tr Overloading Method
Overloading Method vOverloading Method: ü Là đ c đi m trong cùng 1 l p có nhi u ph ể cùng tên nh ng khác nhau v Signature.
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
Overloading Method
Invocation
result = tryMe(25, 4.32)
float tryMe(int x) { return x + .375; }
float tryMe(int x, float y) { return x*y; }
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ạ
ộ
ứ
ng th c đ c bi ợ
ặ
ệ ặ ng h p đ c bi
t đó là ệ ủ t c a
ươ ộ ườ Parameter List, cũng là m t tr Overloading Method.
Sum(1, 2, 4) Sum() Sum(1, 5, -8,2)
public int Sum(params int []arr) { int s = 0; foreach(int x in arr) { s += x; } return s; }
ố ố ể
ể
vTa có th truy n bao nhiêu đ i s ki u int vào cho ượ
ươ
ứ
ề ng th c Sum cũng đ
ph
c.
Parameter List Method vC# cung c p m t lo i ph ấ
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ề
ế
ể
ặ
ộ
ớ
ự ộ
ỏ ớ
i.
ng cùng tr t
ớ ấ ế
ố ượ
ố ượ
ở c qu n lý b i 2 bi n đ i t
ng phân s đ
ố ượ đ i t vVí d :ụ PhanSo psA=new PhanSo(1,5); PhanSo psB=new PhanSo(3,7); ẽ Lúc này trên thanh RAM s có 2 ô nh c p phát cho 2 ả ố ượ đ i t ng psA và psB
psB
psA
Vùng nh Bớ
Vùng nh Aớ
ơ ế Alias và c ch gom rác t đ ng vAlias là đ c đi m mà trên m t ô nh có nhi u bi n
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ự
ệ ệ
s ta th c hi n l nh:
ữ
ằ
ố
ư ố
ẽ
ố ơ ế ả
ố ượ
ờ
ế có 2 bi n đ i t
ỏ ớ
ớ ả
ự ộ đ ng
i(cùng qu n lý)
psB
psA
Vùng nh Bớ
Vùng nh Aớ
ơ ế Alias và c ch gom rác t vGi ả ử psA=psB; Ngôn ng nói “Phân s A b ng Phân s B”, nh ng ệ ệ ố h th ng máy tính s làm vi c theo c ch “Phân s A ố ớ ỏ ớ i vùng nh mà phân s B đang qu n lý”. Hay nói tr t cách khác “Vùng nh B” bây gi ng cùng tr t
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ư ậ
ấ
ự ộ đ ng
ớ “vùng nh B”. Lúc
ở ư ng nh sau:
ẽ ả ạ
ơ ế Alias và c ch gom rác t vNh v y đã xu t hi n Alias
ớ
ệ ệ ượ này s x y ra 2 hi n t ẽ ế v T i “vùng nh B”, n u psA thay đ i thông tin s làm cho ả ng này cùng qu n
ả ổ
ộ ổ ố ượ psB thay đ i thông tin (vì c 2 đ i t ớ lý m t vùng nh )
v “Vùng nh A” không còn đ i t
ố ượ ế ớ ng nào tham chi u t
ướ ớ ủ ơ ế ế ơ i, ồ ộ ẽ ự ộ đ ng thu h i b nh (h y vùng ọ c đó), c ch này g i là c ch gom
psB
psA
Vùng nh Bớ
Vùng nh Aớ
ự ộ ớ ệ ố lúc này h th ng s t ấ ớ nh A đã c p tr đ ng rác t
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
ầ
ệ
ề
ầ
ằ ở
ạ ư ng cũ nh ng n m
ng gi ng y xì đ i t ể ự
ể
ổ ả
ng t
ố
ự v Đôi khi trong quá trình th c hi n ph n m m ta có ộ ố ố ượ ng ra (t o thêm m t đ i ớ ố ượ ô nh ố do thay đ i thông tin trên đ i ớ ố i đ i ta hàm
ng sao chép mà không làm nh h ỗ ng g c). C# h
ợ tr
ể
nhu c u sao chép đ i t ố ượ t khác, đ ta có th t ượ t ượ t MemberwiseClone đ sao chép đ i t
ưở chúng ố ượ . ng
public PhanSo copy() { return this.MemberwiseClone() as PhanSo; }
ự ộ ơ ế Alias và c ch gom rác t đ ng
ố
ệ
ố Khoa H Th ng Thông Tin
ạ ọ
ế
ạ ọ Đ i H c Qu c Gia TP.HCM ậ Đ i H c Kinh T Lu t
v Ví d :ụ
PhanSo psB = new PhanSo(1,4);
psB
Vùng nh Bớ
ộ
PhanSo psA = psB.copy();
psA
ằ
Sao chép toàn b thông tin trong Vùng ớ T c là ta có ớ ứ nh B vào vùng nh A ố ố ượ ng có thông tin gi ng nhau y 2 đ i t ớ ư xì nh ng n m trên 2 ô nh hoàn toàn khác nhau
Vùng nh Aớ
ự ộ ơ ế Alias và c ch gom rác t đ ng
ả ổ ưở psA thay đ i không nh h ng gì t ớ psB và ng i ượ ạ c l i

