OOPJBE

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 62

Bi tp Lp trnh hng i tng vi ngn ng Java

Learn Java by Exercise 2010 FPT-Aptech, Hanoi

Bi tp lp trnh hng i tng vi ngn ng Java

MC LC
GII THIU......................................................................................................4 CLASS OBJECT...........................................................................................5
M t lp cc i tng............................................................................5 S tng tc v trao i thng tin gia cc i tng.............................9

ARRAY STRING..........................................................................................16
Khai bo v s dng mng trong qun l danh sch cc i tng........16 Mng mt chiu.....................................................................................16 Mng nhiu chiu...................................................................................20 Lm vic vi String StringBuilder -StringTokenizer............................22

ENCAPSULATION.........................................................................................23
S dng package trong vic t chc cc lp..........................................23 Kim sot vic truy xut thng tin v chc nng ca i tng.............24 Mi quan h kt hp gia cc i tng.................................................27

INHERITANCE...............................................................................................31
Khai bo v ci t kt tha..................................................................31 ng dng k tha trong vic ti s dng v pht trin chng trnh.....32 Vn Up Casting v lm vic vi cc i tng c chung ngun gc..........33

ABSTRACT - INTERFACE POLYMORPHISM..........................................34


Khai bo lp v phng thc tru tng................................................34 S dng lp tru tng v phng thc tru tng...............................37 Phn loi cc i tng thuc cc lp khc nhau vo mt nhm c nhng c tnh tng ng......................................................................................37 Khai bo v s dng interface...............................................................40 Phn loi cc i tng thuc cc lp khc nhau da trn chc nng...........40 ng dng interface to ra s giao tip gia cc i tng khng ph thuc ln nhau.....................................................................................................43 ng dng k tha v a hnh Hng ti lp trnh tng qut Gim thiu s ph thuc ln nhau gia cc lp................................................46

EXCEPTIONS.................................................................................................55
X l li vi exception Cc exception c bn.......................................55

Bi tp lp trnh hng i tng vi ngn ng Java Unchecked Exception vs Checked Exception..............................................55 Exception t nh ngha.........................................................................56

INNER CLASS ANONYMOUS CLASS......................................................57


Inner Class v ng dng........................................................................57 Anonymous Class v ng dng..............................................................59

PH LC........................................................................................................61
n tp cc cu trc lp trnh c bn trong Java.....................................61 Bi c thm v Applet v cc i tng ha....................................61 Bi c thm v Midlet v ng dng trn thit b di ng......................61 Cc nguyn tc c bn trong thit k hng i tng..........................61 Open closed..........................................................................................61 Liskov substitution.................................................................................61 Dependency inversion............................................................................61 Interface segregation.............................................................................61 Single responsibility...............................................................................61 Bi c thm v Design Pattern.............................................................61

TI LIU THAM KHO..................................................................................62

Bi tp lp trnh hng i tng vi ngn ng Java

GII THIU
H thng cc bi tp lp trnh hng i tng vi ngn ng Java l mt ti liu gm tp hp cc bi tp c xp sp, t chc theo ch nhm gip cho ngi hc d dng n luyn cc kin thc v k nng lp trnh hng i tng, trong ly Java l ngn ng th hin. Cc bi tp trong ti liu c thit k t c bn n nng cao nhm ph hp vi nhiu i tng ngi hc. Tt nhin v pha ngi hc cng cn phi c kin thc c bn v kinh nghim v lp trnh cu trc hiu v hon thnh tt cc bi tp (Nu ngi hc cm thy cc k nng lp trnh cu trc c bn cn yu c th c v lm cc bi tp trong phn phc lc trc khi bt u). Kt cu ca ti liu c phn thnh cc ch , m u mi ch s l phn tm tt l thuyt. Trong mi ch u bao gm 3 mc: V d mu: y l mt v d tiu biu cho ch , ni dung ang cp, ngi hc cn c k, hiu v lm li v d ny. Cu trc ca mt v d gm 3 phn (c th c y ty tng v d): t vn : Nu bi ton v nhng vn l thuyt lin quan s c lm r trong v d. Gii php tham kho: Phn phn tch thit k v m ngun ca v d. Kt qu v nh gi: Nhng nhn xt v nh gi v cch thc phn tch trong v d, u im, nhc im v.v - Cu hi: Phn ny lit k danh sch cc cu hi b xung, vic tr li cc cu hi ny s gip ngi hc hiu k v m rng vn hn. - Bi tp: Tp hp cc bi tp hng trng tm vo ch v ni dung ang cp. Phn phc lc bao gm cc bi tp n tp cc cu trc lp trnh c bn v mt phn c thm ni v lp trnh cc ng dng Applet. Cc yu cu v phn mm bao gm: H iu hnh Window XP\Ubuntu JDK 1.5 BlueJ 2.5.3 + Extensions -

Cui cng, ngi hc cn lu , y khng phi l ti liu ging dy l thuyt v lp trnh hng i tng, cng nh l thuyt v lp trnh vi ngn ng Java. Nhng ni dung l thuyt lin quan c th c tm thy trong mc ti liu tham kho

Bi tp lp trnh hng i tng vi ngn ng Java

CLASS OBJECT
Tm tt l thuyt: Trn thc t, khi nim lp dng phn loi mt nhm cc i tng da trn nhng c im tng ng. Trong lp trnh hng i tng, mt m t lp c coi nh l khun mu t to ra cc i tng mang nhng c im thuc tnh v hnh vi ging nhau. M t lp trong Java:
class SimpleClass { /** * M t cc trng dng lu gi tr thuc tnh * ca i tng. */ private int simpleField; /** * M t cc hm to, cc i tng s c to * v khi to cc trng thi ban u t y. */ public SimpleClass() { } /** * M t cc phng thc ca i tng. */ public int methodName() { //To do return 0; } }

To mt i tng t lp thng qua hm to:


new SimpleClass();

Khai bo mt tham chiu truy xut vo i tng c to t hm to:


SimpleClass myobject; myobject = new SimpleClass();

Truy xut vo cc thnh phn ca i tng thng qua i tng tham chiu:
myobject.methodName();

M t lp cc i tng
Phn loi cc i tng da trn c im thuc tnh v hnh vi. V d mu: t vn : Mt trung tm o to lp trnh vin yu cu mt ng dng qun l sinh vin ca trung tm, l lp trnh vin bn c yu cu lp trnh cc thc th c bn trong ng dng . Mt trong s nhng thc th l sinh vin, bn phi vit

Bi tp lp trnh hng i tng vi ngn ng Java

mt lp cc i tng sinh vin ly tn l Student, mi mt i tng sinh vin u c nhng c im sau: C thuc tnh m s sinh vin C thuc tnh gii tnh C thuc tnh h v tn C tnh nng in ra mn hnh console thng tin c bn ca sinh vin. C kh nng thay i cc thng tin thuc tnh thng qua cc phng thc get/set.

Gii php tham kho:

/** * Write a description of class Student here. * * @author (your name) * @version (a version number or a date) */ public class Student { /** * Khai bao cac truong dung de luu gia tri cua cac thuoc tinh trong lop */ private int id; private String name; private boolean gender; /** * Constructor khong co doi so */ public Student() { // To do: this.id=-1; this.name="noname"; this.gender=true; } /** * Constructor co doi so */ public Student(int id,String name,boolean gender) { this.id=id; this.name=name; this.gender=gender; }

Bi tp lp trnh hng i tng vi ngn ng Java

public int getId() { return this.id; } public void setId(int value) { this.id=value; } public String getName() { return this.name; } public void setName(String value) { this.name=value; } public boolean isMale() { return this.gender; } public void setMale(boolean value) { this.gender=value; } public void printInfo() { System.out.println("-----------------------------------"); System.out.println("| ID | Name | Male |"); System.out.printf("| %d | %s | %b |\n",this.id,this.name,this.gender); } }

S dng lp va khai bo vit mt chng trnh java vi kch bn nh sau: Khai bo 2 i tng sinh vin A v B. Khi to hai i tng sinh vin A v sinh vin B. In ra mn hnh thng tin ca sinh vin A. Thay i tn ca sinh vin B. In thng tin ca sinh vin B trc v sau khi thay i tn.

/** * Write a description of class Client here. * * @author (your name) * @version (a version number or a date) */ public class Client { public static void demoStudent() { Student studentA; Student studentB; studentA=new Student(); studentB=new Student(1,"Nguyen Van A",true); studentB.printInfo(); studentB.setName("Nguyen Van B"); studentB.printInfo(); } }

Cu hi:

Bi tp lp trnh hng i tng vi ngn ng Java

Qx1 Qx2 Qx3 Qx4 Qx5

Cc Constructor dng lm g? Cc Fields dng lm g? Cc get/set Methods dng lm g? Trnh by vng i ca mt i tng? Phn bit i tng v i tng tham chiu?

Bi tp:
Exx1 Vit mt lp cc i tng hnh ch nht ly tn l Rectangle, mi hnh ch nht u c nhng c tnh sau: + + + + + C C C C C thng s chiu di (int). thng s chiu rng (int). tnh nng tnh din tch. tnh nng tnh chu vi. tnh nng hin th trc quan hnh ch nht di dng sau:

V d hnh ch nht c chiu di 7, chiu rng 3 s c hin th nh sau ln mn hnh console: ####### ####### #######

S dng lp Rectangle va nh ngha vit mt chng trnh java vi kch bn nh sau: - Khai bo v khi to mt i tng kiu Rectangle. - Hin th hnh ch nht trn mn hnh console. - Thay i chiu di v chiu rng ca hnh ch nht. In ra mn hnh din tch v chu vi ca hnh ch nht .

Exx2 Vit mt lp cc i tng xe t ly tn l Car, mi i tng t u mang nhng c im sau: - C thng s v hng sn xut. - C thng s v mu sc. - C tnh nng tng tc. - C thng s v s km i. - C tnh nng phanh.

Bi tp lp trnh hng i tng vi ngn ng Java Exx3 Vit mt lp cc i tng m t loi d liu nhit ly tn l Temperature. Cc thng s m t cho nhit gm: - Tr s tnh theo n v C (gi tr nh nht -273 ) - C tnh nng chuyn i t C sang F. C tnh nng chuyn i t C sang Kenvin. S dng lp va nh ngha xy dng mt chng trnh Java vi kch bn nh sau: - Khi to mt i tng Temperature. - Gn gi tr C cho i tng nhit 25 . - Hin th ra mn hnh nhit F v Kenvin tng ng.

Exx4 Vit mt lp cc i tng m t mu sc ly tn l Color, mi mt mu sc c nhng c th nh sau: - C thng s th hin gam mu (gi tr t 0-255). - C thng s th hin gam mu xanh l (gi tr t 0-255). - C thng s th hin gam mu xanh dng (gi tr t 0-255). C tnh nng ly v m mu theo nh dng #xxxxxx (vi x ly gi tr t 0-F trong h c s 16), v d mu trng s cho gi tr #FFFFFF. Exx5 Vit mt lp cc i tng tng trng cho mt hnh ng no ly tn l Action, mi mt hnh ng c nhng c im sau: - C thng s tn ca hnh ng. - C thng s m t v hnh ng. C chc nng cho thc thi hnh ng.

S tng tc v trao i thng tin gia cc i tng.


V d mu: V d m phng s hot ng ca mt chic n pin. Trong v d ny ta c 2 nhm i tng c bn l n (FlashLamp) v Pin (Battery). i tng pin mang trong mnh thng tin v trng thi nng lng ca n, i tng n s s dng mt i tng pin cung cp nng lng cho hot ng chiu sng, khi ta ni c s tng tc v trao i thng tin gia hai i tng n v pin.

M t chi tit lp cc i tng pin v n nh sau:

Bi tp lp trnh hng i tng vi ngn ng Java

y, Battery c coi nh l mt thnh phn trong cu to ca FlashLamp. Code tham kho:


/** * Write a description of class Battery here. * * @author (your name) * @version (a version number or a date) */ public class Battery { /** * Fields */ private int energy; /** * Constructor for objects of class Battery */ public Battery() { // To do: energy=100; } /** * Method */ public void setEnergy(int value) { energy=value; } public int getEnergy() { return energy; } public void decreaseEnergy() { energy--; } }

/** * Write a description of class FlashLamp here. * * @author (your name) * @version (a version number or a date) */ public class FlashLamp { /** * Fields */ private boolean status; private Battery battery; /**

10

Bi tp lp trnh hng i tng vi ngn ng Java


* Constructor for objects of class FlashLamp */ public FlashLamp() { // To do: status=false; } /** * Methods */ public void setBattery(Battery battery) { this.battery=battery; } public int getBatteryInfo() { return battery.getEnergy(); } public void light() { if(status==true&&battery!=null&&battery.getEnergy()>0) { battery.decreaseEnergy(); } } public void turnOn() { if(battery!=null&&battery.getEnergy()>0) { status=true; } light(); } public void turnOff() { status=false; } }

S dng cc lp va nh ngha xy dng chng trnh java vi kch bn nh sau: - Khai bo v khi to mt i tng Battery. - Khai bo v khi to mt i tng FlashLamp - Lp pin cho n pin. - Bt v tt n pin 10 ln. - Hin th ra mn hnh mc nng lng cn li trong pin.

Cu hi: Qx1 Tm hiu s ph thuc ln nhau gia 2 i tng trong v d mu? Bi tp:
Exx1 Vit mt lp cc i tng in thoi ly tn l Mobile, mi mt chic mobile phone khi c to ra s mang nhng c im sau: + + + + + + + + C C C C C C C C mt thng s v trng thi pin tnh bng n v s nguyn (ti a 100 v) mt vng nh dng lu tin nhn ang son tho. mt vng nh dng lu tin nhn trong hp th n. mt vng nh dng lu tin nhn gi. chc nng kim tra trng thi in thoi bt hay tt. chc nng bt v tt in thoi. chc nng xc pin in thoi. chc nng son tin nhn.

11

Bi tp lp trnh hng i tng vi ngn ng Java + + + + + + C chc nng nhn tin nhn t mt chic mobile khc. C chc nng gi tin nhn ti mt chic mobile khc. C chc nng xem tin trong hp th n. C chc nng xem tin gi. Sau mi ln s dng mt chc nng, nng lng pin s gim i mt n v. Cc chc nng khng th hot ng nu in thoi cha bt.

Vit mt hm main, trong c mt chic in thoi nokia v mt chic iphone. Chic in thoi nokia son tin nhn vi ni dung bt k v gi cho chic iphone. Chic iphone kim tra inbox v hin th tin ra mn hnh console. Exx2 Vit mt ng dng nh m phng s va chm ca 2 qu bng chuyn ng u ngc chiu trn mt trc theo thi gian. Gi s 2 qu bng c bn kinh l 1cm v c khi lng bng nhau, c vn tc di chuyn nh hn 1 cm/s. Thi im ban u 2 qu bng cch nhau 100cm. Mi qu bng c chc nng cm bin thng bo ra mn hnh ta ca n v cnh bo khi xy ra s va chm.

A 0

bi nh

B 100

12

Bi tp lp trnh hng i tng vi ngn ng Java

Exx3

Vit mt lp cc qu to ly tn l Apple, vi mi qu to u c nhng c im sau y: + C khi lng. + Khi to ra qu to c khi lng mc nh l 10 v. + Cc i tng khc c th bit c khi lng ca qu to, nhng khng thay i c gi tr ny.

Vit mt lp ngi ly tn l Human, vi mi mt ngi c to ra s mang y nhng c tnh sau: + C tn. + C gii tnh. + C cn nng. + Bit ni mt chui cc t. (bng cch in ra mn hnh console chui ) + Bit n to. Mi ln n, ch n mt ming to (1v). Khi n to, khi lng ca ngi s tng ln mt v v khi lng qu to s gim i mt v. Ch n to khi khi lng ca qu to ln hn 0. + Bit kim tra khi lng ca qu to. + Cc i tng khc c th bit c tn, gii tnh v cn nng ca i tng ngi.

Vit mt ng dng nh m phng cu chuyn Adam v Eva. Adam v Eva l nhng con ngi u tin, trong vn a ng c mt cy to ra nhng qu to chn mng. Adam v Eva ly mt qu to v n, mi ngi n mt ming to cho n khi ht!

13

Bi tp lp trnh hng i tng vi ngn ng Java Exx4 Vit chng trnh th hin s tng tc gia hai i tng: cng tc v bng n.

Khi cng tc bt hoc tt, hin th ra mn hnh trng thi ca bng n.

S dng cc lp va to xy dng chng trnh java theo kch bn sau: - Khai bo v khi to mt i tng cng tc v mt i tng bng n in. - Kt ni cng tc vi bng n. - Bt tt cng tc 10 ln.

Exx5 Vit mt lp m t i tng chut ly tn l Rat, vi nhng c im c m t nh sau: - C thuc tnh tn. - C thuc tnh khi lng. - C thuc tnh tc . - C thuc tnh m t trng thi: sng, cht. - C kh nng thc hin hnh vi ku (v d cht, cht) Vit mt lp m t i tng mo ly tn l Cat vi nhng c im c m t nh sau: - C thuc tnh tn. - C thuc tnh khi lng. - C thuc tnh tc di chuyn ti a. - C kh nng thc hin hnh vi ku (v d: meo meo). - C kh nng bt chut, mi ln ch bt c mt con. Ch bt c chut khi tc ca mo ln hn tc ca chut. - C kh nng n tht chut. Ch n chut cn sng. Khi n, khi lng ca mo tng ln tng ng. Vit mt on chng trnh m phng li qu trnh mo bt chut v n chut da trn cc lp va m t trn. Exx6 Vit mt c im -

lp m t i tng iu khin t xa tivi ly tn l Remote vi nhng nh sau: C thuc tnh m. C tnh nng iu khin chuyn knh.

14

Bi tp lp trnh hng i tng vi ngn ng Java - C tnh nng iu khin m lng. Vit mt lp m t i tng tivi ly tn l TiVi vi nhng c im sau: - C thuc tnh m t knh hin thi ang pht. - C thuc tnh m t m lng hin thi - C thuc tnh m t trng thi bt, tt. - C tnh nng iu khin chuyn n knh no . - C tnh nng iu khin m lng. Vit mt chng trnh s dng Remote iu khin TiVi theo kch bn nh sau: - Khai bo v khi to mt chic Tivi. - Khai bo v khi to mt chic Remote. - Bt tivi. - Chuyn n knh 7. - Dng remote chuyn n knh 3. - Tng m lng ln 2 n v. Dng remote tt tivi.

15

Bi tp lp trnh hng i tng vi ngn ng Java

Array String
Tm tt l thuyt:

Khai bo v s dng mng trong qun l danh sch cc i tng


Mng mt chiu
V d mu: Vit mt lp IntegerManager vi nhng c im c m t nh sau: + IntegerManager c kh nng qun l v lm vic vi mt mng cc s nguyn. + C tnh nng khi to cc gi tr ban u cho mng. + C tnh nng truy xut vo mt phn t ca mng thng qua ch s. + C tnh nng sp xp mng theo th t tng dn hoc gim dn. + C tnh nng tm kim mt phn t theo gi tr v tr v v tr ca phn t trong mng.

Code tham kho:


/** * Write a description of class IntegerManager here. * * @author (your name) * @version (a version number or a date) */ public class IntegerManager { private int[] array; /** * Constructor for objects of class IntegerManager */ public IntegerManager() { // To do: } public IntegerManager(int[] array) { this.array=array; } public void setArray(int[] array) { this.array=array;

16

Bi tp lp trnh hng i tng vi ngn ng Java


} public int[] toArray() { return array; } public void initArray(int initValue) { for(int i=0;i<array.length;i++) { array[i]=initValue; } } public int getValueAt(int index) { return array[index]; } public void setValueAt(int index, int value) { array[index]=value; } public void sortArray(boolean asc) { int temp; for(int i=array.length-1;i>0;i--) { for(int j=0;j<i;j++) { if(asc) { if(array[i]>array[j]) { temp=array[i]; array[i]=array[j]; array[j]=temp; } }else{ if(array[i]<array[j]) { temp=array[i]; array[i]=array[j]; array[j]=temp; } } } } } public int find(int value) { return -1; } public int getLength() { return array.length; } }

S dng lp va nh ngha vit mt ng dng vi kch bn sau: - Hin th ln mn hnh menu vi cc chc nng nh sau: ========= Menu ========= 1. Khi to mng A gm 10 s nguyn. 2. Khi to i tng IntegerManager qun l mng A. 3. Sp xp mng A theo th t tng dn. 4. Tm kim mt phn t trong mng. #Chn:_ Cu hi: Qx1 C th b xung thm cc chc nng xa b mt phn t trong mng trong lp IntegerManager? Qx2 C th b xung thm kh nng thm mi mt phn t vo cho mng? Qx3 C th b xung thm kh nng t tng s phn t ti a ca mng ln khi ngi dng thm vo mt t khi mng y?

17

Bi tp lp trnh hng i tng vi ngn ng Java

Bi tp:
Exx1 Vit mt chng trnh m phng tr chi gieo sc sc, trong tr chi ny s c mt ngi chi, mt cc gieo sc sc v cc con sc sc. Ngi chi la chn s sc sc cn gieo v s dng cc gieo sc sc ly c gi tr mi ln chi.

Exx2 Vit chng trnh m phng mt b bi gm c 52 l bi, mi l bi c s v cht (s t 2-10,J,Q,K,A, cht t 1-4 tng ng vi ). Mt ngi chi s s dng b bi v thc hin cc thao tc tro bi v chia bi. Exx3

Class Entry gip to ra cc ghi ch cng vic hng ngy ca cc bn, mi cng vic c u tin v m t chi tit. Trng id ca Entry t tng (S dng trng count l static m s entry c to ra t contructor).

18

Bi tp lp trnh hng i tng vi ngn ng Java Class TodoList s qun l cc Entry vi cc tnh nng chnh nh hin th, sp xp, thm v xa v tm kim cc entry. Class Main th hin chng trnh nh sau: ========To do List========== 1. Thm mt entry 2. Xa mt entry 3. Hin th ghi ch theo th t u tin gim dn 4. Thot #. Chn:_

Exx4 Vit mt ng dng qun l danh sch sinh vin vi m t nh sau:

Lp Client th thin chng trnh nh sau: ====== Student Manager ======= 1. Thm mi mt sinh vin vo danh sch 2. Xa mt sinh vin ra khi danh sch 3. Tm kim sinh vin theo tn 4. Tm sinh vin theo Id 5. In ra danh sch sinh vin theo th t im gim dn 6. Thot #Chon:_

Exx5 Vit mt lp cc i tng t vng ly tn l Word vi nhng c im sau: - C thuc tnh m t t. - C thuc tnh m t ngha ca t. - C tnh nng hin th t v ngha tng ng. Vit mt lp cc i tng t in ly tn l Dictionary vi nhng c im sau: - C th lu tr c mt mng ti a 1000 t vng - C tnh nng thm vo mt t mi. - C tnh nng tm kim mt t theo t hoc ngha.

19

Bi tp lp trnh hng i tng vi ngn ng Java - C tnh nng sa t. - C tnh nng xa t. - C tnh nng hin th danh sch cc t theo th t ch ci. Vit mt chng trnh qun l t vng vi hai lp c bn trn. Exx6 Record RecordList

Mng nhiu chiu


V d mu: Vit mt chng trnh m phng mt tm bin qung co in t LED, vi 3 hng bng, mi hng 10 bng n led. oooooooooo oooooooooo oooooooooo + Vi mi chic n Led c trng thi bt v tt. + Bng qung co ci t sn mt chng trnh hin th mt mu qung co n gin, cc n trong cng mt ct s ln lt bt sng nh sau:
o*oooooooo o*oooooooo o*oooooooo 1 oo*ooooooo oo*ooooooo oo*ooooooo 2 ooo*oooooo ooo*oooooo ooo*oooooo 3 oooo*ooooo oooo*ooooo oooo*ooooo 4 ooooo*oooo ooooo*oooo ooooo*oooo 5 oooooo*ooo oooooo*ooo oooooo*ooo 6

/** * Write a description of class Led here. * * @author (your name) * @version (a version number or a date) */ public class Led { /** * Fields */ private boolean status; /**

20

Bi tp lp trnh hng i tng vi ngn ng Java


* Constructor for objects of class Led */ public Led() { // To do: status=false; } public void on() { status=true; } public void off() { status=false; } public void display() { if(status) { System.out.print("*"); }else{ System.out.print("o"); } } }

/** * Write a description of class Board here. * * @author (your name) * @version (a version number or a date) */ public class Board { /** * Fields */ private Led[][] board; private int currentColumn; /** * Constructor for objects of class Board */ public Board() { // To do: board=new Led[3][10]; for(int i=0;i<3;i++) { for(int j=0;j<10;j++) { board[i][j]=new Led(); } } } public void turnOnColumn(int col) { for(int i=0;i<3;i++) { board[i][col].on(); } } public void turnOffColumn(int col) { for(int i=0;i<3;i++) { board[i][col].off(); } } public void show() { turnOffColumn(currentColumn); currentColumn++; if(currentColumn>9) { currentColumn=0; } turnOnColumn(currentColumn);

21

Bi tp lp trnh hng i tng vi ngn ng Java


//Display for(int i=0;i<3;i++) { for(int j=0;j<10;j++) { board[i][j].display(); } System.out.println(); } } }

Cu hi: Qx1 Lp trnh li v d trn v thay i mu hin th ca h thng LED. Bi tp:


Exx1 Vit mt lp cc i tng ca bng ly tn l Cell, mi mt cell c cc c im sau: - C thuc tnh v tr. - C thuc tnh th hin trng thi c chn hay khng c chn. - C thuc tnh m t ni dung cha trong . Vit mt lp cc i tng bng ly tn l Table, mi mt i tng bng c cc c im sau: - C th cha mt mng 2 chiu cc Cell. - C th truy xut vo ni dung ca mt cell bt k da trn v tr ca cell. - C tnh nng copy ni dung ca mt cell sng mt cell khc. Vit chng trnh m phng mt bng cha danh sch sinh vin bao gm cc trng: S th t, h v tn, gii tnh, ngy sinh. Exx2 Trong lp trnh game th loi Tile-base, mi mt game u c mt tp cc bn (Map) c cu to t cc c rng v chiu cao nht nh. Cc gi l cc Tile, mi mt tile c mt gi tr v nhng c tnh dng th hin v tr trn bn , v d l gch, cy, ng i v.v Vit mt chng trnh th hin mi quan h gia Map Tile.

Lm vic vi String StringBuilder -StringTokenizer


V d mu: Cu hi: Qx1 So snh s khc nhau gia String v StringBuilder? Qx2 Khi no s dng String, khi no th dng StringBuilder? Bi tp:

22

Bi tp lp trnh hng i tng vi ngn ng Java

Encapsulation
S dng package trong vic t chc cc lp.
V d mu: Vit mt chng trnh vi cc lp c t chc nh sau: - default package cha lp Client v 2 package hardwares v animals

- Trong gi animals c cha 2 lp Mouse v Cat:

- Trong gi hardwares cha 2 lp Mouse v KeyBoard:

23

Bi tp lp trnh hng i tng vi ngn ng Java

Client s s dng cc i tng t cc lp trong 2 gi trn xy dng chng trnh theo kch bn sau c ci t trong phng thc runDemo(): - To mt con chut my tnh. - Click chut mt ln. - To mt con mo v mt con chut (animal). - Cho mo n chut.

import hardwares.Mouse; import animals.Cat; /** * Write a description of class Client here. * * @author (your name) * @version (a version number or a date) */ public class Client { /** * Constructor for objects of class Client */ public Client() { // To do: } public void runDemo() { Mouse m=new Mouse(); m.click(); Cat r=new Cat(); animals.Mouse m2=new animals.Mouse(); m2.eat(); } }

Cu hi: Qx1 Ti sao khng th import c 2 lp animals.Mouse v hardwares.Mouse vo cho lp Client? Qx2 To sao nn t cc lp vo trong t mt gi? Qx3 Cch thc hn ch truy xut vo cc lp trong cc gi khc nhau?

Kim sot vic truy xut thng tin v chc nng ca i tng.
V d mu: V d v chic ng h in t: - Vit mt lp cc i tng ng h ly tn l DigitalClock, vi nhng c im c m t nh sau: + C kh nng hin th gi, pht, giy theo nh dng: hh:mm:ss

24

Bi tp lp trnh hng i tng vi ngn ng Java

+ C kh nng thay i trng thi gi, pht, giy sau mi ln chy. - Mt i tng u cui s s dng i tng ng h v chy trong khong 1000s.

- Chuyn lp DigitalClock vo trong gi equipments v chy li ng dng trn.

S dng cc lp va nh ngha xy dng chng trnh java vi kch bn (vit trong hm main ca lp Client) nh sau: - To mt chic ng h in t. - Cho ng h chy 100 giy. - Mi giy in ra mn hnh gi ca ng h. - Thay i gi ca ng h thnh 12:30:59. - Cho ng h chy 1000 giy, mi giy hin th ra mn hnh gi ca ng h. Cu hi: Qx1 T lp Client c th truy xut trc tip vo cc trng ca DigitalClock hay khng? Ti sao? Qx2 T lp Client c th truy xut trc tip vo cc phng thc secondTick(), minuteTick(), hourTick() khng? Ti sao? Bi tp:
Exx1 Vit mt lp m t i tng kha ly tn l Lock vi nhng c im sau: C thuc tnh m t trng thi m hoc kha. C thuc tnh lu tr m b mt (dng m kha) C chc nng tra cha kha (Key) vo . C chc nng m kha (So snh t tng thch gia kha v

25

Bi tp lp trnh hng i tng vi ngn ng Java cha). Vit mt lp m t i tng cha kha ly tn l Key vi nhng c im sau: - C thuc tnh lu tr m s (c th c c bi mt i tng khc) Vit mt chng trnh to s tng tc gia cha kha v kha. Exx2 Trong cc h thng phn mm ln thng c s tham gia ca nhiu i tng ngi dng vi nhng quyn hn khc nhau trn h thng. L mt lp trnh vin, bn c yu cu pht trin mt lp m t i tng ngi dng ly tn l Account vi nhng c im nh sau: - C thuc tnh tn ng nhp. - C thuc tnh tn hin th. - C thuc tnh th hin quyn hn. - C thuc tnh th hin trng thi ng nhp thnh cng. thc hin thao tc login vo h thng ngi dng thng qua mt i tng trung gian ly tn l AccountManager vi nhng c im c m t nh sau: - C chc nng cho php mt i tng Account ng nhp vo h thng. Gi tr true tr v nu d liu ca account ph hp (trng tn ng nhp v password). - Nu ng nhp thnh cng account s c gn quyn hn v gi tr tn hin th c lu trc trong c s d liu h thng (S dng c s d liu hardcode c m t sau y. C s d liu ca ngi dng c lu tr v qun l bng mt lp ly tn l DataSource c hard code nh sau:
/** * Write a description of class DataSource here. * * @author (your name) * @version (a version number or a date) */ public class DataSource { public Data[] data=new Data[] { new Data("abc","123","Nguyen Van",1,0), new Data("abcd","1234","Nguyen Thi",2,0), new Data("abcde","12345","Pham Van",2,0), }; /** * Constructor for objects of class DataSource */ public DataSource() { // To do: } public class Data { public public public public public String username; String password; String fullname; int accountType; int status;

public Data(String username,String password,String fullname,int type,int status) { this.username=username; this.password=password; this.fullname=fullname; this.accountType=type; this.status=status; } }

26

Bi tp lp trnh hng i tng vi ngn ng Java


}

Exx3 Trong cc ng dng ph bin hin nay, cc thng s v trng thi ca ng dng thng thng c t trong mc la chn cc thit lp (Option hoc Setting hoc Preference). Cc thng s ny s c s dng trn cc module ca chng trnh cng nh trn ton ng dng. L lp trnh vin, bn c yu cu vit mt lp m t cc thit lp ly tn lp l Setting vi nhng m t nh sau: - C thng s v tn thit lp. - C thng s v gi tr ca thit lp. - C chc nng ly v gi tr ca thit lp thng qua tn ca thit lp. m phng ng dng ca lp Setting bn vit hai lp Application v Module s dng cc i tng thuc lp Setting cung cp cc thit lp ban u cho tng Module v Application. Exx4 Application Module GlobalSetting

Mi quan h kt hp gia cc i tng


V d mu: Quan h composite th hin mi lin quan v mt thnh phn gia cc i tng, trong quan h ny mt i tng c th l mt thnh phn cu thnh nn i tng khc. V d sau y s cho thy iu ny: - Vit mt ng dng m t chic xe p a hnh vi thnh phn cu to l bnh xe, tay li, khung v bn p, xch. Vi yu cu chi tit nh sau: Xe p c chc nng di chuyn th hin thng qua vic v tr c th thay i. Xe ap c chc nng thay i s t Pedal v Wheel. Vic di chuyn ca xe c thc hin bi chc nng ca bn p kt hp vi xch v mt bnh sau.

/** * Write a description of class Wheel here. * * @author (your name)

27

Bi tp lp trnh hng i tng vi ngn ng Java


* @version (a version number or a date) */ public class Wheel { private int gear; /** * Constructor for objects of class Wheel */ public Wheel() { // To do: gear=4; } public int roll(int pedalGear) { return this.gear*pedalGear; } public void setGear(int value) { gear=value; } }

/** * Write a description of class Chain here. * * @author (your name) * @version (a version number or a date) */ public class Chain { private Wheel wheel; /** * Constructor for objects of class Chain */ public Chain() { // To do: } public void setUp(Wheel w) { wheel=w; } public int transmit(int gear) { return wheel.roll(gear); } }

/** * Write a description of class Pedal here. * * @author (your name) * @version (a version number or a date) */ public class Pedal { private Chain chain; private int gear; /** * Constructor for objects of class Pedal */ public Pedal() { // To do: gear=1;

28

Bi tp lp trnh hng i tng vi ngn ng Java


} public void setUp(Chain chain) { this.chain=chain; } public int stamp() { return chain.transmit(gear); } public void setGear(int value) { gear=value; } }

/** * Write a description of class Bycicle here. * * @author (your name) * @version (a version number or a date) */ public class Bicycle { /** * Fields */ private Wheel w1; private Wheel w2; private Chain chain; private Pedal pedal; private int position; /** * Constructor for objects of class Bycicle */ public Bicycle() { // To do: w1=new Wheel(); w2=new Wheel(); chain=new Chain(); pedal=new Pedal(); pedal.setUp(chain); chain.setUp(w2); } /** * Methods */ public int move() { position+=pedal.stamp(); return position; } public void changePedalGear(int value) { pedal.setGear(value); } public void changWheelGear(int value) { w2.setGear(value); } }

Cu hi: Qx1 So snh mc kt hp gia Bicycle vi cc thnh phn khc so vi mc kt hp gia Wheel v Chain, hay Pedal v Chain?

29

Bi tp lp trnh hng i tng vi ngn ng Java

Bi tp:

30

Bi tp lp trnh hng i tng vi ngn ng Java

Inheritance
Tm tt l thuyt:

Khai bo v ci t kt tha.
Kt tha to ra mi quan h ngun gc hay th h gia cc i tng. V d mu: V d Animal, Mammal, Bird, Fish, Tiger, Lion

Cc quan h c ch ra trn s : Mammal, Bird, Fish u l Animal do vy s mang y nhng c im di truyn ca Animal (nhng c im c mc truy xut l public v protected). Felid l Mammal v cng l Animal. Tiger, Lion l Felid v cng l Mammal v Animal.

31

Bi tp lp trnh hng i tng vi ngn ng Java

Cu hi: Qx1 Qx2 Qx3 Qx4 So snh s khc nhau gia public v protected? S khc bit gia overload v overide? Constructor c c kt tha hay khng? So snh quan h k tha v quan h kt hp?

ng dng k tha trong vic ti s dng v pht trin chng trnh.


V d mu: Trong qu trnh trin khai cc lp k tha vn m lp trnh vin thng gp phi l vic ti s dng, sa i v pht trin li cc thnh phn ca cc lp th h trc mt cch hiu qu. V d sau y s minh ha cch m lp trnh vin c th tn dng v pht trin cc lp mi da trn nhng lp c bng cch can thip vo cc thnh phn ca cc lp nh: - Constructor - Thuc tnh - Phng thc V d minh ha v cc thit b tnh ton qua cc giai on pht trin:

Cho mt lp cc i tng bn tnh ly tn l Abacus: - Thuc tnh cht liu - Chc nng c th thc hin php tnh cng v tr. T lp Abacus pht trin tip lp PascalCaculator vi c tnh mi - C cc chc nng ging Abacus. - Khc bit l c ch hot ng, trong cu to gm tp hp cc bnh rng kt ni vi nhau. T lp PasscalCalculator pht trin tip lp LeibnitzCalculator - Mang nhng c im ca lp PasscalCalculator nhng c thm php ton nhn v chia. T lp LeibnitzCalculator pht trin tip lp DifferenceEngine: - C kh nng tnh ton nh my tnh Leibnitz nhng c thm kh nng tnh ton gi tr ca a thc bc n. 32

Bi tp lp trnh hng i tng vi ngn ng Java

T lp DifferenceEngine pht trin tip lp ENIACComputer: - Khng s dng li cc thuc tnh ca DifferenceEngine m ch gi li cc tnh nng, c thm kh nng thc thi mt chng trnh c lp trnh trc. Cu hi: Qx1 T kha super c dng lm g? Qx2 Khi no th s dng final? Bi tp:
Exx1 Vit mt lp cc i tng Person vi nhng c tnh sau: - C thuc tnh tn - C thuc tnh tui - C thuc tnh gii tnh T lp Person pht trin cc lp Employee, Manager, Student v Programmer vi nhng c im c m t ln lt nh sau: Lp Employee: - K tha nhng c im ca Person (Employee l Person) - C thuc tnh s tin lng c bn. - C thuc tnh h s c bn. - C tnh nng tnh lng theo cng thc, v du: tin lng=h s*lng c bn. Lp Manager: - Manager cng l Employee do vy mang nhng c im ca Employee. - C thm thuc tnh lng trch nhim. - Tnh nng tnh lng s thay i li: tin lng=(tin lng tnh nh Employee) + lng trch nhim. Lp Student: - Pht trin t lp Person. - Thm thuc tnh m sinh vin. Lp Programmer: - Pht trin t lp Student. - Thm thuc tnh s nm kinh nghim. - Cc ngn ng lp trnh thnh tho. - C kh nng vit chng trnh HelloWorld vi ngn ng la chn.

Vn Up Casting v lm vic vi cc i tng c chung ngun gc.


V d mu: Qun l mng cc Object Cu hi:

Bi tp:

33

Bi tp lp trnh hng i tng vi ngn ng Java

Abstract - Interface Polymorphism


Khai bo lp v phng thc tru tng.
V d mu: t vn : Trong lp trnh hng i tng, lp trnh vin c kh nng vit ra nhng lp c nhng chc nng v thuc tnh c xc nh tuy nhin ti thi im m t lp mt s chc nng vn cha c m t c th c ch hot ng. V d, ngi lp trnh mun vit mt tr chi, ngi c th m t lp cc i tng trong game ly tn l GameObject (trn thc t game object c th c th l cc Hero, Item, Enemy v.v..), i tng ny qua phn tch c y cc c tnh c bn nh sau: - C ta x, y. - C thuc tnh mu. - C thuc tnh im kinh nghim. - C thuc tnh sc mnh. - C kh nng di chuyn n v tr mi. - C kh nng tng tc hoc chin u vi i tng GameObject khc. Tuy nhin vic chin u c th nh th no li cha c xc nh v cn ty thuc i tng game object kia c th c pht trin thm trong tng lai (v d cc Item mi, cc qui vt mi v.v). - C kh nng va chm vi i tng khc, khi va chm vi i tng c pht hin th s phn ng vi va chm bng mt hnh ng bt k. m t c mt lp GameObject nh trn ta dng c ch abstract, mt i tng khng th l tru tng khi s dng do vy mun s dng lp GameObject ngi lp trnh cn phi to ra cc lp c th c k tha t lp GameObject. Sau ay l v d mu v cc khai bo v s dng lp GameObject.

trnh gy nhiu trong qu trnh c c ch hot ng ca lp GameObject, y ta b qua cc getter/setter gip truy xut vo cc trng ca i tng (trn thc t bn nn ci t y cc phng thc ny).

34

Bi tp lp trnh hng i tng vi ngn ng Java

/** * Write a description of class GameObject here. * * @author (your name) * @version (a version number or a date) */ public abstract class GameObject { /** * Fields */ protected double x; protected double y; protected int width; protected int height; protected int hitpoint; protected int experience; protected int strength; /** * Constructor for objects of class GameObject */ public GameObject() { // To do: } /** * Abstract methods */

35

Bi tp lp trnh hng i tng vi ngn ng Java


protected abstract int action(GameObject obj); protected abstract void response(GameObject obj); /** * Methods */ protected void moveTo(double x,double y) { this.x=x; this.y=y; } protected boolean collisionRequest(GameObject obj) { if((x>obj.x+obj.width) ||(y>obj.y+obj.height) ||(obj.x>x+width) ||(obj.y>y+height)) { return false; } response(obj); return true; } }

/** * Write a description of class Client here. * * @author (your name) * @version (a version number or a date) */ public class Client { /** * Constructor for objects of class Client */ public Client() { // To do: } public void play() { GameObject hero=new Hero(); GameObject enemy=new Enemy(); GameObject item=new Item(); hero.moveTo(2,4); hero.collisionRequest(enemy); } /** public void play(GameObject hero,GameObject enemy, GameObject item) { hero.moveTo(2,4); hero.collisionRequest(enemy); } */ }

Cu hi: Qx1 Trong v d trn ta thy lp Client b phc thuc vo cc lp Hero, Item, Enemy. Lm cch no loi b s ph thuc ? Bi tp:

36

Bi tp lp trnh hng i tng vi ngn ng Java Exx1 Vit mt ng dng trong c cc nhm i tng sau: - Vit mt lp cc i tng m phng mt ng dng ly tn l Application, lp ny c nhng c im c trng sau: C thuc tnh tn ng dng. C phng thc thc thi ngay sau khi ng dng chy. C phng thc chy ng dng. C phng thc thc thi ngay trc khi kt thc ng dng. - Lp cc i tng dng qun l vng i ca mt loi ng dng Application nu trn ly tn l ApplicationLifeCycleManager: - Pht trin cc ng dng vi nhng c im ging nh Application v d mt ng dng c tn MyApplicationA, MyApplicationB v.v - Vit mt lp Client trong s dng ApplicationLifeCycleManager load v chy cc ng dng do ngi dng pht trin da trn lp Application.

S dng lp tru tng v phng thc tru tng


Phn loi cc i tng thuc cc lp khc nhau vo mt nhm c nhng c tnh tng ng.
V d mu: Trn thc t, ty vo yu cu nghip v trong nhng bi ton c th ta mi xc nh c khi no th s dng cc lp tru tng trong lp trnh. Thng thng, u hiu nhn bit cn phi s dng lp tru tng l trong bi ton tn ti mt nhm cc lp c nhng thuc tnh v hnh vi tng t nhau, cc thao tc nghip v ca bi ton thng xuyn lm vic vi mt danh sch cc i tng hoc thao tc ln nhng i tng theo mt chu trnh xc nh. Do vy ng di gc ngi phn tch, lp tru tng ng vai tr nh mt cng c dng phn loi cc lp khc nhau vo trong mt nhm phc v cho qu trnh pht trin ng dng d dng v linh ng hn. Vit mt chng trnh s dng i tng ha (Graphic) v cc i tng hnh hc c bn (Shape)

/** * Write a description of class Shape here. * * @author (your name) * @version (a version number or a date) */ public abstract class Shape { /** * Constructor for objects of class Shape */

37

Bi tp lp trnh hng i tng vi ngn ng Java


public Shape() { // To do: } public abstract void paint(Graphic g); }

/** * Write a description of class Graphic here. * * @author (your name) * @version (a version number or a date) */ public class Graphic { /** * Constructor for objects of class Graphic */ public Graphic() { // To do: } public void drawPoint() { System.out.print("."); } public void drawLine() { System.out.print("_"); } public void drawRectangle() { System.out.print("[]"); } }

/** * Write a description of class Client here. * * @author (your name) * @version (a version number or a date) */ public class Client { /** * Constructor for objects of class Client */ public Client() { // To do: } public void drawShape(Shape shape, Graphic g) { shape.paint(g); } }

38

Bi tp lp trnh hng i tng vi ngn ng Java

/** * Write a description of class Point here. * * @author (your name) * @version (a version number or a date) */ public class Point extends Shape { /** * Constructor for objects of class Point */ public Point() { // To do: } public void paint(Graphic g) { g.drawPoint(); } }

/** * Write a description of class Line here. * * @author (your name) * @version (a version number or a date) */ public class Line extends Shape { /** * Constructor for objects of class Line */ public Line() { // To do: } public void paint(Graphic g) { g.drawLine(); } }

/** * Write a description of class Rectangle here.

39

Bi tp lp trnh hng i tng vi ngn ng Java


* * @author (your name) * @version (a version number or a date) */ public class Rectangle extends Shape { /** * Constructor for objects of class Rectangle */ public Rectangle() { // initialise instance variables } public void paint(Graphic g) { g.drawLine(); } }

Cu hi: Qx1 Hy pht trin tip thm mt s lp mi t lp Shape? Qx2 C th nh ngha mt i tng hnh hc mi da trn c im i tng c to thnh t nhng i tng Shape c bn? Bi tp:
Exx1 S dng li cc lp ca ng dng trn, pht trin cc BookLoader, Display v Page vi cu trc khc v chy li ng dng EbookReader vi nhng i tng va m rng.

Khai bo v s dng interface


Phn loi cc i tng thuc cc lp khc nhau da trn chc nng.
V d mu: Trong v d trc v SwitchButton v ElectricLamp ta c s quan h lp nh sau:

Nhc im ca ng dng ny l s lin kt gia SwitchButton v ElectricLamp kh cht. Nh vy mi switchbutton c to ra ch c th iu khin bt v tt c mt loi i tng l ElectricLamp. Tuy nhin trn thc t, c rt nhiu loi i tng cng c kh nng bt tt c v d nh qut in (ElectricFan), hay i (Radio), khi kh nng ti s dng ca SwitchButton cho cc thit b mi ny l khng th. Ngn ng Java a ra mt gii php cho vn ny l khi nim v Interface. Interface gip cho ngi phn tch thit k c th phn loi mt nhm cc i tng

40

Bi tp lp trnh hng i tng vi ngn ng Java

thuc cc lp khc nhau da trn cc hnh vi tng t nhau. Nh trong v d trn ta c ElectricLamp, ElectricFan, Radio v.v l cc nhm i tng u c kh nng bt v tt (Switchable), do vy trong thit k ta c th to ra mt Interface ly tn l Switchable vi cc tnh nng c m t trc (bt v tt). Khi i tng SwitchButton ch cn kt ni ti mt Switchable l c th iu khin c i tng ny, v do vy SwitchButton lc ny c th c s dng iu khin rt nhiu cc loi thit b Switchable khc nhau nh ElectricLamp, Radio, ElectricFan v.v Sau y l s quan h mi c s dng Inteface:

Thit k chi tit cc lp:

Phn m t interface Switchable:


/** * Write a description of interface Switchable here. * * @author (your name) * @version (a version number or a date) */ public interface Switchable { void switchOn(); void switchOff(); }

M t cho lp SwitchButton:
/** * Write a description of class SwitchButton here. * * @author (your name) * @version (a version number or a date) */ public class SwitchButton { /** * Fields

41

Bi tp lp trnh hng i tng vi ngn ng Java


*/ private Switchable switchObj; /** * Constructor for objects of class SwitchButton */ public SwitchButton() { // To do: } public void connectTo(Switchable switchObj) { this.switchObj=switchObj; } public void switchOn() { switchObj.switchOn(); } public void switchOff() { switchObj.switchOff(); } }

Phn ci t cho cc ElectricLamp, Radio, ElectricFan mt interface Switchable:


/** * Write a description of class ElectricLamp here. * * @author (your name) * @version (a version number or a date) */ public class ElectricLamp implements Switchable { /** * Fields */ private String status; /** * Constructor for objects of class ElectricLamp */ public ElectricLamp() { // To do: status="Dark!"; } public void switchOn() { status="Light!"; System.out.println(status); } public void switchOff() { status="Dark!"; System.out.println(status); } }

/** * Write a description of class Radio here. * * @author (your name) * @version (a version number or a date) */ public class Radio implements Switchable {

42

Bi tp lp trnh hng i tng vi ngn ng Java


/** * Fields */ private String status; /** * Constructor for objects of class Radio */ public Radio() { // To do: status="............"; } public void switchOn() { status="^&%&^%^$^%@!)(^#!"; System.out.println(status); } public void switchOff() { status="............"; System.out.println(status); } }

Cu hi: Qx1 So snh vi v d SwitchButton-ElectricLamp khng dng interface? Qx2 So snh gia interface v abstract?

ng dng interface to ra s giao tip gia cc i tng khng ph thuc ln nhau


V d mu:
Vit mt ng dng m phng qu trnh thao tc vi chut my tnh. cho n gin chng ta c cc i tng Mouse v Monitor, Monitor cho php hin th ta ca Mouse khi i tng ny di chuyn. Mouse l mt i tng c ni vo Monitor thng qua mt cng PS2 trn Monitor truyn d liu t Mouse sang Monitor. Tuy nhin, thit b Mouse ca bn li ch c u ni vi USB. truyn d liu t Mouse sang monitor bn phi s dng mt thit b chuyn i t USB sang PS2. Nh vy ta c th thy gia Monitor v Mouse trong tnh hung ny hon ton khng c quan h ph thuc ln nhau. Cc lp v interface c trong chng trnh m phng: - Lp Mouse, Monitor. - Interface USB, PS2. - Lp USBtoPS2 chuyn i thng tin t USB sang PS2.

43

Bi tp lp trnh hng i tng vi ngn ng Java

M ngun gi cho ng dng m phng trn:


/** * Write a description of class Mouse here. * * @author (your name) * @version (a version number or a date) */ public class Mouse { /** * Fields */ private int x; private int y; private USB port; /** * Constructor for objects of class Mouse */ public Mouse() { // To do: x=0; y=0; } /** * Methods */ public void move(int x,int y) { this.x=x; this.y=y; port.setUSBX(x); port.setUSBY(y); } public void connectTo(USB port) { this.port=port; } }

/** * Write a description of class Monitor here. * * @author (your name)

44

Bi tp lp trnh hng i tng vi ngn ng Java


* @version (a version number or a date) */ public class Monitor { private PS2 port; /** * Constructor for objects of class Monitor */ public Monitor() { // To do: } public void displayMouse() { System.out.println("x:"+port.getPS2X()+" , y:"+port.getPS2Y()); } public void connectTo(PS2 port) { this.port=port; } }

/** * Write a description of class USBtoPS2 here. * * @author (your name) * @version (a version number or a date) */ public class USBtoPS2 implements USB, PS2 { private int x; private int y; /** * Constructor for objects of class USBtoPS2 */ public USBtoPS2() { // To do: } /** * USB methods */ public void setUSBX(int value) { x=value; } public void setUSBY(int value) { y=value; } /** * PS2 methods */ public int getPS2X() { return x; } public int getPS2Y() { return y; } }

/** * Write a description of interface USB here. * * @author (your name) * @version (a version number or a date) */ public interface USB { /**

45

Bi tp lp trnh hng i tng vi ngn ng Java


* methods */ void setUSBX(int value); void setUSBY(int value); }

/** * Write a description of interfacce PS2 here. * * @author (your name) * @version (a version number or a date) */ public interface PS2 { /** * methods */ int getPS2X(); int getPS2Y(); }

Bi tp:
Exx1 Vit mt ng dng m phng mt chic my tnh vi cc lp c bn nh sau: - Lp Calculator: lp ny c kh nng thc thi mt i tng php ton hai ngi v tr v kt qu. - Mt interface c tn l Operator, y l interface i din cho tt c cc php ton hai ngi vi mt phng thc c tn l execute vi hai tham s(double) truyn vo, v kt qu tr v tng ng. - T 2 lp c bn trn pht trin cc lp php ton cng (AddOperator), tr (SubOperator), nhn (MultiOperator) v chia (DivOperator). S dng i tng Calculator thc hin cc php ton ny. Exx2 Khi lm vic vi mng chng ta thng xuyn phi thc hin thao tc tm kim, c rt nhiu cc chin thut tm kim khc nhau ty thuc vo loi d liu trong mng. Hy vit mt ng dng tm kim d liu trn mng cc s nguyn, ng dng interface to cho ng dng ca bn c kh nng thch ng vi nhng chin thut tm kim khc nhau. (Gi cc lp v interface c th c trong ng dng: Client - Search LinearSearch BinarySearch).

ng dng k tha v a hnh Hng ti lp trnh tng qut Gim thiu s ph thuc ln nhau gia cc lp.
V d mu: Sau y ta s cng nhau xy dng mt ng dng c sch in t, trong khi ta hon ton cha bit lm cch no c c mt cun sch nh dng PDF, PRC, PDB v.v nhng ta hon ton bit trc cc thao tc cn c ca vic c mt cun sch l nh th no(lt trang k tip, hin th ni dung, tr v trang trc v.v) v c trng c bn ca mt cun sch (c tiu , c ni dung c phn trang v.v). Vi c ch tru tng ta c th xy dng mt ng dng nh vy. y ta c mt i tng chnh l sch ta tm t tn l Booklet, cu trc ca Booklet bao gm c cc Page

46

Bi tp lp trnh hng i tng vi ngn ng Java

(Cu trc ca mt Page c th nh th no th ti thi im vit ng dng ta hon ton khng r). ng dng s s dng i tng Booklet ny vi nhng thao tc c n nh trc. Chng ta s cng nghin cu cch thc phn tch v trin khai ng dng tham kho sau y: - ng dng chnh l mt i tng EbookReader. - Cc module phc v cho EbookReader bao gm c BookLoader, v Display. BookLoader lm nhim v load d liu sch v phn trang sch. i tng Display c kh nng hin th cc trang sch theo nhng cch thc nht nh. C 2 lp ny u l tru tng. - Cu trc ca mt Booklet bao gm cc Page. Page c cu trc cha xc nh do vy cng l mt lp tru tng.

Chi tit cc m t lp:

47

Bi tp lp trnh hng i tng vi ngn ng Java

M ngun tham kho ca cc lp trn:


/** * Write a description of class Page here. * * @author (your name) * @version (a version number or a date) */ public abstract class Page { protected int index; /** * Constructor for objects of class Page */ public Page() { // To do: } public abstract void show(); public int getIndex() { return index; } public void setIndex(int value) { index=value; } }

/** * Write a description of class Booklet here. * * @author (your name) * @version (a version number or a date) */ public class Booklet { /** * Methods */ protected String title; protected String author; protected Page[] pages; /** * Constructor for objects of class Booklet */ public Booklet() { // To do: } public void paging(Page[] pages) { this.pages=pages; } public Page firstPage() { return pages[0]; } public Page gotoPage(int index) { return pages[index]; } public int countPage() { return pages.length;

48

Bi tp lp trnh hng i tng vi ngn ng Java


} }

/** /** * Write a description of class BookLoader here. * * @author (your name) * @version (a version number or a date) */ public abstract class BookLoader { /** * Constructor for objects of class BookLoader */ public BookLoader() { // To do: } protected Booklet loadBook(String path) { Booklet book=new Booklet(); book.paging(this.paging(path)); return book; } protected abstract Page[] paging(String path); }

/** * Write a description of class Display here. * * @author (your name) * @version (a version number or a date) */ public abstract class Display { /** * Constructor for objects of class Display */ public Display() { // To do: } public abstract void show(Page page); public abstract void zoom(Page page); }

V y l on m ca chng trnh c Ebook tru tng:


/** * Write a description of class EBookReader here. * * @author (your name) * @version (a version number or a date) */ public class EBookReader { private Booklet book; private Display display; private BookLoader loader; private int currentPage; /**

49

Bi tp lp trnh hng i tng vi ngn ng Java


* Constructor for objects of class EBookReader */ public EBookReader(BookLoader loader) { // To do: this.loader=loader; } public void initDisplay(Display display) { this.display=display; } public void openBook(String path) { book=loader.loadBook(path); } public void readFirstPage() { display.show(book.firstPage()); } public void readNextPage() { if(currentPage<book.countPage()) { currentPage++; display.show(book.gotoPage(currentPage)); } } public void readPreviousPage() { if(currentPage>0) { currentPage--; display.show(book.gotoPage(currentPage)); } } }

chng trnh hot ng ngi lp trnh ch cn cung cp cho EbookReader nhng i tng c bn bao gm BookLoader, Display cng nh mt nh dng Page cho Booklet l c th thc hin cc thao tc c ebook vi bt c loi sch v nh dng no. Sau y chng ta hard code mt nh dng ebook v cung cp cho chng trnh EbookReader:

/** * Write a description of class MyBookLoader here. * * @author (your name) * @version (a version number or a date) */ public class MyBookLoader extends BookLoader {

50

Bi tp lp trnh hng i tng vi ngn ng Java


/** * Constructor for objects of class MyBookLoader */ public MyBookLoader() { // To do: } public Page[] paging(String path) { return demoBook(); } public Page[] demoBook() { Page[] pages=new Page[3]; Page p; Line[] lines; lines=new Line[] { new Line("Hello Book"), new Line("This is my content") }; p=new MyPage(lines,1); pages[0]=p; lines=new Line[] { new Line("Table Content"), new Line("This is my table content"), new Line("This is my table content") }; p=new MyPage(lines,2); pages[1]=p; lines=new Line[] { new Line("Story"), new Line("This is my Story"), new Line("This is my Story"), }; p=new MyPage(lines,3); pages[2]=p; return pages; } }

/** * Write a description * * @author (your name) * @version (a version */ public class MyDisplay { /** * Constructor for */ public MyDisplay() { // To do: }

of class MyDisplay here. number or a date) extends Display objects of class MyDisplay

public void show(Page page) { System.out.println("--Begin Page--"+page.getIndex()); page.show(); System.out.println("--End Page--"+page.getIndex()); } public void zoom(Page page) { }

51

Bi tp lp trnh hng i tng vi ngn ng Java


}

/** Write a description of class MyPage here. * * @author (your name) * @version (a version number or a date) */ public class MyPage extends Page { protected Line[] lines; /** * Constructor for objects of class MyPage */ public MyPage(Line[] lines,int index) { // To do: this.lines=lines; this.index=index; } public void show() { for(Line li : lines) { System.out.println(li.getString()); } } }

/** * Write a description of class Line here. * * @author (your name) * @version (a version number or a date) */ public class Line { private String string; /** * Constructor for objects of class Line */ public Line(String line) { // To do: this.string=line; } public String getString() { return string; } public void setString(String value) { this.string=string; } }

S lp cui cng ca ng dng EbookReader:

52

Bi tp lp trnh hng i tng vi ngn ng Java

Cu hi: Qx1 Phn tch s ph thuc ln nhau gia cc i tng trong v d trn? Bi tp:
Exx1 Vit mt ng dng m phng mt cuc ua xe ng trng, trong c rt nhiu cc loi xe cng tham gia ng ua nh: t but, xe t ua, xe my v.v - Cuc ua bao gm c N chic xe, chy trn ng ua di 1000Km. - Kt thc cuc ua hin th danh sch cc xe theo th t v ch.

Exx2 Button AbstractAction ActionClick - ActionDoubleClick

53

Bi tp lp trnh hng i tng vi ngn ng Java Exx3 Client - Ball CollisionProcess - MyCollisionProcess Exx4 Application - Plugin PluginManager

54

Bi tp lp trnh hng i tng vi ngn ng Java

Exceptions
Tm tt l thuyt:

X l li vi exception Cc exception c bn

Unchecked Exception vs Checked Exception


V d mu:
/** * Write a description of class Client here. * * @author (your name) * @version (a version number or a date) */ public class Client { /** * Constructor for objects of class Client */ public Client() { // To do: } public void doUnchecked(String value) { // Can phai check exception, neu khong --> bug int result=canThrowUncheckedException(value); System.out.println("result="+result); } private int canThrowUncheckedException(String value) throws NumberFormatException{ return Integer.parseInt(value); } public void doChecked() { try { // Buoc phai check exception o day! Khong cach nao khac canThrowCheckedException(); System.out.println("OK"); }catch(Exception ex) { System.out.println(ex); }

55

Bi tp lp trnh hng i tng vi ngn ng Java


} private int canThrowCheckedException() throws Exception{ throw new Exception("Failure"); } }

Cu hi: Qx1 Phn bit Unchecked Exception v Checked Exception? Qx2 Nu cc tnh hung cn s dng Checked Exception v nhng tnh hung s dng Unchecked Exception? Qx3 Ti sao khng nn catch(Exception ex)?

Exception t nh ngha
V d mu: Cu hi:

Bi tp:
Exx1

To mt InvalidTriangleException bng cch k tha lp Exception. S dng exception phc v qu trnh bt li trong qu trnh khi to i tng tam gic (Triangle), nu ngi dng khi to khng ng cc cnh ca tam gic s throw ra InvalidTriangleException.

56

Bi tp lp trnh hng i tng vi ngn ng Java

Inner Class Anonymous Class


Tm tt l thuyt:

Inner Class v ng dng.


V d mu: Inner class l mt khi nim trong ngn ng java dng ch cc lp c m t bn trong mt lp khc. Inner Class thng thng c s dng to ra lp vi nhng chc nng tin ch dnh ring cho lp ngoi, iu ny cng lm tng thm kh nng bao gi trong lp trnh java. V d sau y s cho thy mt ng dng ca Inner Class: Vit mt ng dng trong c lp m t mt i tng qun l cc s nguyn, c cc phng thc in ra cc s nguyn tha mn mt quy lut no ( v d ch in ra cc s l)

Lp IntegerManager cha cc class v inteface tin ch ca ring n thc hin vic ny: - Interface Iterator: bt c i tng no c interface ny u c kh nng duyt theo cu trc v d:
Iterator data; ... while(data.hasNext()) { System.out.println(data.getNext()); }

OddNumberList: l nhng lp gip nht ra cc s nguyn tun theo quy lut, y ln lt l cc s nguyn l v chn.

/** * Write a description of interface Iterator here. * * @author (your name) * @version (a version number or a date) */ public interface Iterator { public boolean hasNext(); public int getNext(); }

/**

57

Bi tp lp trnh hng i tng vi ngn ng Java


* Write a description of class IntegerManager here. * * @author (your name) * @version (a version number or a date) */ public class IntegerManager { private int[] list; /** * Constructor for objects of class IntegerManager */ public IntegerManager(int[] list) { // To do: this.list=list; } public void printNumber(Iterator data) { while(data.hasNext()) { System.out.println(data.getNext()); } } public int[] getlist() { return list; } public class OddNumberList implements Iterator{ private int currentIndex=-1; public boolean hasNext() { currentIndex++; if (currentIndex >= getlist().length-1){ return false; } while(getlist()[currentIndex]%2==0) { currentIndex++; } if (currentIndex < getlist().length) { return true; } return false; } public int getNext() { return getlist()[currentIndex]; } } }

/** * Write a description of class Client here. * * @author (your name) * @version (a version number or a date) */ public class Client { /** * Constructor for objects of class Client */ public Client() { // To do: } public void runDemo() { int[] array=new int[] {2,3,4,5,3,7,5,4,45,34}; IntegerManager manager=new IntegerManager(array); manager.printNumber(manager.new OddNumberList());

58

Bi tp lp trnh hng i tng vi ngn ng Java


} }

Cu hi:

Bi tp:

Anonymous Class v ng dng.


V d mu: Pht trin tip v d trn tuy nhin lp IntegerManager s c lm gn li nh sau:
/** * Write a description of class IntegerManager here. * * @author (your name) * @version (a version number or a date) */ public class IntegerManager { private int[] list; /** * Constructor for objects of class IntegerManager */ public IntegerManager(int[] list) { // To do: this.list=list; } public int[] getlist() { return list; } public void printNumber(Iterator data) { while(data.hasNext()) { System.out.println(data.getNext()); } } }

chy li c lp Client cn phi ci t cc interface Iterator. Ngn ng Java a ra khi nim Anonymous Class cho php ta nh ngha mt lp ngay trong phng thc m khng cn phi c tn y ca lp nh sau:
/** * Write a description of class Client here. * * @author (your name) * @version (a version number or a date) */ /** * Write a description of class Client here. * * @author (your name)

59

Bi tp lp trnh hng i tng vi ngn ng Java


* @version (a version number or a date) */ public class Client { /** * Constructor for objects of class Client */ public Client() { // To do: } public void runDemo() { int[] array=new int[] {2,3,4,5,3,7,5,4,45,34}; final IntegerManager manager=new IntegerManager(array); Iterator oddNumberList=new Iterator() { private int currentIndex=-1; public boolean hasNext() { currentIndex++; if (currentIndex >= manager.getlist().length-1){ return false; } while(manager.getlist()[currentIndex]%2==0) { currentIndex++; } if (currentIndex < manager.getlist().length) { return true; } return false; } public int getNext() { return manager.getlist()[currentIndex]; } }; manager.printNumber(oddNumberList); } }

Inner Class v Anonymous Class c ng dng nhiu lp trnh s l s kin trong Java. Cu hi: Qx1 Pht trin tip ng dng trn in ra cc s nguyn chn? Qx2 Pht trin tip ng dng trn in ra cc s nguyn t?

60

Bi tp lp trnh hng i tng vi ngn ng Java

PH LC
n tp cc cu trc lp trnh c bn trong Java.
Bin Kiu d liu c bn Cc php ton Cu lnh r nhnh Cu lnh lp Cu lnh nhy Hm Cc kiu truyn tham s.

Bi c thm v Applet v cc i tng ha.


Vng i ca Applet

Bi c thm v Midlet v ng dng trn thit b di ng.


Vng i ca Midlet

Cc nguyn tc c bn trong thit k hng i tng.


Open closed Liskov substitution Dependency inversion Interface segregation Single responsibility

Bi c thm v Design Pattern


GoF

61

Bi tp lp trnh hng i tng vi ngn ng Java

TI LIU THAM KHO


[1] David J. Barnes & Michael Klling, Objects First with Java - A Practical Introduction using BlueJ, third edition, Monash University. [2] John Rosenberg & Michael Klling, Guidelines for Teaching Object Orientation with Java, Monash University [3] Bruce Eckel, Thinking in Java, third edition [4] GoF, Design Patterns: Elements of Reusable Object-Oriented Software [5] Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra, Head First Design Patterns [6] Java Tutorial, http://java.sun.com/docs/books/tutorial/getStarted/index.html [7] Java Tutorial, http://www.java2s.com/Tutorial/Java/CatalogJava.htm [8] Sang Shins website, www.javapassion.com/javaintro, forum

62

You might also like