Mục tiêu Kết thúc bài học bạn có thể nắm đượ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 & Inf
Trang 1LẬP TRÌNH JAVA
Bài 5 : Đóng gói và trừu tượng
hóa dữ liệu
Trang 2Mục tiêu
Kết thúc bài học bạn có thể nắm đượ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
Trang 3Nội dung
5.1 Trừu trượng hóa dữ liệu
5.2 Đóng gói và che giấu thông tin
5.3 Khai báo lớp
5.4 Các thành viên của lớp
5.6 Gói (package)
Trang 45.1- Trừu tượng hóa dữ liệu
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 đó là một mô hình đối tượng tổng quát
Lớp (Class) thay vì các đối tượng cụ thể, nhiều thông tin
Trang 55.1- Trừu tượng hóa dữ liệu
Trừu tượng hóa dữ liệu (Data abstraction)
Một cách nhìn hoặc cách biểu diễn một thực thể chỉ bao gồm các thuộc tính liên quan
Trang 6Nội dung
5.1 Trừu trượng hóa dữ liệu
5.2 Đóng gói và che giấu thông tin
5.3 Khai báo lớp
5.4 Các thành viên của lớp
5.6 Gói (package)
Trang 75.2- Đóng gói & che giấu tt
Đóng gói và che giấu thông tin
Dữ liệu/Thuộc tính và hành vi/Phương thức
được đóng gói trong một lớp Encapsulation
Dữ liệu được che giấu ở bên trong lớp và chỉ được truy cập và thay đổi ở các phương thức bên ngoài Data hiding
Trang 8Nội dung
5.1 Trừu trượng hóa dữ liệu
5.2 Đóng gói và che giấu thông tin
5.3 Khai báo lớp
5.4 Các thành viên của lớp
5.6 Gói (package)
Trang 9 Ví dụ: javax.swing, java.util…
Lớp giống như một bản thiết kế; được sử
Trang 10 public: Lớp có thể được truy cập từ bất cứ
đâu, kể cả bên ngoài package chứa lớp đó.
private: Chỉ có thể được truy cập trong phạm
vi lớp đó Không có (mặc định): Lớp có thể được truy
Trang 125.3- Khai báo lớp
Khai báo lớp thuộc gói (Package)
Lớp có thể khai báo thuộc 1 package nào đó
Trang 13Nội dung
5.1 Trừu trượng hóa dữ liệu
5.2 Đóng gói và che giấu thông tin
5.3 Khai báo lớp
5.4 Các thành viên của lớp
5.6 Gói (package)
Trang 145.4- Các thành viên của lớp
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 có thể truy cập thông qua tên gọi.
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ó: public và private Tương
tự như lớp.
Trang 155.4- Các thành viên của lớp
Trang 165.4- Các thành viên của lớp
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[])
Trang 175.4- Các thành viên của lớp
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
Các giá trị mặc định sẽ được sử dụng nếu không được khởi tạo.
Trang 195.4- Các thành viên của lớp
Phương thức (method)
Cấu trúc của phương thức:
parameter profile gồm kiểu, thứ tự, và số tham số của một phương thức
method signature (header) gồm tên phương thức và
Trang 205.4- Các thành viên của lớp
Phương thức (method)
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:
Tên phương thức
Số lượng các tham số và kiểu của chúng
Trang 215.4- Các thành viên của lớp
Phương thức (method)
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
return để trả điều khiển cho đối tượng gọi
phương thức.
Nếu phương thức không trả về 1 giá trị nào thì
kiểu trả về là void và có thể không cần câu lệnh
return
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.
Trang 22else result = num2;
return result;
}
pass i
pass j
Trang 245.4- Các thành viên của lớp
Phương thức (method)
Câu lệnh trả về giá trị bắt buộc phải có đối với một phương thức non-void
Phương thức sau đúng về logic, nhưng có lỗi biên dịch
vì trình biên dịch Java nghĩ rằng phương thức này không trả về bất kỳ giá trị nào.
public static int xMethod(int n) {
Trang 255.4- Các thành viên của lớp
Phương thức (method)
Đôi khi có thể có nhiều hơn một đáp
ứng khi gọi một phương thức, nhưng
trình biên dịch không thể xác định được đáp ứng thích hợp nhất Điều này được
gọi là "Gọi mập mờ" (ambiguous
invocation) - đây là một lỗi biên dịch
Trang 265.4- Các thành viên của lớp
Phương thức (method)
public class AmbiguousOverloading {
public static void main(String[] args) {
Trang 27 Có thể khai báo một biến cục bộ trùng tên
nhiều lần trong các khối riêng rẽ không lồng
Trang 285.4- Các thành viên của lớp
Phương thức (method)
// Fine with no errors
public static void correctMethod() {
Trang 31 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 các phương thức public (accessor – get và mutator - set):
Trang 32Nội dung
5.1 Trừu trượng hóa dữ liệu
5.2 Đóng gói và che giấu thông tin
5.3 Khai báo lớp
5.4 Các thành viên của lớp
5.6 Gói (package)
Trang 335.5- Chồng phương thức
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):
Số lượng tham số khác nhau
Nếu cùng số lượng tham số thì kiểu dữ liệu
các tham số phải khác nhau
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
Trang 345.5- Chồng phương thức
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ố
Không cần sử dụng các tên khác nhau (chẳng hạn "printString“ hoặc "printDouble“) cho mỗi kiểu dữ liệu muốn in ra
Trang 355.5- Chồng phương thức
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”);
Trang 36Nội dung
5.1 Trừu trượng hóa dữ liệu
5.2 Đóng gói và che giấu thông tin
5.3 Khai báo lớp
5.4 Các thành viên của lớp
5.6 Gói (package)
Trang 385.6- Gói (Package)
Lợi ích của package:
Giúp tổ chức các lớp vào các đơn vị (như là các thư mục) giúp xác định vị trí trở nên dễ dàng và sử dụng các lớp một cách phù hợp
Tránh cho việc đặt tên lớp bị xung đột (trùng tên)
Bảo vệ các lớp, dữ liệu và phương thức ở mức rộng 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
Trang 395.6- Gói (Package)
Tham chiếu giữa các lớp:
Trong cùng 1 package: Sử dụng tên lớp
Khác package: Phải cung cấp tên đầy đủ cho các lớp được định nghĩa trong package khác
Lệnh import:
Sử dụng lệnh import để khai báo các package
hoặc các lớp để khi sử dụng không cần nêu
tên đầy đủ
Trang 41 javax.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.
Trang 46x được làm tròn xuống giá trị nguyên gần nhất Giá trị
nguyên này được trả về như một giá trị thực.