Java - Chương 15

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