Đóng gói và che giấu thông tin 2 Department of Software Engineering Mục tiêu bài học Nêu được bản chất, vai trò của trừu tượng hóa dữ liệu Giải thích về đóng gói và che giấu thông tin
Trang 1LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
VỚI JAVA
Nguyễn Thị Thu Trang
trangntt-fit@mail.hut.edu.vn
KHOA CÔNG NGHỆ THÔNG TIN
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Chương 04 Đóng gói và che giấu thông tin
2
Department of Software Engineering
Mục tiêu bài học
Nêu được bản chất, vai trò của trừu tượng
hóa dữ liệu
Giải thích về đóng gói và che giấu thông
tin (Encapsulation & Information Hiding)
Thực thi trong Java
Khai báo một lớp trong Java
Tạo các phương thức, các trường/thuộc tính
Package trong Java
Nội dung
1 Trừu trượng hóa dữ liệu
2 Đóng gói và che giấu thông tin
3 Khai báo lớp
4 Các thành viên của lớp
5 Chồng phương thức
6 Gói (package)
Trang 2Department of Software Engineering
1 Trừu tượng hóa dữ liệu
(Data abstraction)
Khi không thể nắm bắt toàn bộ đối tượng phức tạp
ÆBỏ qua những chi tiết không cần thiết, thay vào
đó bằng một mô hình đối tượng tổng quát lý tưởng
ÆGiúp giảm bớt sự phức tạp của bài toán
Mô-đun hóa phần mềm, hay sự phân cấp của hệ
thống phần mềm (quan điểm chia để trị)
ÆBài toán trở nên rõ ràng, dễ lưu trữ và dễ thực hiện
5
Department of Software Engineering
1 Trừu tượng hóa dữ liệu (2)
Trừu tượng hóa là
Trừu tượng hóa cho phép
Ví dụ: Trừu tượng hóa các sinh viên cụ thể trong
lớp học thành một lớp SinhVien
Nội dung
1 Trừu trượng hóa dữ liệu
2 Đóng gói và che giấu thông tin
3 Khai báo lớp
4 Các thành viên của lớp
5 Chồng phương thức
6 Gói (package)
Trang 3Department of Software Engineering
2 Đóng gói và che giấu thông tin
(Encapsulation and Data hiding)
Encapsulation:
Data hiding:
8
Department of Software Engineering
Nội dung
1 Trừu trượng hóa dữ liệu
2 Đóng gói và che giấu thông tin
3 Khai báo lớp
4 Các thành viên của lớp
5 Chồng phương thức
6 Gói (package)
3 Lớp Đóng gói
Thuộc tính và phương thức gọi là
Các lớp được nhóm lại thành package
Một package bao gồm một tập hợp các lớp có quan
hệ logic với nhau
Ví dụ: javax.swing, java.util…
Lớp giống như một bản thiết kế; được sử dụng
để tạo ra các đối tượng hay các thể hiện của
lớp
Trang 4Department of Software Engineering
Khai báo lớp:
Định danh trong khai báo lớp xác định tên của lớp
Cú pháp khai báo:
chi_dinh_truy_cap:
: Lớp có thể được truy cập từ bất cứ đâu,
kể cả bên ngoài package chứa lớp đó
: Chỉ có thể truy cập trong phạm vi lớp đó
: Lớp có thể được truy cập từ bên
trong package chứa lớp đó
3 Lớp (2)
11
Department of Software Engineering
3 Lớp (3)
Lớp thể khai báo thuộc 1 package nào đó
Cú pháp:
Ví dụ:
public class HelloWorld {
…
}
Nội dung
1 Trừu trượng hóa dữ liệu
2 Đóng gói và che giấu thông tin
3 Khai báo lớp
4 Các thành viên của lớp
5 Chồng phương thức
6 Gói (package)
Trang 5Department of Software Engineering
4 Các thành viên của lớp
Bao gồm: Thuộc tính và phương thức Æ
Phạm vi của lớp (giữa 2 dấu { }):
Bên trong phạm vi lớp, các thành viên của lớp
chứa các phương thức của lớp, của và có thể
truy cập thông qua
Bên ngoài phạm vi của lớp, có 2 chỉ định truy
cập tới các thành viên của lớp gồm có:
14
Department of Software Engineering
4 Các thành viên của lớp (2)
Khác gói
Cùng gói
Cùng lớp
private
Không có
public
4 Các thành viên của lớp (3)
Ví dụ:
public class HelloWorld1 {
// Cac thuoc tinh
private int iValue = 12;
float fValue = 3.45f; //package
// Phuong thuc main
public static void main(String args[])
{
System.out.println(“Hello World!");
System.out.println(“Gia tri nguyen: ”+iValue);
System.out.println(“Gia tri thuc: ”+fValue);
}
}
Trang 6Department of Software Engineering
4 Các thành phần của lớp (4)
17
Department of Software Engineering
4.1 Thuộc tính (Field/Attribute)
Các đối tượng giữ lại trạng thái trong các thuộc
tính (attributes) hay các trường (fields)
Các thuộc tính được định nghĩa trong lớp
Mỗi đối tượng có bản sao các thuộc tính của riêng nó
Thuộc tính có thể được khởi tạo khi khai báo
a Thông điệp (message):
4.2 Phương thức (method)
Trang 7Department of Software Engineering
b Phương thức (method):
Xác định cách một đối tượng đáp ứng lại thông điệp
Phương thức xác định các hoạt động của lớp
4.2 Phương thức (2)
20
Department of Software Engineering
c Chữ ký của phương thức (signature)
Mỗi phương thức phải có một chữ ký riêng
Chữ ký của phương thức bao gồm:
4.2 Phương thức (3)
d Kiểu dữ liệu trả về:
Khi phương thức trả về ít nhất một giá trị hoặc một đối
tượng thì bắt buộc phải có câu lệnh
Nếu phương thức không trả về 1 giá trị nào thì kiểu trả về
là
Có thể có nhiều lệnh return trong một phương thức; câu
lệnh đầu tiên mà chương trình gặp sẽ được thực thi.
4.2 Phương thức (4)
Trang 8Department of Software Engineering
e Phương thức main():
Một ứng dụng chỉ có thể thực thi được khi nó có hàm
main()
JVM tải một lớp và bắt đầu thực hiện hàm
main(String[] args)
public: phương thức có thể được gọi từ bất cứ đối tượng nào
static: không cần phải tạo ra đối tượng trước
void: không có kết quả trả về
4.2 Phương thức (5)
23
Department of Software Engineering
Các thành viên dữ liệu
Chỉ có thể truy nhập từ các phương thức bên trong
lớp
Chỉ định truy cập là private để bảo vệ dữ liệu
Các đối tượng khác muốn truy nhập vào dữ liệu
riêng tư này phải thông qua
4.3 Cơ chế che giấu thông tin
Nội dung
1 Trừu trượng hóa dữ liệu
2 Đóng gói và che giấu thông tin
3 Khai báo lớp
4 Các thành viên của lớp
5 Chồng phương thức
6 Gói (package)
Trang 9Department of Software Engineering
Nhắc lại về phương thức:
Mỗi phương thức phải có một chữ ký riêng
Chữ ký (signature) của phương thức bao gồm:
Tên phương thức
Số lượng các đối số và kiểu của chúng
5 Chồng phương thức
(Method Overloading)
26
Department of Software Engineering
Các phương thức có thể trùng tên nhưng các
chữ ký thì phải khác nhau Æ Chồng phương
thức (Method Overloading):
Thuận tiện cho lập trình vì không cần phải nhớ
quá nhiều tên phương thức mà chỉ cần nhớ một
tên và lựa chọn các tham số cho phù hợp
5 Chồng phương thức (2)
Ví dụ 1:
Phương thức println() trong
System.out.println()có 10 khai báo với các
tham số khác nhau: boolean, char[], char,
double, float, int, long, Object, String,và một
không có tham số
5 Chồng phương thức (3)
Trang 10Department of Software Engineering
5 Chồng phương thức (4)
Ví dụ 2:
class MyDate {
public boolean setMonth(int m) { …}
public boolean setMonth(String s) { …}
}
…
MyDate d = new MyDate();
d.setMonth(9);
d.setMonth(”September”);
29
Department of Software Engineering
Nội dung
1 Trừu trượng hóa dữ liệu
2 Đóng gói và che giấu thông tin
3 Khai báo lớp
4 Các thành viên của lớp
5 Chồng phương thức
6 Gói (package)
Các lớp có thể nhóm lại với nhau thành gói (package)
Gói được coi như các thư mục, là nơi tổ chức các lớp
Theo quy ước, tên của package được viết bằng
6 Gói (package)
Trang 11Department of Software Engineering
6 Gói (2)
a Lợi ích của package:
Giúp tổ chức các lớp vào các đơn vị nhỏ hơn (như là
các thư mục), và làm cho việc xác định vị trí trở nên
dễ dàng và sử dụng các tập tin của lớp một cách phù
hợp
Tránh cho
hơn so với mối quan hệ giữa các lớp
Các tên của gói có thể được sử dụng để nhận dạng
các lớp
Các gói cũng có thể chứa các gói khác
32
Department of Software Engineering
b Tham chiếu giữa các lớp:
Trong cùng 1 package:
Khác package:
Ví dụ:
public class HelloNameDialog{
public static void main(String[] args){
String result;
result = javax.swing.JOptionPane showInputDialog
(“Hay nhap ten ban:”);
javax.swing.JOptionPane showMessageDialog(null,
”Xin chao “+ result + “!”);
System.exit(0);
}
}
6 Gói (3)
Lệnh import:
Sử dụng lệnh import
Ví dụ:
import javax.swing.JOptionPane;
public class HelloNameDialog{
public static void main(String[] args){
String result;
result = JOptionPane showInputDialog
(“Hay nhap ten ban:”);
JOptionPane showMessageDialog(null,
”Xin chao “+ result + “!”);
System.exit(0);
}
}
6 Gói (4)
Trang 12Department of Software Engineering
•java.applet
•java.awt
•java.beans
•java.io
•java.lang
•java.net
•java.rmi
•java.security
•java.sql
•java.text
•javax.accessibility
•javax.crypto
•javax.imageio
•javax.naming
•javax.net
•javax.print
•javax.rmi
•javax.security
•javax.sound
•javax.sql
•javax.swing
•javax.transaction
•javax.xml
•org.ietf.jgss
•org.omg.CosNaming
•org.omg.Dynamic
•org.omg.IOP
•org.omg.Messaging
•org.omg.PortableInterceptor
•org.omg.PortableServer
•org.omg.stub.java.rmi
•org.w3c.dom
•org.xml
6 Gói (4)
35
Department of Software Engineering
Các Package cơ bản trong Java
java.lang
Cung cấp các lớp cơ bản cho thiết kế ngôn ngữ lập trình
Java
Bao gồm wrapper classes, String và StringBuffer, Object,
Import ngầm định vào tất cả các lớp
java.util
Bao gồm tập hợp framework, mô hình sự kiện, date time, và
nhiều tiện ích khác
java.io
Cung cấp khả năng vào / ra hệ thống với các luồng dữ liệu
và hệ thống file
6 Gói (5)
Các Package cơ bản trong Java
java.math
Cung cấp các lớp thực thi các phép toán với số nguyên và
các phép toán thập phân
java.sql
Cung cấp các API cho phép truy nhập và xử lý dữ liệu được
lưu trữ trong một nguồn dữ liệu (thường sử dụng cơ sử dữ
liệu quan hệ)
java.swing
Cung cấp các lớp và giao diện cho phép tạo ra các ứng dụng
đồ họa.
…
6 Gói (5)