You are on page 1of 20

Chng 5

Vng i i tng v s tng tc gia chng


5.0 Dn nhp
5.1 Qun l i sng i tng - Hm Constructor
5.2 Qun l i sng i tng - Hm Destructor
5.3 Tng tc gia cc i tng trong VC#
5.4 Lin kt tnh trong vic gi thng ip
5.5 Lin kt ng c a x
5.6 X l s kin lun c tnh a x
5.7 Kt chng
Khoa Khoa hc & K thut My tnh
Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 1

5.0 Dn nhp

Chng ny gii thiu vng i ca tng i tng trong chng


trnh, cch thc qun l i sng ca i tng, cc thi im
quan trng nht nh lc to mi i tng, lc xa i tng cng
nh cch miu t cc hot ng xy ra ti cc thi im ny.
Chng ny cng gii thiu s tng tc gia cc i tng trong
lc chng ang sng hon thnh nhim v ca chng trnh.

Khoa Khoa hc & K thut My tnh


Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 2

5.1 Qun l i sng i tng - Hm Constructor

Class m hnh cc i tng cng loi m phn mm dng. Lc


lp trnh, ta ch c t class, i tng cha c. Khi ng dng
chy, ti thi im cn thit, phn mm s phi to tng minh
i tng bng lnh new :
Rectangle objRec = new Rectangle(); //to i tng
Trng thi ca i tng l tp gi tr c th ca cc thuc tnh.
Ngay sau i tng c to ra, n cn c trng thi ban u xc
lp no . Hm constructor cho php ngi lp trnh miu t
hot ng xc lp trng thi ban u ca i tng.
Cng ging nh nhiu tc v khc, hm contructor c th c nhiu
"overloaded" khc nhau (vi s lng tham s khc nhau hay tnh
cht ca 1 tham s no khc nhau).

Khoa Khoa hc & K thut My tnh


Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 3

5.1 Qun l i sng i tng - Hm Constructor

Mi ln i tng c to ra (bi lnh new), my s gi t ng


contructor ca class tng ng. Ty theo tham s ca lnh new
m contructor no tng thch s c kch hot chy.
Trong ni b 1 class, cc tc v ch c th truy xut cc thuc tnh
ca mnh v cc thuc tnh tha k t cha c tm vc protected,
public, ch khng th truy xut trc tip cc thuc tnh tha k t
cha c thuc tnh private. Do nu ch chy constructor ca class
cn to i tng th khng th khi to ht cc thuc tnh ca i
tng, cn kch hot ht cc contructor ca cc class cha (gin tip
hay trc tip).
Mc nh, khi cn gi constructor ca class cha chy, my s gi
contructor khng tham s. Nu ngi lp trnh mun khc th phi
khai bo li tng minh "overloaded" no cn chy thng qua
mnh base() trong lnh nh ngha hm contructor.
Khoa Khoa hc & K thut My tnh
Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 4

5.1 Qun l i sng i tng - Hm Constructor


class A {
C c = new C(); //A()->B(3.1416)->C()
private int i;
A() { this.i = 0; }

A(int i) { this.i = i; }
}
C = new C(true); //A()->B()->C(true)
class B : A {
private double d;
B() { this.d = 0; }
B(double d) : base () { this.d = d; }
}
class C : B {
private bool b;
C() : base(3.1416) { this.b = false; }
C(bool b) { this.b = b; }
}
Khoa Khoa hc & K thut My tnh
Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 5

5.1 Qun l i sng i tng - Hm Constructor


//C++
for (;;) {
obj = new C();
//x l obj
//xa
delete(obj);
}

C c = new C();

C = new C(true);

//C#
for (;;) {
obj = new C();
//x l obj
}

Khoa Khoa hc & K thut My tnh


Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 6

5.1 Qun l i sng i tng - Hm Constructor


int[] vec;
vec[0] = 1;
vec = new int [10];
vec[0] = 1;

//li v phn t vec[0] cha c


//to array gm 10 phn t, mi phn t cha s nguyn
//OK

class A {public int i; }


A[] vec;
vec[0].i = 1;
//li v phn t vec[0] cha c
vec = new A [10];
//to array 10 phn t tham kho null
vec[0].i = 1;
//li v phn t vec[0] cha tham kho null
vec[0] = new A();
vec[0].i = 1;
//OK

Khoa Khoa hc & K thut My tnh


Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 7

5.1 Qun l i sng i tng - Hm Constructor


//class A c 2 hm contructor
class A {
A() {...}
A(int i) {...}
...
};
//class B tha k A, c 2 hm contructor
class B : A {
B() : base() {...}
B(int i) : base (i) {...}
...
};
Khoa Khoa hc & K thut My tnh
Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 8

5.1 Qun l i sng i tng - Hm Constructor


//class C tha k B, c 2 hm contructor
class C : B {
C() : base () {...}
C(int i) : base (i) {...}
... };
C c1 = new C(); //kch hot A() B() C()
C c2 = new C(5); //kch hot A(5) B(5) C(5)
Vic xc nh contructor no c kch hot phi theo chiu t
di ln bt u t class c new, nhng cc contructor c
chy thc s s theo chiu t trn xung bt u t class t tin
i u.

Khoa Khoa hc & K thut My tnh


Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 9

5.2 Qun l i sng i tng - Hm Destructor

i tng l 1 thc th, n c i sng nh bao thc th khc.


Nh ta bit, khi ta gi lnh new, 1 i tng mi thuc class
tng ng s c to ra (trong khng gian h thng), trng thi
ban u s c xc lp thng qua vic kch hot dy chuyn cc
contructor ca cc class tha k. Chng trnh s lu gi tham
kho n i tng trong bin tham kho khi cn, gi thng
ip nh i tng thc thi dm 1 tc v no .
VC# khng cung cp tc v delete xa i tng khi khng cn
dng n na. Tht vy, nh gi 1 i tng no c cn dng
na hay khng l vic khng d dng, d nhm ln nu chng
trnh t lm.
Tm li, trong VC#, chng trnh ch to tng minh i tng
khi cn dng n, chng trnh khng quan tm vic xa i tng
v cng khng c kh nng xa i tng.
Khoa Khoa hc & K thut My tnh
Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 10

5.2 Qun l i sng i tng - Hm Destructor

Nh vy, i tng s b xa lc no, bi ai ? H thng c 1


module c bit tn l "Garbage collection" (trnh dn rc),
module ny s theo di vic dng cc i tng, khi thy i
tng no m khng cn ai dng na th n s xa dm t ng.
Trnh dn rc khng bit trng thi i tng ti thi im b xa
nn n khng lm g ngoi vic thu hi vng nh m i tng
chim. Nh vy rt nguy him, th d nh i tng b xa m,
kha file v ang truy xut file d dang.
gii quyt vn xa i tng c trit , trnh dn rc s
gi tc v destructor ca i tng sp b xa, nhim v ca ngi
c t class l hin thc tc v ny.
Tc v destructor khng c kiu tr v, khng c tham s hnh
thc khng c overloaded, ch c 1 destructor/class m thi.
Khoa Khoa hc & K thut My tnh
Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 11

5.2 Qun l i sng i tng - Hm Destructor

Mc d ngi c t class s hin thc tc v destructor nu thy


cn thit, nhng code ca chng trnh khng c gi trc tip
destructor ca i tng. Ch c trnh dn rc ca h thng mi
gi destructor ca i tng ngay trc khi xa i tng .
Destructor ca 1 class cng ch x l trng thi i tng do cc
thuc tnh ca class qui nh, n cn gi destructor ca class
cha x l tip trng thi i tng do cc thuc tnh private ca
class cha qui nh, v c th tip tc.
Tm li trc khi xa mt i tng, trnh dn rc s gi cc
destructor theo chiu t di ln, bt u t class hin hnh ca
i tng, sau ti class cha, ... v cui cng l class t tin i
u (root).

Khoa Khoa hc & K thut My tnh


Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 12

5.3 Tng tc gia cc i tng trong VC#

Mun tng tc vi i tng no , ta phi c tham kho n


i tng . Thng ta lu gi tham kho i tng cn truy
xut trong bin i tng (bin tham kho). Thng qua tham kho
n i tng, ta c th thc hin 1 trong cc hnh ng tng tc
sau y :
1. truy xut 1 thuc tnh vt l ca i tng c tm vc cho php
(public hay internal hay protected).
2. truy xut 1 thuc tnh lun l ca i tng.
3. gi 1 tc v hay ton t c tm vc cho php.
4. truy xut 1 event ca i tng.
5. truy xut 1 phn t trong danh sch indexer ca i tng.
Gi 1 tc v hay 1 ton t l ging nhau v cn lm r chi tit
trong cc slide sau.
Khoa Khoa hc & K thut My tnh
Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 13

5.4 Lin kt tnh trong vic gi thng ip


Xt on lnh sau :
class C1 {
public void func1() {}//dch ra hm m my c tn l C1_func1
public virtual func2() {} //dch ra hm m my c tn l C1_func2
}
class C2 : C1 {
public override void func1() {} //dch ra hm m my c tn l C2_func1
public override func2() {} //dch ra hm m my c tn l C2_func2
}
C1 obj = new C1();
obj.func1(); //ln 1 gi hm m my no ?
//on code c th lm obj ch v i tng ca class C2, C3,...
obj.func1(); //ln 2 gi hm m my no ?

Khoa Khoa hc & K thut My tnh


Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 14

5.4 Lin kt tnh trong vic gi thng ip


Hai lnh gi thng ip obj.func1() trong slide trc s kch hot tc
v func1() ca class C1 hay tc v func1() ca class C2 ?
1. Dng k thut xc nh hm v lin kt tnh : Ti thi im
dch, chng trnh dch ch bit bin obj thuc kiu C1 v n dch
c 2 li gi thng ip obj.func1() thnh li gi hm C1_func1().
Nh vy mi khi my chy lnh obj.func1() ln 1, hm
C1_func1() s c gi, iu ny ng theo yu cu ca phn
mm. Nhng khi my chy lnh obj.func1() ln 2, hm
C1_func1() cng s c gi, iu ny khng ng theo yu cu
ca phn mm v lc ny obj ang tham kho i tng ca class
C2.
Mc nh, VC# dng k thut xc nh hm v lin kt tnh khi
dch li gi thng ip, do to ra ri ro cao, chng trnh
ng dng thng chy khng ng theo yu cu mong mun!!!
Khoa Khoa hc & K thut My tnh
Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 15

5.5 Lin kt ng m bo tnh a x


By gi nu ta hiu chnh 2 lnh gi thng ip obj.func1() trong
slide trc thnh obj.func2() th my s kch hot tc v func2() ca
class C1 hay tc v func2() ca class C2 ?
2. Dng k thut xc nh hm v lin kt ng : Lnh gi thng
ip obj.func2() c dch thnh on lnh my vi chc nng
sau : xc nh bin obj ang tham kho n i tng no, thuc
class no, ri gi hm func2() ca class chy. Nh vy, ln gi
thng ip 1, bin obj ang tham kho i tng thuc class C1
nn my s gi hm C1_func2(), iu ny ng theo yu cu ca
phn mm. Khi my chy lnh obj.func2() ln 2, on code xc
nh hm v lin kt ng s gi c hm C2_func2(), iu ny
cng ng theo yu cu ca phn mm. Ta ni li gi thng ip
obj.func2() c tnh a x.
Khoa Khoa hc & K thut My tnh
Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 16

5.5 Lin kt ng m bo tnh a x

Trong VC#, nu dng t kha virtual trong lnh nh ngha tc v


th tc v ny s c x l theo c ch lin kt ng v s m bo
c tnh a x, tc m bo tnh ng n trong li gi thng
ip. Bit c iu ny, t y v sau, mi ln nh ngha 1 tc v
hay 1 ton t, ta hy lun dng t kha virtual kt hp vi n.
Lu rng 2 tc v constructor v destructor ca i tng l 2 tc
v c bit, chng qun l i sng i tng v ch c gi bi
h thng. Ta khng c php dng t kha virtual khi nh ngha
chng.

Khoa Khoa hc & K thut My tnh


Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 17

5.6 X l s kin lun c tnh a x

Chng ta hy vit 1 chng trnh nh gm 1 form giao din, trong


form ta to 1 Button c thuc tnh Text="Lm g y?", thuc tnh
(Name) = btnStart, nh ngha hm x l s kin Click cho n ri
vit code nh sau :
//hm x l Click chut trn button do my to ra
private void btnStart_Click(object sender, EventArgs e) {
//xut thng bo kim tra
MessageBox.Show("Hm btnStart_Click s x l y");
//thay i hm x l Click cho Button
this.btnStart.Click -= new EventHandler(btnStart_Click);
this.btnStart.Click += new EventHandler(btnStart_Click1);
}

Khoa Khoa hc & K thut My tnh


Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 18

5.6 X l s kin lun c tnh a x

Hy vit thm hm btnStart_Click1() nh sau :


//hm x l Click chut trn button t vit thm
private void btnStart_Click1(object sender, EventArgs e) {
//xut thng bo kim tra
MessageBox.Show("Hm btnStart_Click1 s x l y");
//thay i hm x l Click cho Button
this.btnStart.Click -= new EventHandler(btnStart_Click1);
this.btnStart.Click += new EventHandler(btnStart_Click);
}
By gi nu chy chng trnh, ln u click chut ta s thy hm
btnStart_Click() chy, nhng nu click chut tip th hm
btnStart_Click1() chy, c th thay phin nhau chy (theo mun
ngi lp trnh). Ta ni x l s kin ngi dng lun c tnh a
x.
Khoa Khoa hc & K thut My tnh
Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 19

5.7 Kt chng

Chng ny gii thiu vng i ca tng i tng trong


chng trnh, cch thc qun l i sng ca i tng, cc thi
im quan trng nht nh lc to mi i tng, lc xa i tng
cng nh cch miu t cc hot ng xy ra ti cc thi im ny.
Chng ny cng gii thiu s tng tc gia cc i tng
trong lc chng ang sng hon thnh nhim v ca chng
trnh. Gi thng ip l s tng tc chnh yu gia cc i tng,
v cn phi c tnh a x.

Khoa Khoa hc & K thut My tnh


Trng H Bch Khoa Tp.HCM
2010

Mn : Lp trnh hng i tng


Chng 5 : Vng i i tng v s tng tc gia chng trong C#
Slide 20

You might also like