Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 41

Lp trnh Java c bn

Cao c Thng - Trn Minh Tun cdthong@ifi.edu.vn, tmtuan@ifi.edu.vn

Bi 2. OOP trong Java


Cc phng php lp trnh Gii thiu v OOP K tha (Inheritance) a hnh (Polymorphism) Giao tip (Interface) Lp tru tng (Abstract) Gi (Packages) Java vs C++ Bi tp
2

Cc phng php lp trnh


Step-by-Step Programming
Lp trnh tng bc Machine Language, Assembly Language
1101011100111101 1010000111011101 0110111011001010 1000100100101011 ...

MOV BX, CS SUB BX, 10h JNE label1 LOOP label2 ...

Cc phng php lp trnh


Procedural Programming
Thit k top-down. Chng trnh c chia thnh cc hm, th tc. Pascal, C Hn ch: dng d liu ton cc, kh pht trin, kh m t cc thc th trong thc t
Program

Proc1

Proc3

Proc2

Cc phng php lp trnh


Object-Oriented Programming
Chng trnh bao gm cc i tng. Cc i tng tng tc vi nhau thng qua cc phng thc ca chng D m t cc thc th D pht trin, m rng chng trnh
Object A

Object B

Object C

Object D

Lp trnh hng i tng-OOP


Lp v i tng
D liu v cc thao tc trn d liu c kt hp trong cng mt i tng (object) Lp (class) nh ngha cc tnh cht ca mt tp hp cc i tng cng kiu i tng l cc th hin (instances) ca lp

c im ca OOP
Tnh ng gi (Encapsulation) Tnh k tha (Inheritance) Tnh a hnh (Polymorphism)
6

V d v OOP trong Java


Lp Time v TimeTest nm trong cng th mc Lp Time nm trong file Time.java. N cha cc nh ngha v thi gian. Lp TimeTest nm trong file TimeTest.java. N dng kim tra lp Time. Lp TimeTest cha hm main. Khi chy ch cn g: javac TimeTest.java java TimeTest Java s t ng tm v dch file Time.java
7

Lp Time
// File Time.java import java.text.DecimalFormat; public class Time { private int hour; // 0 - 23 private int minute; // 0 - 59 private int second; // 0 - 59 // Cau tu public Time() { setTime( 0, 0, 0 ); } // Ham thiet lap du lieu public void setTime( int h, int m, int s ) { hour = ( ( h >= 0 && h < 24 ) ? h : 0 ); minute = ( ( m >= 0 && m < 60 ) ? m : 0 ); second = ( ( s >= 0 && s < 60 ) ? s : 0 ); }

Lp Time
// Chuyen sang khuon dang thoi gian quoc te public String toUniversalString() { DecimalFormat twoDigits = new DecimalFormat( "00" ); return twoDigits.format( hour ) + ":" + twoDigits.format( minute ) + ":" + twoDigits.format( second ); } // Chuyen sang khuon dang thoi gian thong thuong public String toStandardString() { DecimalFormat twoDigits = new DecimalFormat( "00" ); return ( (hour == 12 || hour == 0) ? 12 : hour % 12 ) + ":" + twoDigits.format( minute ) + ":" + twoDigits.format( second ) + ( hour < 12 ? " AM" : " PM" ); } 9 } // Ket thuc lop Time

Lp Time
D liu
Mi d liu phi c mt phm vi nht nh

Phng thc
Cu t c tn trng vi tn lp Cu t khng c kiu tr v C th c nhiu cu t (overloading) Mi phng thc phi c mt phm vi nht nh

10

Lp TimeTest
// File TimeTest.java import javax.swing.JOptionPane; public class TimeTest { public static void main( String args[ ] ) { Time time = new Time(); // Tao mot doi tuong kieu Time // Lay thoi gian String output = "The initial universal time is: " + time.toUniversalString() + "\nThe initial standard time is: + time.toStandardString(); // Dat lai thoi gian time.setTime( 13, 27, 6 ); output += "\n\nUniversal time after setTime is: " + time.toUniversalString() + "\nStandard time after setTime is: " + time.toStandardString();

11

Lp TimeTest
// Dat lai thoi gian time.setTime( 99, 99, 99 ); output += "\n\nAfter attempting invalid settings: " + "\nUniversal time: " + time.toUniversalString() + "\nStandard time: " + time.toStandardString();

JOptionPane.showMessageDialog( null, output, "Testing Class Time1", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } // Ket thuc ham main } // Ket thuc lop TimeTest

12

Chy TimeTest
javac TimeTest.java java TimeTest

13

Phm vi truy cp
private
Ch truy cp c t trong lp khai bo.

protected
Truy cp c t trong lp khai bo, lp con ca ca lp khai bo v cc lp cng gi vi lp khai bo.

public
Truy cp c t mi ni.

Mc nh
Truy cp c t trong lp khai bo v cc lp cng gi vi lp khai bo.
14

T kho this
T kho this ch i tng hin thi
public class Time { private int hour; // 0 - 23 private int minute; // 0 - 59 private int second; // 0 - 59 // Viet lai ham setTime public void setTime( int hour, int minute, int second ) { this.hour = ( ( hour >= 0 && hour < 24 ) ? hour : 0 ); this.minute = ( ( minute >= 0 && minute < 60 ) ? minute : 0 ); this.second = ( ( second >= 0 && second < 60 ) ? second : 0 ); }
15

Np chng hm khi to
// Ham khoi tao khong tham so public Time() { this( 0, 0, 0 ); } // Ham khoi tao mot tham so public Time( int h ) { this( h, 0, 0 ); } // Ham khoi tao hai tham so public Time( int h, int m ) { this( h, m, 0 ); } // Ham khoi tao ba tham so public Time( int h, int m, int s ) { setTime( h, m, s ); } // Ham sao chep public Time( Time time ) { this( time.hour, time.minute, time.second ); } // Su dung cac cau tu Time t1 = new Time(); // 00:00:00 Time t2 = new Time( 2 ); // 02:00:00 Time t3 = new Time( 21, 34 ); // 21:34:00 Time t4 = new Time( 12, 25, 42 ); // 12:25:42 Time t5 = new Time( 27, 74, 99 ); // 00:00:00 Time t6 = new Time( t4 ); // 12:25:42
16

Mt s t kho
T kho final
p dng cho lp, phng thc, bin. Lp final: l lp khng th c lp con public final class NoChild {...} Bin final: l bin khng th thay i khi gn gi tr private final int MAX = 100; Phng thc final: l phng thc khng th np chng public final void NoOverride();
17

Mt s t kho
T kho static
c dng vi phng thc v bin. Bin static: l bin chung cho mi i tng ca lp, n c truy cp qua i tng ca lp hoc qua tn lp. private static char TAB = \t; Phng thc static: l phng thc ch c php truy cp ti cc bin static ca lp, n c th gi ngay c khi cha c i tng no ca lp. public static void Welcome() {...}
18

K tha (Inheritance)
K tha l vic xy dng lp mi da trn lp c sn
Lp c sn l lp cha: superclass Lp mi l lp con: subclass

V d:
Hnh vung k tha t hnh ch nht Con ch k tha t loi ng vt di nc

Ch :
Tnh k tha th hin quan h is a, khc vi quan h has a (composition) Composition: mt i tng cha cc i tng thuc lp khc. V d: t c cc bnh xe
19

Cy k tha

Animal

TerrestrialAnimal

AquaticAnimal

Cat

Horse

Chicken

Fish

Octopus

20

V d v k tha trong Java


Xy dng lp Hnh cu (Sphere) k tha t lp Hnh trn (Circle)
// File Circle.java public class Circle { protected int radius; // radius co the duoc truy cap tu Sphere public Circle( int radius ) { this.radius = radius; } public int getRadius() { return radius; }

public double getArea() { return Math.PI*radius*radius; } public double getCircum() { return 2*Math.PI*radius; }

21

V d v k tha trong Java


// File Sphere.java Sphere k tha t Circle public class Sphere extends Circle { public Sphere( int radius ) { super(radius); // Goi cau tu cua lop cha } // Ham tinh dien tich bet mat. Nap chong ham getArea() public double getArea() { return 4*Math.PI*radius*radius; } // Ham tinh the tich public double getVolume() { return (4.0d/3)*Math.PI*radius*radius*radius; } }
22

V d v k tha trong Java


// File InheritanceTest.java public class InheritanceTest { public static void main(String[] args) { Circle circle = new Circle(5); Sphere sphere = new Sphere(2); System.out.println(Radius of circle: " + circle.getRadius()); System.out.println("Radius of sphere: " + sphere.getRadius()); System.out.println("Area of circle: " + circle.getArea()); System.out.println(Area of sphere: " + sphere.getArea()); System.out.println("Volume of sphere: " + sphere.getVolume()); } }
23

T kho super
T kho super ch i tng ca lp cha
super(radius): Gi cu t ca lp cha

Question: Thm phng thc tnh din tch mt ct qua tm hnh cu ? Answer: chnh l din tch hnh trn
// Them phuong thuc nay trong lop Sphere public double getAreaCut() { return super.getArea(); } // ... // Ham main, goi Tinh dien tich mat cat System.out.println(Area cut of sphere: " + sphere.getAreaCut()); // ...
24

a hnh (Polymorphism)
V d:
class A { public void method() { System.out.println(method of A); } }
class B extends A { public void method() { System.out.println(method of B); } } class C extends A { public void method() { System.out.println(method of C); } } // Cu lnh trong main A a = new A(); a.method(); a = new B(); a.method(); C c = new C(); a = c; a.method(); // Kt qu method of method of method of mn hnh A B C
25

a hnh (Polymorphism)
Tnh a hnh th hin qua vic: cng mt phng thc nhng c ni dung thc hin khc nhau trn cc i tng khc nhau. Phng thc gi c xc nh thng qua i tng c tham chiu, khng thng qua kiu khai bo ca tham chiu. Trong Java, cc phng thc lun mang tnh a hnh.

26

Lp tru tng (abstract)


Lp tru tng ch c dng lm lp cha cho cc lp khc, n khng c cc th hin (instance). Lp tru tng nh ngha cc thuc tnh chung cho cc lp con ca n. V d c th thit k lp Hnh trn, Hnh vung... k tha t lp tru tng Hnh. Lp Hnh c thuc tnh l tn hnh, cc phng thc tnh din tch, chu vi...

27

Lp tru tng
Lp tru tng (abstract) thng c t nht mt phng thc tru tng, l phng thc khng c ci t.
public abstract void draw();

Khai bo lp tru tng


public abstract class ClassName {}

Cc lp con ca mt lp cha tru tng phi ci t tt c cc phng thc tru tng. Nu khng n cng s tr thnh lp tru tng. Khng th to cc i tng ca mt lp tru tng nhng c th khai bo bin thuc kiu lp tru tng tham chiu n cc i tng thuc lp con ca n.
28

Lp tru tng
public abstract class Shape { static final double PI = 3.14159; public abstract double getArea(); public abstract double getVolume(); } class Circle extends Shape { double radius; public double getArea() { return PI*radius*radius; } public double getVolume() { return 0; } } class Cube extends Shape { double a, b, c; public double getArea() { return 2*(a*b+b*c+c*a); } public double getVolume() { return a*b*c; } }
29

Giao tip (interface)


Giao din ch ra cc tnh cht m mt i tng c th c, trong mt ng cnh no .
Mt ngi c th khi nh l mt ngi con, trng l mt sinh vin, lp l mt ngi bn.

Giao din trong Java c th c dng th hin s a k tha nh trong C++.

30

Giao tip (interface)


Khai bo giao tip
interface Name {...}

Mt giao tip thng ch cha cc hng static v cc phng thc public cha ci t. Mt giao tip c th tha k mt giao tip khc. Mt lp c th ci t (implements) mt hay nhiu giao tip nhng ch c th tha k (extends) t mt lp.

31

Giao tip (interface)


interface Drawable { public void draw(); } public abstract class Shape {...} public class Circle extends Shape implements Drawable { ... public void draw() {...} }

32

Gi (package)
Package cho php nhm mt tp hp cc lp hoc cc giao tip c quan h vi nhau d dng qun l, bo tr, phn phi V d: To package Transport cha cc lp v phng tin i li: Car, Moto, Boat... t cc lp vo cng th mc Transport Khai bo u mi lp dng

package Transport;

33

Gi (package)
S dng package cch 1: Khai bo import
V d 1: import V d 2: import V d 3: import Point p Transport.Car; Transport.*; java.awt.Point; = new Point(1,2);

S dng package cch 2: S dng trc tip


java.awt.Point p = new java.awt.Point(1,2); javax.swing.JOptionPane.showMessageDialog(...);

Ch :
Ch c th truy cp c n cc lp public trong cc package Package java.lang.* c t ng import vo mi chng trnh
34

Java vs C++
1. Mt chng trnh Java chy chm hn so vi mt chng trnh C tng ng khong 20 ln. Java khng c kiu lit k (enum), kiu cu trc (struct) hay hp (union), n ch c class. Mi bin hay hm ca Java u nm trong mt class no . Java khng c ton t phm vi (scope) :: C ca cc kiu d liu nguyn thu (primitive) trong Java khng ph thuc vo my. c bit kiu char c c 16 bit (Unicode). Biu thc logic trong Java ch nhn gi tr boolean. Trong Java, mi bin khng thuc kiu nguyn thu u phi to ra bng t kho new. Java khng c tin x l (preprocessor)
35

2.

3. 4.

5. 6. 7.

Java vs C++
8. 9. 10. 11. 12. 13. Java khng c con tr. Java khng c hu t (destructor), n ch c phng thc finalize() c gi bi Garbage Collector. Java khng h tr i s mc nh. Java ch h tr k tha n, tt c mi lp u mc nh k tha t lp Object. Java khng c template. Java khng c t kho virtual. Tt c mi phng thc non-static u lun dng dynamic binding. Java khng c qu ti ton t (operator overloading). i s ca hm lun c x l nh i s gi tr (value argument)
36

14. 15.

Bi tp
1. Ci t li cc ni dung l thuyt hc. 2. Xy dng lp Candidate (Th sinh) gm cc thuc tnh: m, tn, ngy thng nm sinh, im thi Ton, Vn, Anh v cc phng thc cn thit. 3. Xy dng lp TestCandidate kim tra lp trn:
Nhp vo 10 th sinh In ra thng tin v cc th sinh c tng im ln hn 15

37

Bi tp
4. Xy dng lp Point c d liu l 2 to x,y v cc phng thc cn thit. Thm phng thc toString tr v mt String c dng [x, y]. 5. Xy dng lp Rect c d liu l im trn tri v di phi. Qu ti cc cu t cung cp nhiu cch khi to. Thm cc phng thc: Kim tra 1 im c nm trong hnh ch nht hay khng. Tnh giao ca 2 hnh ch nht.

38

Bi tp
6. Xy dng lp TestRect: Sinh ngu nhin 10 hnh ch nht v tnh giao i mt ca chng. 7. Xy dng lp Triangular c 3 phng thc static tnh din tch tam gic theo 3 cch khc nhau: cnh y v chiu cao, cng thc Heron, di 2 cnh v gc.

39

Bi tp
8. Xy dng lp Employee c name v phng thc tru tng l earnings(). Xy dng lp Boss k tha t Employee c cch tnh lng l mt khon c nh hng thng. Xy dng lp PieceWorker c cch tnh lng da trn s sn phm lm c, lng mt sn phm l $ 0.5. Xy dng lp CommissionWorker c cch tnh lng l mt khon c nh + tin hoa hng trn s sn phm bn c, mi sn phm c $ 0.1 hoa hng.
40

Bi tp
9. Xy dng lp tru tng Animal c d liu l name v weight, phng thc o l grow (tng trng lng). 10. Xy dng lp Chicken k tha t Animal, ci t phng thc o mi ln grow th trng lng tng 0.3 kg. Xy dng lp Sparrow k tha t Animal, mi ln tng trng lng 0.05 kg. 11. Xy dng giao din Flyable c phng thc fly(). Ci t giao din ny trong lp Sparrow.
41

You might also like