You are on page 1of 56

TRNG CAO NG CNG NGH THNG TIN

NHP MN JAVA

BI 3

HNG I TNG
TRONG JAVA

GING VIN:

TRAN THU THUY

M U
T khi ra i cho n nay lp trnh hng i tng (OOP) chng t c sc mnh, vai tr ca n trong cc n tin hc. Lp trnh OOP l mt phng php mnh m v rt hiu qu xy dng nn nhng chng trnh ng dng trn my tnh. phn ny chng ta tm hiu cc vn c bn ca lp trnh hng i tng trong Java thng qua vic to cc lp, cc i tng v cc tnh cht ca chng.

PHN 1

LP
(CLASS)

KHI NIM LP (CLASS)


Lp c xem nh mt khun mu (template) ca i tng (Object). Trong lp bao gm cc thuc tnh ca i tng (properties) v cc phng thc (methods) tc ng ln cc thuc tnh. i tng c xy dng t lp nn c gi l th hin ca lp (class instance).

KHAI BO LP
class <ClassName> { <kiu d liu> <field_1>; <kiu d liu> <field_2>; constructor method_1 method_2 }
class: l t kha ca java ClassName: l tn chng ta t cho lp field_1, field_2: cc thuc tnh (cc bin, hay cc thnh phn d liu ca lp) constructor: l phng thc xy dng, khi to i tng ca lp. method_1, method_2: l cc phng thc (c th gi l hm) th hin cc thao tc x l, tc ng ln cc thuc tnh ca lp.
5

THUC TNH CA LP
Vng d liu (fields) hay thuc tnh (properties) ca lp c khai bo bn trong lp nh sau: class <ClassName> { // khai bo nhng thuc tnh ca lp <tin t> <kiu d liu> field1; // }
xc nh quyn truy xut ca cc i tng khc i vi vng d liu ca mt lp ngi ta thng dng 3 tin t sau:
public: c th truy xut t tt c cc i tng khc private: mt lp khng th truy xut vng private ca mt lp khc. protected: vng protected ca mt lp ch cho php bn thn lp v nhng lp dn xut t lp truy cp n.
6

THUC TNH CA LP
V d: public class xemay { public String nhasx; public String model; private float chiphisx; protected int thoigiansx; // so luong so cua xe may: 3, 4 protected int so; // sobanhxe l bin tnh c gi tr l 2 trong tt c // cc th hin to ra t lp xemay public static int sobanhxe = 2; }
Thuc tnh nhasx, model c th c truy cp n t tt c cc i tng khc. Thuc tnh chiphisx ch c th truy cp c t cc i tng c kiu xemay Thuc tnh thoigiansx, so c th truy cp c t cc i tng c kiu xemay v cc i tng ca cc lp con dn xut t lp xemay
7

THUC TNH CA LP
Lu : Thng thng an ton cho vng d liu ca cc i tng ngi ta trnh dng tin t public, m thng chn tin t private ngn cn quyn truy cp n vng d liu ca mt lp t cc phng thc bn ngoi lp .

PHNG THC (METHOD) CA LP


Hm hay phng thc (method) trong Java l khi lnh thc hin cc chc nng, cc hnh vi x l ca lp ln vng d liu.

Khai bo phng thc: <Tin t> <kiu tr v> <Tn phng thc> (<danh sch i s>) { <khi lnh>; } xc nh quyn truy xut ca cc i tng khc i vi cc phng thc ca lp ngi ta thng dng cc tin t sau: public, protected, private, static, final, abstract, synchronized
V d: public int Minus (int x, int y); <kiu tr v>: c th l kiu void, kiu c s hay mt lp. <Tn phng thc>: t theo qui c ging tn bin. <danh sch thng s>: c th rng
9

PHNG THC (METHOD) CA LP


public: phng thc c th truy cp c t bn ngoi lp khai bo. protected: c th truy cp c t lp khai bo v nhng lp dn xut t n. private: ch c truy cp bn trong bn thn lp khai bo. static: phng thc lp dng chung cho tt c cc th hin ca lp, c ngha l phng thc c th c thc hin k c khi khng c i tng ca lp cha phng thc . final: phng thc c tin t ny khng c khai bo chng cc lp dn xut. abstract: phng thc khng cn ci t (khng c phn source code), s c hin thc trong cc lp dn xut t lp ny. synchoronized: dng ngn cc tc ng ca cc i tng khc ln i tng ang xt trong khi ang ng b ha. Dng trong lp trnh miltithreads.

10

Phn bit phng thc dng static v khng dng static


Public class TestObject { public static void Method1(){ } public void Method2(){ } } - y ta c th gi phng thc Method1() trc tip nh sau : TestObject.Method1(); -Trong khi , mun gi phng thc 2 (khng c t kha static) ta phi thc hin nh sau: TestObject obj; // to th hin cho i tng obj.Method2; // Gi phng thc
11

THUC TNH CA LP
V d: public class xemay { public String nhasx; public String model; private float chiphisx; protected int thoigiansx; // so luong so cua xe may: 3, 4 so protected int so;
// l bin tnh c gi tr l 2 trong tt c cc th hin to ra t lp xemay

public static int sobanhxe = 2; public float tinhgiaban() { return 1.5 * chiphisx; } } Lu : Thng thng trong mt lp cc phng thc nn c khai bo dng t kha public, khc vi vng d liu thng l dng tin t private v mc ch an ton. Nhng bin nm trong mt phng thc ca lp l cc bin cc b (local) v nn c khi to sau khi khai bo.
12

KHI TO MT I TNG
Constructor tht ra l mt loi phng thc c bit ca lp.
Constructor dng gi t ng khi khi to mt th hin ca lp, c th dng khi gn nhng gi tr mc nh. Cc constructor khng c gi tr tr v, v c th c tham s hoc khng c tham s. Constructor phi c cng tn vi lp v c gi n khi chng trnh to mt i tng mi thng qua t kha new. Nu mt lp khng c constructor th Java s cung cp cho lp mt constructor mc nh (default constructor). Nhng thuc tnh, bin ca lp s c khi to bi cc gi tr mc nh (s: thng l gi tr 0, kiu lun l l gi tr false, kiu i tng gi tr null, )

Lu : thng thng an ton, d kim sot v lm ch m ngun chng trnh chng ta nn khai bo mt constructor cho lp.

13

V D V CONSTRUCTOR
public class xemay { public String nhasx; public String model; private float chiphisx; protected int thoigiansx; public xemay() { } public xemay(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx, int i_so); { nhasx = s_nhasx; model = s_model; chiphisx = f_chiphisx; thoigiansx = i_thoigiansx; so = i_so; // hoc // this.nhasx = s_nhasx; // this.model = s_model; // this.chiphisx = f_chiphisx; // this.thoigiansx = i_thoigiansx; // this.so = i_so; } }
14

BIN this
Bin this l mt bin n tn ti trong tt c cc lp trong ngn ng Java. Mt class trong Java lun tn ti mt bin this. Bin this c s dng trong khi chy v tham kho n bn thn lp cha n.
V d: <tin t> class A { <tin t> int <field_1>; <tin t> String <field_2>; // Contructor ca lp A public A(int par_1, String par_2) { this.field_1 = par_1; this.field_2 = par_2; }
<tin t> <kiu tr v> <method_1>() { // } <tin t> <kiu tr v> <method_2>() { this.method_1() // } }
15

KHAI BO CHNG PHNG THC


Vic khai bo trong mt lp nhiu phng thc c cng tn nhng khc tham s (khc kiu d liu, khc s lng tham s) gi l khai bo chng phng thc (overloading method). V d: public class xemay { // khai bo fields public float tinhgiaban() { return 2 * chiphisx; } public float tinhgiaban(float bonus) { return (2 * chiphisx + bonus); } }

16

PHN 2

C IM HNG I TNG TRONG JAVA

C IM OOP TRONG JAVA


h tr nhng nguyn tc c bn ca lp trnh hng i Tng (OOP), tt c cc ngn ng lp trnh OOP, k c Java u c ba c im chung:

Tnh ng gi (Encapsulation). Tnh a hnh (Polymorphimsm) Tnh k tha (Inheritance)

18

TNH NG GI (encapsulation)
C ch ng gi trong lp trnh hng i tng gip cho cc i tng giu i mt phn cc chi tit ci t, cng nh phn d liu cc b ca n, v ch cng b ra ngoi nhng g cn cng b trao i vi cc i tng khc. Hay chng ta c th ni i tng l mt thnh t h tr tnh ng gi. n v ng gi c bn ca ngn ng java l class. Mt class nh ngha hnh thc ca mt i tng. Mt class nh r nhng thnh phn d liu v cc on m ci t cc thao tc x l trn cc i tng d liu . Java dng class xy dng nhng i tng. Nhng i tng l nhng th hin (instances) ca mt class. Mt lp bao gm thnh phn d liu v thnh phn x l. Thnh phn d liu ca mt lp thng bao gm cc bin thnh vin v cc bin th hin ca lp. Thnh phn x l l cc thao tc trn cc thnh phn d liu, thng trong Java ngi gi l phng thc. Phng thc l mt thut ng hng i tng trong Java. Ttrong C/C++ ngi ta dng thut ng l hm hoc phng thc.
19

TNH A HNH (polymorphism)


Hm hay phng thc (method) trong Java l khi lnh thc hin cc chc nng, cc hnh vi x l ca lp ln vng d liu. class A_Object { // void method_1( ){ // } } class B_Object extends A_Object { // void method_1( ) { // } } class C { public static void main(String[] args) { // To mt mng 2 phn t kiu A A_Object arr_Object = new A_Object[2]; B_Object var_1 = new B_Object(); arr_Object[0] = var_1; A_Object var_2; for (int i=0; i<2; i++) { var_2 = arr_Object[i]; var_2.method_1(); } } }

20

TNH A HNH (polymorphysm)


Gii thch v d ca slide trc:
Vng lp for trong on chng trnh trn: Vi i = 0 th bin var_2 c kiu l B_Object, v lnh var_2.method_1() s gi thc hin phng thc method_1 ca lp B_Object. Vi i = 1 th bin var_2 c kiu l A_Object, v lnh var_2.method_1() s gi thc hin phng thc method_1 ca lp A_Object. Trong v d trn i tng var_2 c th nhn kiu A_Object hay B_Object. Hay ni cc khc, mt bin i tng kiu A_Object nh var_2 trong v d trn c th tham chiu n bt k i tng no ca bt k lp con no ca lp A_Object V d, var_2 c th tham chiu n i tng var_1, var_1 l i tng ca lp B_Object dn xut t lp A_Object). Ngc li mt bin ca lp con khng th tham chiu n bt k i tng no ca lp cha.
21

TNH K THA (inheritance)


Mt lp con (subclass) c th k tha tt c nhng vng d liu v phng thc ca mt lp khc (siu lp - superclass). Nh vy vic to mt lp mi t mt lp bit sao cho cc thnh phn (fields v methods) ca lp c cng s thnh cc thnh phn (fields v methods) ca lp mi. Khi ta gi lp mi l lp dn xut (derived class) t lp c (superclass). C th lp c cng l lp c dn xut t mt lp no y, nhng i vi lp mi va to th lp c l mt lp siu lp trc tip (immediate supperclass).

Dng t kha extends ch lp dn xut. class A extends B { // }

22

PHN 3

TNH K THA

KHAI BO CHNG PHNG THC


Tnh k tha gip cho cc lp con nhn c cc thuc tnh/phng thc public v protected ca lp cha. ng thi cng c th thay th cc phng thc ca lp cha bng cch khai bo chng.

public class xega extends xemay { public xega( ) { } public xega(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx); { this.nhasx = s_nhasx; this.model = s_model; this.chiphisx = f_chiphisx; this.thoigiansx = i_thoigiansx; this.so = 0; } public float tinhgiaban( ) { return 2.5 * chiphisx; } }
24

BA TIN T TRONG K THA


Java cung cp 3 tin t h tr tnh k tha ca lp:

public: lp c th truy cp t cc gi, chng trnh khc.


final: Lp hng, lp khng th to dn xut (khng th c con), hay i khi ngi ta gi l lp v sinh. abstract: Lp tru tng (khng c khai bo cc thnh phn v cc phng thc trong lp tru tng). Lp dn xut s khai bo, ci t c th cc thuc tnh, phng thc ca lp tru tng.

25

LP NI (INNER CLASS)
Lp ni l lp c khai bo bn trong 1 lp khc. Lp ni th hin tnh ng gi cao v c th truy xut trc tip bin ca lp cha. V d: public class A { // int <field_1> static class B { // int <field_2> public B(int par_1) { field_2 = par_1 + field_1; } } }

Trong v d trn th chng trnh dch s to ra hai lp vi hai files khc nhau: A.class v B.class
26

LP V SINH
Lp m ta khng th c lp dn xut t n (khng c lp con) gi l lp v sinh, hay ni cch khc khng th k tha c t mt lp v sinh. Lp v sinh dng hn ch, ngn nga cc lp khc dn xut t n. khai bo mt lp l lp v sinh, chng ta dng t kha final

class.

Tt c cc phng thc ca lp v sinh u v sinh, nhng cc thuc tnh ca lp v sinh th c th khng v sinh. V d: public final class A { public final int x; private int y; public final void method_1() { // } public final void method_2() { // } }

27

LP TRU TNG
Lp tru tng l lp khng c khai bo cc thuc tnh thnh phn v cc phng thc. Cc lp dn xut ca n s khai bo thuc tnh, ci t c th cc phng thc ca lp tru tng.

V d: abstract class A { abstract void method_1(); } public class B extends A { public void method_1( ) { // ci t chi tit cho phng thc method_1 // trong lp con B. // } }

public class C extends A { public void method_1() { // ci t chi tit cho //method_1 trong lp con C. // } }

Lu : Cc phng thc c khai bo dng cc tin t private v static th khng c khai bo l tru tng abstract. Tin t private th khng th truy xut t cc lp dn xut, cn tin t static th ch dng ring cho lp khai bo m thi.
28

PHNG THC FINALIZE


Trong java khng c kiu d liu con tr nh trong C, ngi lp trnh khng cn phi qu bn tm v vic cp pht v gii phng vng nh, s c mt trnh dn dp h thng m trch vic ny. Trnh dn dp h thng s dn dp vng nh cp pht cho cc i tng trc khi hy mt i tng. Phng thc finalize() l mt phng thc c bit c ci t sn cho cc lp. Trnh dn dp h thng s gi phng thc ny trc khi hy mt i tng. V vy vic ci t mt s thao tc gii phng, dn dp vng nh cp pht cho cc i tng d liu trong phng thc finalize() s gip cho ngi lp trnh ch ng kim sot tt qu trnh hy i tng thay v giao cho trnh dn dp h thng t ng. ng thi vic ci t trong phng thc finalize() s gip cho b nh c gii phng tt hn, gp phn ci tin tc chng trnh.

V d: class A { // Khai bo cc thuc tnh public void method_1( ) { // } protected void finalize() { // C th dng ng tt c cc kt ni // vo c s d liu trc khi hy i tng. // } }

29

PHN 4

GI V GIAO DIN

30

GI (package)

Vic ng gi cc lp li to thnh mt th vin dng chung gi l package. Mt package c th cha mt hay nhiu lp bn trong, ng thi cng c th cha mt package khc bn trong. khai bo mt lp thuc mt gi no y ta phi dng t kha package. Dng khai bo gi phi l dng u tin trong tp tin khai bo lp. Cc tp tin khai bo lp trong cng mt gi phi c lu trong cng mt th mc. Lu : Vic khai bo import tt c cc lp trong gi s lm tn b nh. Thng thng chng ta ch nn import nhng lp cn dng trong chng trnh. V d: package phuongtiengiaothong; class xemay { // . } class xega extends xemay { // }

Khi mun s dng lp xemay vo chng trnh ta s khai bo nh sau; import phuongtiengiaothong.xemay;
31

GIAO DIN (interface)


Khi nim interface:
Nh chng ta bit mt lp trong java ch c mt siu lp trc tip hay mt cha duy nht (n tha k). trnh i tnh phc tp ca a tha k (multi-inheritance) trong lp trnh hng i tng, Java thay th bng giao tip (interface). Mt lp c th c nhiu giao tip (interface) vi cc lp khc tha hng thm vng d liu v phng thc ca cc giao tip ny.

Khai bo interface:
Interface c khai bo nh mt lp. Nhng cc thuc tnh ca interface l cc hng (khai bo dng t kha final) v cc phng thc ca giao tip l tru tng (mc d khng c t kha abstract). Trong cc lp c ci t cc interface ta phi tin hnh ci t c th cc phng thc ny.

32

GIAO DIN (interface)


V d: public interface sanpham { static final String nhasx = Honda VN; static final String dienthoai = 08-8123456; public int gia(String s_model); } // khai bo 1 lp c ci t interface public class xemay implements sanpham { // ci t li phng thc ca giao din trong lp public int gia(String s_model) { if (s_model.equals(2005)) return (2000); else return (1500); } public String chobietnhasx() { return (nhasx); } }
33

GIAO DIN (interface)


C mt vn khc vi lp l mt giao din (interface) khng ch c mt giao din cha trc tip m c th dn xut cng lc nhiu giao din khc (hay c nhiu giao din cha). Khi n s k tha tt c cc gi tr hng v cc phng thc ca cc giao din cha. Cc giao din cha c lit k thnh chui v cch nhau bi du phy ,.

Khai bo nh sau: public interface InterfaceName extends interface1, interface2, interface3 { // }

34

PHN 4

MT S V D

V D 1: V TNH A HNH (lp Shape)


Sau y l minh ha tnh a hnh (polymorphism) trong phn cp k tha thng qua vic m t v x l mt s thao tc c bn trn cc i tng hnh hc.

// nh ngha lp tru tng c s tn Shape trong tp tin Shape.java public abstract class Shape extends Object { // tr v din tch ca mt i tng hnh hc shape public double area( ) { return 0.0; } // tr v th tch ca mt i tng hnh hc shape public double volume( ) { return 0.0; } // Phng thc tru tng cn phi c hin thc // trong nhng lp con tr v tn i tng // hnh hc shape thch hp public abstract String getName(); } // end class Shape

36

V D 1: V TNH A HNH (lp Point)


nh ngha lp Point trong tp tin Point.java. Lp Point tha k lp Shape

public class Point extends Shape { protected int x, y; // Ta x, y ca 1 im public Point( ){ setPoint( 0, 0 ); } // constructor khng tham s. public Point(int xCoordinate, int yCoordinate) // constructor c tham s. { setPoint( xCoordinate, yCoordinate ); } public void setPoint( int xCoordinate, int yCoordinate )// gn ta x, y cho 1 im { x = xCoordinate; y = yCoordinate; } public int getX( ) { return x; } // ly ta x ca 1 im public int getY( ) { return y; } // ly ta y ca 1 im public String toString() // Th hin ta ca 1 im di dng chui { return "[" + x + ", " + y + "]"; } public String getName() // tr v tn ca i tng shape { return "Point"; } } // end class Point
37

GII THCH (Shape v Point)


nh ngha mt lp cha Shape l mt lp tru tng dn xut t Object v c 3 phng thc khai bo dng tin t public. Phng thc getName() khai bo tru tng v vy n phi c hin thc trong cc lp con. Phng thc area() (tnh din tch) v phng thc volume() (tnh th tch) c nh ngha v tr v 0.0. Nhng phng thc ny s c khai bo chng trong cc lp con thc hin chc nng tnh din tch cng nh th tch ph hp vi nhng i tng hnh hc tng ng (ng trn, hnh tr, ) Lp Point: dn xut t lp Shape. Mt im th c din tch v th tch l 0.0, v vy nhng phng thc area() v volume() ca lp cha khng cn khai bo chng trong lp Point, chng c tha k nh nh ngha trong lp tru tng Shape. Nhng phng thc khc nh setPoint() gn ta x, y cho mt im, cn phng thc getX(), getY() tr v ta x, y ca mt im. Phng thc getName() l hin thc cho phng thc tru tng trong lp cha, nu nh phng thc getName() m khng c nh ngha th lp Point l mt lp tru tng.
38

V D 1: V TNH A HNH (lp Circle)


nh ngha lp Circle trong tp tin Circle.java. Lp Circle tha k lp Point public class Circle extends Point // Dn xut t lpPoint { protected double radius; public Circle() // constructor khng tham s { // ngm gi n constructor ca lp cha setRadius( 0 ); } public Circle( double circleRadius, int xCoordinate, int yCoordinate ) { // constructor c tham s // gi constructorca lp cha super( xCoordinate, yCoordinate ); setRadius( circleRadius ); } public void setRadius( double circleRadius ) // Gn bn knh ca ng trn { radius = ( circleRadius >= 0 ? circleRadius:0 ); } //cn tip slide sau
39

VD1: V TNH A HNH (lp Circle - tt)


public double getRadius() // Ly bn knh ca ng trn { return radius; } public double area() // Tnh din tch ng trn Circle { return Math.PI * radius * radius; } public String toString() // Biu din ng trn bng mt chui { return "Center = " + super.toString() + "; Radius = " + radius; } public String getName() // tr v tn ca shape { return "Circle"; } } // end class Circle

40

GII THCH (lp Circle)


Lp Circle dn xut t lp Point, mt ng trn c th tch l 0.0, v vy phng thc volume() ca lp cha khng khai bo chng, n s tha k t lp Point, m lp Point th tha k t lp Shape. Din tch ng trn khc vi mt im, v vy phng thc tnh din tch area() c khai bo chng. Phng thc getName() hin thc phng thc tru tng khai bo trong lp cha, nu phng thc getName() khng khai bo trong lp Circle th n s k tha t lp Point. Phng thc setRadius dng gn mt bn knh (radius) mi cho mt i tng ng trn, cn phng thc getRadius tr v bn knh ca mt i tng ng trn.
41

V D 1: V TNH A HNH (lp Cylinder)


nh ngha lp Cylinder trong tp tin Cylinder.java. Lp Cylinder tha k t lp Circle

public class Cylinder extends Circle { protected double height; // chiu cao ca Cylinder public Cylinder() // constructor khng c tham s { // ngm gi n constructor ca lp cha setHeight( 0 ); } // constructor c tham s public Cylinder( double cylinderHeight, double cylinderRadius, int xCoordinate,int yCoordinate ) { // Gi constructor ca lp cha super( cylinderRadius, xCoordinate, yCoordinate ); setHeight( cylinderHeight ); } //cn tip slide sau
42

VD1: V TNH A HNH (lp Cylinder-tt)


public void setHeight( double cylinderHeight ) { // Gn chiu cao cho Cylinder height = ( cylinderHeight >= 0 ? cylinderHeight:0 ); } public double getHeight() // Ly chiu cao ca Cylinder { return height; } public double area() // Tnh din tch xung quanh ca Cylinder { return 2 * super.area() + 2 * Math.PI * radius *height; } public double volume() // Tnh th tch ca Cylinder { return super.area() * height;} public String toString() // Biu din Cylinder bng mt chui { return super.toString() + "; Height = " + height; } public String getName() // tr v tn ca shape { return "Cylinder"; } } // end class Cylinder

43

GII THCH (lp Cylinder)


Lp Cylinder dn xut t lp Circle. Mt Cylinder (hnh tr) c din tch v th tch khc vi mt Circle (hnh trn), v vy c hai phng thc area() v volume() cn phi khai bo chng. Phng thc getName() l hin thc phng thc tru tng trong lp cha, nu phng thc getName() khng khai bo trong lp Cylinder th n s k tha t lp Circle. Phng thc setHeight dng gn chiu cao mi cho mt i tng hnh tr. Cn phng thc getHeight tr v chiu cao ca mt i tng hnh tr.

44

V D 1: V TNH A HNH (test)


File Test.java dng kim tra tnh k tha ca Point, Circle, Cylinder vi lp tru tng Shape.

import java.text.DecimalFormat; public class Test { // Kim tra tnh k tha ca cc i tng hnh hc public static void main( String args[] ) { // To ra cc i tng hnhhc Point point = new Point( 7, 11 ); Circle circle = new Circle( 3.5, 22, 8 ); Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 ); // To mt mng cc i tng hnh hc Shape arrayOfShapes[] = new Shape[ 3 ]; // arrayOfShapes[ 0 ] l mt i tng Point arrayOfShapes[ 0 ] = point; // arrayOfShapes[ 1 ] l mt i tng Circle arrayOfShapes[ 1 ] = circle; // arrayOfShapes[ 2 ] l mt i tng cylinder arrayOfShapes[ 2 ] = cylinder; //cn tip slide sau

45

V D 1: V TNH A HNH (test - tt)


// Ly tn v biu din ca mi i tng hnh hc String output = point.getName() + ": " + point.toString() + "\n" + circle.getName() + ": " + circle.toString() + "\n" + cylinder.getName() + ": " + cylinder.toString(); DecimalFormat precision2 = new DecimalFormat("0.00" ); // duyt mng arrayOfShapes ly tn, din tch, th tch // ca mi i tng hnh hc trong mng. for ( int i = 0; i < arrayOfShapes.length; i++ ) { output += "\n\n" + arrayOfShapes[ i ].getName() +": " + arrayOfShapes[ i].toString() +"\n Area = " + precision2.format( arrayOfShapes[ i ].area() ) +"\nVolume = " + precision2.format( arrayOfShapes[ i ].volume() ); } System.out.println(output); System.exit( 0 );
} } // end class Test
46

VD2: V TNH A HNH (interface Shape)


Tng t v d 1 nhng trong v d 2 chng ta dng interface nh ngha cho Shape thay v mt lp tru tng. V vy tt c cc phng thc tron interface Shape phi c hin thc trong lp Point l lp ci t trc tip interface Shape. // nh ngha mt interface Shape trong tp tin shape.java public interface Shape { // Tnh din tch public abstract double area(); // Tnh th tch public abstract double volume(); // tr v tn ca shape public abstract String getName(); }

47

VD2: V TNH A HNH (lp Point)


Lp Point ci t, hin thc interface tn shape. nh ngha lp Point trong tp tin Point.java

public class Point extends Object implements Shape { protected int x, y; // Ta x, y ca 1 im public Point() // constructor khng tham s. { setPoint( 0, 0 ); } public Point(int xCoordinate, int yCoordinate) // constructor c tham s. { setPoint( xCoordinate, yCoordinate ); } public void setPoint( int xCoordinate, int yCoordinate ) // gn ta x, y cho 1 im { x = xCoordinate; y = yCoordinate; } //cn tip slide sau
48

VD2: V TNH A HNH (lp Point - tt)


// ly ta x ca 1 im public int getX() { return x; } public int getY() // ly ta y ca 1 im { return y; } public String toString() // Th hin ta ca 1 im di dng chui { return "[" + x + ", " + y + "]"; } public double area() // Tnh din tch { return 0.0; } public double volume() // Tnh th tch { return 0.0; } public String getName() // tr v tn ca i tng shape { return "Point"; } } // end class Point

49

VD2: V TNH A HNH (lp Circle)


Lp Circle l lp con ca lp Point, v ci t/hin thc gin tip interface tn shape. nh ngha lp Circle trong tp tin Circle.java

public class Circle extends Point { // Dn xut t lpPoint protected double radius; public Circle() // constructor khng tham s { // ngm gi n constructor ca lp cha setRadius( 0 ); } // constructor c tham s public Circle( double circleRadius, int xCoordinate, int yCoordinate ) { // gi constructorca lp cha super( xCoordinate, yCoordinate ); setRadius( circleRadius ); } //cn tip slide sau
50

VD2: V TNH A HNH (lp Circle - tt)


public void setRadius( double circleRadius ) // Gn bn knh ca ng trn { radius = ( circleRadius >= 0 ? circleRadius:0 ); } public double getRadius() // Ly bn knh ca ng trn { return radius; } public double area() // Tnh din tch ng trn Circle { return Math.PI * radius * radius; } public String toString() // Biu din ng trn bng mt chui { return "Center = " + super.toString() + "; Radius = " + radius; } // tr v tn ca shape public String getName() { return "Circle"; } } // end class Circle
51

VD2: V TNH A HNH (lp Cylinder)


nh ngha lp hnh tr Cylinder trong tp tin Cylinder.java.

public class Cylinder extends Circle { protected double height; // chiu cao ca Cylinder public Cylinder() // constructor khng c tham s { // ngm gi n constructor ca lp cha setHeight( 0 ); } // constructor c tham s public Cylinder( double cylinderHeight, double cylinderRadius, int xCoordinate,int yCoordinate ) { // Gi constructor ca lp cha super( cylinderRadius, xCoordinate,yCoordinate ); setHeight( cylinderHeight ); } public void setHeight( double cylinderHeight ) // Gn chiu cao cho Cylinder { height = ( cylinderHeight >= 0 ? cylinderHeight:0 ); } //cn tip slide sau
52

VD2: V TNH A HNH (lp Cylinder-tt)


public double getHeight() // Ly chiu cao ca Cylinder { return height; } public double area() // Tnh din tch xung quanh ca Cylinder { return 2 * super.area() + 2 * Math.PI * radius * height; } public double volume() // Tnh th tch ca Cylinder { return super.area() * height; } public String toString() // Biu din Cylinder bng mt chui { return super.toString() + "; Height = " + height; } // tr v tn ca shape public String getName() { return "Cylinder"; } } // end class Cylinder
53

VD2: V TNH A HNH (test)


Tp tin Test.java kim tra tnh k tha ca Point, Circle, Cylinder vi interface Shape.

import java.text.DecimalFormat; public class Test // Kim tra tnh k tha ca cc i tng hnh hc { public static void main( String args[] ) { // To ra cc i tng hnhhc Point point = new Point( 7, 11 ); Circle circle = new Circle( 3.5, 22, 8 ); Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 ); Shape arrayOfShapes[] = new Shape[ 3 ]; // To mt mng cc i tng hnh hc // arrayOfShapes[ 0 ] l mt i tng Point arrayOfShapes[ 0 ] = point; arrayOfShapes[ 1 ] = circle; // arrayOfShapes[ 1 ] l mt i tng Circle arrayOfShapes[ 2 ] = cylinder; // arrayOfShapes[ 2 ] l mt i tng cylinder // Ly tn v biu din ca mi i tng hnh hc String output = point.getName() + ": " + point.toString() + "\n" + circle.getName() + ": " + circle.toString() + "\n + cylinder.getName() + ": " + cylinder.toString(); DecimalFormat precision2 = new DecimalFormat("0.00" ); //cn tip slide sau
54

VD2: V TNH A HNH (test - tt)


// duyt mng arrayOfShapes ly tn, din tch, th tch // ca mi i tng hnh hc trong mng. for ( int i = 0; i < arrayOfShapes.length; i++ ) { output += "\n\n" + arrayOfShapes[ i ].getName() + ": " + arrayOfShapes[ i].toString() + "\n Area = " + precision2.format( arrayOfShapes[ i ].area() ) + "\nVolume = " + precision2.format( arrayOfShapes[ i ].volume() ); } System.out.println(output); System.exit( 0 );

} } // end class Test

55

HT

CHNG 3 v 4

You might also like