You are on page 1of 10

Chng 2

Cc khi nim chnh ca lp trnh hng i tng


2.1 Cu trc chng trnh OOP Chng trnh = tp cc i tng sng c lp, tng tc nhau khi cn thit hon thnh nhim v ca chng trnh (ng dng).

Cu trc chng trnh hng i tng rt thun nht, ch cha 1 loi thnh phn : i tng. Cc i tng c tnh c lp rt cao qun l, kim sot chng trnh rt d (cho d chng trnh c th rt ln) d nng cp, bo tr. Khng th to ra d liu ton cc ca chng trnh im yu nht ca chng trnh cu trc khng tn ti na. 2.2 i tng (Object) i tng l nguyn t cu thnh ng dng. i tng bao gm 2 loi thnh phn chnh yu :

Tp cc tc v (operation) : mi tc v thc hin 1 chc nng r rng n gin no . Tp cc thuc tnh d liu (attribute) : mi thuc tnh c kiu d liu c th, v cha 1 gi tr c th thuc kiu tng ng ti tng thi im. Cc thuc tnh phc v cho cc tc v v l i tng x l bi cc tc v. Vit phn mm hng i tng l qui trnh c t cc loi i tng cu thnh ng dng. c t mt loi i tng l c t 2 gc nhn khc nhau v i tng : Gc nhn s dng : dng pht biu interface. Gc nhn hin thc c th : dng pht biu class.

2.3 Kiu tru tng (Abstract type) hay interface Pht biu interface nh ngha thng tin s dng i tng m bn ngoi thy, kt hp cc thng tin ny vi 1 tn gi, tn ny c gi l tn kiu tru tng (Abstract type) hay ngn gn l type. Interface l tp hp cc im nhp (entry) m bn ngoi c th giao tip vi i tng. C# cho php nh ngha nhiu loi im nhp, nhng ph bin nht l tc v chc nng (operation).

Ta dng ch k (signature) nh ngha v phn bit mi im nhp. Ch k ca 1 tc v gm : tn tc v (operation) danh sch tham s hnh thc, mi tham s c c t bi 3 thuc tnh : tn, type v chiu di chuyn (IN, OUT, INOUT). c t chc nng ca tc v (thng dng ch thch). Mun lm vic vi 1 i tng no , ta thng dng bin i tng. Bin i tng nn c c t kiu bng tn interface, hn ch dng tn class c th. Bin i tng l bin tham kho, n khng cha trc tip i tng, n ch cha cc thng tin truy xut c i tng, bt chp i tng ang nm u. Bin i tng thuc kiu interface c th tham kho n nhiu i tng thuc cc class c th khc nhau min sao cc i tng ny h tr c interface tng ng. Nh vy, nu ta dng i tng thng qua bin thuc kiu interface th ta khng cn bit bt k thng tin hin thc chi tit no v i tng m mnh ang dng, nh vy code ng dng s c lp hon ton vi class hin thc ca i tng c s dng trong ng dng. Th d interface Th d sau y miu t 1 interface ca i tng m h tr 2 tc v chun ha chui ting Vit v dng t hp v dng sn. Thng qua interface, ngi dng khng h thy v bit chi tit v hin thc ca cc tc v, nhng iu ny khng h ngn cn h trong vic dng i tng no c interface IVietLib. interface IVietLib { //tc v chun ha chui ting Vit v dng t hp int VnPre2Comp(String src, int len, ref String dst); //tc v chun ha chui ting Vit v dng dng sn

int VnComp2Pre(String src, int len, ref String dst); } 2.4 Class (Implementation) Pht biu class nh ngha chi tit hin thc i tng : nh ngha cc thuc tnh, mi thuc tnh c c t bi cc thng tin v n nh tn nhn dng, kiu d liu, tm vc truy xut,... Kiu ca thuc tnh c th l type c in (kiu gi tr : s nguyn, thc, k t, chui k t,...) hay kiu i tng (kiu tham kho), trong trng hp sau thuc tnh s l tham kho n i tng khc. Trng thi ca i tng l tp gi tr ca tt c thuc tnh ca i tng ti thi im tng ng. 'coding' cc tc v (miu t gii thut chi tit v hot ng ca tc v), cc hm ni b trong class v cc thnh phn khc. Ngoi cc thnh phn chc nng, ta cn phi nh ngha cc tc v qun l i tng nh : khi to trng thi ban u (constructor), dn dp cc phn t lin quan n i tng khi i tng b xa (destructor). Th d v class Th d sau y miu t 1 class hin thc interface IVietLib : class MyVietLib : IVietLib { //nh ngha cc thuc tnh cn dng cho 2 tc v ... //nh ngha 2 tc v qun l i tng MyVietLib() {} ~MyVietLib() {} //nh ngha thut gii tc v chun ha chui ting Vit v dng t hp int VnPre2Comp(String src, int len, ref String dst) {.} //nh ngha thut gii tc v chun ha chui ting Vit v dng dng sn

int VnComp2Pre(String src, int len, ref String dst) {} } 2.5 Tnh bao ng (encapsulation) Bao ng : che du mi chi tit hin thc ca i tng, khng cho bn ngoi thy v truy xut to c lp cao gia cc i tng (tnh ni ghp coupling hay ph thuc gia cc i tng rt thp), nh vy vic qun l, hiu chnh v nng cp tng thnh phn phn mm d dng, khng nh hng n cc thnh phn khc. che du cc thuc tnh d liu : nu cn cho php bn ngoi truy xut 1 thuc tnh vt l, ta to 1 thuc tnh lun l (2 tc v get/set tng ng) gim st v kim sot vic truy xut. che du chi tit hin thc cc tc v. che du cc local function v s hin thc ca chng. C# cung cp cc t kha private, protected, internal, public (chng 3) xc nh tm vc truy xut tng thnh phn ca class. 2.6 Tnh tha k (inheritance) Tnh tha k cho php gim nh cng sc nh ngha interface/class : ta c th nh ngha cc interface/class khng phi t u m bng cch k tha interface/class c sn nhng gn ging vi mnh : Miu t tn cha : mi thnh phn ca cha tr thnh ca mnh. override 1 s method ca class cha, kt qu override ch tc dng trn i tng ca class con. nh ngha thm cc chi tit mi (thng kh t).

a tha k hay n tha k. C# cho php a tha k interface (a hin thc), nhng ch h tr n tha k class. Tha k to ra mi quan h cha/con : phn t c l cha, phn t tha k cha c gi l con. Cha/con c th l trc tip hay gin tip. Vi cc tnh cht v tha k nh slide trc, ta rt ra c 1 s tng : i tng ca class con lun ln hay hay t nht bng i tng class cha (theo gc nhn ngi dng). V nh th, i tng class con hon ton c th ng vai tr ca i tng class cha v thay th i tng class cha khi cn thit, nhng ngc li thng khng c. 2.7 Tnh bao gp (aggregation) 1 i tng c th cha nhiu i tng khc to nn mi quan h bao gp 1 cch quy gia cc i tng. Th d i tng quc gia cha nhiu i tng tnh, i tng tnh cha nhiu i tng qun/huyn, C 2 gc nhn v tnh bao gp : ng ngha & hin thc.

V d v bao gp //nh ngha class miu t i tng ha c bn abstract class Geometry { // abstract base class

public abstract void Draw (Graphics g); // abstract operation protected int xPos, yPos; protected COLORREF color; }; //nh ngha class ha phc hp = tp cc i tng ha c class GeoGroup : Geometry { public override void Draw (Graphics g) {...} ; // override private Geometry [] objList; //danh sch cc i tng thnh phn; int count; //s lng cc i tng thnh phn }; 2.8 Thng ip (Message), a x (Polymorphism) Thng ip l phng tin giao tip (hay tng tc) duy nht gia cc i tng, n cho php gi 1 tc v chc nng ca 1 i tng t 1 tham kho n i tng. Thng ip bao gm 3 thnh phn : tham kho n i tng cn nh. tn tc v mun gi. danh sch tham s thc cn truyn cho (hay nhn v t) tc v. public override void Draw (Graphics g) { for (int i=0; i < count; i++) objList[i].Draw(g); //gi thng ip nh i tng objList[i] // t hin th mnh ln i tng v g } Xt on lnh sau : C1 obj = new C1(); obj.func(); //ln 1 obj = new C2();

obj.func(); //ln 2 Lnh gi thng ip obj.func() kch hot tc v func() ca class C1 hay tc v func() ca class C2 ? 1. Dng k thut xc nh hm v lin kt tnh : Da vo thng tin ti thi im dch, bin obj thuc kiu C1 v my dch li gi thng ip obj.func() thnh li gi hm C1_func(). Nh vy mi khi my chy lnh ny, hm C1_func() s chy, bt chp ti thi im chy, obj ang tham kho i tng ca class khc (C2). iu ny khng ng vi mun ngi lp trnh. 2. Dng k thut xc nh hm v lin kt ng : Lnh gi thng ip obj.func() khng c dch ra 1 li gi hm no c m 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 func() ca class chy. Nh vy, nu obj ang tham kho i tng thuc class C1 th hm C1_func() s c gi, cn nu obj ang tham kho i tng thuc class C2 th hm C2_func() s c gi. Ta ni li gi thng ip obj.func() c tnh a x. iu ny gii quyt ng mun ngi lp trnh. Tnh a x : cng 1 lnh gi thng ip n i tng thng qua cng 1 tham kho nhng v tr/thi im khc nhau c th kch hot vic thc thi tc v khc nhau ca cc i tng khc nhau. Kim tra kiu (type check) Khi lp trnh, ta thng phm nhiu li : li v t vng, c php, li v thut gii... Trong cc li th li v vic gn d liu khc kiu thng xy ra nht. pht hin trit v sm nht cc li sai v kiu, my s dng c ch kim tra kiu cht v sm ti thi im dch.

Trong lc dch, bt k hot ng gn d liu no (lnh gn, truyn tham s) u c kim tra k lng, nu d liu v bin lu tr khng "tng thch" th bo sai. Tiu ch khng "tng thch" l g ? dng k thut so trng tn kiu : tn kiu khng trng nhau l khng tng thch. dng mi quan h 'conformity' (tng thch tng qut). Kiu A 'conformity' vi kiu B nu A cung cp mi tc v m B c, tng tc v ca A cung cp tng thch vi tc v tng ng ca B. Ni nm na A ln hn hay bng B th A 'conformity' vi B. Nh vy, quan h so trng hay quan h con/cha (sub/super) l trng hp c bit ca quan h tng thch tng qut. Nh dng mi quan h 'conformity', mt bin obj thuc kiu C1 c th cha tham kho n nhiu i tng thuc nhiu class khc nhau, min sao cc class ny tng thch vi class c dng nh ngha bin obj. 2.9 Tnh tng qut ha (Generalization) Vit phn mm hng i tng l qu trnh lp : vit pht biu interface/class c t tng loi i tng cu thnh phn mm. Nu s lng class cu thnh ng dng qu ln th vic vit phn mm s kh khn, tn nhiu thi gian cng sc hn. Lm sao gim nh thi gian, cng sc lp trnh cc ng dng ln ? s dng c ch tha k trong nh ngha interface/class. thay v trc tip vit cc class c th c t cho cc i tng trong phn mm, ta ch vit 1 class tng qut ha, ri nh class ny sinh t ng m ngun cc class c th.

Th d, thay v phi vit n class gn ging nhau nh danh sch cc s nguyn, danh sch cc s thc, danh sch cc chui, danh sch cc record Sinhvien, danh sch cc i tng ha,... ta ch cn vit 1 class tng qut ha : danh sch cc phn t c kiu hnh thc T. Khi cn to 1 class danh sch cc phn t thuc kiu c th no , ta ch vit lnh gi class tng qut ha v truyn tn kiu c th ca phn t trong danh sch. Chng 9 s trnh by chi tit v kh nng, tnh cht, mc h tr tng qut ha ca ngn ng C#. 2.10 Kt chng Chng ny gii thiu cu trc ca chng trnh hng i tng, cc phng tin c t i tng nh interface, class. Chng ny cng gii thiu cc tnh cht lin quan n vic c t v s dng i tng nh tha k, bao ng, bao gp, tng qut ha. Chng ny cng gii thiu phng tin giao tip duy nht gia cc i tng l thng ip, nhu cu cn phi c tnh a x trong vic thc hin lnh gi thng ip.

You might also like