You are on page 1of 54

MN LP TRNH HNG I TNG

i tng : SV i hc chnh quy ngnh CNTT Ti liu tham kho : Tp slide bi ging & thc hnh ca mn hc ny. The C++ Programming Language (special 3rd edition), Bjarne Stroustrup, 2000. 3 CD MSDN trong Microsoft Visual Studio. Online-Help ca mi trng JBuilder

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Slide 1

MN LP TRNH HNG I TNG


Ni dung chnh gm 10 chng : 1. n li cc tnh cht ca lp trnh cu trc. 2. Cc khi nim chnh ca lp trnh OOP. 3. C ch dch m OOP sang m my. 4. Tng qut v mc h tr OOP ca VC++ & Java. 5. c t class & cc tnh cht c bn ca i tng trong VC++. 6. c t class & cc tnh cht c bn ca i tng trong Java. 7. Chi tit v gi hm, gi thng ip & a x ca VC++. 8. Chi tit v gi hm, gi thng ip & a x ca Java. 9. Chi tit v thng tr, serialization, COM, Generalization & Template ca VC++. 10. Chi tit v thng tr, serialization, Generalization ca Java.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Slide 2

MN LP TRNH HNG I TNG


Chng 1

N LI CC TNH CHT CA LP TRNH CU TRC

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 1: n li cc tnh cht ca lp trnh cu trc Slide 3

Phng php phn tch t-trn-xung


Mi s vt trong mi trng xung quanh ta u c cu thnh t nhiu phn t nh hn, mi phn t nh li c cu thnh t nhiu phn t nh hn na. Th d, con ngi gm u, mnh, t chi. T chi gm 2 tay v 2 chn... Mi cng vic cn gii quyt bng my tnh cng c cu thnh t nhiu cng vic nh hn, mi cng vic nh hn li c cu thnh t nhiu cng vic nh hn na... Phng php phn tch t-trn-xung (top-down analysis) l phng php thng s dng phn tch cng vic, ni dung ca phng php ny l c gng xc nh xem cng vic cn gii quyt c cu thnh t nhng cng vic nh no, mi cng vic nh c cu thnh t cc cng vic nh hn no, c nh vy cho n khi nhng cng vic xc nh c l nhng cng vic tht n gin, c th thc hin d dng. Th d vic hc ly bng k s CNTT khoa CNTT HBK TP.HCM c th bao gm 9 cng vic nh hn l hc tng hc k t 1 ti 9, hc hc k i l hc n mn hc ca hc k , hc 1 mn hc l hc m chng ca mn ,... Hnh v ca slide k cho thy trc quan ca phng php phn tch top-down.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 1: n li cc tnh cht ca lp trnh cu trc Slide 4

Phng php phn tch t-trn-xung (tt)


chia thnh nhiu cng vic nh hn, n gin gii quyt hn.

Cng vic cn gii quyt (A) Cng vic A2 Cng vic A1n Cng vic An Cng vic An2 Cng vic Ann

Cng vic A1 Cng vic A11 Cng vic A12

...

Cng vic An1

Cc cng vic nh c miu t bng 1 lnh hay 1 li gi hm/th tc c.


Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

...

...

...

...

Mn : Lp trnh hng i tng Chng 1: n li cc tnh cht ca lp trnh cu trc Slide 5

Tm vc truy xut bin


Tm vc ca mt bin l tp cc lnh c php truy xut bin . C v C++ cho php 3 cp tm vc sau : o cc b trong function : bt k lnh no trong function u c th truy xut c bin cc b trong function . void Command1_Click() { char strGreeting[256]; // Khai bo cc b ... } o cc b trong module : bt k lnh no trong module u c th truy xut c bin cc b trong module . static char strAddr[256]; // bin cc b trong module char strName[256]; // bin ton cc o ton cc : bt k lnh no trong chng trnh cng c th truy xut c bin ton cc. Trong mt ng cnh (cng 1 function, cng 1 module, hay cp ton cc), khng th dng hai bin cng tn (C phn bit ch HOA v ch thng).
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 1: n li cc tnh cht ca lp trnh cu trc Slide 6

Cu trc 1 chng trnh hng cu trc


Chng trnh = cu trc d liu + gii thut module (package) entry 'start' global data local data of module

local data of function


Mn : Lp trnh hng i tng Chng 1: n li cc tnh cht ca lp trnh cu trc Slide 7

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Cu trc 1 chng trnh hng cu trc


Thnh phn gii thut bao gm code c vit trong cc module. Trong tng module, code c gom nhm thnh nhng hm chc nng, mi hm c nhn dng v truy xut thng qua tn hm. Thnh phn d liu bao gm cc bin d liu c nh ngha trong cc module. Trong tng module, v mt tm vc truy xut, cc bin c th c nh ngha 1 trong 2 cp tm vc : Public : bt k lnh no ca chng trnh u c th truy xut c. Private : ch c cc lnh trong module hin hnh mi c th truy xut. Ngoi ra trong tng hm chc nng, ngi ta c th nh ngha cc bin cc b, cc bin ny ch c truy xut cc b bi cc lnh trong hm tng ng. Ngoi l, trong 1 s ngn ng nh C, ngi ta cho php nh ngha bin trong lnh thc thi (block compose), bin ny ch c truy xut cc b bi cc lnh trong thn ca lnh block tng ng. im yu nht trong ngn ng hng cu trc l cho php nh ngha bin ton cc, nu bin ny b li, ta rt kh xc nh nguyn nhn gy li. Vic mang 1 hm hay 1 module ca ng dng ny sang ng dng khc cng s kh khn v thng gy ra hiu ng dy chuyn.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 1: n li cc tnh cht ca lp trnh cu trc Slide 8

Cu trc 1 chng trnh hng cu trc


Xt Turbo Pascal, 1 ng dng gm 1 module chng trnh v nhiu module dch v c gi l Unit. s dng cc thnh phn trong 1 module no , ta phi dng lnh Use. Xt C, 1 ng dng gm nhiu module ngang hng, mi module l 1 file gm nhiu hm chc nng. im nhp ng dng l hm main(). Module C cng c th l file th vin lin kt tnh (*.lib) hay ng (*.dll). s dng cc thnh phn trong 1 module no , ta phi dng lnh #include.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 1: n li cc tnh cht ca lp trnh cu trc Slide 9

Mi quan h client/server gia cc module


//c t interface ca module A : client #include B.h extern int A_intA; typedef struct {...} A_Type1; #define A_PI 3.14159 int A_func1(int a, double b); #include A.h //hin thc ca module A int A_intA; static int A_intB; int A_func1(int a, double b) { B_Type1 var; ... B_intA = B_MAXLEN; A_func2(a); B_func1(a,b); } static void A_func2(int a) { }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

//c t interface ca module B : server extern int B_intA; typedef struct {...} B_Type1; #define B_MAXLEN 1024 int B_func1(char c, char* d); #include B.h //hin thc ca module B int B_intA; static int B_intB; int B_func1(int a, double b) { ... B_func2(a); ... } static void B_func2(int a) { }

Mn : Lp trnh hng i tng Chng 1: n li cc tnh cht ca lp trnh cu trc Slide 10

Hai module s dng ti nguyn ca nhau


//c t interface ca module A #define _AH #ifndef _BH #include B.h #endif extern int A_intA; typedef struct {...} A_Type1; #define A_PI 3.14159 int A_func1(int a, double b); #include A.h //hin thc ca module A int A_intA; static int A_intB; int A_func1(int a, double b) { ... A_func2(a); ... } static void A_func2(int a) { }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

//c t interface ca module B #define _BH #ifndef _AH #include A.h #endif extern int B_intA; typedef struct {...} B_Type1; #define B_PI 3.14159 int B_func1(char c, char* d); #include B.h //hin thc ca module B int B_intA; static int A_intB; int B_func1(int a, double b) { ... B_func2(a); ... } static void B_func2(int a) { }
Mn : Lp trnh hng i tng Chng 1: n li cc tnh cht ca lp trnh cu trc Slide 11

MN LP TRNH HNG I TNG


Chng 2

CC KHI NIM CHNH CA LP TRNH HNG I TNG

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 12

Ni dung
2.1 Cu trc ca 1 ng dng hng i tng 2.2 i tng, thuc tnh, tc v. 2.3 Abstract type v class. 2.4 Tnh bao ng. 2.5 Tnh tha k & c ch 'override'. 2.6 Tnh bao gp. 2.7 Thng ip, tnh a x v kim tra kiu. 2.8 Tnh tng qut ha. 2.9 Tnh thng tr.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 13

Cu trc chng trnh OOP


Chng trnh = tp cc i tng tng tc nhau i tng (object) entry local data of object

local data of operation


Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 14

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Cu trc chng trnh OOP


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.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 15

i tng (Object)

i tng l nguyn t cu thnh ng dng. i tng bao gm 2 loi thnh phn : thuc tnh (d liu) : mi thuc tnh mang 1 gi tr nht nh ti tng thi im. tc v (operation) : thc hin 1 cng vic no . Implementation (class)

Interface (abstract type)

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 16

Kiu tru tng (Abstract type)


Abstract type (type) nh ngha interface s dng i tng. Ta dng tn nhn dng t tn cho kiu v nhn dng n. Interface l tp hp cc 'entry' m bn ngoi c th giao tip vi i tng. Ta dng signature nh ngha mi 'entry'. Signature gm : tn tc v (operation, function) 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). Ta dng tn ca abstract type (ch khng phi class) c t kiu cho bin, thuc tnh, tham s hnh thc. User khng cn quan tm n class (hin thc c th) ca i tng.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 17

Kiu tru tng trong Java


Java h tr kiu tru tng thng qua lnh interface, lnh ny nh ngha abstract type ca nhiu i tng ca ng dng (c th thuc nhiu class khc nhau. public interface Sleeper { public void wakeUp(); public long ONE_SECOND = 1000; // in milliseconds public long ONE_MINUTE = 60000; // in milliseconds } public class DigitalClock extends Applet implements Sleeper {}
public class AnalogClock extends Applet implements Sleeper {} Sleeper object; Object = new DigitalClock(); //bin object gi tham kho n 1 i tng DigitalClock Object = new AnalogClock(); //bin object gi tham kho n 1 i tng AnalogClock
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 18

Class (Implementation)
Ta dng tn nhn dng t tn cho class v nhn dng n. Class nh ngha chi tit hin thc i tng : nh ngha cc thuc tnh d liu, 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 (s nguyn, thc, k t, chui k t,...) hay 'abstract type', trong trng hp sau thuc tnh s l tham kho n i tng khc. Trng thi ca i tng l tp gi tr ti thi im tng ng ca tt c thuc tnh ca i tng. Trong thi gian tn ti v hot ng, trng ti ca i tng s thay i. 'coding' cc tc v (miu t gii thut chi tit v hot ng ca tc v) v cc 'internal function'. nh ngha cc tc v to (create) v xa (delete) i tng. nh ngha cc tc v 'constructor' v 'destructor'. User khng cn quan tm n class ca i tng.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 19

V d v nh ngha class trongVC++


class CMiniChatClientDlg : public CDialog { public: CMiniChatClientDlg(CWnd* pParent = NULL); // standard constructor protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg void OnConnect(); HICON m_hIcon; private : SOCKET sock; u_short portno; // Which tcp port are we going to use? };
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 20

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 (hay tnh kt dnh - cohesion gia cc i tng rt thp). che du cc thuc tnh d liu : nu cn cho php bn ngoi truy xut 1 thuc tnh, ta to 2 tc v get/set tng ng gim st v kim sot vic truy xut (thuc tnh ny vn c che giu). che du chi tit hin thc cc tc v. che du cc internal function v s hin thc ca chng.

Java, VC++ cung cp cc t kha private, protected, public xc nh tm vc truy xut tng thnh phn ca class.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 21

Tnh tha k (inheritance)


Tnh tha k cho php gim nh cng sc nh ngha type/class : ta c th nh ngha cc type/class khng phi t u m bng cch k tha type/class c sn, ta ch nh ngha thm cc chi tit mi m thi (thng kh t). a tha k hay n tha k. Tha k to ra mi quan h supertype/subtype v superclass/subclass. C th override cc method ca class cha, kt qu override ch tc dng trn i tng ca class con. i tng ca class con c th ng vai tr ca i tng class cha nhng ngc li thng khng c. VC++ cho php hn ch tm vc truy xut cc thnh phn ca class cha : class C : protected A, private B {}
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 22

V d v tha k v override VC++


class Geometry { // abstract base class public: Geometry( ); virtual void Draw( Window *pWnd ) = 0; // abstract operation protected: int xPos, yPos; COLORREF color; }; class Group : public Geometry { public: Group( ); ~Group( ); virtual void Draw( Window *pWnd ); // override private: Geometry **ppGeo; // pointer container int geoCount; };
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 23

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. C 2 gc nhn v tnh bo gp : ng ngha & hin thc. Gc nhn ng ngha O2 O1 O3 O3 Gc nhn hin thc O2

O1

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 24

V d v bao gp - VC++
class Geometry { // abstract base class public: Geometry( ); ~Geometry( ); virtual void Draw( Window *pWnd ) = 0; // abstract operation protected: int xPos, yPos; double xScale, yScale; COLORREF color; }; class Group : public Geometry { public: Group( ); ~Group( ); virtual void Draw( Window *pWnd ); // override private: Geometry **ppGeo; // =Geometry* ppGeo[n]; int geoCount; };
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 25

Thng ip (Message)

Thng ip l 1 php gi tc v n 1 i tng t 1 tham kho. Thng ip bao gm 3 phn : tham kho n i tng ch. Tn tc v mun gi. danh sch tham s thc cn truyn theo (hay nhn v t) tc v. v d : aCircle.SetRadius (3); aCircle.Draw (pWnd);

Thng ip l phng tin giao tip (hay tng tc) duy nht gia cc i tng.
Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 26

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Tnh a x (Polymorphism)

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. T1 p1; // C1 v C2 l 2 class Java hin thc T1 ... p1 = New C1; // to i tng C1, gn tham kho vo bin p1 p1.meth1(...); // gi thng ip nh tc v meth1 thc thi ... p1 = New C2; // to i tng C2, gn tham kho vo bin p1 p1.meth1(...); // gi thng ip nh tc v meth1 thc thi Lnh gi thng ip p1.meth1(...); 2 v tr khc nhau kch hot 2 tc v khc nhau ca 2 class khc nhau.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 27

Kim tra kiu (type check)


Cht v dng mi quan h 'conformity' (tng thch tng qut). Type A tng thch vi type B A cha mi tc v ca B v ng vi tng tc v ca type B : Tn ti 1 tc v cng tn trong A. danh sch tham s ca 2 tc v tng ng phi bng nhau v s lng tham s. kiu i s OUT hay gi tr return ca tc v trong A phi tng thch vi kiu ca i s tng ng trong B. kiu i s IN ca tc v trong B phi tng thch vi kiu ca i s tng ng trong A. kiu i s INOUT phi trng vi kiu ca i s tng ng trong B. quan h so trng hay quan h con/cha (sub/super) l trng hp c bit ca quan h tng thch tng qut.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 28

Tnh tng qut ha (Generalization)


C 2 ng ngha khc nhau ca tnh tng qut ha : class tng qut ha cho php sn sinh t ng cc class bnh thng, cc class bnh thng t n ch c th to ra i tng. Thng dng ng ngha ny trong giai on lp trnh. ngc vi tnh tha k : supertype/superclass l type/class tng qut ha ca cc con ca n. Thng dng ng ngha ny trong giai on phn tch/thit k phn mm.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 29

Tnh thng tr (persistence)


Thi gian sng ca 1 i tng c lp vi thi gian sng ca phn t (ng dng, i tng khc) to ra n. i tng phi tn ti khi cn t nht 1 tham kho n n trong h thng. i tng phi b xa khi khng cn tham kho no n n, v ti thi im ny i tng l rc. Vic xc nh chnh xc 1 i tng c phi l rc hay khng l 1 vic phc tp, code ng dng khng c php thc hin, y l cng vic ca h thng thng qua module 'garbage collection'. thng tr khng phi l vnh hng. Mc c th l 1 session ca my o (JVM) hay lu di (thng qua a cng, CDROM).
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 30

Tng kt

M hnh hng i tng quan nim th gii (hay chng trnh) bao gm cc i tng c lp sng chung v tng tc ln nhau. Cc c im chnh ca m hnh hng i tng : Bao ng : mi i tng bao gm 1 s d liu v tc v. Cc tc v thit lp nn hnh vi ca i tng. Cc i tng cng loi c c t bng 1 class. Cc i tng c lp v tng tc ln nhau bng cch gi thng ip. Gia cc class/i tng c th tn ti quan h bao gp, tha k, tng qut ha. Tnh a x : kt qu ca s kim tra kiu cht da vo mi quan h 'conformity'. Tnh thng tr : mi i tng tn ti khi cn t nht 1 tham kho n n.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 2 : Cc khi nim chnh ca lp trnh hng i tng Slide 31

MN LP TRNH HNG I TNG


Chng 3

C CH DCH M HNG I TNG SANG M MY

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 32

Tng qut v vn dch OOP


Chng trnh l tp cc i tng sng c lp v tng tc ln nhau khi cn thit. Cc i tng thuc 1 s loi nht nh (n) Mi loi i tng c miu t bi 1 type & 1 class M ngun chng trnh l tp n nh ngha type & class Dch chng trnh OOP l qui trnh lp dch n type & n class. Ta s miu t qui trnh dch 1 type v 1 class trong chng ny.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 33

Dch 1 abstract type


Abstract type ch cha thng tin tru tng (interface), khng miu t s hin thc Kt qu vic dch 1 type ch dng li vic xy dng cy ng ngha ca type tng ng phc v vic kim tra kiu ca chng trnh dch, ch khng to code m my. Ch cn 3 bc : duyt t vng, phn tch c php v phn tch ng ngha. Nn dng cng c h tr nh LEX, YACC cho 2 bc duyt t vng & phn tch c php.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 34

Dch 1 class

Dch class l cng vic chnh ca chng trnh dch hng i tng. Gm 2 cng vic chnh : dch thuc tnh d liu v dch cc method (hay cc internal function). Cn y cc bc : duyt t vng, phn tch c php, phn tch ng ngha v to m. Nn dng cng c h tr nh LEX, YACC cho 2 bc duyt t vng & phn tch c php.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 35

Dch thuc tnh d liu


class cu trc record

typedef struct { // import cc field t cu trc // c sinh ra t C0 // cc field tng ng vi C1 double C1_d; int C1_i; ... // cc field d liu iu khin // t to bi chng trnh dch void (*pvfaddr)() ; } C1;
Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 36

class C1 : C0 { double d; int i ; ... public : int proc4(int i); void proc5 (double d); ... };

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Dch thuc tnh d liu (tt)


mi class 1 record d liu c in. tn class tn record. copy cc field d liu ca cu trc sinh ra t vic dch class cha. Chuyn tng thuc tnh ca class thnh tng field ca record, tuyt i ha tn ca thuc tnh trnh nhp nhng. thm cc field d liu iu khin phc v cho run-time : th d bng a ch cc tc v ca i tng (pvftbl).

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 37

Dch thuc tnh d liu (tt)


cu trc record c dch ra m my thnh 1 vng nh lin tc c di bng i di ca record. - khai bo bin C1 o1; C1_o1 db dup (sizeof(C1)) truy xut 1 thuc tnh d liu tr thnh vic truy xut nh dng cch nh a ch ch s : - o1.i = 5; mov bx, C1_o1 mov [bx+8], 5

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 38

To bng a ch cc tc v
pvftbl class C1 : C0 { double d; int i ; ... public : void proc2(); //override int proc4(int i, double k); void proc5 (double d); ... }; fname 0 "proc1" 1 "proc2" 2 "proc3" 3 "proc4" 4 "proc5" 5 .... faddr C0_proc1 C1_proc2 C0_proc3 C1_proc4 C1_proc5 ...

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 39

To bng a ch cc tc v (tt)

To bng a ch gm C1METHCNT phn t (C1METHCNT l s tc v ca class hin hnh, k c cc tc v tha k). Mi phn t c nhn dng qua ch s v gm 2 thng tin chnh : tn gi nh ca tc v v a ch ca tc v. copy bng a ch ca class cha c. Hiu chnh li cc a ch ca cc tc v b override. Thm vo cc tc v mi nh ngha trong class hin hnh.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 40

Dch 1 method
int C1_proc1(C1* p, int i, double d) { int C1::proc1(int i,double k) { C2 o2; C2 *p2; C2 o2; // truy xut thuc tnh C2 *p2; p->C1_i = i; p->C1_d = d; C1::i = i; // gi hm d = k; C1_proc5(p,d); C1::proc5(d); C2_proc2(&o2, i,d); o2.proc2(i,d); // gi thng ip : kim tra, load, p2 = New(C2); 1 // cp nht bng a ch method p2->proc2(i,d); 2 for (i = 0; i <C2METHCNT; i ++) .... if (strcmp ("proc2", p2-> }; pvftbl[i].fname)==0) break; 3 (*p2->pvftbl[i].faddr)(p2,i,d); };
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 41

Dch 1 method (tt)


tn method c chuyn t dng tng i sang tuyt i (ni kt tn class vo). thm tham s u tin cho hm sinh ra : miu t tham kho n i tng m hm s truy xut cc thuc tnh d liu. tn thuc tnh c chuyn t dng tng i sang tuyt i (ni kt tn class vo). gi hm internal gi hm nhng thm tham s u tin. gi thng ip gm 3 bc : kim tra, tm, load i tng ri cp nht bng a ch cc method ca i tng. tm ch s ca method cn gi trong bng (i). gi gin tip method thng qua a ch phn t th i trong bng.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 42

Ti u ha code to ra

C 2 vn ln trong qu trnh dch 1 class sang ngn ng c in. Bng a ch cc method chim nhiu khng gian. Tn thi gian chy lnh gi thng ip : kim tra, tm, load i tng, cp nht bng a ch cc tc v, tm ch s method cn gi v gi gin tip qua a ch trong bng. 1 s chng trnh dch tm cch ti u ha cc vn trn. slide sau l cc ti u ha ca chng trnh dch C++ v cc gi phi tr.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 43

Ti u ha code to ra (tt)

trong C++, tt c i tng u tm thi v gn cht vo ng dng bng a ch cc method ca cc i tng lun nm sn trong khng gian ca ng dng. Mi ln to i tng mi, bin pvftbl trong i tng c gn ngay a ch bng a ch cc method khng cn thc hin bc 1 khi x l lnh gi thng ip n i tng. C++ ch dng mi quan h con/cha trong kim tra kiu cng vic 2 (tm ch s tc v) c lm ti thi im dch thay v ti thi im gi thng ip trong lc chy ct tn gi nh method khng cn phi lu tr trong bng a ch cc method. ch c cc virtual function mi c gii quyt theo c ch a x bng a ch ch cha cc hm virtual ca class, cn cc function khc c dch ra li gi hm trc tip.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 44

Ti u ha code to ra (tt)

ci gi phi tr ca vic ti u ha trong C++ : ngi lp trnh phi t quyt nh tc v no cn x l theo c ch a x, tc v no khng ? Nu s quyt nh ny sai th s gy li khi chy, m l ngi th kh lng quyt nh chnh xc. tnh a x ch ng gia cc i tng c mi quan h con/cha, th t cc a ch method ca mi class con trong bng a ch lun ging th t cc method tng ng ca class cha, tuy nhin gia 2 class bt k th khng th m bo kim tra kiu trong C++ khng th nng cp ln bng cch dng mi quan h "conformity".

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 3: C ch dch m OOP sang m my Slide 45

MN LP TRNH HNG I TNG


Chng 4

TNG QUT V MC H TR OOP CA VC++ & JAVA

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 46

4.1 Ngn ng Visual C++


1. 2. 3. 4. 5. 6. 7. Ch h tr class, khng h tr abstract type. Cho php a tha k & Override method khi tha k. Dng 'abstract class' nh ngha interface. Tm vc truy xut cc thnh phn. a x c chn lc nh 'virtual function' Ch h tr cc i tng tm. C th nh ngha overloaded function.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 47

Ch h tr class, khng h tr abstract type


Ch cung cp lnh class c t s hin thc ca i tng, khng c lnh interface hay type nh ngha type ca i tng. Dng class nh ngha kiu cho cc bin, cc thuc tnh. Cn phn bit cch nh ngha kiu cho bin : C1 o1; // bin o1 l vng nh cha i tng C1* p1; // bin p1 l vng nh cha pointer ti i tng Nu 1 class c cha thuc tnh i tng thuc kiu class th i tng tng ng s l i tng gp vt l i tng khc. Nu 1 class c cha thuc tnh i tng thuc kiu class pointer th i tng tng ng s l i tng gp cha tham kho (pointer) n i tng khc.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 48

a tha k
a tha k trong nh ngha class, hp dn cho ngi lp trnh nhng chi ph hin thc th rt cao :
d gy ra vic trng tn gia cc thnh phn nm trong cc class cha khc nhau nhng u c tha k cho class con phi gii quyt vn trng tn v trnh nhp nhng trong vic truy xut chng. 1 class c th cha nhiu class cha trng nhau phi gii quyt vic duplicate cc thnh phn ca cc class cha trng nhau ny (d tha v mt tnh nht qun) VC++ ngh dng "virtual base class" ti u ha b nh i tng. a.
b.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 49

a tha k
Pht biu : class NguoiCa : public Nguoi, public Ca {...}; s to ra cc i tng NguoiCa c cu trc d liu theo hnh a. trong slide trc cc thuc tnh trong class Sinhvat c nhn bn v tn ti 2 ln 2 v tr khc nhau trong i tng NguoiCa d tha d liu v mt tnh nht qun d liu. Cn pht biu : class NguoiCa : public virtual Nguoi, public virtual Ca {...}; s to ra cc i tng NguoiCa c cu trc d liu theo hnh b. trong slide trc cc thuc tnh trong class Sinhvat ch tn ti 1 ln trong i tng NguoiCa khc phc c s d tha d liu v khng mt tnh nht qun d liu.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 50

Class tru tng (Abstract class)


VC++ h tr khi nim "abstract class" nh ngha class ch cha thng tin interface nhng khng cho php dng class ny nh ngha kiu cho bin hay thuc tnh (tr pointer). Mt abstract class l 1 class cha t nht 1 "pure virtual funtion, mt "pure virtual funtion l 1 virtual function c gn =0 (ngha l khng c phn hin thc km theo). class Geometry { // abstract class public: Geometry( ); ~Geometry( ); virtual void Draw( Window *pWnd ) = 0; // pure virtual function protected: int xPos, yPos; double xScale, yScale; COLORREF color; };
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 51

Tm vc truy xut thnh vin ca class


Tm vc truy xut thnh vin trong i tng c miu t bi 1 trong 3 t kha sau : private : thnh phn b che du hon ton. protected : ch che du bn ngoi nhng cho con, chu, cht, truy xut. public : cho php tt c mi ni truy xut. Friend class : l class m mi hm ca n u c th truy xut t do cc thnh phn ca class hin hnh. Friend function : l function c in c th truy xut t do cc thnh phn ca class hin hnh. C th hn ch tm vc cc thnh vin ca class cha khi tha k. class C : protected A, private B {}
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 52

H tr tnh a x c chn lc
nh ngha 'virtual function' nu mun p dng tnh a x trong lnh gi thng ip yu cu hm ny thc thi. Tt c cc 'virtual function' ca class c qun l trong 1 danh sch "virtual function table". Danh sch ny l 1 trong cc field d liu nm trong i tng c to t ng bi chng trnh dch.
a ch function 1

a ch function 2 a ch function 3 a ch function 4 a ch function 5

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 53

Cc i tng u tm thi
Cc i tng ch tn ti tm thi trong khng gian process. Tham kho n i tng thc cht l pointer cc b trong khng gian lm vic ca process. Chng trnh phi t vit code cho hot ng save/restore i tng nu mun lu gi/dng li i tng. VC++ h tr hot ng save/restore i tng nh kh nng 'Serialization'. C quyn 'override' bt c method ca bt k function no ca class cha. Cho php nh ngha cc hm 'overloaded' : cng tn nhng 'signature' khc nhau.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 54

Skeleton nh ngha class


class Geometry : Object { // == class Geometry : public Object { public: Geometry( ); ~Geometry( ); virtual void Draw( Window *pWnd ); // virtual method BOOL IsDisplayed(void); .... protected: COLORREF color; .... private : int xPos, yPos; double xScale, yScale; ... }; class Point : Geometry {}; class Line : Geometry { .... }; class Polygon : Geometry {....}; class Rectangle : Geometry {....}; ....
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 55

Cu trc 1 chng trnh Dialog based n gin


InitInstance()

DoModal()

CProgramDlg CProgramApp
Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 56

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Cu trc 1 chng trnh SDI n gin


InitInstance() CMainFrame

CProgramView

CProgramDoc

CSingleDocTemplate CProgramApp
Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 57

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Cu trc 1 chng trnh MDI n gin


InitInstance() CChildFrame

CProgramView

CProgramDoc

CMultiDocTemplate

CProgramApp
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 58

4.2 Ngn ng Java


1. 2. 3. 4. 5. 6. 7. 8. 9. H tr y 'interface' (abstract type) v class. H tr n tha k. C th dng 'abstract class' nh ngha interface. Tm vc truy xut cc thnh phn. H tr package a x y . Ch h tr i tng tm trong tng session JVM Override function khi tha k. C th nh ngha overloaded function.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 59

H tr Class v Interface
1. Java h tr vic nh ngha i tng theo c 2 gc nhn : pht biu interface nh ngha gc nhn s dng v pht biu class nh ngha gc nhn hin thc v nguyn tc ngi lp trnh nn dng tn interface nh ngha bin i tng, tuy nhin do tp qun v thi quen, ngi lp trnh ch yu vn dng class nh ngha kiu cho cc bin, thuc tnh. Tuy nhin d dng tn interface hay tn class nh ngha bin i tng th bin ny vn ch cha tham kho n i tng, cn i tng c to ra trong khng gian qun l ca my o JVM (ch khng phi trong khng gian ng dng).

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 60

To & xa i tng
Phi gi hm to i tng 1 cch tng minh, nhng khng cn xa i tng (vic ny nn cho module dn rc ca JVM thc hin m bo tnh ng n v an ton). class C1 extends RootClass {...} C1 o1; // o1 cha tham kho n i tng C1 o1 = New C1; //to i tng mi v gn tham kho vo bin i tng Vic dng tn interface c t kiu cho bin, thuc tnh lun c li hn vic dng tn class. Th d v ng dng hin th ng h thi gian thc trong chng ny s cho ta thy r iu ny. 2. n tha k trong nh ngha interface v nh ngha class mi quan h tha k gia cc interface/class kh n gin, d hin thc.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 61

H tr abstract class
3. Tip tc h tr khi nim "abstract class" nh ngha class ch cha thng tin interface v khng cho php 'instanciate' i tng. Ngi lp trnh ch c th dng class 'abstract class' c t kiu cho cc bin hoc tha k trong vic nh ngha class con. class abstract Geometry { // abstract class protected int xPos, yPos; protected double xScale, yScale; protected COLORREF color; ... public abstract Draw(Graphics g); // abstract function ... }; Abstract class c th cha y cc hin thc bn trong, nhng thng ch cha cc 'abstract function'.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 62

Tm vc truy xut cc thnh phn


4. Tm vc truy xut cc thnh phn trong i tng : private : thnh phn b che du hon ton. protected : che du bn ngoi nhng cho php cc i tng con, chu, cht... truy xut. public : cho php tt c mi ni truy xut. friendly : cho php mi phn t trong cng package truy xut. y l tm vc mc nh v khng c t kha tm vc tng minh.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 63

H tr package
5. Package l n v ng gi cc class v cng l n v qun l tm vc ca java, mi package cha nhiu class ( dng m trung gian m bytecode). package graphics; public class Circle extends Graphic implements Draggable {
...

} Tt c mi phn t c nh ngha trong 1 file m ngun u thuc 1 package, tn package ny c c t trong pht biu package, pht biu ny phi nm u file m ngun. Nu khng c th cc class trong file m ngun s c cha trong package mc nh (khng c tn). Nhiu file source c th c dch v lu trong cng 1 package.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 64

H tr y tnh a x
6. Tt c cc tc v m c th c gi t bn ngoi (public, protected, friendly) u c qun l trong 1 danh sch "public function table ca i tng.

a ch function 1 a ch function 2 a ch function 3 a ch function i a ch function n

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 65

Cc i tng u 'tm thi'


7. Cc i tng ch tn ti tm thi trong 1 session chy JVM. Coe ca ng dng phi to ra i tng nu mun dng n, nhng khng cn phi xa i tng. i tng s tn ti 1 khi cn tham kho n n trong khng gian ca 1 session JVM. Module Garbage Collection trong JVM s chu trch nhim pht hin i tng rc v xa n ra khi b nh JVM. 8. C quyn 'override' bt k function no ca class cha. Class cha c th quyt nh khng cho cc class con override tc v ca mnh bng cch dng t kha final trong lnh nh ngha tc v . 9. Cho php nh ngha cc hm 'overloaded' : cng tn nhng 'signature' khc nhau.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 66

Th d v chng trnh Java


import java.net.*; public class getnet { public static void main(String args[]) { try { if(args.length!=1) { System.out.println("Usage: java AddrLookupApp <HostName>"); return; } InetAddress host = InetAddress.getByName(args[0]); String hostName = host.getHostName(); System.out.println ("Host name : "+hostName); System.out.println ("IP address:"+host.getHostAddress()); } catch (UnknownHostException e) {...} } } Mn : Lp trnh hng i tng
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 67

Th d v chng trnh Java

GUIClock 12.34.25 <<cha>> AlarmClock

wakeup()

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 68

Th d v cc class Java
public class AlarmClock { private static final int MAX_CAPACITY = 10; private static final int UNUSED = -1; private static final int NOROOM = -1; private Sleeper[] sleepers = new Sleeper[MAX_CAPACITY]; private long[] sleepFor = new long[MAX_CAPACITY]; public AlarmClock () { for (int i = 0; i < MAX_CAPACITY; i++) sleepFor[i] = UNUSED; } //cn tip slide k

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 69

Th d v cc class Java
//tc v m dm khch hng s thi gian time (ms) public synchronized boolean letMeSleepFor(Sleeper s, long time) { int index = findNextSlot(); if (index == NOROOM) { return false; } else { sleepers[index] = s; sleepFor[index] = time; new AlarmThread(index).start(); return true; } }
//cn tip slide k
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 70

Th d v cc class Java
private synchronized int findNextSlot() { for (int i = 0; i < MAX_CAPACITY; i++) { if (sleepFor[i] == UNUSED) return i; } return NOROOM; } private synchronized void wakeUpSleeper(int sleeperIndex) { sleepers[sleeperIndex].wakeUp(); sleepers[sleeperIndex] = null; sleepFor[sleeperIndex] = UNUSED; } //cn tip slide k
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 71

Th d v cc class Java
private class AlarmThread extends Thread { int mySleeper; AlarmThread(int sleeperIndex) { super(); mySleeper = sleeperIndex; } public void run() { try { sleep(sleepFor[mySleeper]); } catch (InterruptedException e) {} wakeUpSleeper(mySleeper); } } } //ht phn c t class AlarmClock
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 72

Th d v cc class Java
public interface Sleeper { public void wakeUp(); public long ONE_SECOND = 1000;// in milliseconds public long ONE_MINUTE = 60000; // in milliseconds } import java.applet.Applet; import java.awt.Graphics; import java.util.*; import java.text.DateFormat; public class GUIClock extends Applet implements Sleeper { private AlarmClock clock; public void init() { clock = new AlarmClock(); }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 73

Th d v cc class Java
public void start() { clock.letMeSleepFor(this, 1000); } public void paint(Graphics g) { Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); DateFormat dateFormatter = DateFormat.getTimeInstance(); g.drawString(dateFormatter.format(date), 5, 10); } public void wakeUp() { repaint(); clock.letMeSleepFor(this, 1000); } }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 4 : Tng qut v mc h tr OOP ca VC++ & Java Slide 74

MN K THUT LP TRNH
Chng 5

C T CLASS & CC TNH CHT C BN CA I TNG TRONG VC++

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 5 :c t class & cc tnh cht c bn ca i tng trong VC++ Slide 75

c t class trong VC++


Thng tin chi tit trong bi thc hnh s 6.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 5 :c t class & cc tnh cht c bn ca i tng trong VC++ Slide 76

MN K THUT LP TRNH
Chng 6

C T CLASS & CC TNH CHT C BN CA I TNG TRONG JAVA

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 6 :c t class & cc tnh cht c bn ca i tng trong Java Slide 77

c t interface (abstract type) trong Java


Thng tin chi tit trong bi thc hnh s 7.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 6 :c t class & cc tnh cht c bn ca i tng trong Java Slide 78

MN K THUT LP TRNH
Chng 7

GI HM, GI THNG IP & A X TRONG VC++

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 7 : Gi hm, gi thng ip & a x trong VC++ Slide 79

Tng qut v gi hm trong VC++


Trong VC++, cc lnh thc thi u phi nm trong thn ca 1 hm no . Ta phn bit 2 loi hm : Hm c in, tn ti cp ngoi cng (khng thuc class no). Hm trong 1 class i tng no , ta tm dng thut ng "tc v" ni v loi hm ny. Trong thn ca 1 hm c in, xt lnh sau : function1(...); ::function1(...); Hai lnh trn c gi l li gi hm c in function1(). Hm function1() phi tn ti trong module no ca phn mm hoc trong module th vin m phn mm s lin kt n.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 7 : Gi hm, gi thng ip & a x trong VC++ Slide 80

Tng qut v gi hm trong VC++


Trong thn ca 1 tc v, xt lnh sau : ::function1(...); Lnh trn l li gi hm c in function1(). Hm function1() phi tn ti trong module no ca phn mm hoc trong module th vin m phn mm s lin kt n. Trong thn ca 1 tc v, xt lnh sau : function1(...); Nu function1() khng c nh ngha trong class ca i tng tng ng th lnh trn l li gi hm c in function1(). Hm function1() phi tn ti trong module no ca phn mm hoc trong module th vin m phn mm s lin kt n.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 7 : Gi hm, gi thng ip & a x trong VC++ Slide 81

Tng qut v gi hm trong VC++


Trong VC++, c 2 cch truy xut i tng khc nhau : thng qua bin i tng MyClass obj; thng qua bin tham kho n i tng : MyClass *pobj; Bin obj miu t bn thn i tng MyClass (1 cch tng minh, xc nh v khng nhm ln vi bt k i tng thuc class no khc. C php gi tc v thng qua bin i tng l : obj.function1(...); lnh trn lun c dch ra thnh li gi hm function1(...) ca class MyClass ti thi im dch. Do ti thi im chy, nu bin obj ang cha 1 i tng khc th lnh obj.function1(..) vn lun l li gi hm function1(..) ca class MyClass. Khng c a x trong trng hp ny. Ng ngha ca li gi hm nh trn c th ng/khng ng vi yu cu ca ngi lp trnh ti tng thi im/v tr chy n.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 7 : Gi hm, gi thng ip & a x trong VC++ Slide 82

Tng qut v gi hm trong VC++


Trong thn ca 1 tc v, xt lnh sau : function1(...); Nu function1() c nh ngha trong class ca i tng tng ng th lnh trn s c chuyn thnh lnh : this->function1(...); trong this l tn bin tham kho n i tng hin hnh. Lnh this->function1(...); l trng hp c bit ca lnh : pobj->function1(...); trong pobj l tn bin tham kho n i tng no c nh ngha trc . By gi chng ta hy kho st chi tit v vic x l lnh pobj->function1(...); trong VC++.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 7 : Gi hm, gi thng ip & a x trong VC++ Slide 83

X l lnh gi thng ip trong VC++


Gii s bin tham kho pobj c nh ngha nh sau : MyClass *pobj; Vic x l lnh gi thng ip pobj->function1(...); nh sau : Kim tra xem function1 c phi l tc v virtual ca class MyClass khng? Nu function1 khng phi l tc v virtual, lnh gi thng ip s c dch ra li gi hm tng minh n hm function1 ca class MyClass (bt chp ti thi im chy bin pobj ang tham kho n i tng thuc class no khc). Nh vy, cch gii quyt ny khng to ra tnh a x cho li gi thng ip. Nu function1 l tc v virtual, lnh gi thng ip s c dch ra on m my thc hin vic tm v lin kt ng ti hm fucntion1 nh bng a ch cc hm virtual ca i tng c tham kho bi bin pobj. Nh vy, cch gii quyt ny s to ra tnh a x cho li gi thng ip.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 7 : Gi hm, gi thng ip & a x trong VC++ Slide 84

Th d cng c ni dung chng 7


Gii thiu bi thc hnh s 8.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 7 : Gi hm, gi thng ip & a x trong VC++ Slide 85

MN K THUT LP TRNH
Chng 8

GI HM, GI THNG IP & A X TRONG JAVA

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 8 : Gi hm, gi thng ip & a x trong Java Slide 86

Tng qut v gi thng ip trong Java


Trong Java, ch c 1 cch truy xut i tng duy nht : thng qua bin tham kho n i tng. Bin tham kho c nh ngha theo 1 trong 2 cch : MyClass pobj; //dng class miu t kiu cho bin MyInterface pobj; //dng interface miu t kiu cho bin Trong Java, cc lnh thc thi u phi nm trong thn ca 1 tc v no ca 1 class no .

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 8 : Gi hm, gi thng ip & a x trong Java Slide 87

Tng qut v gi thng ip trong Java


Trong thn ca 1 tc v, xt lnh sau : function1(...); Nu function1() c nh ngha trong class ca i tng tng ng th lnh trn s c chuyn thnh lnh : this.function1(...); trong this l tn bin tham kho n i tng hin hnh. Lnh this.function1(...); l trng hp c bit ca lnh : pobj.function1(...); trong pobj l tn bin tham kho n i tng no c nh ngha trc . By gi chng ta hy kho st chi tit v vic x l lnh pobj.function1(...); trong Java.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 8 : Gi hm, gi thng ip & a x trong Java Slide 88

X l lnh gi thng ip trong Java


Gi s bin tham kho pobj c nh ngha nh sau : MyClass pobj; Vic x l lnh gi thng ip pobj.function1(...); l kim tra xem function1 c phi l tc v private ca class MyClass khng? Nu function1 l tc v private, lnh gi thng ip ch c x l khi pobj = this. My s dch ra li gi hm tng minh n hm function1 ca class FuncClass (class cha hm function1), bt chp ti thi im chy bin this ang tham kho n i tng thuc class no khc. Nh vy, cch gii quyt ny khng to ra tnh a x cho li gi thng ip. Nu function1 c tm vc khc private, lnh gi thng ip s c dch ra on m my thc hin vic tm v lin kt ng ti hm fucntion1 nh bng a ch cc tc v ca i tng c tham kho bi bin pobj. Nh vy, cch gii quyt ny s to ra tnh a x cho li gi thng ip.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 8 : Gi hm, gi thng ip & a x trong Java Slide 89

Th d cng c ni dung chng 8


Gii thiu bi thc hnh s 9.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 8 : Gi hm, gi thng ip & a x trong Java Slide 90

MN K THUT LP TRNH
Chng 9

TNG QUT HA TRONG XY DNG HM & CLASS

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 91

T nh t ng quat hoa (Generalization)


Nh ta bit, xy dng mt ng dng theo hng i tng l xy dng cc class c i tng c dng phc v ng dng . Cng vic chnh ca xy dng 1 class l xy dng nhng method cu thnh interface ca class . C th c nhiu method trong cc class khc nhau dng cng mt gii thut (on lnh thc thi) nhng tc ng trn nhng d liu c s lng v cu trc (kiu) khc nhau. Tng t c th c nhiu class khc nhau cung cp cng mt interface ging nhau nhng tc ng trn nhng d liu c s lng v cu trc khc nhau. Th d ta cn method hon v 2 s nguyn, method hon v 2 chui, method hon v 2 dy, Ta cn class qun l danh sch n s nguyn, class qun l m chui, class qun l k dy

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 92

T nh t ng quat hoa (tt)


Hm tng qut ha (function template) cho php ta c t 1 tp cc hm m dng chung on lnh thc thi nhng tc ng trn nhng d liu thuc kiu hay class khc nhau v/hoc vi s lng khc nhau. Class tng qut ha (class template) cho php ta c t 1 tp cc class c tnh cht v giao din ging nhau nhng tc ng trn nhng d liu thuc kiu hay class khc nhau v/hoc vi s lng khc nhau. Class tng qut ha cho php sn sinh t ng cc class bnh thng, cc class bnh thng t n ch c th to ra i tng.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 93

Function template
Function template cho php ta c t 1 tp cc hm m dng chung on lnh thc thi nhng tc ng trn nhng d liu thuc kiu hay class khc nhau. Th d hm IntSwap() sau y : void IntSwap(int& a, int& b ) { int c = a; a = b; b = c; } ch cho php swap 2 s nguyn, nhng template MySwap() sau : template <class T> void MySwap( T& a, T& b ) { T c (a); a = b; b = c; } nh ngha 1 h cc hm swap 2 d liu c kiu bt k.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 94

Function template (tt)


Ta c th gi hm template function y nh gi hm bnh thng, khng c s khc bit no c : int i, j; char k; MySwap (i, j); //Ok MySwap (i, k); //Sai v khc kiu. Ta c th c t tham s r rng khi gi hm template function, th d : MySwap<int>(i,j); //to hm MySwap (int&, int&) v gi n vi (i,j)

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 95

Class template
Class template cho php ta c t 1 tp cc class m dng chung interface v cu trc d liu nhng tc ng trn nhng d liu thuc kiu hay class khc nhau. Th d class IntStack sau y :
class IntStack { int StackBuffer[100]; int cItems; public: void IntStack( void ) : cItems( 100 ) {}; void push( const int item ); int pop( void ); };

int IntStack::pop ( void ) { if ( cItems < 100) void IntStack::push( const int item ) { return StackBuffer[cItems++]; if ( cItems > 0 ) StackBuffer[--cItems] = item; else else throw "Stack overflow error."; throw "Stack underflow error."; return; } }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 96

Class template
Class IntStack c c t slide trc ch c th to ra cc i tng stack cha cc s nguyn. Nu mun stack cha cc s thc, ta phi nh ngha mi 1 class khc (gn ging vi class IntStack). Tng t, nu mun stack cha cc chui, ta li phi nh ngha mi 1 class khc (gn ging vi class IntStack).... Class template cho php ta khc phc c phin h ny.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 97

Class template
C php khai bo 1 class template : template-declaration : template < template-argument-list > declaration template-argument-list : template-argument template-argument-list , template-argument template-argument : type-argument argument-declaration type-argument : class identifier typename identifier
declaration : l c t class bnh thng nhng c nhiu v tr c dng cc tham s template.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 98

Class template (tt)


template <class T, int i> class MyStack { T StackBuffer[i]; int cItems; public: void MyStack( void ) : cItems( i ) {}; void push( const T item ); T pop( void ); }; template <class T, int i> void MyStack< T, i >::push( const T item ) { if( cItems > 0 ) StackBuffer[--cItems] = item; else throw "Stack overflow error."; return; }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 99

Class template (tt)


template <class T, int i> T MyStack< T, i >::pop( void ) { if( cItems < i ) return StackBuffer[cItems++]; else throw "Stack underflow error."; } Cho php c t cc class miu t cc stack gm nhiu d liu bt k no , th d : MyStack<int,20> intstack; // bin qun l stack c ti a 20 s nguyn. MyStack<CString,40> strstack; // bin qun l stack c ti a 40 chui. MyStack<double,100> dblstack; // bin qun l stack c ti a 100 s thc.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 100

Class template (tt)


Xem phn ph lc chng 9 bit chi tit, c th ca 2 template MFC c dng ph bin nht l CArray v CList.

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 101

nh ngha class "serializable"


c/ghi d liu ca 1 bin thuc kiu c in (int, double, char[],..) rr d v ni dung ca bin ny khng cha tham kho n cc thnh phn khc. Ngc li, vic c/ghi ni dung ca 1 i tng thng rt kh khn v i tng c th cha nhiu tham kho n cc i tng khc v cc i tng c th tham kho vng ln nhau. h tr phn no vic c/ghi ni dung ca i tng, VC++ ngh k thut "Serialization". nh ngha 1 class "serializable", ta cn thc hin 5 tc v : 1. nh ngha class nh l con ca class CObject (gin tip hay trc tip). 2. Overriding tc v "Serialize". 3. Dng macro DECLARE_SERIAL trong pht biu c t class. 4. nh ngha hm constructor khng tham s. 5. Dng macro IMPLEMENT_SERIAL trong hin thc class.
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 102

nh ngha class "serializable"


//1. tha k class CObject class MyClass : public CObject { public : //3. dng macro DECLARE_SERIAL DECLARE_SERIAL( MyClass); //4. nh ngha constructor khng tham s MyClass(); virtual void Serialize( CArchive& archive ); ... }; //5. dng macro IMPLEMENT_SERIAL IMPLEMENT_SERIAL(MyClass, CObject, 1 ) //2. Override hm Serialize void MyClass::Serialize( CArchive& ar ) { ...}
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 103

nh ngha hm Serialize
void MyClass::Serialize (CArchive& ar ) { //1. gi hm Serialize ca class cha CObject::Serialize(ar); //2. gi hm Serialize trn tng i tng con c cha vt l ba.Serialize( ar ); //3. Serialize i tng con c to ng v cc thuc tnh c in if ( ar.IsStoring() ) { // ch ghi i tng ar << pba1; ar << pba; // Store other members ar << b1; ar << b2; } else { // ch c i tng ar >> pba1; ar >> pba; // Polymorphic reconstruction of persistent object //load other members ar >> b1; ar >> b2; } }
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 104

Ghi i tng
ghi 1 i tng thuc class "serializable", ta cn thc hin 5 tc v : 1. nh ngha i tng CFile miu t file cha thng tin. 2. nh ngha i tng CArchive ch "store". 3. Gi tc v Serialize khi cn ghi i tng. 4. ng i tng CArchive 5. ng file //1. nh ngha i tng CFile CFile theFile; theFile.Open("c:\\persist.bin", CFile::modeCreate | CFile::modeWrite); //2. nh ngha i tng CArchive CArchive archive(&theFile, CArchive::store); MyClass obj; //3. Gi tc v Serialize ghi i tng obj.Serialize(archive); //4. Gi tc v Close ng i tng archive archive.Close(); //5. Gi tc v Close ng i tng file theFile.Close();
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 105

c li i tng
c li 1 i tng thuc class "serializable", ta cn thc hin 5 tc v : 1. nh ngha i tng CFile miu t file cha thng tin. 2. nh ngha i tng CArchive ch "load". 3. Gi tc v Serialize khi cn ghi i tng. 4. ng i tng CArchive 5. ng file //1. nh ngha i tng CFile CFile theFile; theFile.Open("c:\\persist.bin", CFile::modeRead); //2. nh ngha i tng CArchive CArchive archive(&theFile, CArchive::load); MyClass obj; //3. Gi tc v Serialize c li i tng obj.Serialize(archive); //4. Gi tc v Close ng i tng archive archive.Close(); //5. Gi tc v Close ng i tng file theFile.Close();
Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 106

Th d v c/ghi i tng

intB1 = 2 dblB2 = 2.345 ba intA1 = 1 dblA2 = 1.234 pab pba pba1

intA1 = 3 dblA2 = 3.456 pab

intA1 = 4 dblA2 = 4.567 pab i tng class A

i tng class B
Mn : Lp trnh hng i tng Chng 9 : Tng qut ha trong xy dng hm & class Slide 107

Khoa Cng ngh Thng tin Trng H Bch Khoa Tp.HCM

You might also like