SlideShare a Scribd company logo
1 of 22
Download to read offline
Bài 8: Giao diện và tính đa hình


    Giảng viên: Nguyễn Thị Minh Huyền
    nguyenthiminhhuyen@hus.edu.vn
               Đỗ Thanh Hà
          dothanhha@hus.edu.vn
Tài liệu tham khảo
   BigJava – chương 11




    2009-2010   OOP - http://mim.hus.edu.vn/elearning   2
Tái sử dụng mã chương trình
(1)
   Xét ví dụ DataSet.java (ch07/input)
           Tìm giá trị trung bình và giá trị lớn nhất
            của 1 tập các giá trị số
                Phải làm gì nếu muốn tìm trị trung bình và lớn
                 nhất của 1 tập các tài khoản ngân hàng
                 (BankAccount, ch08)?
                Hay muốn tìm loại tiền xu có giá trị cao nhất
                 trong 1 tập các loại tiền xu (Coin, bài 6)?


2009-2010                  OOP - http://mim.hus.edu.vn/elearning   3
Tái sử dụng mã chương trình
  (2)
public class DataSet // Modified for BankAccount objects
{
   . . .
   public void add(BankAccount x) {
        sum = sum + x.getBalance();
        if (count == 0 || maximum.getBalance() < x.getBalance())
            maximum = x;
        count++;
   }
   public BankAccount getMaximum() {
        return maximum;
   }
   private double sum;
   private BankAccount maximum;
   private int count;
}



  2009-2010            OOP - http://mim.hus.edu.vn/elearning       4
Tái sử dụng mã chương trình
  (3)
public class DataSet // Modified for Coin objects
{
   . . .
   public void add(Coin x) {
        sum = sum + x.getValue();
        if (count == 0 || maximum.getValue() < x.getValue())
            maximum = x;
        count++;
   }
   public Coin getMaximum() {
        return maximum;
   }
   private double sum;
   private Coin maximum;
   private int count;
}



  2009-2010            OOP - http://mim.hus.edu.vn/elearning   5
Tái sử dụng mã chương trình
        (4)
   Các ví dụ trên có chung cơ chế phân tích dữ liệu, chỉ khác
    nhau về độ đo dữ liệu
       Các lớp liên quan có thể thống nhất 1 phương thức getMeasure
        để thu được giá trị đo dùng trong quá trình phân tích
       Khi đó có thể cài 1 lớp duy nhất DataSet có thể sử dụng chung,
        trong đó phần thân của phương thức add có dạng:
        sum = sum + x.getMeasure();
        if (count == 0 || maximum.getMeasure() <
        x.getMeasure())
             maximum = x;
        count++;
       Kiểu của biến x là gì? x cần phải tham chiếu tới bất kì lớp nào có
        hàm getMeasure.

        2009-2010             OOP - http://mim.hus.edu.vn/elearning          6
Tái sử dụng mã chương trình
(5)
   Để mô tả các lớp có chung một số thao tác nào đó
    (như getMeasure), trong Java người ta khai báo một
    kiểu giao diện (interface) đặc tả các thao tác chung
    đó
           public interface Measurable {
                 double getMeasure();
            }
           Khai báo interface liệt kê danh sách các nguyên mẫu
            phương thức (prototype) mà kiểu giao diện cần có
   Các lớp có chung giao diện này sẽ cài đặt
    (implements) cụ thể các phương thức đặc tả trong
    kiểu giao diện.

2009-2010                  OOP - http://mim.hus.edu.vn/elearning   7
Lớp DataSet dùng chung cho
  các đối tượng đo được
public class DataSet
{
   . . .
   public void add(Measurable x) {
        sum = sum + x.getMeasure();
        if (count == 0 || maximum.getMeasure() < x.getMeasure())
            maximum = x;
        count++;
   }
   public Measurable getMaximum() {
        return maximum;
   }
   private double sum;
   private Measurable maximum;
   private int count;
}


  2009-2010            OOP - http://mim.hus.edu.vn/elearning       8
Cài đặt một kiểu giao diện
   Để khai báo 1 lớp cài đặt 1 kiểu giao diện, dùng
    từ khoá implements
       public class BankAccount implements Measurable {

                 public double getMeasure() {
                    return balance;
                 }
                 // Additional methods and fields
        }
   1 lớp có thể cài đặt nhiều kiểu giao diện
       Khi cài đặt 1 kiểu giao diện, lớp đó phải định nghĩa tất
        cả các phương thức đã đặc tả trong kiểu giao diện
     2009-2010              OOP - http://mim.hus.edu.vn/elearning   9
Cú pháp
   Định nghĩa 1 kiểu giao diện
       public interface InterfaceName {
            // method signatures
        }
       Tất cả các phương thức trong kiểu giao diện đều
        đương nhiên là public
   Cài đặt 1 kiểu giao diện
       public class ClassName implements
                  InterfaceName, InterfaceName, ... {
            // interface method implementations
            // other methods
            // instance variables
        }
   VD: Xem các lớp trong ch11/measure1
    2009-2010           OOP - http://mim.hus.edu.vn/elearning   10
Sơ đồ UML (1)
   Sử dụng kiểu giao diện có thể giúp giảm tính
    móc nối giữa các lớp
   Kí hiệu UML:
           Kiểu giao diện được đánh dấu bằng nhãn
            «interface»
           Mũi tên nét đứt với mũi hình tam giác kí hiệu
            quan hệ “is-a” giữa 1 lớp và 1 giao diện
           Mũi tên nét đứt với mũi hình chữ v mở kí hiệu
            quan hệ “uses” hay quan hệ phụ thuộc

2009-2010                OOP - http://mim.hus.edu.vn/elearning   11
Sơ đồ UML (2)
   VD




2009-2010   OOP - http://mim.hus.edu.vn/elearning   12
Chuyển đổi kiểu giữa lớp và
    giao diện
   Có thể chuyển 1 kiểu lớp về 1 kiểu giao diện, với điều
    kiện lớp cài đặt giao diện
       BankAccount account = new BankAccount(10000);
        Measurable x = account; // OK
   Ngược lại, để chuyển 1 kiểu giao diện về 1 kiểu lớp phải
    thực hiện ép kiểu
       DataSet coinData = new DataSet();
        coinData.add(new Coin(0.25, "quarter"));
        coinData.add(new Coin(0.1, "dime"));
        . . .
        // Get the largest coin
        Measurable max = coinData.getMaximum();
        String name = max.getName(); // ERROR
        Coin maxCoin = (Coin) max;
        String name = maxCoin.getName();


     2009-2010          OOP - http://mim.hus.edu.vn/elearning   13
Tính đa hình
   Biến kiểu giao diện dùng để chứa tham chiếu tới đối
    tượng của 1 lớp cài đặt giao diện đó
         Measurable x;
          x = new BankAccount(10000);
          x = new Coin(0.1, "dime");
   Có thể gọi bất kì phương thức nào của kiểu giao diện
    với tham biến ẩn x
         Tuỳ theo x đang tham chiếu tới đối tượng thuộc lớp nào thì áp
          dụng phương thức cài đặt trong lớp đó => tính đa hình
               Gọi là liên kết muộn (late binding): khi chạy chương trình mới xác
                định dùng phương thức của lớp nào
               Khác với liên kết sớm (early binding): chương trình dịch xác định
                dùng phương thức nào trong các phương thức cùng tên
    2009-2010                   OOP - http://mim.hus.edu.vn/elearning           14
Sử dụng kiểu giao diện cho
        gọi lại (callback)
   Nhược điểm của kiểu giao diện Measurable:
       Chỉ dùng được giao diện này để đo trong các lớp thuộc quyền của
        người lập trình
       Chỉ đo/đánh giá được đối tượng theo 1 tiêu chí
             VD với 1 tài khoản tiết kiệm không thể vừa đo theo số tiền trong tài
              khoản, vừa đo theo lãi suất
   Cơ chế gọi lại (callback): cho phép 1 lớp gọi tới 1 phương
    thức đặc trưng tuỳ theo thông tin cần khai thác
   Xét lớp DataSet
       Trong VD trước, việc đo 1 đối tượng do 1 phương thức của đối
        tượng đó đảm nhiệm
       Thay cho cách làm đó, dùng 1 phương thức đo có tham biến hiện
        là đối tượng cần đo

        2009-2010                 OOP - http://mim.hus.edu.vn/elearning              15
Sử dụng kiểu giao diện cho
    gọi lại (2)
    Muốn vậy:
          Định nghĩa kiểu giao diện
       public interface Measurer {
          double measure(Object anObject);
       }
          Định nghĩa phương thức add trong DataSet
       public void add(Object x) {
          sum = sum + measurer.measure(x);
          if (count == 0 || measurer.measure(maximum)
                               < measurer.measure(x))
             maximum = x;
             count++;
       }

    2009-2010            OOP - http://mim.hus.edu.vn/elearning   16
Sử dụng kiểu giao diện cho
        gọi lại (3)
   Cài đặt giao diện Measurer:
public class RectangleMeasurer implements Measurer {
  public double measure(Object anObject) {
       Rectangle aRectangle = (Rectangle) anObject;
       double area =
                aRectangle.getWidth()*aRectangle.getHeight();
         return area;
    }
}
   Sử dụng DataSet:
    Measurer m =    new RectangleMeasurer();
    DataSet data    = new DataSet(m);
    data.add(new    Rectangle(5, 10, 20, 30));
    data.add(new    Rectangle(10, 20, 30, 40));
    . . .

        2009-2010           OOP - http://mim.hus.edu.vn/elearning   17
Sơ đồ UML





    Xem chương trình ch11/measure2
2009-2010         OOP - http://mim.hus.edu.vn/elearning   18
Lớp trong (inner classes)
   Có thể định nghĩa 1 lớp đơn giản bên trong 1 phương thức
        Lớp này chỉ dùng được trong phương thức
        VD (ch11/measure3)
         public class DataSetTester3 {
           public static void main(String[] args) {
               class RectangleMeasurer implements Measurer {
                   . . .
               }
               Measurer m = new RectangleMeasurer();
                   DataSet data = new DataSet(m);
               . . .
           }
         }
        Chương trình dịch sẽ tạo ra 1 tệp riêng cho lớp trong
         DataSetTester3$1RectangleMeasurer.class
   Nếu 1 lớp được định nghĩa trong 1 lớp khác nhưng ngoài các phương
    thức của lớp đó thì có thể dùng được lớp đó trong mọi phương thức
    của lớp ấy.
         2009-2010                 OOP - http://mim.hus.edu.vn/elearning   19
Ví dụ minh hoạ: Xử lí sự kiện
              đếm thời gian
   javax.swing.Timer sinh các sự kiện đếm thời gian cách đều nhau,
    hữu dụng khi cần cập nhật 1 đối tượng trong 1 khoảng thời gian đều đặn
   Cách dùng (Xem ch11/timer1):
      Định nghĩa 1 lớp MyListener cài đặt kiểu giao diện ActionListener: gửi sự kiện

       tới bộ nghe
             public interface ActionListener {
                   void actionPerformed(ActionEvent event);
              }
             class MyListener implements ActionListener {
                 void actionPerformed(ActionEvent event){
                    // This action will be executed at each timer event
                    Place listener action here
                 }
              }
        Tạo đối tượng Timer với bộ nghe đã cài đặt
             MyListener listener = new MyListener();
              Timer t = new Timer(interval, listener);
              t.start();
              2009-2010              OOP - http://mim.hus.edu.vn/elearning              20
Truy cập các biến xung quanh
        (1)
   Các phương thức của 1 lớp trong có thể truy cập
    các biến định nghĩa trong phạm vi xung quanh
       Hữu dụng khi cài đặt các bộ điều khiển sự kiện
       VD: Làm hình động – di chuyển 1 hình 10 lần trong 1s
        class Mover implements ActionListener {
          public void actionPerformed(ActionEvent event) {
              // Move the rectangle
          }
        }
        ActionListener listener = new Mover();
        final int DELAY = 100; // Milliseconds between timer ticks
        Timer t = new Timer(DELAY, listener);
        t.start();



        2009-2010            OOP - http://mim.hus.edu.vn/elearning   21
Truy cập các biến xung quanh
         (2)
   Phương thức actionPerformed có thể truy cập các biến trong phạm vi
    xung quanh (ch11/timer2):
        public static void main(String[] args) {
           . . .
           final Rectangle box = new Rectangle(5, 10, 20, 30);
           class Mover implements ActionListener {
               public void actionPerformed(ActionEvent event) {
                   // Move the rectangle box.translate(1, 1);
               }
           }
           . . .
         }
   Các biến địa phương muốn truy cập được bởi lớp trong phải được khai
    báo là final
   Lớp trong có thể truy cập trường dữ liệu của đối tượng thuộc lớp ngoài
   1 đối tượng thuộc lớp trong được tạo trong 1 phương thức tĩnh chỉ có
    thể truy cập các trường dữ liệu tĩnh

         2009-2010            OOP - http://mim.hus.edu.vn/elearning      22

More Related Content

What's hot

Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007Xuantham Nguyen
 
Huong danmatlab simulink
Huong danmatlab simulinkHuong danmatlab simulink
Huong danmatlab simulinkAnh Vu
 
Giáo trình vb.net
Giáo trình vb.netGiáo trình vb.net
Giáo trình vb.netHung Pham
 
Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Vu Tuan
 
Bai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaBai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaNhuận Lê Văn
 
Oop unit 13 tổng quan về uml
Oop unit 13 tổng quan về umlOop unit 13 tổng quan về uml
Oop unit 13 tổng quan về umlTráng Hà Viết
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátTráng Hà Viết
 
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Muoivy Wm
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituongMinh Ngoc Tran
 
Bai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaileBai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaileNhuận Lê Văn
 
Bài tập thực hành số 1
Bài tập thực hành số 1Bài tập thực hành số 1
Bài tập thực hành số 1Tran Trung Dung
 
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577Trần Đức Anh
 

What's hot (20)

Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007Matlab cho sv_tbd-dt_8-2007
Matlab cho sv_tbd-dt_8-2007
 
Huong danmatlab simulink
Huong danmatlab simulinkHuong danmatlab simulink
Huong danmatlab simulink
 
Giáo trình vb.net
Giáo trình vb.netGiáo trình vb.net
Giáo trình vb.net
 
Chuong3 c
Chuong3 c Chuong3 c
Chuong3 c
 
Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731
 
Oop 3
Oop 3Oop 3
Oop 3
 
Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
 
Bai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaBai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethua
 
Co ban ve_matlab
Co ban ve_matlabCo ban ve_matlab
Co ban ve_matlab
 
Bai05 ket tapvakethua
Bai05 ket tapvakethuaBai05 ket tapvakethua
Bai05 ket tapvakethua
 
Oop unit 13 tổng quan về uml
Oop unit 13 tổng quan về umlOop unit 13 tổng quan về uml
Oop unit 13 tổng quan về uml
 
Bai07 da hinh
Bai07 da hinhBai07 da hinh
Bai07 da hinh
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
 
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
Tai lieu huong_dan_hoc_matlab_danh_cho_mon_xu_ly_anh_rat_hay_2264_7433
 
Chuong 4
Chuong 4Chuong 4
Chuong 4
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituong
 
Bai08 lap trinhtongquat
Bai08 lap trinhtongquatBai08 lap trinhtongquat
Bai08 lap trinhtongquat
 
Bai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaileBai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaile
 
Bài tập thực hành số 1
Bài tập thực hành số 1Bài tập thực hành số 1
Bài tập thực hành số 1
 
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577Tailieu.vncty.com   06 matlab-osadq3_j2qu_20130412090644_577
Tailieu.vncty.com 06 matlab-osadq3_j2qu_20130412090644_577
 

Similar to Oop 8

Lappj trình hướng đối tượng
Lappj trình hướng đối tượngLappj trình hướng đối tượng
Lappj trình hướng đối tượngHưởng Nguyễn
 
Lớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đôngLớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đôngEnter Focus
 
Support vector machines
Support vector machinesSupport vector machines
Support vector machinesThơm Trần
 
Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Nhat Linh Luong
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLmTrn286060
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLmTrn286060
 
Composite pattern
Composite patternComposite pattern
Composite patternmentallog
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4pisu412
 
b6-190213084710.pdf
b6-190213084710.pdfb6-190213084710.pdf
b6-190213084710.pdfQuyVo27
 
Gt ung dung tin hoc trong kinh doanh
Gt ung dung tin hoc trong kinh doanhGt ung dung tin hoc trong kinh doanh
Gt ung dung tin hoc trong kinh doanhvantai30
 
10. C - Function And Operator Overload
10. C   - Function And Operator Overload10. C   - Function And Operator Overload
10. C - Function And Operator OverloadDarian Pruitt
 

Similar to Oop 8 (20)

Oop 5
Oop 5Oop 5
Oop 5
 
Oop 0
Oop 0Oop 0
Oop 0
 
Lappj trình hướng đối tượng
Lappj trình hướng đối tượngLappj trình hướng đối tượng
Lappj trình hướng đối tượng
 
Oop 7
Oop 7Oop 7
Oop 7
 
Lớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đôngLớp học lập trình android tại hà đông
Lớp học lập trình android tại hà đông
 
Support vector machines
Support vector machinesSupport vector machines
Support vector machines
 
Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
 
Composite pattern
Composite patternComposite pattern
Composite pattern
 
Oop 11
Oop 11Oop 11
Oop 11
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
 
b6-190213084710.pdf
b6-190213084710.pdfb6-190213084710.pdf
b6-190213084710.pdf
 
Chuong8 (2)
Chuong8 (2)Chuong8 (2)
Chuong8 (2)
 
C9 templates
C9 templatesC9 templates
C9 templates
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Gt ung dung tin hoc trong kinh doanh
Gt ung dung tin hoc trong kinh doanhGt ung dung tin hoc trong kinh doanh
Gt ung dung tin hoc trong kinh doanh
 
Bai11 ooad bieu_dolop
Bai11 ooad bieu_dolopBai11 ooad bieu_dolop
Bai11 ooad bieu_dolop
 
10. C - Function And Operator Overload
10. C   - Function And Operator Overload10. C   - Function And Operator Overload
10. C - Function And Operator Overload
 
Chuong 3
Chuong 3Chuong 3
Chuong 3
 

More from Thai Hoc Vu

Ngôn ngữ tiếng nhật hiện đại
Ngôn ngữ tiếng nhật hiện đạiNgôn ngữ tiếng nhật hiện đại
Ngôn ngữ tiếng nhật hiện đạiThai Hoc Vu
 
Bài tập ôn lập trình
Bài tập ôn lập trìnhBài tập ôn lập trình
Bài tập ôn lập trìnhThai Hoc Vu
 
Giáo trình uốn tóc phần 1
Giáo trình uốn tóc phần 1Giáo trình uốn tóc phần 1
Giáo trình uốn tóc phần 1Thai Hoc Vu
 
Danh mục cable
Danh mục cableDanh mục cable
Danh mục cableThai Hoc Vu
 

More from Thai Hoc Vu (7)

Ngôn ngữ tiếng nhật hiện đại
Ngôn ngữ tiếng nhật hiện đạiNgôn ngữ tiếng nhật hiện đại
Ngôn ngữ tiếng nhật hiện đại
 
Bài tập ôn lập trình
Bài tập ôn lập trìnhBài tập ôn lập trình
Bài tập ôn lập trình
 
Giáo trình uốn tóc phần 1
Giáo trình uốn tóc phần 1Giáo trình uốn tóc phần 1
Giáo trình uốn tóc phần 1
 
Danh mục cable
Danh mục cableDanh mục cable
Danh mục cable
 
OOP-9
OOP-9OOP-9
OOP-9
 
Oop 1
Oop 1Oop 1
Oop 1
 
Oop 13
Oop 13Oop 13
Oop 13
 

Recently uploaded

SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdfSLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdfhoangtuansinh1
 
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...Nguyen Thanh Tu Collection
 
Đề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
Đề thi tin học HK2 lớp 3 Chân Trời Sáng TạoĐề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
Đề thi tin học HK2 lớp 3 Chân Trời Sáng Tạowindcances
 
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfBỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfNguyen Thanh Tu Collection
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docxTHAO316680
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...Nguyen Thanh Tu Collection
 
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdfxemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdfXem Số Mệnh
 
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...Nguyen Thanh Tu Collection
 
bài thi bảo vệ nền tảng tư tưởng của Đảng.docx
bài thi bảo vệ nền tảng tư tưởng của Đảng.docxbài thi bảo vệ nền tảng tư tưởng của Đảng.docx
bài thi bảo vệ nền tảng tư tưởng của Đảng.docxTrnHiYn5
 
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hộiTrắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hộiNgocNguyen591215
 
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Bài giảng môn Truyền thông đa phương tiện
Bài giảng môn Truyền thông đa phương tiệnBài giảng môn Truyền thông đa phương tiện
Bài giảng môn Truyền thông đa phương tiệnpmtiendhti14a5hn
 
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...hoangtuansinh1
 
Giáo trình nhập môn lập trình - Đặng Bình Phương
Giáo trình nhập môn lập trình - Đặng Bình PhươngGiáo trình nhập môn lập trình - Đặng Bình Phương
Giáo trình nhập môn lập trình - Đặng Bình Phươnghazzthuan
 
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptxBài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptxDungxPeach
 
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhh
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhhkinh tế chính trị mác lênin chương hai và hàng hoá và sxxhh
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhhdtlnnm
 
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdfltbdieu
 

Recently uploaded (20)

SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdfSLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
 
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
 
Đề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
Đề thi tin học HK2 lớp 3 Chân Trời Sáng TạoĐề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
Đề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
 
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfBỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdfxemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
 
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
 
bài thi bảo vệ nền tảng tư tưởng của Đảng.docx
bài thi bảo vệ nền tảng tư tưởng của Đảng.docxbài thi bảo vệ nền tảng tư tưởng của Đảng.docx
bài thi bảo vệ nền tảng tư tưởng của Đảng.docx
 
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hộiTrắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
 
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Bài giảng môn Truyền thông đa phương tiện
Bài giảng môn Truyền thông đa phương tiệnBài giảng môn Truyền thông đa phương tiện
Bài giảng môn Truyền thông đa phương tiện
 
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
 
Giáo trình nhập môn lập trình - Đặng Bình Phương
Giáo trình nhập môn lập trình - Đặng Bình PhươngGiáo trình nhập môn lập trình - Đặng Bình Phương
Giáo trình nhập môn lập trình - Đặng Bình Phương
 
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptxBài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
 
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhh
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhhkinh tế chính trị mác lênin chương hai và hàng hoá và sxxhh
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhh
 
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
 

Oop 8

  • 1. Bài 8: Giao diện và tính đa hình Giảng viên: Nguyễn Thị Minh Huyền nguyenthiminhhuyen@hus.edu.vn Đỗ Thanh Hà dothanhha@hus.edu.vn
  • 2. Tài liệu tham khảo  BigJava – chương 11 2009-2010 OOP - http://mim.hus.edu.vn/elearning 2
  • 3. Tái sử dụng mã chương trình (1)  Xét ví dụ DataSet.java (ch07/input)  Tìm giá trị trung bình và giá trị lớn nhất của 1 tập các giá trị số  Phải làm gì nếu muốn tìm trị trung bình và lớn nhất của 1 tập các tài khoản ngân hàng (BankAccount, ch08)?  Hay muốn tìm loại tiền xu có giá trị cao nhất trong 1 tập các loại tiền xu (Coin, bài 6)? 2009-2010 OOP - http://mim.hus.edu.vn/elearning 3
  • 4. Tái sử dụng mã chương trình (2) public class DataSet // Modified for BankAccount objects { . . . public void add(BankAccount x) { sum = sum + x.getBalance(); if (count == 0 || maximum.getBalance() < x.getBalance()) maximum = x; count++; } public BankAccount getMaximum() { return maximum; } private double sum; private BankAccount maximum; private int count; } 2009-2010 OOP - http://mim.hus.edu.vn/elearning 4
  • 5. Tái sử dụng mã chương trình (3) public class DataSet // Modified for Coin objects { . . . public void add(Coin x) { sum = sum + x.getValue(); if (count == 0 || maximum.getValue() < x.getValue()) maximum = x; count++; } public Coin getMaximum() { return maximum; } private double sum; private Coin maximum; private int count; } 2009-2010 OOP - http://mim.hus.edu.vn/elearning 5
  • 6. Tái sử dụng mã chương trình (4)  Các ví dụ trên có chung cơ chế phân tích dữ liệu, chỉ khác nhau về độ đo dữ liệu  Các lớp liên quan có thể thống nhất 1 phương thức getMeasure để thu được giá trị đo dùng trong quá trình phân tích  Khi đó có thể cài 1 lớp duy nhất DataSet có thể sử dụng chung, trong đó phần thân của phương thức add có dạng: sum = sum + x.getMeasure(); if (count == 0 || maximum.getMeasure() < x.getMeasure()) maximum = x; count++;  Kiểu của biến x là gì? x cần phải tham chiếu tới bất kì lớp nào có hàm getMeasure. 2009-2010 OOP - http://mim.hus.edu.vn/elearning 6
  • 7. Tái sử dụng mã chương trình (5)  Để mô tả các lớp có chung một số thao tác nào đó (như getMeasure), trong Java người ta khai báo một kiểu giao diện (interface) đặc tả các thao tác chung đó  public interface Measurable { double getMeasure(); }  Khai báo interface liệt kê danh sách các nguyên mẫu phương thức (prototype) mà kiểu giao diện cần có  Các lớp có chung giao diện này sẽ cài đặt (implements) cụ thể các phương thức đặc tả trong kiểu giao diện. 2009-2010 OOP - http://mim.hus.edu.vn/elearning 7
  • 8. Lớp DataSet dùng chung cho các đối tượng đo được public class DataSet { . . . public void add(Measurable x) { sum = sum + x.getMeasure(); if (count == 0 || maximum.getMeasure() < x.getMeasure()) maximum = x; count++; } public Measurable getMaximum() { return maximum; } private double sum; private Measurable maximum; private int count; } 2009-2010 OOP - http://mim.hus.edu.vn/elearning 8
  • 9. Cài đặt một kiểu giao diện  Để khai báo 1 lớp cài đặt 1 kiểu giao diện, dùng từ khoá implements  public class BankAccount implements Measurable { public double getMeasure() { return balance; } // Additional methods and fields }  1 lớp có thể cài đặt nhiều kiểu giao diện  Khi cài đặt 1 kiểu giao diện, lớp đó phải định nghĩa tất cả các phương thức đã đặc tả trong kiểu giao diện 2009-2010 OOP - http://mim.hus.edu.vn/elearning 9
  • 10. Cú pháp  Định nghĩa 1 kiểu giao diện  public interface InterfaceName { // method signatures }  Tất cả các phương thức trong kiểu giao diện đều đương nhiên là public  Cài đặt 1 kiểu giao diện  public class ClassName implements InterfaceName, InterfaceName, ... { // interface method implementations // other methods // instance variables }  VD: Xem các lớp trong ch11/measure1 2009-2010 OOP - http://mim.hus.edu.vn/elearning 10
  • 11. Sơ đồ UML (1)  Sử dụng kiểu giao diện có thể giúp giảm tính móc nối giữa các lớp  Kí hiệu UML:  Kiểu giao diện được đánh dấu bằng nhãn «interface»  Mũi tên nét đứt với mũi hình tam giác kí hiệu quan hệ “is-a” giữa 1 lớp và 1 giao diện  Mũi tên nét đứt với mũi hình chữ v mở kí hiệu quan hệ “uses” hay quan hệ phụ thuộc 2009-2010 OOP - http://mim.hus.edu.vn/elearning 11
  • 12. Sơ đồ UML (2)  VD 2009-2010 OOP - http://mim.hus.edu.vn/elearning 12
  • 13. Chuyển đổi kiểu giữa lớp và giao diện  Có thể chuyển 1 kiểu lớp về 1 kiểu giao diện, với điều kiện lớp cài đặt giao diện  BankAccount account = new BankAccount(10000); Measurable x = account; // OK  Ngược lại, để chuyển 1 kiểu giao diện về 1 kiểu lớp phải thực hiện ép kiểu  DataSet coinData = new DataSet(); coinData.add(new Coin(0.25, "quarter")); coinData.add(new Coin(0.1, "dime")); . . . // Get the largest coin Measurable max = coinData.getMaximum(); String name = max.getName(); // ERROR Coin maxCoin = (Coin) max; String name = maxCoin.getName(); 2009-2010 OOP - http://mim.hus.edu.vn/elearning 13
  • 14. Tính đa hình  Biến kiểu giao diện dùng để chứa tham chiếu tới đối tượng của 1 lớp cài đặt giao diện đó  Measurable x; x = new BankAccount(10000); x = new Coin(0.1, "dime");  Có thể gọi bất kì phương thức nào của kiểu giao diện với tham biến ẩn x  Tuỳ theo x đang tham chiếu tới đối tượng thuộc lớp nào thì áp dụng phương thức cài đặt trong lớp đó => tính đa hình  Gọi là liên kết muộn (late binding): khi chạy chương trình mới xác định dùng phương thức của lớp nào  Khác với liên kết sớm (early binding): chương trình dịch xác định dùng phương thức nào trong các phương thức cùng tên 2009-2010 OOP - http://mim.hus.edu.vn/elearning 14
  • 15. Sử dụng kiểu giao diện cho gọi lại (callback)  Nhược điểm của kiểu giao diện Measurable:  Chỉ dùng được giao diện này để đo trong các lớp thuộc quyền của người lập trình  Chỉ đo/đánh giá được đối tượng theo 1 tiêu chí  VD với 1 tài khoản tiết kiệm không thể vừa đo theo số tiền trong tài khoản, vừa đo theo lãi suất  Cơ chế gọi lại (callback): cho phép 1 lớp gọi tới 1 phương thức đặc trưng tuỳ theo thông tin cần khai thác  Xét lớp DataSet  Trong VD trước, việc đo 1 đối tượng do 1 phương thức của đối tượng đó đảm nhiệm  Thay cho cách làm đó, dùng 1 phương thức đo có tham biến hiện là đối tượng cần đo 2009-2010 OOP - http://mim.hus.edu.vn/elearning 15
  • 16. Sử dụng kiểu giao diện cho gọi lại (2)  Muốn vậy:  Định nghĩa kiểu giao diện public interface Measurer { double measure(Object anObject); }  Định nghĩa phương thức add trong DataSet public void add(Object x) { sum = sum + measurer.measure(x); if (count == 0 || measurer.measure(maximum) < measurer.measure(x)) maximum = x; count++; } 2009-2010 OOP - http://mim.hus.edu.vn/elearning 16
  • 17. Sử dụng kiểu giao diện cho gọi lại (3)  Cài đặt giao diện Measurer: public class RectangleMeasurer implements Measurer { public double measure(Object anObject) { Rectangle aRectangle = (Rectangle) anObject; double area = aRectangle.getWidth()*aRectangle.getHeight(); return area; } }  Sử dụng DataSet: Measurer m = new RectangleMeasurer(); DataSet data = new DataSet(m); data.add(new Rectangle(5, 10, 20, 30)); data.add(new Rectangle(10, 20, 30, 40)); . . . 2009-2010 OOP - http://mim.hus.edu.vn/elearning 17
  • 18. Sơ đồ UML  Xem chương trình ch11/measure2 2009-2010 OOP - http://mim.hus.edu.vn/elearning 18
  • 19. Lớp trong (inner classes)  Có thể định nghĩa 1 lớp đơn giản bên trong 1 phương thức  Lớp này chỉ dùng được trong phương thức  VD (ch11/measure3) public class DataSetTester3 { public static void main(String[] args) { class RectangleMeasurer implements Measurer { . . . } Measurer m = new RectangleMeasurer(); DataSet data = new DataSet(m); . . . } }  Chương trình dịch sẽ tạo ra 1 tệp riêng cho lớp trong DataSetTester3$1RectangleMeasurer.class  Nếu 1 lớp được định nghĩa trong 1 lớp khác nhưng ngoài các phương thức của lớp đó thì có thể dùng được lớp đó trong mọi phương thức của lớp ấy. 2009-2010 OOP - http://mim.hus.edu.vn/elearning 19
  • 20. Ví dụ minh hoạ: Xử lí sự kiện đếm thời gian  javax.swing.Timer sinh các sự kiện đếm thời gian cách đều nhau, hữu dụng khi cần cập nhật 1 đối tượng trong 1 khoảng thời gian đều đặn  Cách dùng (Xem ch11/timer1):  Định nghĩa 1 lớp MyListener cài đặt kiểu giao diện ActionListener: gửi sự kiện tới bộ nghe  public interface ActionListener {      void actionPerformed(ActionEvent event); }  class MyListener implements ActionListener {    void actionPerformed(ActionEvent event){       // This action will be executed at each timer event       Place listener action here    } }  Tạo đối tượng Timer với bộ nghe đã cài đặt  MyListener listener = new MyListener(); Timer t = new Timer(interval, listener); t.start(); 2009-2010 OOP - http://mim.hus.edu.vn/elearning 20
  • 21. Truy cập các biến xung quanh (1)  Các phương thức của 1 lớp trong có thể truy cập các biến định nghĩa trong phạm vi xung quanh  Hữu dụng khi cài đặt các bộ điều khiển sự kiện  VD: Làm hình động – di chuyển 1 hình 10 lần trong 1s class Mover implements ActionListener { public void actionPerformed(ActionEvent event) { // Move the rectangle } } ActionListener listener = new Mover(); final int DELAY = 100; // Milliseconds between timer ticks Timer t = new Timer(DELAY, listener); t.start(); 2009-2010 OOP - http://mim.hus.edu.vn/elearning 21
  • 22. Truy cập các biến xung quanh (2)  Phương thức actionPerformed có thể truy cập các biến trong phạm vi xung quanh (ch11/timer2):  public static void main(String[] args) { . . . final Rectangle box = new Rectangle(5, 10, 20, 30); class Mover implements ActionListener { public void actionPerformed(ActionEvent event) { // Move the rectangle box.translate(1, 1); } } . . . }  Các biến địa phương muốn truy cập được bởi lớp trong phải được khai báo là final  Lớp trong có thể truy cập trường dữ liệu của đối tượng thuộc lớp ngoài  1 đối tượng thuộc lớp trong được tạo trong 1 phương thức tĩnh chỉ có thể truy cập các trường dữ liệu tĩnh 2009-2010 OOP - http://mim.hus.edu.vn/elearning 22