22/01/2013<br />
<br />
Mục đích & yêu cầu<br />
<br />
Chương 6.<br />
<br />
Giới thiệu một thành phần cơ bản: Gói, giao<br />
bản:<br />
<br />
GIAO DiỆN, GÓI<br />
<br />
diện.<br />
diện.<br />
Giải thích được Gói, giao diện là gì?<br />
Sử dụng các thành phần này, viết một chương<br />
trình đơn giản.<br />
giản.<br />
<br />
1<br />
<br />
2<br />
<br />
1. Giao diện (Interface)<br />
<br />
1. Giao diện (Interface)<br />
Ví dụ: Giao diện tính toán trên các hình.<br />
dụ:<br />
hình.<br />
<br />
Giao diện là một giải pháp của Java nhằm<br />
thay thế cho đa kế thừa.<br />
thừa.<br />
Một giao diện là một tập các hằng, các<br />
mẫu phương thức (prototype) mà không<br />
có cài đặt chi tiết.<br />
tiết.<br />
Khai báo giao diện:<br />
diện:<br />
<br />
interface TinhToanHinh<br />
{<br />
public final double PI = 3.1415;<br />
1415;<br />
double dientich();<br />
dientich();<br />
double chuvi();<br />
chuvi();<br />
}<br />
<br />
interface <br />
{<br />
khai báo các nội dung của giao diện<br />
}<br />
3<br />
<br />
4<br />
<br />
1<br />
<br />
22/01/2013<br />
<br />
1. Giao diện (Interface)<br />
Có thể coi giao diện như một lớp<br />
tượng đặc biệt: các phương thức đều<br />
biệt:<br />
tượng.<br />
tượng.<br />
Khai báo lớp cài đặt giao diện:<br />
diện:<br />
tường minh các phương thức của<br />
diện.<br />
diện.<br />
Cú pháp:<br />
pháp:<br />
<br />
1. Giao diện (Interface)<br />
trừu<br />
trừu<br />
<br />
Ví dụ: lớp hình chữ nhật cài đặt giao diện<br />
dụ:<br />
TinhToanHinh<br />
class HinhChuNhat implements TinhToanHinh{<br />
<br />
phải<br />
giao<br />
<br />
private double dai, rong;<br />
public HinhChuNhat(double d, double r)<br />
{dai = d; rong = r;}<br />
<br />
class implements <br />
<br />
public double chuvi(){ return dai+rong;}<br />
<br />
{<br />
<br />
public double dientich(){return dai*rong;}<br />
<br />
Khai báo các thành phần của lớp<br />
Cài đặt chi tiết các phương thức của các giao diện<br />
}<br />
<br />
}<br />
5<br />
<br />
1. Giao diện (Interface)<br />
<br />
6<br />
<br />
1. Giao diện (Interface)<br />
<br />
Lớp hình tròn cài đặt giao diện TinhToanHinh<br />
class Hi hT<br />
l<br />
HinhTron i l<br />
implements Ti hT<br />
t TinhToanHinh<br />
Hi h<br />
{<br />
<br />
Lưu ý: một lớp cài đặt một giao diện thì<br />
phải cài đặt tất cả các phương thức mà<br />
giao diện khai báo (có thể là cài đặt<br />
<br />
private double bankinh;<br />
public HinhTron(double d) { bankinh = d;}<br />
public<br />
double<br />
chuvi()<br />
{<br />
return<br />
2*bankinh*PI;}<br />
public double dientich()<br />
{ return bankinh*bankinh*PI; }<br />
<br />
rỗng).<br />
rỗng).<br />
Một giao diện có thể mở rộng (kế thừa) từ<br />
một giao diện khác<br />
<br />
giao diện mới sẽ có<br />
<br />
đầy đủ các thành phần được khai báo trong<br />
giao diện cơ sở.<br />
sở.<br />
<br />
}<br />
7<br />
<br />
8<br />
<br />
2<br />
<br />
22/01/2013<br />
<br />
1. Giao diện (Interface)<br />
<br />
1. Giao diện (Interface)<br />
<br />
Ví dụ: giao diện GiaoDienHinh mở rộng từ<br />
giao diện TinhToanHinh<br />
interface GiaoDienHinh extends TinhToanHinh<br />
{<br />
//khai báo các thành phần bổ sung<br />
void ve();<br />
void xoa();<br />
void dichuyen(int x, int y);<br />
}<br />
<br />
Phạm vi của các thành phần trong giao diện:<br />
diện:<br />
• Thành phần là hằng thì có phạm vi là public<br />
static final.<br />
final.<br />
• Thành phần là phương thức có phạm vi public.<br />
public.<br />
<br />
Sử dụng giao diện như tham chiếu: tương tự<br />
chiếu:<br />
như lớp cơ sở trừu tượng, có thể dùng giao<br />
diện để tạo ra tham chiếu đến đối tượng cài<br />
đặt giao diện.<br />
diện.<br />
Ví dụ:<br />
dụ:<br />
TinhToanHinh x = new HinhTron(3.0);<br />
<br />
9<br />
<br />
1. Giao diện (Interface)<br />
<br />
10<br />
<br />
1. Giao diện (Interface)<br />
<br />
Ví dụ:<br />
<br />
class GiaoDien1<br />
{<br />
public static void main(String args[])<br />
{<br />
TinhToanHinh h;<br />
h = new HinhChuNhat(1,2);<br />
System.out.println("Chu vi HCN = " + h.chuvi());<br />
System.out.println("Dien tich HCN = " + h.dientich());<br />
h = new HinhTron(1);<br />
System.out.println("Chu<br />
System out println("Chu vi hinh tron = " + h chuvi());<br />
h.chuvi());<br />
System.out.println("Dien tich hinh tron = "+ h.dientich());<br />
}<br />
}<br />
<br />
11<br />
<br />
Một lớp có thể cài đặt nhiều giao diện.<br />
diện.<br />
Ví dụ:<br />
dụ:<br />
class HinhTron implements TinhToanHinh,<br />
VeHinh<br />
{…}<br />
<br />
12<br />
<br />
3<br />
<br />
22/01/2013<br />
<br />
2- Gói (Package) là gì?<br />
<br />
1. Giao diện (Interface)<br />
<br />
Phân tích, quản lý<br />
project<br />
<br />
Phân biệt giữa lớp trừu tượng và giao diện:<br />
diện:<br />
• Lớp trừu tượng có thể chứa các thuộc tính, trong khi giao<br />
<br />
Bài<br />
toán<br />
<br />
diện chỉ chứa các hằng và khai báo phương thức.<br />
thức.<br />
• Một lớp có thể cài đặt nhiều giao diện trong khi chỉ kế thừa<br />
một lớp trừu tượng.<br />
tượng.<br />
<br />
Khi cần xây dựng một lớp trừu tượng không có dữ<br />
<br />
class C1<br />
class C2<br />
class C3<br />
.......<br />
class Cn<br />
<br />
Nhóm 1<br />
class C1<br />
class C2<br />
class C3<br />
<br />
liệu và mọi phương thức đều là trừu tượng thì nên<br />
Mỗi nhóm để trong<br />
một thư mục<br />
Package<br />
<br />
dùng giao diện để thay thế.<br />
thế.<br />
<br />
Quản lý thế nào?<br />
Phâ nhóm<br />
Phân hó<br />
theo chức năng<br />
<br />
Nhóm 2<br />
class C1<br />
class C2<br />
class C3<br />
Nhóm 2_1<br />
ó<br />
class C4<br />
class C5<br />
Nhóm 2_2<br />
class C6<br />
class C7<br />
<br />
Nhóm ...<br />
class C8<br />
....<br />
class Cn<br />
<br />
13<br />
<br />
14<br />
<br />
Package....<br />
<br />
2. Packages<br />
<br />
Package:<br />
Package: gói phần mềm.<br />
mềm.<br />
Là một nhóm các class interface các gói<br />
class, interface,<br />
khác đã được biên dịch thành Java<br />
bytecode.<br />
bytecode.<br />
Tổ chức của 1 package là 1 thư mục có<br />
tên là tên của package<br />
<br />
• Gói và điều khiển truy xuất (Packages &<br />
Access Control)<br />
Modifier<br />
<br />
private<br />
<br />
friendly<br />
<br />
protected<br />
<br />
public<br />
<br />
Cùng class<br />
<br />
YES<br />
<br />
YES<br />
<br />
YES<br />
<br />
YES<br />
<br />
Cùng gói, khác<br />
class<br />
<br />
NO<br />
<br />
YES<br />
<br />
YES<br />
<br />
YES<br />
<br />
lớp con trong<br />
cùng gói với lớp<br />
cha<br />
<br />
NO<br />
<br />
YES<br />
<br />
YES<br />
<br />
YES<br />
<br />
Khác gói, khác<br />
lớp<br />
<br />
NO<br />
<br />
NO<br />
<br />
NO<br />
<br />
YES<br />
<br />
Lớp con khác<br />
gói với lớp cha<br />
<br />
NO<br />
<br />
NO<br />
<br />
YES<br />
<br />
YES<br />
<br />
SubSub-package là 1 gói con (thư mục con) của 1<br />
package mức cao hơn (giống cấu trúc thư<br />
mục).<br />
mục).<br />
<br />
Gói là công cụ tạo khả năng tái sử dụng<br />
mã (reusable code).<br />
code).<br />
15<br />
<br />
16<br />
<br />
4<br />
<br />
22/01/2013<br />
<br />
2.1 Tạo package<br />
<br />
2.22.2- Sử dụng Package<br />
<br />
Khai báo package trong code của class.<br />
class.<br />
Dùng từ khóa package<br />
Cú pháp: package PackageCha[.PackageCon];<br />
pháp:<br />
PackageCha[ PackageCon];<br />
Phài là dòng đầu tiên của code java.<br />
java.<br />
<br />
Dùng chỉ thị import với một trong các cú<br />
pháp sau:<br />
sau:<br />
import<br />
import<br />
import<br />
p<br />
import<br />
<br />
package PackageCha[.PackageCon];<br />
PackageCha[.PackageCon];<br />
[import OtherPackageName ;]<br />
class ClassName<br />
Khi biên dịch thành công:<br />
{ .......<br />
- Nếu chưa có thư mục PackageName<br />
thì thư mục này sẽ được tự động tạo ra.<br />
}<br />
<br />
PackageName.*;<br />
PackageName.<br />
PackageCha.PackageCon.*;<br />
PackageCha.PackageCon.<br />
PackageName.ClassName;<br />
PackageName.ClassName;<br />
g<br />
PackagCha.PackageCon.ClassName;<br />
PackagCha.PackageCon.ClassName;<br />
<br />
- File.class của code này sẽ được đặt vào<br />
thư mục này.<br />
17<br />
<br />
Thí dụ<br />
<br />
18<br />
<br />
Thí dụ...<br />
<br />
Tạo các<br />
package<br />
với cấu<br />
trúc:<br />
<br />
19<br />
<br />
20<br />
<br />
5<br />
<br />