Tập hợp các thể hiện của các thực thể thành các nhóm có chung các thuộc tính gọi là Lớp (class).. 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..[r]
(1)LẬP TRÌNH JAVA
LẬP TRÌNH JAVA
Bài 5
Bài 5: Đóng gói và trừu tượng : Đóng gói và trừu tượng hóa liệu
(2)Mục tiêu
Mục tiêu
Kết thúc bài học bạn có thể nắm được:
Nêu được chất, vai trò trừu tượng hóa
liệu
Giải thích đóng gói và che giấu thông tin
(Encapsulation & Information Hiding)
Thực thi Java
Khai báo lớp Java
(3)Nội dung
Nội dung
5.1 Trừu trượng hóa 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 lớp
5.5 Chồng phương thức
(4)5.1- Trừu tượng hóa liệu
5.1- Trừu tượng hóa liệu
Trừu tượng hóa liệu (Data abstraction)
Khi khơng thể nắm bắt tồn đối tượng phức tạp Bỏ qua chi tiết khơng cần thiết, thay vào
là mơ hình đối tượng tổng quát
(5)5.1- Trừu tượng hóa liệu
5.1- Trừu tượng hóa liệu
Trừu tượng hóa liệu (Data abstraction)
Một cách nhìn cách biểu diễn thực thể bao gồm thuộc tính liên quan ngữ cảnh
Tập hợp thể thực thể thành nhóm có chung thuộc tính gọi Lớp (class)
(6)Nội dung
Nội dung
5.1 Trừu trượng hóa 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 lớp
5.5 Chồng phương thức
(7)5.2- Đóng gói & che giấu tt
5.2- Đóng gói & che giấu tt
Đóng gói che giấu thơng tin
Dữ liệu/Thuộc tính hành vi/Phương thức đóng gói lớp Encapsulation
Dữ liệu che giấu bên lớp truy cập thay đổi phương thức bên
(8)Nội dung
Nội dung
5.1 Trừu trượng hóa 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 lớp
5.5 Chồng phương thức
(9)5.3- Khai báo lớp
5.3- Khai báo lớp
Đóng gói thuộc tính (attributes/fields)
phương thức (methods)
Thuộc tính phương thức gọi thành viên (members) lớp
Các lớp nhóm lại thành package
Một package bao gồm tập hợp lớp có quan hệ logic với
Ví dụ: javax.swing, java.util…
(10)5.3- Khai báo lớp
5.3- Khai báo lớp
Khai báo lớp:
Định danh khai báo lớp xác định tên lớp Cú pháp khai báo:
chi_dinh_truy_cap class TenLop {
// Than lop
}
chi_dinh_truy_cap:
public: Lớp truy cập từ
đâu, kể bên ngồi package chứa lớp
private: Chỉ truy cập phạm
(11)5.3- Khai báo lớp
5.3- Khai báo lớp
Khai báo lớp:
class Circle {
double radius = 1.0;
Circle(){ }
Circle(double newRadius){ radius = newRadius; }
double findArea(){
Data field
Contructors
(12)5.3- Khai báo lớp
5.3- Khai báo lớp
Khai báo lớp thuộc gói (Package)
Lớp khai báo thuộc package đó
Cú pháp: package <Ten_package>; Ví dụ:
package com.hello;
public class HelloWorld {
…
(13)Nội dung
Nội dung
5.1 Trừu trượng hóa 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 lớp
5.5 Chồng phương thức
(14)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Bao gồm: Thuộc tính phương thức
Phạm vi lớp (giữa dấu { }):
Bên phạm vi lớp, thành viên lớp truy cập thông qua tên gọi.
Bên ngồi phạm vi lớp, có định truy cập tới thành viên lớp gồm có:
(15)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Các định truy nhập:
public Không có private
Cùng lớp Yes Yes Yes
Cùng gói Yes Yes No
(16)5.4- Các thành viên lớp
5.4- Các thành viên 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[]) {
System.out.println(“Hello World!"); System.out.println(“Gia tri nguyen:
”+iValue);
System.out.println(“Gia tri thuc: ”+fValue);
Trong một file java
Trong mợt file java
có mợt lớp
(17)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Thuộc tính (Field/Attribute)
Các đối tượng giữ lại trạng thái thuộc tính (attributes) hay trường (fields)
Các thuộc tính định nghĩa lớp
Mỗi đối tượng có thuộc tính riêng
Thuộc tính khởi tạo khai báo
Các giá trị mặc định sử dụng không khởi
(18)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
Một phương thức tập câu lệnh nhóm lại với nhằm thực cơng việc
Xác định cách đối tượng đáp ứng lại thông điệp Phương thức xác định hoạt động lớp
Tất phương thức phải thuộc lớp
(19)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
Cấu trúc phương thức:
parameter profile gồm kiểu, thứ tự, số tham số
phương thức
method signature (header) gồm tên phương thức
parameter profiles
Các tham số khai báo method header gọi
tham số hình thức (formal parameters)
Khi phương thức gọi, tham số hình thức
(20)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
Chữ ký phương thức (signature)
Mỗi phương thức phải có chữ ký riêng Chữ ký phương thức bao gồm:
Tên phương thức
(21)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
Kiểu liệu trả về:
Khi phương thức trả giá trị đối tượng 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ả giá trị kiểu trả
về void khơng cần câu lệnh return
Có thể có nhiều lệnh return phương thức;
(22)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
Cách gọi phương thức
public static void main(String[] args) { int i = 5;
int j = 2;
int k = max(i, j);
System.out.println(
"The maximum between " + i + " and " + j + " is " + k); }
public static int max(int num1, int num2) { int result;
if (num1 > num2) result = num1; else
result = num2; return result; }
pass i
(23)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
Cách gọi phương thức The main method
i: j: k:
(24)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
Câu lệnh trả giá trị bắt buộc phải có phương
thức non-void
Phương thức sau logic, có lỗi biên dịch
trình biên dịch Java nghĩ phương thức không trả giá trị
public static int xMethod(int n) { if (n > 0) return 1;
(25)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
Đơi có nhiều đáp ứng gọi phương thức, trình biên dịch khơng thể xác định đáp ứng thích hợp nhất Điều gọi "Gọi mập mờ"
(26)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method) public class AmbiguousOverloading {
public static void main(String[] args) { System.out.println(max(1, 2));
}
public static double max(int num1, double num2) { if (num1 > num2)
return num1; else
return num2; }
public static double max(double num1, int num2) { if (num1 > num2)
(27)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
Biến cục (local variable): biến khai báo phương thức
Phạm vi: phần chương trình mà biến tham chiếu
Phạm vi biến cục khai báo đến cuối block chứa biến Một biến cục phải khai báo trước sử dụng
(28)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
// Fine with no errors
public static void correctMethod() { int x = 1;
int y = 1;
// i is declared
for (int i = 1; i < 10; i++) { x += i;
}
// i is declared again
(29)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method)
// With error
public static void incorrectMethod() { int x = 1;
int y = 1;
for (int i = 1; i < 10; i++) { int x = 0;
x += i; }
(30)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Phương thức (method) Lợi ích phương thức:
Viết lần, dùng nhiều lần
(31)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Cơ chế che giấu thông tin Java Các thành viên liệu
Chỉ truy nhập từ phương thức bên lớp Chỉ định truy cập private để bảo vệ liệu
Các đối tượng khác muốn truy nhập vào liệu riêng tư phải thông qua phương thức
(32)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Mô tả lớp: + : public - : private
# : protected Ví dụ:
Xây dựng lớp SinhVien:
SinhVien
- HoTen: String - MaSo: String - Diem: Float
Tên lớp
- Thuộc_tính: Kiểu liệu
(33)5.4- Các thành viên lớp
5.4- Các thành viên lớp
Ví dụ:
public class SinhVien {
private String HoTen; private String MaSo; private float Diem;
public void HienThongTin() {
System.out.println(“Họ tên sinh viên: ” + HoTen); System.out.println(“Mã số sinh viên: ” + MaSo); System.out.println(“Điểm: ” + Diem);
(34)5.4- Các thành viên lớp
5.4- Các thành viên lớp
public class SinhVien {
//
//Các phương thức get set
public String getHoTen() { return HoTen;
}
public void setHoTen(String ht) { HoTen = ht;
}
//tương tự với thuộc tính MaSo
public float getDiem() { return Diem;
(35)Nội dung
Nội dung
5.1 Trừu trượng hóa 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 lớp
5.5 Chồng phương thức
(36)5.5- Chồng phương thức
5.5- Chồng phương thức
Các phương thức trùng tên
chữ ký phải khác Chồng phương
thức (Method Overloading):
Số lượng tham số khác
Nếu số lượng tham số kiểu liệu tham số phải khác
Thuận tiện cho lập trình khơng cần phải nhớ
(37)5.5- Chồng phương thức
5.5- Chồng phương thức
Ví dụ 1:
Phương thức println()
System.out.println() có 10 khai báo với
tham số khác nhau: boolean, char[], char,
double, float, int, long, Object, String,
một khơng có tham số
Không cần sử dụng tên khác (chẳng hạn "printString“ "printDouble“) cho kiểu
(38)5.5- Chồng phương thức
5.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);
(39)Nội dung
Nội dung
5.1 Trừu trượng hóa 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 lớp
5.5 Chồng phương thức
(40)5.6- Gói (Package)
5.6- Gói (Package)
Các lớp nhóm lại với thành gói (package) Gói coi thư mục, nơi tổ chức lớp Theo quy ước, tên package viết ký
tự thường
Các package khác chứa lớp có tên
(41)5.6- Gói (Package)
5.6- Gói (Package)
Lợi ích package:
Giúp tổ chức lớp vào đơn vị (như thư mục) giúp xác định vị trí trở nên dễ dàng sử
dụng lớp 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ệ lớp, liệu phương thức mức rộng
hơn so với mối quan hệ lớp
(42)5.6- Gói (Package)
5.6- Gói (Package)
Tham chiếu lớp:
Trong package: Sử dụng tên lớp
Khác package: Phải cung cấp tên đầy đủ cho lớp
được định nghĩa package khác
Ví dụ:
public class HelloNameDialog{
public static void main(String[] args){ String result;
result = javax.swing.JOptionPane.showInputDialog (“Hay nhap ten ban:”);
(43)5.6- Gói (Package)
5.6- Gói (Package)
Lệnh import:
Sử dụng lệnh import để khai báo package
hoặc lớp để sử dụng không cần nêu tên đầy đủ
Ví dụ:
import javax.swing.JOptionPane; public class HelloNameDialog{
public static void main(String[] args){ String result;
result = JOptionPane.showInputDialog
(“Hay nhap ten ban:”);
(44)5.6- Gói (Package)
5.6- Gói (Package)
Các Package Java java.lang
Cung cấp lớp cho thiết kế ngôn ngữ lập trình
Java
Bao gồm wrapper classes, String StringBuffer, Object, Import ngầm định vào tất lớp
java.util
Bao gồm tập hợp framework, mơ hình kiện, date time,
và nhiều tiện ích khác
java.io
(45)5.6- Gói (Package)
5.6- Gói (Package)
Các Package Java java.math
Cung cấp lớp thực thi phép toán với số nguyên
các phép toán thập phân
java.sql
Cung cấp API cho phép truy nhập xử lý liệu
lưu trữ nguồn liệu (thường sử dụng sở liệu quan hệ)
javax.swing
Cung cấp lớp giao diện cho phép tạo ứng
(46)5.6- Gói (Package)
5.6- Gói (Package)
java.math
Các lớp:
PI E
Các phương thức lớp:
Các phương thức lượng giác Các phương thức số mũ
Các phương thức làm tròn
(47)5.6- Gói (Package)
5.6- Gói (Package)
java.math
Các phương thức lượng giác
(48)5.6- Gói (Package)
5.6- Gói (Package)
java.math
Các phương thức lượng giác
Phương thức Giá trị trả về
Math.sin(0) 0.0
Math.sin(Math.PI/6) 0.5
Math.cos(0) 1.0
(49)5.6- Gói (Package)
5.6- Gói (Package)
java.math
Các phương thức số mũ
Phương thức Giá trị trả về
Math.exp(double a) ea
Math.log(double a) ln(a)
(50)5.6- Gói (Package)
5.6- Gói (Package)
java.math
Các phương thức làm tròn
double ceil(double x)
x làm tròn lên giá trị nguyên gần Giá trị nguyên trả giá trị thực
double floor(double x)
x làm tròn xuống giá trị nguyên gần Giá trị nguyên
được trả giá trị thực
double rint(double x)
x làm tròn đến giá trị nguyên gần Nếu phần lẻ x 0.5 giá trị số chẵn
(51)5.6- Gói (Package)
5.6- Gói (Package)
java.math
Các phương thức làm tròn
(52)5.6- Gói (Package)
5.6- Gói (Package)
java.math
Các phương thức min, max, abs, random
Math.max(a, b) ; Math.min(a, b)
Trả giá trị lớn / nhỏ tham số a, b
Math.abs(a)
Trả giá trị tuyệt đối a
Math.random()
(53)5.6- Gói (Package)
5.6- Gói (Package)
java.math
Các phương thức min, max, abs, random
Math.max(2, 3) 3
Math.max(2.5, 3) 3.0
Math.abs(-2.4) 2.4
10+(int)(Math.random()*20)
Số nguyên thuộc [10, 29]