You are on page 1of 104

CHNG VI.

TNG QUAN V LP TRNH HNG I TNG


I. II. III. IV. V. VI. Khi nim Cc nguyn l c bn Khai bo lp v i tng S dng i tng Kt tp v k tha a hnh

I. Khi nim
i tng trong th gii thc
V d mt chic t

Lin quan n chic t: Cc thng tin v chic xe nh: mu sc, tc , s km i c,... Cc hot ng ca chic xe nh: tng tc khi nhn ga, gim tc khi p phanh,...

i tng trong th gii thc

Mt i tng trong th gii thc l mt thc th c th m thng thng chng ta c th s, nhn thy hay cm nhn c. Tt c c trng thi (state) v hnh ng (behaviour)
3

i tng phn mm
Cc i tng phn mm c th c dng biu din cc i tng th gii thc. Cng c trng thi v hnh ng

Trng

thi: thuc tnh (attribute; property) Hnh ng: phng thc (method)
4

1. i tng

i tng phn mm

i tng phn mm Xe p

i tng (object) l mt thc th phn mm bao bc cc thuc tnh v cc phng thc lin quan.

Thuc tnh c xc nh bi gi tr c th gi l thuc tnh th hin. Mt i tng c th c gi l mt th hin.

2. M hnh ha i tng
House Reality Tree Tom Car

Object-oriented modeling

Model House drives lives in Tom


6

Car Tree

3. Tng tc gia cc i tng


S giao tip gia cc i tng trong th gii thc:

Cc i tng v s tng tc gia chng trong lp trnh


Cc i tng giao tip vi nhau bng cch gi thng ip (message)

Gi hm vs. Gi thng ip
Gi hm (Call function)
Ch ra chnh xc on m no s c thc hin. Ch c duy nht mt s thc thi ca mt hm vi mt tn no . Khng c hai hm trng tn

Gi thng ip
Yu cu mt dch v t mt i tng v i tng s quyt nh cn phi lm g Cc i tng khc nhau s c cc cch thc thi cc thng ip theo cch khc nhau.

Thng ip vs. Phng thc


Thng ip
c gi t i tng ny n i tng kia, khng bao gm on m thc s s c thc thi

Phng thc
Th tc/hm trong ngn ng lp trnh cu trc L s thc thi dch v c yu cu bi thng ip L on m s c thc thi p ng thng ip c gi n cho i tng

Hng cu trc vs. Hng T?


Hng cu trc: data structures + algorithms = Program Hng i tng: objects + messages = program

10

4. Lp i tng

Trong th gii thc c nhiu i tng cng loi. Chng trnh hng i tng c nhiu i tng cng loi chia s nhng c im chung. V d

11

Lp
Mt lp l mt thit k (blueprint) hay mu (prototype) cho cc i tng cng kiu
V d: lp XeDap l mt thit k chung cho nhiu i tng xe p c to ra

Lp nh ngha cc thuc tnh v cc phng thc chung cho tt c cc i tng ca cng mt loi no Mt i tng l mt th hin c th ca mt lp.
V d: mi i tng xe p l mt th hin ca lp XeDap

Mi th hin c th c nhng thuc tnh th hin khc nhau


V d: mt xe p c th ang bnh rng th 5 trong khi mt xe khc c th l ang bnh rng th 3.

12

V d Lp Xe p
Khai bo cho lp XeDap i tng ca lp XeDap

13

Lp vs. i tng
Lp l m hnh khi nim, m t cc thc th Lp nh mt bn mu, nh ngha cc thuc tnh v phng thc chung ca cc i tng Mt lp l s tru tng ha ca mt tp cc i tng i tng l s vt tht, l thc th thc s i tng l mt th hin (instance) ca mt lp, d liu ca cc i tng khc nhau l khc nhau Mi i tng c mt lp xc nh d liu v hnh vi ca n.

14

II. Cc nguyn l c bn
Hng i tng

M-un ha

Tru tng ha

Phn cp

ng gi

15

1. Tru tng ha (Abstraction)


L qu trnh loi b i cc thng tin c th v gi li nhng thng tin chung. Tp trung vo cc c im c bn ca thc th, cc c im phn bit n vi cc loi thc th khc. Ph thuc vo gc nhn
Quan trng trong ng cnh ny nhng li khng c ngha nhiu trong ng cnh khc.

16

16

V d: Tru tng ha

Sinh vin

Gio vin

Kha hc din ra lc 9:00 sng cc ngy th 3, 5, 7

Kha hc (v d i s)
17

a. Phn loi tru tng ha


Tru tng ha iu khin: S dng cc chng trnh con (subprogram) v cc lung iu khin (control flow)
V d: a := (1 + 2) * 5
Nu khng c tru tng ha iu khin, LTV phi ch ra tt c cc thanh ghi, cc bc tnh ton mc nh phn

Tru tng ha d liu: X l d liu theo cc cch khc nhau


V d: Kiu d liu
S tch bit r rng gia cc thuc tnh tru tng ca kiu d liu v cc chi tit thc thi c th ca kiu d liu .

b. Tru tng ha d liu


i tng trong thc t phc tp

Cn n gin ha, b qua nhng chi tit khng cn thit Ch trch rt ly nhng thng tin lin quan, thng tin quan tm, quan trng vi bi ton

19

20

Tru tng ha d liu


Tru tng ha l mt cch nhn hoc cch biu din mt thc th ch bao gm cc thuc tnh lin quan trong mt ng cnh no . Tp hp cc th hin ca cc thc th thnh cc nhm c chung cc thuc tnh gi l Lp (class).

21

unclassified "things"

22

organisms, mammals, humans

23

organisms, mammals, dangerous mammals

24

2. ng gi (Encapsulation)
Che giu, n i chi tit thc hin bn trong
Cung cp cho th gii bn ngoi mt giao din Ngi dng khng ph thuc vo vic sa i s thc thi bn trong

Tng cng tnh mm do

25

ng gi
Mt i tng l mt thc th c ng gi, cung cp tp cc dch v nht nh Mt i tng c ng gi c th c xem nh mt hp en cc cng vic bn trong l n so vi client D thay i thit k/m
ngun bn trong nhng giao din bn ngoi khng b thay i theo

Input

Dont know how it works, but it works!

Output
26

ng gi i tng
Client Methods

Mt i tng c hai khung nhn:


Bn trong: Chi tit v cc thuc tnh v cc phng thc ca lp tng ng vi i tng Bn ngoi: Cc dch v m mt i tng c th cung cp v cch i tng tng tc vi phn cn li ca h thng Data

27

Minh ha vic ng gi
Giao din thng ip (phng thc) ca i tng Gio s Clark c yu cu dy 4 lp thng ti
Gio s Clark

Name: J Clark Employee ID: 567138 HireDate: 07/25/1991

SetMaxLoad(4)

Status: Tenured Discipline: Finance MaxLoad:4

TakeSabbatica l()
28

ng gi
D liu/thuc tnh v hnh vi/phng thc c ng gi trong mt lp Encapsulation

BankAccount - owner: String - balance: double + debit(double): boolean +credit(double)

29

c. M un ha (Modularity)
Chia nh h thng phc tp thnh nhng thnh phn nh c th qun l c. Cho php ngi dng hiu bit v h thng.

30

30

V d: M un ha
V d, chia nh mt h thng phc tp thnh cc m un nh hn.

H thng qun l xut nhp sch


H thng k ton

H thng qun l siu th sch

H thng qun l nhn vin


31

d. Phn cp (Hierarchy)
Gia tng mc tru tng ha
Ti sn

Ti khon ngn hng

Chng khon

Bt ng sn

Gim mc tru tng ha

Tit kim

Tin gi

C phiu

Cc loi giy t c gi tr

Cc phn t cng cp trong s phn cp th c cng mc tru tng ha

32

32

III. KHAI BO

1. Khai bo lp 2. Khai bo thnh vin lp 3. Khai bo i tng

Thng tin cn thit nh ngha mt lp


Tn (Name)
Tn lp nn m t i tng trong th gii tht Tn lp nn l s t, ngn gn, v xc nh r rng cho s tru tng ha.

Danh sch cc phn t d liu


Cc phn d liu cn ly ra khi tru tng ha
BankAccount - owner: String - balance: double + debit(double): boolean +credit(double)

Danh sch cc thng ip


Cc thng ip m i tng c th nhn c

34

1. Khai bo lp
Lp ng gi cc thnh vin (member)
Cc trng/thuc tnh (field/attribute) Cc hm/phng thc (function/method):
String owner; double balance;

Attribute declarations

Method declarations

35

Khai bo lp
Trong Java, cc lp c nhm li thnh package Package bao gm mt tp hp cc lp c quan h logic vi nhau, Package c coi nh cc th mc, l ni t chc cc lp, gip xc nh v tr d dng v s dng cc lp mt cch ph hp. V d: Mt s package c sn ca Java: java.lang, javax.swing, java.io Package c th do ta t t
Cch nhau bng du . Quy c s dng k t thng t tn package V d: package oop.k52.cnpm;
36

C php khai bo
package tenpackage; chi_dinh_truy_cap class TenLop {
// Than lop

chi_dinh_truy_cap:
public: Lp c th c truy cp t bt c u, k c bn ngoi package cha lp . private: Lp ch c th c truy cp trong phm vi lp Khng c (mc nh): Lp c th c truy cp t bn trong package cha lp .

37

V d - Khai bo lp
package oop.k52.cnpm; public class Student {

38

2. Khai bo thnh vin ca lp


Cc thnh vin ca lp cng c ch nh truy cp tng t nh lp.

public

Khng c

private

Cng lp Cng gi Khc gi


39

Khai bo thnh vin ca lp (2)


Cc thnh vin ca lp cng c ch nh truy cp tng t nh lp.

public

Khng c Yes Yes No

private

Cng lp Cng gi Khc gi

Yes Yes Yes

Yes No No
40

a. Thuc tnh
Cc thuc tnh phi c khai bo bn trong lp Mi i tng c bn sao cc thuc tnh ca ring n
Gi tr ca mt thuc tnh thuc cc i tng khc nhau l khc nhau.

Student name address studentID dateOfBirth


Nguyn Hong Nam
H Ni Nguyn Thu Hng Hi Phng
41

Thuc tnh
Thuc tnh c th c khi to khi khai bo Cc gi tr mc nh s c s dng nu khng c khi to.

BankAccount - owner: String - balance: double


+ debit(double): boolean +credit(double)
42

b. Phng thc
Xc nh cch mt i tng p ng li thng ip Phng thc xc nh cc hot ng ca lp Bt k phng thc no cng phi thuc v mt lp no

boolean

43

* Ch k phng thc (signature)


Mi phng thc phi c mt ch k ring gm:
Tn phng thc S lng cc tham s v kiu ca chng

44

* Kiu d liu tr v
Khi phng thc tr v t nht mt gi tr hoc mt i tng th bt buc phi c cu lnh return tr iu khin cho i tng gi phng thc. Nu phng thc khng tr v 1 gi tr no (void) v c th khng cn cu lnh return C th c nhiu lnh return trong mt phng thc; cu lnh u tin m chng trnh gp s c thc thi.

45

c. Thnh vin bt bin


Mt thuc tnh/phng thc khng th thay i gi tr/ni dung trong qu trnh s dng. C php khai bo: chi_dinh_truy_cap final kieu_du_lieu TEN_HANG = gia_tri;

V d:
final double PI = 3.141592653589793; public final int VAL_THREE = 39; private final int[] A = { 1, 2, 3, 4, 5, 6 };

d. Che giu d liu (Data hiding)


D liu c che giu bn trong lp v ch c truy cp v thay i cc phng thc bn ngoi
Trnh thay i tri php hoc lm sai lch d liu

47

48

C ch che giu d liu


Cc thnh vin d liu Ch c th truy cp t cc phng thc bn trong lp Ch nh truy cp l private bo v d liu

Cc i tng khc mun truy nhp vo d liu ring t ny phi thng qua cc phng thc public

BankAccount - owner: String - balance: double + debit(double): boolea +credit(double) 49

C ch che giu d liu (2)


V d liu l ring t Thng thng mt lp cung cp cc dch v truy cp v chnh sa cc gi tr ca d liu Accessor (getter): Tr v gi tr hin ti ca mt thuc tnh (d liu) Mutator (setter): Thay i gi tr ca mt thuc tnh Thng l getX v setX, trong x l tn thuc tnh

50

51

4. Khai bo i tng
D liu cn c khi to trc khi s dng Li khi to l mt trong cc li ph bin Vi kiu d liu n gin, s dng ton t = Vi i tng Cn dng phng thc khi to
Student name address studentID dateOfBirth
Nguyn Hong Nam Nguyn Thu Hng
52

Hi Phng

Thnh vin i tng (Instance member)


Thuc tnh/phng thc ch c truy cp thng qua i tng Mi i tng c 1 bn sao ring ca 1 thuc tnh i tng Gi tr ca 1 thuc tnh i tng ca cc i tng khc nhau l khc nhau.

vs. Thnh vin lp (Class member)


Thuc tnh/phng thc c th c truy cp thng qua lp Cc i tng c chung 1 bn sao ca 1 thuc tnh lp Gi tr ca 1 thuc tnh lp ca cc i tngkhc nhau l ging nhau.
53

Khi to v hy b i tng
Mi i tng khi tn ti v hot ng c h iu hnh cp pht mt vng nh lu li cc gi tr ca d liu thnh phn Khi to ra i tng HH s gn gi tr khi to cho cc d liu thnh phn Phi c thc hin t ng trc khi ngi lp trnh c th tc ng ln i tng S dng hm/phng thc khi to Ngc li khi kt thc cn phi gii phng hp l tt c cc b nh cp pht cho i tng. Java: JVM C++: Hm hy (destructor)
54

a. Phng thc khi to


L phng thc c bit c gi t ng khi to ra i tng Mc ch chnh: Khi to cho cc thuc tnh ca i tng
Student name address studentID dateOfBirth
Nguyn Hong Nam
H Ni Nguyn Thu Hng Hi Phng
55

Phng thc khi to (2)


Mi lp phi cha t nht mt constructor C nhim v to ra mt th hin mi ca lp Tn ca constructor trng vi tn ca lp Constructor khng c kiu d liu tr v V d: public BankAccount(String o, double b){ owner = o; balance = b; }

56

Phng thc khi to (3)


Phng thc khi to c th dng cc ch nh truy cp public private Khng c (mc nh phm vi package) Mt phng thc khi to khng th dng cc t kha abstract, static, final, native, synchronized. Cc phng thc khi to khng c xem nh l thnh vin ca lp.

57

Phng thc khi to (4)


Phng khi to mc nh (default constructor) L phng thc khi to KHNG THAM S public BankAccount(){ owner = noname; balance = 100000; } Nu ta khng vit mt phng khi to no trong lp
JVM mi cung cp phng thc khi to mc nh Phng thc khi to mc nh do JVM cung cp c ch nh truy cp ging nh lp ca n

Mt lp nn c phng thc khi to mc nh


58

b. Khi to i tng
i tng c to ra, th hin ha (instantiate) t mt mu chung (lp). Cc i tng phi c khai bo kiu ca i tng trc khi s dng: Kiu ca i tng l lp cc i tng V d:
String strName; BankAccount acc;

59

Khi to i tng (2)


i tng cn c khi to trc khi s dng S dng ton t = gn S dng t kha new vi constructor khi to i tng:

Mt i tng c khi to mc nh l null i tng c thao tc thng qua tham chiu (~ con tr). V d:
BankAccount acc1; acc1 = new BankAccount();

T kha new dng to ra mt i tng mi T ng gi phng thc khi to tng ng

60

Khi to i tng (3)


C th kt hp va khai bo vo khi to i tng
C php:

Ten_lop ten_doi_tuong = new Pthuc_khoi_tao(ds_tham_so);

V d:
BankAccount account = new BankAccount();

61

Khi to i tng (4)


Phng thc khi to khng c gi tr tr v, nhng khi s dng vi t kha new tr v mt tham chiu n i tng mi

62

Khi to i tng (5)


Mng cc i tng c khai bo ging nh mng d liu c bn Mng cc i tng c khi to mc nh vi gi tr null. V d: Employee emp1 = new Employee(123456); Employee emp2; emp2 = emp1; Department dept[] = new Department[100]; Test[] t = {new Test(1),new Test(2)};

63

V d 1
class BankAccount{ private String owner; private double balance; } public class Test{ public static void main(String args[]){ BankAccount acc1 = new BankAccount();
} }

Phng thc khi to mc nh do Java cung cp.


64

V d 2
public class BackAccount{ private String owner; private double balance; public BankAccount(){ owner = noname; } } public class Test{ public static void main(String args[]){ BankAccount acc1 = new BankAccount(); } }

Phng thc khi to mc nh t vit.


65

V d 3
public class BankAccount { private String owner; private double balance; public BankAccount(String name){ setOwner(name); } public void setOwner(String o){ owner = o; } } public class Test{ public static void main(String args[]){ //Error BankAccount account1 = new BankAccount(); BankAccount account2 = new BankAccount(Hoang); } } 66

IV. S dng i tng


i tng cung cp cc hot ng phc tp hn cc kiu d liu nguyn thy i tng p ng li cc thng ip Ton t "." c s dng gi mt thng ip n mt i tng

67

S dng i tng (2)


gi thnh vin (d liu hoc thuc tnh) ca lp hoc i tng, s dng ton t . Nu gi phng thc ngay trong lp th ton t . khng cn thit.

68

public class BankAccount{ private String owner; private double balance; public BankAccount(String name) {

setOwner(name);
} public void setOwner(String o){ owner = o; } public String getOwner(){ return owner; } } public class Test{ public static void main(String args[]){ BankAccount acc1 = new BankAccount(); BankAccount acc2 = new BankAccount(Hong); acc1.setOwner(Hoa); System.out.println(acc1.getOwner() + + acc2.getOwner()); }
69

1. T tham chiu this


Cho php truy cp vo i tng hin ti ca lp. Quan trng khi hm/phng thc thnh phn thao tc trn hai hay nhiu i tng. Xa i s nhp nhng gia mt bin cc b, tham s vi thnh phn d liu ca lp Khng dng bn trong cc khi lnh static

70

public class BankAccount{ private String owner; private double balance; public BankAccount() { } public void setOwner(String owner){

this.owner = owner;
} public String getOwner(){ return owner; } } public class Test{ public static void main(String args[]){ BankAccount acc1 = new BankAccount(); BankAccount acc2 = new BankAccount();

acc1.setOwner(Hoa); acc2.setOwner(Hong);
System.out.println(acc1.getOwner() + + acc2.getOwner()); }
71

2. Truyn tham s cho phng thc


C th s dng bt k kiu d liu no cho tham s ca phng thc hoc constructor
Kiu d liu nguyn thy Kiu d liu tham chiu: mng v i tng

V d
public Polygon polygonFrom(Point[] corners) { // method body goes here }

72

Truyn tham s cho phng thc (2)


Java truyn mi tham s cho phng thc di dng gi tr (pass-by-value): Truyn gi tr/bn sao ca tham s thc Vi tham s c kiu d liu tham tr (kiu d liu nguyn thy): Truyn gi tr/bn sao ca cc bin nguyn thy truyn vo Vi tham s c kiu d liu tham chiu (mng v i tng): Truyn gi tr/bn sao ca tham chiu gc truyn vo Thay i tham s hnh thc khng lm nh hng n tham s thc
73

a. Vi kiu d liu tham tr


Cc gi tr nguyn thy khng th thay i khi truyn nh mt tham s

Phng thc swap ny c hot ng ng khng?


public void swap(int var1, int var2) { int temp = var1; var1 = var2; var2 = temp; }
74

b. Vi kiu d liu tham chiu


Thc ra l truyn bn sao ca tham chiu gc, ch khng phi truyn tham chiu gc hoc truyn i tng (pass the references by value, not the original reference or the object)

Sau khi truyn cho phng thc, i tng c t nht 2 tham chiu
75

V d
public class Point { private double x; private double y; public Point() { } public Point(double x, double y) { this.x = x; this.y = y; } public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } public void printPoint() { System.out.println("X: " + x + " Y: " + y); } }

76

public class Test {


public static void tricky(Point arg1, Point arg2) {

arg1.setX(100); arg1.setY(100); Point temp = arg1; arg1 = arg2; arg2 = temp; } public static void main(String [] args) { Point pnt1 = new Point(0,0); Point pnt2 = new Point(0,0); pnt1.printPoint(); pnt2.printPoint(); System.out.println(); tricky(pnt1, pnt2); pnt1.printPoint(); pnt2.printPoint();

}
}

77

Ch c cc tham chiu ca phng thc c tro i, ch khng phi cc tham chiu gc

78

c. Truyn s lng tham s ty


c gi l varargs. C php: ten_phuong_thuc(Kieu_dl ten_tham_so)
V d 1:
Khai bo:

public PrintStream printf(String format, Object... args)


S dng System.out.printf ("%s: %d, %s\n", name, idnum, address); System.out.printf ("%s: %d, %s, %s, %s\n", name, idnum, address, phone, email);
79

V. KT TP V K THA

1. 2. 3. 4.

Ti s dng m ngun Kt tp K tha So snh

1. Ti s dng m ngun (Reusability)


Ti s dng m ngun: S dng li cc m ngun vit
Lp trnh cu trc: Ti s dng hm/chng trnh con OOP: Khi m hnh th gii thc, tn ti nhiu loi i tng c cc thuc tnh v hnh vi tng t hoc lin quan n nhau Lm th no ti s dng lp vit?

81

1. Ti s dng m ngun (2)


Cc cch s dng li lp c:
Sao chp lp c thnh 1 lp khc D tha v kh qun l khi c thay i To ra lp mi l s tp hp hoc s dng cc i tng ca lp c c Kt tp (Aggregation) To ra lp mi trn c s pht trin t lp c c K tha (Inheritance)

82

im ca ti s dng m ngun

Gim thiu cng sc, chi ph Nng cao cht lng phn mm Nng cao kh nng m hnh ha th gii thc Nng cao kh nng bo tr (maintainability)

83

2. Kt tp

V d:
im
T gic gm 4 im Kt tp

Kt tp
Quan h cha/c (hasa) hoc l mt phn (is-a-part-of)

84

2.1. Bn cht ca kt tp
Kt tp (aggregation)
To ra cc i tng ca cc lp c sn trong lp mi thnh vin ca lp mi. Kt tp ti s dng thng qua i tng

Lp mi
Lp ton th (Aggregate/Whole),

Lp c
Lp thnh phn (Part).

85

2.1. Bn cht ca kt tp (2)

Lp ton th cha i tng ca lp thnh phn


L mt phn (is-a-part of) ca lp ton th Ti s dng cc thnh phn d liu v cc hnh vi ca lp thnh phn thng qua i tng thnh phn

86

2.2. Biu din kt tp bng UML


S dng hnh thoi ti u ca lp ton th S dng bi s quan h (multiplicity) ti 2 u 1 s nguyn dng: 1, 2,... Di s (0..1, 2..4) *: Bt k s no Khng c: Mc nh l 1 1 TuGiac Tn vai tr (rolename) Nu khng c th mc nh l tn ca lp (b vit hoa ch ci u)

Diem

87

V d

88

2.3. Minh ha trn Java


class Diem { private int x, y; public Diem(){} public Diem(int x, int y) { this.x = x; this.y = y; } public void setX(int x){ this.x = x; } public int getX() { return x; } public void hienThiDiem(){ System.out.print("(" + x + ", " + y + ")"); } }

89

class TuGiac { 1 4 TuGiac Diem private Diem d1, d2; private Diem d3, d4; public TuGiac(Diem p1, Diem p2, Diem p3, Diem p4){ d1 = p1; d2 = p2; d3 = p3; d4 = p4; } public TuGiac(){ d1 = new Diem(); d2 = new Diem(0,1); d3 = new Diem (1,1); d4 = new Diem (1,0); } public void printTuGiac(){ d1.printDiem(); d2.printDiem(); d3.printDiem(); d4.printDiem(); System.out.println(); } } 90

public class Test { public static void main(String arg[]) { Diem d1 = new Diem(2,3); Diem d2 = new Diem(4,1); Diem d3 = new Diem (5,1); Diem d4 = new Diem (8,4); TuGiac tg1 = new TuGiac(d1, d2, d3, d4); TuGiac tg2 = new TuGiac(); tg1.printTuGiac(); tg2.printTuGiac(); } }
91

2.4. Th t khi to trong kt tp


Khi mt i tng c to mi, cc thuc tnh ca i tng u phi c khi to v gn nhng gi tr tng ng. Cc i tng thnh phn c khi to trc Cc phng thc khi to ca cc lp ca cc i tng thnh phn c thc hin trc

92

3. K tha
V d:
im T gic gm 4 im Kt tp T gic Hnh vung K tha
93

Bn cht k tha

K tha (Inherit, Derive)


To lp mi bng cch pht trin lp c. Lp mi k tha nhng g c trong lp c v pht trin nhng tnh nng mi.

Lp c:
Lp cha (parent, superclass), lp c s (base class)

Lp mi:
Lp con (child, subclass), lp dn xut (derived class)

94

Bn cht k tha (2)


Lp con
L mt loi (is-a-kind-of) ca lp cha Ti s dng bng cch k tha cc thnh phn d liu v cc hnh vi ca lp cha Chi tit ha cho ph hp vi mc ch s dng mi
Extension: Thm cc thuc tnh/hnh vi mi Redefinition (Method Overriding): Chnh sa li cc hnh vi k tha t lp cha

95

Cy phn cp k tha (Inheritance hierarchy)

Cu trc phn cp hnh cy, biu din mi quan h k tha gia cc lp. B Dn xut trc tip
B dn xut trc tip t A

Dn xut gin tip


C dn xut gin tip t A
Car

Vehicle

Moto

SportCar

Compact

SportMoto
96

V d
Cc lp con c cng lp cha gi l anh ch em (siblings) Thnh vin c k tha s c k tha xung di trong cy phn cp Lp con k tha tt c cc lp t tin ca n Trong gi java.lang, nu mt lp khng c nh ngha l lp con ca mt lp khc th mc nh n l lp con trc tip ca lp Object. Lp Object l lp gc trn cng ca tt c cc cy phn cp k tha

Hnh

Hnh hai chiu

Hnh ba chiu

Hnh trn

T gic

Tam gic

Hnh cu

Hnh lng tr

T din
97

4. So snh kt tp v k tha
Ging nhau
u l k thut trong OOP ti s dng m ngun

Khc nhau?

98

Phn bit k tha v kt tp


Kt tp ti s dng thng qua i tng.
To ra lp mi l tp hp cc i tng ca cc lp c Lp ton th c th s dng d liu v hnh vi thng qua cc i tng thnh phn

K tha ti s dng thng qua lp.


To lp mi bng cch pht trin lp c Lp con k tha d liu v hnh vi ca lp cha

Quan h l mt phn (is a part of) V d: Bnh xe l mt phn ca t

Quan h l mt loi (is a kind of) V d: t l mt loi phng tin vn ti

99

VI. A HNH

1. Khi nim 2. Up casting v down casting 3. Lin kt ng

1. Khi nim
Cc lp khc nhau c th p ng danh sch cc thng ip ging nhau, v vy cung cp cc dch v ging nhau Cch thc p ng thng ip, thc hin dch v khc nhau Chng c th tro i cho nhau m khng nh hng n i tng gi thng ip a hnh

101

Khi nim
Polymorphism: Nhiu hnh thc thc hin, nhiu kiu tn ti a hnh trong lp trnh
a hnh phng thc:
Phng thc trng tn, phn bit bi danh sch tham s.

a hnh i tng
Nhn nhn i tng theo nhiu kiu khc nhau Cc i tng khc nhau cng p ng chung danh sch cc thng ip c gii ngha thng ip theo cch thc khc nhau.

102

2. Up casting v Down casting


Nhn nhn i tng theo nhiu kiu khc nhau:
Up casting: nhn nhn i tng thuc lp dn xut nh l mt i tng thuc lp c s T ng p kiu Down casting: nhn nhn mt i tng thuc lp c s nh mt i tng thuc lp dn xut LTV phi p kiu

public class Test3 { public static void main(String args[]){ Person p1 = new Employee(); Person p2 = new Manager(); Employee e = (Employee) p1; Manager m = (Manager) p2;

103

3. Lin kt ng
Cc i tng khc nhau gii ngha cc thng ip theo cc cch thc khc nhau
Li gi phng thc c quyt nh khi thc hin (run-time)
Late binding/Run-time binding La chn phin bn ca phng thc ph hp vi i tng c gi.

V d: Person p1 = new Person(); Person p2 = new Employee(); Person p3 = new Manager(); // ... System.out.println(p1.getDetail()); System.out.println(p2.getDetail()); System.out.println(p3.getDetail());
104

You might also like