22/01/2013

Mục đích & yêu cầu Mục đích & yêu cầu

Chương 6. Chương 6.

(cid:132)(cid:132) GiớiGiới thiệu

thiệu mộtmột thành

thành phầnphần cơcơ bảnbản:: Gói,Gói, giaogiao

diệndiện..

GIAO DiỆN, GÓI GIAO DiỆN, GÓI

(cid:132)(cid:132) GiảiGiải thích

thích được

được Gói,Gói, giaogiao diệndiện làlà gì?gì?

(cid:132)(cid:132) SửSử dụng

dụng cáccác thành

chương thành phầnphần này,này, viếtviết mộtmột chương

trình đơnđơn giảngiản.. trình

11

22

1. Giao diện (Interface) 1. Giao diện (Interface)

1. Giao diện (Interface) 1. Giao diện (Interface)

(cid:132)(cid:132) GiaoGiao diệndiện làlà mộtmột giảigiải pháppháp củacủa JavaJava nhằmnhằm

(cid:132)(cid:132) VíVí dụdụ:: GiaoGiao diệndiện tínhtính toántoán trêntrên cáccác hìnhhình..

(cid:132)(cid:132) MộtMột giaogiao diệndiện làlà mộtmột tậptập cáccác hằng,

thừa.. thay thếthế chocho đađa kếkế thừa thay thếthế chocho đađa kếkế thừa thay thay thừa

interface TinhToanHinh interface TinhToanHinh {{ hằng, cáccác không (prototype) màmà không 1415;; double PIPI == 33..1415

ii

i t interface diện> interface têtê f f i t {{

khai báobáo cáccác nộinội dung khai

dung củacủa giaogiao diệndiện

}}

33

44

1

public final public final double dientich();; double double dientich() chuvi();; double chuvi() double chuvi();; double chuvi() double phương thức mẫumẫu phương thức (prototype) tiết.. cócó càicài đặtđặt chichi tiết (cid:132)(cid:132) KhaiKhai báobáo giaogiao diệndiện:: diệdiệ }}

22/01/2013

1. Giao diện (Interface) 1. Giao diện (Interface)

1. Giao diện (Interface) 1. Giao diện (Interface)

(cid:132)(cid:132) VíVí dụdụ:: lớplớp hìnhhình chữchữ nhậtnhật càicài đặtđặt giaogiao diệndiện

(cid:132)(cid:132) CóCó thểthể coicoi giaogiao diệndiện nhưnhư mộtmột lớplớp trừutrừu thức đềuđều trừutrừu thức đềuđều trừutrừu

phương thức phương thức TinhToanHinh TinhToanHinh TinhToanHinh TinhToanHinh tượng tượng đặcđặc biệtbiệt:: cáccác phương tượng tượng đặcđặc biệtbiệt:: cáccác phương tượng.. tượng

class HinhChuNhat implements TinhToanHinh{

private double dai, rong;

(cid:132)(cid:132) KhaiKhai báobáo lớplớp càicài đặtđặt giaogiao diệndiện:: phảiphải thức củacủa giaogiao

phương thức

public HinhChuNhat(double d, double r)

{dai = d; rong = r;} {dai = d; rong = r;}

public double chuvi(){ return dai+rong;}

implements diện>

tường tường minhminh cáccác phương diệndiện.. CúCú pháppháp:: (cid:132)(cid:132) CúCú pháppháp:: class class lớp> implements {{

public double dientich(){return dai*rong;}

}

KhaiKhai báobáo cáccác thành CàiCài đặtđặt chichi tiết

thành phầnphần củacủa lớplớp phương thức

tiết cáccác phương

thức củacủa cáccác giaogiao diệndiện

}}

55

66

1. Giao diện (Interface) 1. Giao diện (Interface)

1. Giao diện (Interface) 1. Giao diện (Interface)

(cid:132)(cid:132) LưuLưu ýý:: mộtmột lớplớp càicài đặtđặt mộtmột giaogiao diệndiện thìthì

t Ti hT Hi hT i l phảiphải càicài đặtđặt tấttất cảcả cáccác phương phương thức thức màmà

(cid:132) Lớp hình tròn cài đặt giao diện TinhToanHinh class HinhTron implements TinhToanHinh Hi h l {

giaogiao diệndiện khai khai báobáo (có(có thểthể làlà càicài đặtđặt

rỗng).. rỗng)

private double bankinh; public HinhTron(double d) { bankinh = d;} public

chuvi()

double

{

return

(cid:132)(cid:132) MộtMột giaogiao diệndiện cócó thểthể mởmở rộngrộng (kế(kế thừa)

thừa) từtừ

2*bankinh*PI;} 2*bankinh*PI;}

mộtmột giaogiao diệndiện khác khác (cid:206)(cid:206) giaogiao diệndiện mớimới sẽsẽ cócó

đầyđầy đủđủ cáccác thành thành phầnphần được được khai trong khai báobáo trong

public double dientich() { return bankinh*bankinh*PI; }

77

88

2

giaogiao diệndiện cơcơ sởsở.. }

22/01/2013

1. Giao diện (Interface) 1. Giao diện (Interface)

1. Giao diện (Interface) 1. Giao diện (Interface)

(cid:132)(cid:132) PhạmPhạm vivi củacủa cáccác thành

(cid:132) Ví dụ: giao diện GiaoDienHinh mở rộng từ

thành phầnphần trong trong giaogiao diệndiện::

public làlà public làlà public public

phương thức

giao diện TinhToanHinh giao diện TinhToanHinh

Thành phầnphần làlà hằnghằng thìthì cócó phạmphạm vivi •• Thành Thành phầnphần làlà hằnghằng thìthì cócó phạmphạm vivi •• Thành final.. static final static Thành phầnphần làlà phương •• Thành (cid:132)(cid:132) SửSử dụng

interface GiaoDienHinh extends TinhToanHinh {

dụng giaogiao diệndiện nhưnhư thamtham chiếu tượng, cócó thểthể dùng chiếu đếnđến đốiđối tượng

public.. thức cócó phạmphạm vivi public tương tựtự chiếu:: tương dùng giaogiao tượng càicài

(cid:132)(cid:132) VíVí dụdụ::

//khai báo các thành phần bổ sung void ve(); void ve(); void xoa(); void dichuyen(int x, int y);

TinhToanHinh x = new HinhTron(3.0); TinhToanHinh x = new HinhTron(3.0);

}

99

1010

nhưnhư lớplớp cơcơ sởsở trừutrừu tượng, diệndiện đểđể tạotạo rara thamtham chiếu đặtđặt giaogiao diệndiện.. đặtđặt giaogiao diệndiện

1. Giao diện (Interface) 1. Giao diện (Interface)

1. Giao diện (Interface) 1. Giao diện (Interface)

(cid:132) Ví dụ:

(cid:132)(cid:132) MộtMột lớplớp cócó thểthể càicài đặtđặt nhiều

nhiều giaogiao diệndiện..

class GiaoDien1 {{

(cid:132)(cid:132) VíVí dụdụ::

public static void main(String args[]) {

class HinhTron class HinhTron implements TinhToanHinh, implements TinhToanHinh,

VeHinh VeHinh

TinhToanHinh h; h = new HinhChuNhat(1,2); System.out.println("Chu vi HCN = " + h.chuvi()); System.out.println("Dien tich HCN = " + h.dientich()); h = new HinhTron(1); System out println("Chu vi hinh tron System.out.println("Chu vi hinh tron = " + h.chuvi()); " + h chuvi()); System.out.println("Dien tich hinh tron = "+ h.dientich());

}

}

1111

1212

3

{{ …… }}

22/01/2013

22-- Gói (Package)

là gì? Gói (Package) là gì?

1. Giao diện (Interface) 1. Giao diện (Interface)

Phân tích, quản lý project

(cid:132)(cid:132) PhânPhân biệtbiệt giữagiữa lớplớp trừutrừu tượng

tượng vàvà giaogiao diệndiện::

Bài toán

•• LớpLớp trừutrừu tượng

tượng cócó thểthể chứa

chứa cáccác thuộc

thuộc tính,

tính, trong

trong khikhi giaogiao

Quản lý thế nào? Quản lý thế nào? Phâ hó Phân nhóm theo chức năng

class C1 class C2 class C3 class C3 ....... class Cn

diệndiện chỉchỉ chứa

chứa cáccác hằnghằng vàvà khai

khai báobáo phương

thức.. phương thức

thừa trong khikhi chỉchỉ kếkế thừa

•• MộtMột lớplớp cócó thểthể càicài đặtđặt nhiều

nhiều giaogiao diệndiện trong

tượng.. mộtmột lớplớp trừutrừu tượng

Nhóm 1 class C1 class C2 class C3 class C3

(cid:132)(cid:132) KhiKhi cầncần xâyxây dựng (cid:132)(cid:132) KhiKhi cầncần xâyxây dựng

dựng mộtmột lớplớp trừutrừu tượng dựng mộtmột lớplớp trừutrừu tượng

tượng không tượng không

không cócó dữdữ không cócó dữdữ

Nhóm ... class C8 .... class Cn

liệuliệu vàvà mọimọi phương

phương thức

thức đềuđều làlà trừutrừu tượng

tượng thìthì nênnên

dùng giaogiao diệndiện đểđể thay dùng

thay thếthế..

Mỗi nhóm để trong một thư mục (cid:206) Package

Nhóm 2 class C1 class C2 class C3 ó Nhóm 2_1 class C4 class C5 Nhóm 2_2 class C6 class C7

1313

1414

Package.... Package....

2. Packages 2. Packages

(cid:132)(cid:132) Package

• Gói và điều khiển truy xuất (Packages & Access Control) Access Control) class, interface, class interface được biênbiên dịchdịch thành interface, cáccác góigói interface cáccác góigói thành JavaJava

Modifier Modifier

private private

friendly friendly

protected protected

public public

Cùng class

YESYES

YESYES

YESYES

YESYES

NONO

YESYES

YESYES

YESYES

Package:: góigói phầnphần mềmmềm.. LàLà mộtmột nhómnhóm cáccác class, LàLà mộtmột nhómnhóm cáccác class khác khác đãđã được bytecode.. bytecode (cid:132)(cid:132) TổTổ chức chức củacủa 11 package package làlà 11 thưthư mụcmục cócó

Cùng gói, khác class

NONO

YESYES

YESYES

YESYES

package làlà 11 góigói concon (thư(thư mụcmục con) package làlà 11 góigói concon (thư(thư mụcmục con)

têntên làlà têntên củacủa package package (cid:198)(cid:198) SubSub package (cid:198)(cid:198) SubSub--package

lớp con trong cùng gói với lớp cùng gói với lớp cha

(giống cấucấu trúc

con) củacủa 11 con) củacủa 11 trúc thưthư

NONO

NONO

NONO

YESYES

package package mứcmức caocao hơnhơn (giống mục)mục)..

Khác gói, khác lớp

dụng (cid:132)(cid:132) GóiGói làlà côngcông cụcụ tạotạo khảkhả năngnăng táitái sửsử dụng

NONO

NONO

YESYES

YESYES

Lớp con khác gói với lớp cha

1515

1616

4

mãmã (reusable code).. (reusable code)

22/01/2013

package 2.1 Tạo package 2.1 Tạo

Sử dụng Package 2.22.2-- Sử dụng Package

class.. code củacủa class

trong code

(cid:132)(cid:132) DùngDùng chỉchỉ thịthị import

import vớivới mộtmột trong

trong cáccác cúcú

package trong package khóa package package khóa package

pháp sausau:: pháp pháp pháp sausau::

package PackageCha

PackageCon];; PackageCha[[..PackageCon]

pháp:: package

code javajava.. PackageCon];; PackageCha[..PackageCon]

OtherPackageName ;;]]

gg

import import PackageName import import PackageCha import pp import PackageName import PackagCha import PackageName..**;; PackageCon..**;; PackageCha..PackageCon ;; ClassName;; PackageName..ClassName PackagCha..PackageCon ClassName;; PackageCon..ClassName

(cid:132)(cid:132) KhaiKhai báobáo package (cid:132)(cid:132) DùngDùng từtừ khóa (cid:132)(cid:132) DùngDùng từtừ khóa (cid:132)(cid:132) CúCú pháp (cid:132)(cid:132) PhàiPhài làlà dòngdòng đầuđầu tiêntiên củacủa code package package PackageCha[ [import OtherPackageName [import class ClassName class ClassName class ClassName class ClassName {{ ....... ....... }}

Khi biên dịch thành công: - Nếu chưa có thư mục PackageName thì thư mục này sẽ được tự động tạo ra. - File.class của code này sẽ được đặt vào thư mục này.

1717

1818

Thí dụ... Thí dụ...

Thí dụ Thí dụ

Tạo các (cid:132)(cid:132) Tạo các Tạo các Tạo các package package với cấu với cấu trúc: trúc:

1919

2020

5

22/01/2013

2121

2222

Thí dụ... Thí dụ... Thí dụ... Thí dụ...

Thí dụ... Thí dụ... Thí dụ... Thí dụ...

import hai lớp

Tham khảo gói java,util để biết về các lớp java làm sẵn để quản lý các loại danh sách

2323

2424

6

22/01/2013

Thí dụ... Thí dụ...

Sau đó, viết một chương trình sử dụng hai lớp trong hai gói này.

Bài tập Bài tập Bạn viết thêm: (1) Lớp FacultyList để quản lý danh sách giáo viên đưa vào gói Faculty (2) Lớp FacultyListDemo để minh họa việc quản lý danh sách giáo viên

Xây dựng các gói theo thiết kế sau:

public class Calculate { public static double Volume(double l, double w, double h)

{return l*w*h;}

public static double Add(double n1, double n2)

{ return n1+n2;}

}

public class Circle public class Circle

{ double r;

public Circle(double rr) { r=rr;} public double Circumference() { return 2*Math.PI*r;} public double Area() { return Math.PI* r*r; }

}

2525

2626

Thí dụ: Sử dụng gói nhưng ở bên ngoài gói Thí dụ: Sử dụng gói nhưng ở bên ngoài gói

Thí dụ: Sử dụng gói tại bên trong gói Thí dụ: Sử dụng gói tại bên trong gói

Sử dụng gói mà source code nằm trong gói sẽ có báo ói ẽ ó bá t lỗi (cid:206) Sử dụng gói phải ở bên ngoài gói.

Gói tự tạo cần chỉ hỉ định rõ import lớp nào

2727

2828

7

22/01/2013

Sử dụng gói bằng cách copy gói sang Sử dụng gói bằng cách copy gói sang thư mục khác thư mục khác

Sử dụng gói bằng cách copy gói sang Sử dụng gói bằng cách copy gói sang thư mục khác thư mục khác

l

Chép cả thư mục StudentClasses sang (cid:206) Error vì lớp Student (cid:206) Error vì lớp Student tham khảo gói CommonClasses

Chép Student.class từ S d ừ thư mục StudentClasses sang (cid:206) Error

2929

3030

Sử dụng gói bằng cách copy gói sang thư mục khác Sử dụng gói bằng cách copy gói sang thư mục khác

Bài tập Bài tập Quản lý tài liệu ở thư viện Quản lý tài liệu ở thư viện

(cid:132)(cid:132) MộtMột thưthư việnviện gồmgồm cáccác loại

loại tàitài liệuliệu sausau:: ,, sách, TênTên Sách,

,, Sách(Mã sách,

g ,g ,

((

,,

)) Sách, TácTác giả,giả, NXB,NXB, NămNăm XB,XB, VịVị trí)trí)

,,

•• Sách(Mã •• TạpTạp chíchí (Mã(Mã tạptạp chí,chí, TênTên tạptạp chí,chí, Chuyên

Chuyên ngành,

ịị ngành, Số,Số,

Chép cả thư mục StudentClasses lẫn CommonClasses sang (cid:206)OK (cid:206) Chép gói thì phải (cid:206) Chép gói thì phải chép cả thư mục chứa + các thư mục có liên quan

dung, VịVị trí)trí)

Năm, Năm, VịVị trí)trí) CD(Mã CD,CD, TênTên CD,CD, SốSố thứthứ tự,tự, NộiNội dung, •• CD(Mã (cid:132)(cid:132) HãyHãy tổtổ chức

trình đểđể

chức cáccác lớplớp saosao chocho cócó thểthể lậplập trình chức năngnăng sausau::

trong thưthư việnviện..

trong thưthư việnviện.. trong thưthư việnviện

loại tàitài liệuliệu cócó trong

từng loại

trong thưthư việnviện..

thông tintin vềvề tàitài liệuliệu khikhi biếtbiết mãmã tàitài liệuliệu..

được cáccác chức thực hiệnhiện được thực •• LưuLưu danhdanh sáchsách cáccác tàitài liệuliệu cócó trong •• LiệtLiệt kêkê toàntoàn bộbộ tàitài liệuliệu cócó trong •• LiệtLiệt kêkê toàntoàn bộbộ tàitài liệuliệu cócó trong •• LiệtLiệt kêkê từng •• XemXem thông •• TìmTìm kiếmkiếm mộtmột tàitài liệuliệu theo Chuyên ngành,

TênTên tạptạp chí,chí, Chuyên CD,CD, SốSố thứthứ tựtự vàvà nộinội dung

theo:: TênTên vàvà táctác giảgiả đốiđối vớivới sáchsách;; ngành, số,số, nămnăm đốiđối vớivới tạptạp chí,chí, TênTên dung đốiđối vớivới CDCD..

3131

3232

8

22/01/2013

Thực hành Thực hành

1.1. Thực

DTHINH càicài đặtđặt bằngbằng

2.2. Thực

liệuliệu thưthư

Thực hànhhành bàibài quảnquản lýlý danhdanh sáchsách nhânnhân viênviên bằngbằng 22 cáchcách:: 22 á há h iêiê bằbằ dùng lớplớp trừutrừu tượng •• Không Không dùng tượng.. •• DùngDùng lớplớp trừutrừu tượng tượng.. Thực hànhhành bàibài DTHINH giaogiao diệndiện giaogiao diệndiện.. 3.3. Thực Thực hànhhành bàibài quảnquản lýlý tàitài việnviện..

3333

9