SlideShare a Scribd company logo
1 of 23
Download to read offline
Bài 6: Thiết kế lớp


    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 9




    2009-2010   OOP - http://mim.hus.edu.vn/elearning   2
Lựa chọn các lớp (1)
   Mỗi lớp biểu diễn một khái niệm đơn trong
    lĩnh vực của bài toán
   Tên của lớp nên là 1 danh từ mô tả khái niệm
    đó. VD:
           Khái niệm trong toán học:
                Điểm (Point)
                Hình chữ nhật (Rectangle)
                Hình elíp (Ellipse)
           Khái niệm trong đời sống:
                Tài khoản ngân hàng (BankAccount)
                Quầy thu tiền (CashRegister)

2009-2010                   OOP - http://mim.hus.edu.vn/elearning   3
Lựa chọn các lớp (2)
   Nên phân biệt các loại lớp:
           Loại lớp cho các đối tượng thực hiện 1 kiểu công
            việc nào đó (vd: Scanner, Random)
           Loại lớp tiện ích chỉ chứa các phương thức tĩnh và
            các hằng (vd: Math)
           Lớp khởi động chương trình: chỉ chứa hàm main
   Nguyên tắc số 1 khi xác định tên cho các lớp:
    tìm các danh từ trong mô tả bài toán


2009-2010                OOP - http://mim.hus.edu.vn/elearning   4
Tính gắn kết (1)
   Mỗi lớp nên biểu diễn một khái niệm đơn
   Giao diện công khai của 1 lớp là nhất quán nếu tất cả
    các đặc trưng của nó đều gắn kết với khái niệm mà lớp
    đó biểu diễn
   Chẳng hạn lớp CashRegister (BigJava – ch04) thiếu tính
    gắn kết
public class CashRegister {
  public void enterPayment(int dollars, int    quarters,
             int dimes, int nickels, int pennies)
  ...
  public static final double NICKEL_VALUE = 0.05;
  public static final double DIME_VALUE = 0.1;
  public static final double QUARTER_VALUE = 0.25;
  ...
}
     2009-2010         OOP - http://mim.hus.edu.vn/elearning   5
Tính gắn kết (2)
   Thực tế, lớp CashRegister như trên đề cập tới 2 khái niệm:
    quầy thu ngân và tiền xu
   Giải pháp: tạo 2 lớp

public class Coin {
  public Coin(double aValue, String aName){ ... }
  public double getValue(){ ... }
  ...
}
public class CashRegister {
  public void enterPayment(int coinCount, Coin coinType)
  { ... }
  ...
}

      2009-2010          OOP - http://mim.hus.edu.vn/elearning   6
Tính móc nối (1)
   1 lớp phụ thuộc vào 1 lớp khác nếu nó sử dụng các
    đối tượng của lớp đó
           Lớp CashRegister phụ thuộc vào lớp Coin để xác định số
            tiền trả
           Lớp Coin không phụ thuộc vào lớp CashRegister
   Tính móc nối cao: nhiều phụ thuộc giữa các lớp
   Cần giảm thiểu sự móc nối để hạn chế ảnh hưởng
    khi có thay đổi về giao diện của mỗi lớp
   Vẽ sơ đồ lớp để hiển thị quan hệ giữa các lớp
   Sử dụng UML (Unified Modeling Language): kí hiệu
    dùng cho phân tích, thiết kế hướng đối tượng


2009-2010                OOP - http://mim.hus.edu.vn/elearning   7
Tính móc nối (2)
   Quan hệ phụ thuộc
    giữa 2 lớp
    CashRegister và
    Coin




2009-2010     OOP - http://mim.hus.edu.vn/elearning   8
Tính móc nối cao/thấp




2009-2010   OOP - http://mim.hus.edu.vn/elearning   9
Các lớp không biến đổi
(immutable classes)
   Các lớp không biến đổi là các lớp không có
    phương thức biến đổi (mutator) thuộc tính
    đối tượng
           VD: String, Double, v.v.
                String name = "John Q. Public";
                 String uppercased =
                 name.toUpperCase(); // name is not
                 changed
   Việc xuất ra tham chiếu tới một đối tượng
    thuộc các lớp này là an toàn, các chương
    trình khác không thể biến đổi được trạng thái
    đối tượng đó
2009-2010                OOP - http://mim.hus.edu.vn/elearning   10
Hiệu ứng phụ (1)
    Hiệu ứng phụ của 1 phương thức: biến đổi dữ
     liệu bên ngoài
public void transfer(double amount,
                           BankAccount other) {
   balance = balance - amount;
   other.balance = other.balance + amount;
   // Modifies explicit parameter
}
    Biến đổi tham biến hiện có thể dẫn đến hiệu
     ứng ngoài tầm kiểm soát của người lập trình
     => nếu có thể thì nên tránh

    2009-2010      OOP - http://mim.hus.edu.vn/elearning   11
Hiệu ứng phụ (2)
   Ví dụ khác: đầu ra của chương trình
public void printBalance() // Not recommended
{
    System.out.println("The balance is now $" + balance);
}
       Ý tưởng không tốt: Thông báo bằng tiếng Anh, dòng dữ
        liệu ra là System.out
       Tốt nhất là tách biệt được việc nhập/xuất dữ liệu với mục
        đích chính của lớp cần xây dựng


         2009-2010         OOP - http://mim.hus.edu.vn/elearning   12
Truyền tham biến
   Các phương thức truyền tham biến: theo giá trị (value)/theo
    địa chỉ (reference)
   Java: truyền theo giá trị
       Một phương thức có thể thay đổi trạng thái của đối tượng làm tham
        biến, nhưng không thay được địa chỉ của đối tượng đó
    public class BankAccount {
      public void transfer(double amount, BankAccount otherAccount)
      {
        balance = balance - amount;
        double newBalance = otherAccount.balance + amount;
        otherAccount = new BankAccount(newBalance);
        // Won't work
      }
    }
    VD: harrysChecking.transfer(500, savingsAccount);


          2009-2010            OOP - http://mim.hus.edu.vn/elearning        13
Điều kiện trước (1)
   Điều kiện trước (precondition): Yêu cầu mà chương
    trình gọi phương thức phải tuân theo
   Công bố điều kiện trước trong tài liệu hướng dẫn
           /**
            Deposits money into this account.
            @param amount the amount of money to deposit
            (Precondition: amount >= 0)
            */
   Nếu điều kiện trước bị vi phạm, phương thức không
    chịu trách nhiệm về việc tính đúng kết quả mà có thể
    xử lí theo cách bất kì


2009-2010              OOP - http://mim.hus.edu.vn/elearning   15
Điều kiện trước (2)
   Nếu điều kiện trước bị vi phạm, phương thức
    có thể “ném” ngoại lệ (throw exception) – bài
    12
if (amount < 0) throw new IllegalArgumentException();
balance = balance + amount;
   Phương thức không bắt buộc phải kiểm tra
    điều kiện trước, chương trình gọi phải chịu
    trách nhiệm nếu không tuân thủ điều kiện đã
    đưa ra

2009-2010         OOP - http://mim.hus.edu.vn/elearning   16
Điều kiện trước (3)
   Phương thức có thể thực hiện kiểm tra xác nhận
    bằng chỉ thị assert
           Cú pháp: assert condition;
           VD: assert amount >= 0;
           Bật chế độ kiểm tra xác nhận khi chạy:
                java –enableassertions ClassName
                Nếu biểu thức điều kiện có giá trị false, chương trình sẽ ném
                 ngoại lệ
   Tránh việc lẳng lặng kết thúc phương thức khi điều
    kiện trước không thoả mãn:
if (amount < 0) return; // Not recommended; hard to debug
balance = balance + amount;



2009-2010                     OOP - http://mim.hus.edu.vn/elearning              17
Điều kiện sau
   Điều kiện sau (postcondition): điều kiện thoả mãn
    sau khi thực hiện phương thức
   Nếu lời gọi phương thức thoả mãn điều kiện trước thì
    cũng phải đảm bảo thoả mãn điều kiện sau
   Có 2 loại điều kiện sau:
           Giá trị trả lại được tính toán đúng
           Đối tượng ở trạng thái xác định nào đó khi thực hiện xong
            phương thức
     /**
       Deposits money into this account.
       (Postcondition: getBalance() >= 0)
       @param amount the amount of money to deposit
       (Precondition: amount >= 0)
       */


2009-2010                  OOP - http://mim.hus.edu.vn/elearning        18
Phương thức tĩnh - Trường dữ
    liệu tĩnh
   Phương thức tĩnh:
       Mỗi phương thức phải thuộc 1 lớp nào đó
       Phương thức tĩnh: Không có tham biến ẩn
               phương thức dùng cho các tính toán không áp dụng lên đối tượng
                của lớp
   Trường dữ liệu tĩnh
       Trường dữ liệu chung cho tất cả các đối tượng trong lớp
               Chú ý khởi tạo trường dữ liệu tĩnh
          public class BankAccount{
            . . .
            private static int lastAssignedNumber = 1000;
            //Executed once, when class is loaded
          }
               Trừ trường hợp dữ liệu là hằng (final), các trường dữ liệu tĩnh nên
                có quyền truy nhập private
    2009-2010                    OOP - http://mim.hus.edu.vn/elearning           19
Tổ chức các lớp liên quan
thành các gói
   Gói (package): Tập các lớp có liên quan
   Để đặt các lớp trong 1 tệp vào 1 gói, dòng
    đầu tiên trong tệp mã nguồn cần có chỉ thị:
           package packageName;
   Tên của gói chứa 1 hay nhiều tên phân cách
    nhau bằng dấu chấm (.)
           VD: package com.horstmann.bigjava;
   Gói ngầm định (default package) không có
    tên

2009-2010            OOP - http://mim.hus.edu.vn/elearning   20
Khai báo sử dụng gói (import)
   Có thể sử dụng 1 lớp thuộc 1 gói mà không
    cần lệnh import
           Trong toàn bộ chương trình phải viết tên đầy đủ
            của lớp đó
            java.util.Scanner in = new
                         java.util.Scanner(System.in);
   Để không phải khai báo nhiều lần cho các lớp
    trong cùng 1 gói, dùng kí tự gộp *
           import java.util.*;

2009-2010               OOP - http://mim.hus.edu.vn/elearning   21
Tên gói và định vị các lớp
   Dùng gói để tránh xung đột tên lớp
           VD: java.util.Timer và javax.swing.Timer
   Tên gói không được nhập nhằng
           Khuyến cáo: Bắt đầu tên gói với tên miền Internet
            (com.horstmann.bigjava)
   Tên đường dẫn của các lớp trong gói:
           phải đúng với tên gói (com/horstman/bigjava)
           được bắt đầu với đường dẫn trong biến môi trường
            CLASSPATH
                chứa danh sách các thư mục cơ sở có thể chứa các thư mục
                 của các gói
                set CLASSPATH=c:homewalters;.


2009-2010                    OOP - http://mim.hus.edu.vn/elearning          22
Thư mục cơ sở và thư mục
con cho các gói




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

More Related Content

What's hot

Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPTBài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPTMasterCode.vn
 
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGBÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGTrường Phạm
 
OOP Review - Ôn tập Hướng Đối Tượng
OOP Review - Ôn tập Hướng Đối TượngOOP Review - Ôn tập Hướng Đối Tượng
OOP Review - Ôn tập Hướng Đối TượngNguyễn Quang Thiện
 
T d que_lap_trinh_huong_doi_tuong
T d que_lap_trinh_huong_doi_tuongT d que_lap_trinh_huong_doi_tuong
T d que_lap_trinh_huong_doi_tuongtoiseden91
 
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
 
Chuong 1. Lập trình hướng đối tượng trong java
Chuong 1. Lập trình hướng đối tượng trong javaChuong 1. Lập trình hướng đối tượng trong java
Chuong 1. Lập trình hướng đối tượng trong javathienlucpm2
 
Giáo trình vb.net
Giáo trình vb.netGiáo trình vb.net
Giáo trình vb.netHung Pham
 
Lập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệLập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệTrần Thiên Đại
 
Bài 2 : Các khái niệm và nguyên tắc cơ bản của NET Framework - NỀN TẢNG LẬP T...
Bài 2 : Các khái niệm và nguyên tắc cơ bản của NET Framework - NỀN TẢNG LẬP T...Bài 2 : Các khái niệm và nguyên tắc cơ bản của NET Framework - NỀN TẢNG LẬP T...
Bài 2 : Các khái niệm và nguyên tắc cơ bản của NET Framework - NỀN TẢNG LẬP T...MasterCode.vn
 
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngOop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngTráng Hà Viết
 
Bài 4 - Classes, objects và namespaces - Nền tảng lập trình ứng dụng với C#
Bài 4 - Classes, objects và namespaces - Nền tảng lập trình ứng dụng với C#Bài 4 - Classes, objects và namespaces - Nền tảng lập trình ứng dụng với C#
Bài 4 - Classes, objects và namespaces - Nền tảng lập trình ứng dụng với C#MasterCode.vn
 
Bài 9 - Serialization - Nền tảng lập trình ứng dụng với C#
Bài 9 - Serialization - Nền tảng lập trình ứng dụng với C#Bài 9 - Serialization - Nền tảng lập trình ứng dụng với C#
Bài 9 - Serialization - Nền tảng lập trình ứng dụng với C#MasterCode.vn
 
Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Kuli An
 
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
 

What's hot (19)

Oop 0
Oop 0Oop 0
Oop 0
 
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPTBài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
 
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGBÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
 
OOP Review - Ôn tập Hướng Đối Tượng
OOP Review - Ôn tập Hướng Đối TượngOOP Review - Ôn tập Hướng Đối Tượng
OOP Review - Ôn tập Hướng Đối Tượng
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
T d que_lap_trinh_huong_doi_tuong
T d que_lap_trinh_huong_doi_tuongT d que_lap_trinh_huong_doi_tuong
T d que_lap_trinh_huong_doi_tuong
 
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
 
Chuong 1. Lập trình hướng đối tượng trong java
Chuong 1. Lập trình hướng đối tượng trong javaChuong 1. Lập trình hướng đối tượng trong java
Chuong 1. Lập trình hướng đối tượng trong java
 
Giáo trình vb.net
Giáo trình vb.netGiáo trình vb.net
Giáo trình vb.net
 
Lập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệLập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất Nghệ
 
Chuong 4
Chuong 4Chuong 4
Chuong 4
 
Bài 2 : Các khái niệm và nguyên tắc cơ bản của NET Framework - NỀN TẢNG LẬP T...
Bài 2 : Các khái niệm và nguyên tắc cơ bản của NET Framework - NỀN TẢNG LẬP T...Bài 2 : Các khái niệm và nguyên tắc cơ bản của NET Framework - NỀN TẢNG LẬP T...
Bài 2 : Các khái niệm và nguyên tắc cơ bản của NET Framework - NỀN TẢNG LẬP T...
 
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngOop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượng
 
Chuong 5
Chuong 5Chuong 5
Chuong 5
 
Bài 4 - Classes, objects và namespaces - Nền tảng lập trình ứng dụng với C#
Bài 4 - Classes, objects và namespaces - Nền tảng lập trình ứng dụng với C#Bài 4 - Classes, objects và namespaces - Nền tảng lập trình ứng dụng với C#
Bài 4 - Classes, objects và namespaces - Nền tảng lập trình ứng dụng với C#
 
Bài 9 - Serialization - Nền tảng lập trình ứng dụng với C#
Bài 9 - Serialization - Nền tảng lập trình ứng dụng với C#Bài 9 - Serialization - Nền tảng lập trình ứng dụng với C#
Bài 9 - Serialization - Nền tảng lập trình ứng dụng với C#
 
Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#
 
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
 
Phạm văn ất
Phạm văn ấtPhạm văn ất
Phạm văn ất
 

Similar to Oop 6

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
 
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
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituongMinh Ngoc Tran
 
Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08. .
 
PMMNM.docx
PMMNM.docxPMMNM.docx
PMMNM.docxNgnHng26
 
Composite pattern
Composite patternComposite pattern
Composite patternmentallog
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Hoàng Hà
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Hoàng Hà
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson09
Lap trinh huong_doi_tuong_cpp_dhct_lesson09Lap trinh huong_doi_tuong_cpp_dhct_lesson09
Lap trinh huong_doi_tuong_cpp_dhct_lesson09xcode_esvn
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfHiNht6
 
De kiem tra Chuyen de ngon ngu lap trinh 1 - Visual Basic.Net
De kiem tra Chuyen de ngon ngu lap trinh 1 - Visual Basic.NetDe kiem tra Chuyen de ngon ngu lap trinh 1 - Visual Basic.Net
De kiem tra Chuyen de ngon ngu lap trinh 1 - Visual Basic.Netsin216
 

Similar to Oop 6 (20)

Chuong8 (2)
Chuong8 (2)Chuong8 (2)
Chuong8 (2)
 
Oop 5
Oop 5Oop 5
Oop 5
 
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
 
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
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituong
 
Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08
 
PMMNM.docx
PMMNM.docxPMMNM.docx
PMMNM.docx
 
Composite pattern
Composite patternComposite pattern
Composite pattern
 
De bai tap lap trinh lan 1
De bai tap lap trinh   lan 1De bai tap lap trinh   lan 1
De bai tap lap trinh lan 1
 
Chapter 5
Chapter 5Chapter 5
Chapter 5
 
Chapter 3
Chapter 3Chapter 3
Chapter 3
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02
 
Chapter 4
Chapter 4Chapter 4
Chapter 4
 
Chapter 6
Chapter 6Chapter 6
Chapter 6
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson09
Lap trinh huong_doi_tuong_cpp_dhct_lesson09Lap trinh huong_doi_tuong_cpp_dhct_lesson09
Lap trinh huong_doi_tuong_cpp_dhct_lesson09
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdf
 
De kiem tra Chuyen de ngon ngu lap trinh 1 - Visual Basic.Net
De kiem tra Chuyen de ngon ngu lap trinh 1 - Visual Basic.NetDe kiem tra Chuyen de ngon ngu lap trinh 1 - Visual Basic.Net
De kiem tra Chuyen de ngon ngu lap trinh 1 - Visual Basic.Net
 
Dotnet
DotnetDotnet
Dotnet
 
Oop 11
Oop 11Oop 11
Oop 11
 

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 (8)

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 4
Oop 4Oop 4
Oop 4
 
Oop 1
Oop 1Oop 1
Oop 1
 
Oop 13
Oop 13Oop 13
Oop 13
 

Recently uploaded

Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )lamdapoet123
 
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếHệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếngTonH1
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...Nguyen Thanh Tu Collection
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Nguyen Thanh Tu Collection
 
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxnhungdt08102004
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ 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 “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...Nguyen Thanh Tu Collection
 
cuộc cải cách của Lê Thánh Tông - Sử 11
cuộc cải cách của Lê Thánh Tông -  Sử 11cuộc cải cách của Lê Thánh Tông -  Sử 11
cuộc cải cách của Lê Thánh Tông - Sử 11zedgaming208
 
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...Nguyen Thanh Tu Collection
 
Ma trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếMa trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếngTonH1
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...hoangtuansinh1
 
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXHTư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXHThaoPhuong154017
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxendkay31
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...Nguyen Thanh Tu Collection
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Nguyen Thanh Tu Collection
 
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoabài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa2353020138
 
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
 
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào môBryan Williams
 

Recently uploaded (20)

Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
Bài giảng về vật liệu ceramic ( sứ vệ sinh, gạch ốp lát )
 
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tếHệ phương trình tuyến tính và các ứng dụng trong kinh tế
Hệ phương trình tuyến tính và các ứng dụng trong kinh tế
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
 
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ 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 “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
 
cuộc cải cách của Lê Thánh Tông - Sử 11
cuộc cải cách của Lê Thánh Tông -  Sử 11cuộc cải cách của Lê Thánh Tông -  Sử 11
cuộc cải cách của Lê Thánh Tông - Sử 11
 
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
 
Ma trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tếMa trận - định thức và các ứng dụng trong kinh tế
Ma trận - định thức và các ứng dụng trong kinh tế
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
 
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXHTư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
Tư tưởng Hồ Chí Minh về độc lập dân tộc và CNXH
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
 
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoabài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
 
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...
 
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
[GIẢI PHẪU BỆNH] Tổn thương cơ bản của tb bào mô
 

Oop 6

  • 1. Bài 6: Thiết kế lớp 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 9 2009-2010 OOP - http://mim.hus.edu.vn/elearning 2
  • 3. Lựa chọn các lớp (1)  Mỗi lớp biểu diễn một khái niệm đơn trong lĩnh vực của bài toán  Tên của lớp nên là 1 danh từ mô tả khái niệm đó. VD:  Khái niệm trong toán học:  Điểm (Point)  Hình chữ nhật (Rectangle)  Hình elíp (Ellipse)  Khái niệm trong đời sống:  Tài khoản ngân hàng (BankAccount)  Quầy thu tiền (CashRegister) 2009-2010 OOP - http://mim.hus.edu.vn/elearning 3
  • 4. Lựa chọn các lớp (2)  Nên phân biệt các loại lớp:  Loại lớp cho các đối tượng thực hiện 1 kiểu công việc nào đó (vd: Scanner, Random)  Loại lớp tiện ích chỉ chứa các phương thức tĩnh và các hằng (vd: Math)  Lớp khởi động chương trình: chỉ chứa hàm main  Nguyên tắc số 1 khi xác định tên cho các lớp: tìm các danh từ trong mô tả bài toán 2009-2010 OOP - http://mim.hus.edu.vn/elearning 4
  • 5. Tính gắn kết (1)  Mỗi lớp nên biểu diễn một khái niệm đơn  Giao diện công khai của 1 lớp là nhất quán nếu tất cả các đặc trưng của nó đều gắn kết với khái niệm mà lớp đó biểu diễn  Chẳng hạn lớp CashRegister (BigJava – ch04) thiếu tính gắn kết public class CashRegister { public void enterPayment(int dollars, int quarters, int dimes, int nickels, int pennies) ... public static final double NICKEL_VALUE = 0.05; public static final double DIME_VALUE = 0.1; public static final double QUARTER_VALUE = 0.25; ... } 2009-2010 OOP - http://mim.hus.edu.vn/elearning 5
  • 6. Tính gắn kết (2)  Thực tế, lớp CashRegister như trên đề cập tới 2 khái niệm: quầy thu ngân và tiền xu  Giải pháp: tạo 2 lớp public class Coin { public Coin(double aValue, String aName){ ... } public double getValue(){ ... } ... } public class CashRegister { public void enterPayment(int coinCount, Coin coinType) { ... } ... } 2009-2010 OOP - http://mim.hus.edu.vn/elearning 6
  • 7. Tính móc nối (1)  1 lớp phụ thuộc vào 1 lớp khác nếu nó sử dụng các đối tượng của lớp đó  Lớp CashRegister phụ thuộc vào lớp Coin để xác định số tiền trả  Lớp Coin không phụ thuộc vào lớp CashRegister  Tính móc nối cao: nhiều phụ thuộc giữa các lớp  Cần giảm thiểu sự móc nối để hạn chế ảnh hưởng khi có thay đổi về giao diện của mỗi lớp  Vẽ sơ đồ lớp để hiển thị quan hệ giữa các lớp  Sử dụng UML (Unified Modeling Language): kí hiệu dùng cho phân tích, thiết kế hướng đối tượng 2009-2010 OOP - http://mim.hus.edu.vn/elearning 7
  • 8. Tính móc nối (2)  Quan hệ phụ thuộc giữa 2 lớp CashRegister và Coin 2009-2010 OOP - http://mim.hus.edu.vn/elearning 8
  • 9. Tính móc nối cao/thấp 2009-2010 OOP - http://mim.hus.edu.vn/elearning 9
  • 10. Các lớp không biến đổi (immutable classes)  Các lớp không biến đổi là các lớp không có phương thức biến đổi (mutator) thuộc tính đối tượng  VD: String, Double, v.v.  String name = "John Q. Public"; String uppercased = name.toUpperCase(); // name is not changed  Việc xuất ra tham chiếu tới một đối tượng thuộc các lớp này là an toàn, các chương trình khác không thể biến đổi được trạng thái đối tượng đó 2009-2010 OOP - http://mim.hus.edu.vn/elearning 10
  • 11. Hiệu ứng phụ (1)  Hiệu ứng phụ của 1 phương thức: biến đổi dữ liệu bên ngoài public void transfer(double amount, BankAccount other) { balance = balance - amount; other.balance = other.balance + amount; // Modifies explicit parameter }  Biến đổi tham biến hiện có thể dẫn đến hiệu ứng ngoài tầm kiểm soát của người lập trình => nếu có thể thì nên tránh 2009-2010 OOP - http://mim.hus.edu.vn/elearning 11
  • 12. Hiệu ứng phụ (2)  Ví dụ khác: đầu ra của chương trình public void printBalance() // Not recommended { System.out.println("The balance is now $" + balance); }  Ý tưởng không tốt: Thông báo bằng tiếng Anh, dòng dữ liệu ra là System.out  Tốt nhất là tách biệt được việc nhập/xuất dữ liệu với mục đích chính của lớp cần xây dựng 2009-2010 OOP - http://mim.hus.edu.vn/elearning 12
  • 13. Truyền tham biến  Các phương thức truyền tham biến: theo giá trị (value)/theo địa chỉ (reference)  Java: truyền theo giá trị  Một phương thức có thể thay đổi trạng thái của đối tượng làm tham biến, nhưng không thay được địa chỉ của đối tượng đó public class BankAccount { public void transfer(double amount, BankAccount otherAccount) { balance = balance - amount; double newBalance = otherAccount.balance + amount; otherAccount = new BankAccount(newBalance); // Won't work } } VD: harrysChecking.transfer(500, savingsAccount); 2009-2010 OOP - http://mim.hus.edu.vn/elearning 13
  • 14.
  • 15. Điều kiện trước (1)  Điều kiện trước (precondition): Yêu cầu mà chương trình gọi phương thức phải tuân theo  Công bố điều kiện trước trong tài liệu hướng dẫn  /** Deposits money into this account. @param amount the amount of money to deposit (Precondition: amount >= 0) */  Nếu điều kiện trước bị vi phạm, phương thức không chịu trách nhiệm về việc tính đúng kết quả mà có thể xử lí theo cách bất kì 2009-2010 OOP - http://mim.hus.edu.vn/elearning 15
  • 16. Điều kiện trước (2)  Nếu điều kiện trước bị vi phạm, phương thức có thể “ném” ngoại lệ (throw exception) – bài 12 if (amount < 0) throw new IllegalArgumentException(); balance = balance + amount;  Phương thức không bắt buộc phải kiểm tra điều kiện trước, chương trình gọi phải chịu trách nhiệm nếu không tuân thủ điều kiện đã đưa ra 2009-2010 OOP - http://mim.hus.edu.vn/elearning 16
  • 17. Điều kiện trước (3)  Phương thức có thể thực hiện kiểm tra xác nhận bằng chỉ thị assert  Cú pháp: assert condition;  VD: assert amount >= 0;  Bật chế độ kiểm tra xác nhận khi chạy:  java –enableassertions ClassName  Nếu biểu thức điều kiện có giá trị false, chương trình sẽ ném ngoại lệ  Tránh việc lẳng lặng kết thúc phương thức khi điều kiện trước không thoả mãn: if (amount < 0) return; // Not recommended; hard to debug balance = balance + amount; 2009-2010 OOP - http://mim.hus.edu.vn/elearning 17
  • 18. Điều kiện sau  Điều kiện sau (postcondition): điều kiện thoả mãn sau khi thực hiện phương thức  Nếu lời gọi phương thức thoả mãn điều kiện trước thì cũng phải đảm bảo thoả mãn điều kiện sau  Có 2 loại điều kiện sau:  Giá trị trả lại được tính toán đúng  Đối tượng ở trạng thái xác định nào đó khi thực hiện xong phương thức /** Deposits money into this account. (Postcondition: getBalance() >= 0) @param amount the amount of money to deposit (Precondition: amount >= 0) */ 2009-2010 OOP - http://mim.hus.edu.vn/elearning 18
  • 19. Phương thức tĩnh - Trường dữ liệu tĩnh  Phương thức tĩnh:  Mỗi phương thức phải thuộc 1 lớp nào đó  Phương thức tĩnh: Không có tham biến ẩn  phương thức dùng cho các tính toán không áp dụng lên đối tượng của lớp  Trường dữ liệu tĩnh  Trường dữ liệu chung cho tất cả các đối tượng trong lớp  Chú ý khởi tạo trường dữ liệu tĩnh public class BankAccount{ . . . private static int lastAssignedNumber = 1000; //Executed once, when class is loaded }  Trừ trường hợp dữ liệu là hằng (final), các trường dữ liệu tĩnh nên có quyền truy nhập private 2009-2010 OOP - http://mim.hus.edu.vn/elearning 19
  • 20. Tổ chức các lớp liên quan thành các gói  Gói (package): Tập các lớp có liên quan  Để đặt các lớp trong 1 tệp vào 1 gói, dòng đầu tiên trong tệp mã nguồn cần có chỉ thị:  package packageName;  Tên của gói chứa 1 hay nhiều tên phân cách nhau bằng dấu chấm (.)  VD: package com.horstmann.bigjava;  Gói ngầm định (default package) không có tên 2009-2010 OOP - http://mim.hus.edu.vn/elearning 20
  • 21. Khai báo sử dụng gói (import)  Có thể sử dụng 1 lớp thuộc 1 gói mà không cần lệnh import  Trong toàn bộ chương trình phải viết tên đầy đủ của lớp đó java.util.Scanner in = new java.util.Scanner(System.in);  Để không phải khai báo nhiều lần cho các lớp trong cùng 1 gói, dùng kí tự gộp *  import java.util.*; 2009-2010 OOP - http://mim.hus.edu.vn/elearning 21
  • 22. Tên gói và định vị các lớp  Dùng gói để tránh xung đột tên lớp  VD: java.util.Timer và javax.swing.Timer  Tên gói không được nhập nhằng  Khuyến cáo: Bắt đầu tên gói với tên miền Internet (com.horstmann.bigjava)  Tên đường dẫn của các lớp trong gói:  phải đúng với tên gói (com/horstman/bigjava)  được bắt đầu với đường dẫn trong biến môi trường CLASSPATH  chứa danh sách các thư mục cơ sở có thể chứa các thư mục của các gói  set CLASSPATH=c:homewalters;. 2009-2010 OOP - http://mim.hus.edu.vn/elearning 22
  • 23. Thư mục cơ sở và thư mục con cho các gói 2009-2010 OOP - http://mim.hus.edu.vn/elearning 23