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
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
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

