GIAO TIẾP (INTERFACE)
1. Gói (Package)
Một trong những tính năng mạnh mẽ của
Java là gói (package) tức là khả năng tập hợp các lớp có cùng một số chức năng
liên quan đến nhau thành một gói. Phần dưới đây sẽ trình bày chi tiết về gói và
những vấn đến liên quan.
1.1. Khái
niệm
Trong java, các lớp có thể được tập
hợp lại với nhau bởi cùng một tên gọi thì đó gọi là gói.
1.2. Khai
báo
Để khai báo một lớp là thành phần của
một gói ta dùng cú pháp
package PackageName;
class ClassName
{
//Thân lớp
}
Ví
dụ: Lớp Circle
và Triangle đều là thành phần của một gói Shape(Hình cơ bản), thí trước khi
khai báo lớp ta phải khai báo gọi như sau:
// Lớp Circle
package
Shape;
class Circle
{
}
// Lớp Triangle
package Shape;
class Triangle
{
}
1.3. Sử
dụng lớp trong một gói
- Khi một lớp đã được tập hợp vào một
gói. Muốn sử dụng nó ta phải dùng cú pháp:
import PackageName.ClassName;
Ví dụ: Để sử dụng được 2 lớp Circle và
Triangle trên ta phải dùng cú pháp sau:
import Shape.Circle;
import Shape.Triangle;
Chú ý:
- Các lớp của cùng một gói phải đặt
trong cùng một thư mục có tên là tên của gói
Ví dụ: Lớp Circle và Triangle phải đặt trong
cùng thư mục tên: Shape
- Chương trình gọi các lớp trong gói
phải đặt trong thư mục cùng thư mục với thư mục gòi.
Ví dụ: Nếu Thư mục Shape nằm trong thư
mục C:\Java. Thì chương trình gọi đến các lớp trong gói Shape cũng phải nằm
trong thư mục C:\Java - Khi gọi các lớp
trong gói có thể dùng ký tự *. Khi đó ta xẽ gọi đến tất cả các lớp thuộc cùng
gói đó
Ví
dụ 3.11. Xây dựng lớp các lớp Circle và Triangle cùng nằm trong gói Shape. Sau
đó xây dựng chương trình để kiểm tra kết quả bằng cách tạo ra một đối tượng
Circle và một đối tượng Triangle rồi tính diện tích của nó:
- Ta xây dựng lớp Circle trong gói
Shape như sau:
package
Shape;
public
class Circle;
{
private
int x;
private
int y;
private
float r;
public Circle(int x0,int y0,int r0) //hàm tạo có 3 đối
{
x=x0;
y=y0;
r=r0;
}
public float GetArea()
{
return
(float)3.14*r*r;
}
}
-
Lớp Triangle nằm trong gói Shape như sau:
package
Shape;
public
class Triangle
{
float a;
float b;
float c;
public Triangle(float a0,float b0,float c0)
{
a=a0;
b=b0;
c=c0;
}
public float GetArea()
{
float p=(a+b+c)/2;
float
s=(float)Math.sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
}
-
Sau đó ta xây dựng chương trình kiểm tra kết quả như sau:
import
Shape.*;
public
class testShape
{
public static void main(String[] args)
throws Exception
{
Circle C=new Circle(100,100,10);
Triangle T=new Triangle(10,10,5);
System.out.println("Dien tich
duong tron la:"+C.GetArea());
System.out.println("Dien tich
tam giac la:"+T.GetArea());
}
}
2. Giao tiếp
2.1 Ý mghĩa
Ta biết rằng một trong những
sự phức tạp của C++ là đa thừa kế. Mặc dù nó có những ưu đỉêm nhất định nhưng
nhược điểm mà nó mang lại là khá lớn. Nó làm cho chương trình trở lên phức tạp
không chỉ đối với người lập trình mà ngay cả đối với trình biên dịch trong nhiều
tình huống cũng phải xử lý các chương trình rất vất vả. Tuy nhiên vấn đề thừa hường
các vùng dữ liệu từ nhiều lớp khác nhau lại là cần thiết và trong rất nhiều tình
huống nó làm cho chương trình trở lên tiện ích hơn nhiều. Vậy vấn đề đặt ra là
làm thế nào để khắc phục được sự phức tạp của đa thừa kế nhưng vẫn cho phép người
lập trình có thể xây dựng được các câu trúc lớp đa dạng. Java giải quyết vấn đề
đó bằng giao tiếp.
- Giao tiếp cho phép một lớp chỉ được
thừa kế từ một lớp khác nhưng lại có thể cài đặt nhiều giao tiếp để thừa hưởng
thêm các vùng dữ liệu và các phương thức của các giao tiếp này.
2.2. Khai
bái một giao tiếp
Trươc khi
khai giao tiếp các bạn cần chú ý là:
Giao tiếp có cấu trúc gần giống với
khai báo lớp, chỉ có các điểm khác biệt là:
- Các vùng dữ liệu là các hằng số
- Các phương thức là phương thức ảo
* Cấu trúc
khai báo một giao tiếp
[public] interface NameOfInterface [extends
InterfaceList]
{
//Thân của giao tiếp
}
Chú
ý:
-
Nếu một giao tiếp được khai báo là public thì nó cho phép tất cả các lớp cài
đặt nó
-
Nếu một giao tiếp được khai báo không phải public thì chỉ các lớp trong cùng
khối mới được cài đặt nó
-
Một giao tiếp phải được lưu vào tập tin cùng tên với tên của giao tiếp
2.3. Khai
báo các thuộc tính trong giao tiếp
- Các thuộc tính trong giao tiếp luôn
là tĩnh (static), hằng (final) và toàn cục
- Các thuộc tính trong giao tiếp được
khai báo tương tự như trong khao báo các thuộc tính của lớp
2.4. Khai
báo các phương thức trong giao tiếp
- Cú pháp:
[public] return_Value NameOfMother ([Parameter])
[throws Exception]
{
Thân của phương thức;
}
Ví
dụ: Khai báo một giao tiếp cho một cửa hảng tạp phẩm
public interface Shop
{
static final String
LABLE=“Cửa hàng tạp hoá số 1”;
static final String
PHONE=“04.7683242”;
public int getPrice(int id);
// Trả lại giá của mặt hàng
}
2.5. Khai báo lớp có cài đặt giao tiếp
Để khai báo lớp có cài đặt giáo tiếp
ta dùng cú pháp:
[public] class ClassName implements
InterfaceList
{
//Thân của lớp
}
Chú ý: Trong lớp có cài đặt giao tiếp
ta phải cài đặt lại các phương thức đã có trong giao tiếp.
- Trong lớp có cài đặt giao tiếp không
được định nghĩa chồng các phương thức đã có trong giao tiếp. Ví dụ: Khai báo
lớp búp bê(Doll) có cài đặt giao tiếp Shop:
public
class Doll implements Shop
{
String Name; // Tên của bup bê
public int getPrice(int id)
{
if(id==0) return 10000;
else return 15000;
}
}
BÀI
TẬP CHƯƠNG III
Bài 1: Xây
dựng lớp tam giác (Triangle) có các thành phần:
* Các thuộc tính: 3 cạnh của tam giác
* Các phương thức:
- Nhập độ dài 3 cạnh
- Xác định kiểu tam giác
- Tính chu vi tam giác
- Tính diện tích tam giác
Bài 2: Xây
dựng lớp hình chữ nhật (Rectangle) có các thành phần sau:
* Các thuộc tính: Có chiều dài, chiều
rộng
* Các phương thức:
- Nhập chiều dài, chiều rộng
- Tính diện tích
- Tính chu vi
Bài 3: Xây
dựng lớp Phân số (Fraction) có các thành phần sau
* Các thuộc tính: Tử số, mấu số
* Các phương thức:
- Nhập phân số
- In Phân số
- Rút gọn phân số
- Nghịch đảo phân số
Bài 4. Xây dựng lớp số phức có các thành phần sau
+ Các thuộc tính
- Phần thực
- Phần ảo
+ Các hàm thành phần
- Cộng hai số phức
- Trừ hai số phức
- Nhân hai số phức
- Chia hai số phức
Nhập vào 2
số phức và thực hiện các phép toán trên hai số phức đó
Bài 5. Xây dựng lớp Vectơ có các thành phần sau
+ Các
thuộc tính
- Hoành độ đầu
- Tung độ đầu
- Hoành đô cuối
- Tung độ cuối
+ Các phương thức
- Kiểm tra hai vectơ có bằng
nhau không?
- Tính góc giữa 2 vectơ
- Tính module của 2 vectơ
- Kiểm tra hai vectơ có cùng phương không?
- Cộng hai vectơ
- Trư hai vectơ
- Nhân hai vectơ
Nhập vào 2 vectơ và thực
hiện các phép toán trên hai vectơ đó.
Bài 6. Xây dựng lớp đa thức (polylomial) và các phép toán trên đa thức.
Thực hiện nhập vào 2 đa thức và tính tổng, tích của nó.
Bài 7. Xây dựng lớp ma trận và các phép toán trên ma
trận. Thực hiện nhập vào 2 ma trận và tính tổng, tích của nó.
Bài 8. Xây dựng lớp đa giác, hình bình hành thừa kế
từ đa giác, hình chữ nhật thừa kế từ hình bình hành và hình vuông thừa kế từ hình
chữ nhật. Nhập vào các thuộc tính cần thiết của mỗi hình và tính chu vi, diện tích
của hình đó.
Bài 9. Xây dựng lớp điểm, lớp elip thừa kế từ lớp điểm,
lớp đường tròn thừa kế từ lớp elip. Nhập vào các thuộc tính cần thiết của elip
và tính diện tích.
Bài 10. Xây dựng lớp tam giác, lớp tam giác vuông,
tam giác cân thừa kế từ lớp tam giác. Lớp tam giác đều thừa kế từ lớp tam giác
cân.
No comments :
Post a Comment