• Mô hình hóa các đối tượng trong thế giới thực thành
đối tượng phần mềm
• Thuộc tính: các đặc điểm, trạng thái của đối tượng
• Hành vi: các hành vi/ chức năng của đối tượng
Lớp đối tượng là gì?
#5
• Lớp đối tượng (class): định nghĩa danh sách các thuộc
tính (dữ liệu) và các phương thức chung của một nhóm
đối tượng nào đó
• Lớp được xem như một kiểu dữ liệu (kiểu đối tượng)
• Lớp là mô hình hóa rút gọn của thực thể trên thực tế,
chỉ mô tả những thuộc tính, phương thức quan tâm
Đối tượng là gì?
#7
• Đối tượng (Object): là một thể hiện cụ thể của lớp, các
thuộc tính có giá trị xác định
Thể hiện
#9
• Loại bỏ đi các thông tin cụ thể, giữ lại các thông tin
chung
• Tập trung vào các đặc điểm chính của thực thể, làm
cho nó khác biệt với những thực thể khác
1 5 7 Khái Số nguyên
-3 8 .... quát ( int )
hóa
Người
Khái ( PERSON )
quát <Code, Name,
hóa date_of_birth,
attributes Address, e-mail
.......>
Đóng gói – Module hoá
#13
• Chia nhỏ hệ thống phức tạp thành các đối tượng nhỏ hơn
• Đóng gói: Che giấu, ẩn chi tiết thực hiện bên trong
• Cung cấp cho các đối tượng khác (client) một hành vi
giao tiếp (public/ interface methods)
• Tính trong suốt: Thay đổi việc thực thi bên trong không
làm ảnh hưởng tới các đối tượng khác
Phân cấp
#14
• Một nhóm đối tượng mang những đặc điểm khác biệt
với những đối tượng khác có thể tách thành nhóm con
• Lớp đóng gói các thành viên và chỉ định điều khiển truy
cập tới các thành viên:
• Thuộc tính
• Phương thức
• Tập hợp các lớp được nhóm lại thành gói (package).
Mỗi lớp trong gói cũng được chỉ định điều khiển truy
cập
Xây dựng lớp đối tượng
#17
Các từ khóa chỉ định điều khiển truy cập trong Java:
• protected: có thể truy cập từ trong gói hoặc từ các lớp con
• Tên lớp
• Các phương thức: khởi tạo, cập nhật, kiểm tra ràng
buộc, xử lý tính toán, cung cấp thông tin
#21
• Đối với mỗi đối tượng, xác định các thông tin cần lưu
trữ. Sau đó lập bảng mô tả thuộc tính như sau:
• Nếu có ràng buộc liên thuộc tính thì lập thêm bảng sau:
Thuộc tính
Stt Mô tả ràng buộc Ghi chú
liên quan
Xác định thuộc tính
#23
Ràng buộc là các quy định, quy tắc áp đặt trên các giá trị thuộc
tính của đối tượng trong lớp, sao cho đối tượng này thể hiện
đúng với thực tế
• Ràng buộc tĩnh: ràng buộc trên giá trị thuộc tính
• Ràng buộc động: ràng buộc trên biến đổi giá trị thuộc tính
Ví dụ:
Thuộc
Stt Kiểu/ lớp Ràng buộc Diễn giải
tính
1 tuSo Số nguyên Tử số
Thuộc
Stt Kiểu/ lớp Ràng buộc Diễn giải
Tính
Thuộc tính
STT Mô tả ràng buộc Ghi chú
liên quan
Nếu month là 4, 6, 9, 11 thì
1 day, month
day tối đa là 30
Nếu month là 2 và year
nhuận thì day tối đa là 29
day, month,
2 Nếu month là 2 và year
year
không nhuận thì day tối đa
là 28
26
#27
• Cú pháp
package pack.name;
Modifier class ClassName {
Khai báo thuộc tính;
Khai báo và định nghĩa phương thức
}
• pack.name: tên gói
• /**Javadoc*/: chú thích để tạo tài liệu Javadoc (không
bắt buộc)
• Modifier: chỉ định truy cập (chỉ có thể là public hoặc
không chỉ định)
• ClassName: tên lớp, theo quy tắc định danh của Java
Bước 3: Định nghĩa thuộc tính
#29
• Cú pháp
/**Javadoc*/
Modifier DataType attributeName;
• Thuộc tính của lớp thường được đặt chỉ định truy cập
là private class CIRLCE
Truy cập vào thuộc tính của đối tượng thông qua
• Phương thức setter (cập nhật giá trị của thuộc tính):
che giấu và kiểm soát giá trị truyền cho thuộc tính
}
//Getter method
public int getIntAttr (){
return this.intAttr;
}
!!!Từ khóa this cho phép tự tham chiếu đến chính đối tượng đó
Ví dụ
#35
Ví dụ (tt)
#36
#37
Khi một đối tượng tạo ra, constructor được tự động gọi:
Đặc điểm
• Cú pháp
/**Javadoc*/
Modifier ClassName(parameterList){
//định nghĩa phương thức
}
Các loại Constructor
#41
Có ba loại
• Nên có
• Không có tham số
Tạo ra 01 đối tượng mới có thông tin thuộc tính giống với
01 đối tượng đã có
• Toán tử gán không tạo ra đối tượng mới: chỉ thực hiện
phép gán giữa 2 đối tượng đã tồn tại
MyDate
PhanSo
#49
2. Khởi tạo
1. Kiểm tra ràng buộc
3. Cập nhật
• Cú pháp
/**Javadoc*/
Modifier DataType methodName(parameterList) {
Định nghĩa phương thức
}
• /**Javadoc*/: chú thích để tạo tài liệu Javadoc (không bắt
buộc)
• Modifier: chỉ định truy cập
• Datatype: kiểu dữ liệu trả về của phương thức
• methodName: tên phương thức
• parameterList: danh sách các tham số, bao gồm kiểu dữ
liệu và tên của tham số
Kiểm tra ràng buộc
#53
• Các phương thức thuộc nhóm khởi tạo và cập nhật có
liên quan đến ràng buộc phải được bổ sung thêm kiểm
tra ràng buộc
• Việc kiểm tra tham số thoả hoặc không thoả ràng buộc
bằng cách gọi phương thức kiểm tra ràng buộc tương
ứng
54
public boolean tenPhuongThuc ( Tham số )
{
#55
//Trả về true: thực hiện được
//Trả về false: không thực hiện được
boolean kq = false;
if(Tham số thoả ràng buộc)
{
gán giá trị tương ứng cho thuộc tính của lớp
kq = true;
}
return kq;
}
55
#56
hoặc
public boolean Tên hàm ( Tham số )
{
//Trả về true: thực hiện được
//false: không thực hiện được
if(Tham số không thoả ràng buộc)
return false;
gán giá trị tương ứng cho thuộc tính của lớp
return true;
}
56
Bài tập
#57
• Thành viên lớp: các thành viên có thể được truy cập mà
không cần thông qua một đối tượng
• Cú pháp
• Truy cập tới các thành viên của đối tượng qua toán tử ‘.’
• Các đối tượng được khai báo mà không khởi tạo sẽ
mang giá trị null
Sử dụng lớp đối tượng
#66
Ví dụ
#67
Cho bài toán đăng ký học phần. Hãy thiết kế lớp đối tượng theo
yêu cầu sau:
• Các chức năng: Cho phép người dùng đăng ký một SV vào
lớp, hủy đăng ký một SV và hiển thị thông tin môn học, sao
cho:
• Thuộc tính
• Phương thức
#71
Định nghĩa phương thức đăng ký học
phần
#72
Định nghĩa phương thức huỷ đăng ký
#73
Định nghĩa phương thức hiển thị thông
tin học phần
#74
Sử dụng lớp HocPhan
#75
Bài tập
#76
• Viết thêm các phương thức setter và getter cho lớp HocPhan
• Bổ sung kiểm tra ràng buộc cho số lượng tối đa phải [20..100]
• Viết lại chương trình cho phép thực hiện những yêu cầu sau:
• Thông tin của học phần được nhập từ bàn phím
• Cho phép đăng ký thêm một sinh viên. Mỗi lần đăng ký xong,
hỏi lại người dùng có tiếp tục không. Hiển thị thông tin môn
học nếu người dùng không muốn tiếp tục
• Cho phép hủy đăng ký một sinh viên. Mỗi lần hủy đăng ký
xong, hỏi lại người dùng có tiếp tục không. Hiển thị thông tin
môn học nếu người dùng không muốn tiếp tục
#77
• object2 = object1;
object1 == object2
Chỉ kiểm tra xem 2 tham chiếu có cùng trỏ đến một đối
tượng không?
public class SoSanhDoiTuong {
private int value;
public SoSanhDoiTuong() {
this.setValue(0);
}
public SoSanhDoiTuong(int value) {
this.setValue(value);
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public class SoSanhDoiTuongTest {
public static void main(String []args) {
SoSanhDoiTuong t1 = new SoSanhDoiTuong(10);
SoSanhDoiTuong t2 = new SoSanhDoiTuong(10);
System.out.println(" Gia tri t1 = " + t1.getValue());
System.out.println(" Gia tri t2 = " + t2.getValue());
Gia tri t1 = 10
Gia tri t2 = 10
* So sanh hai doi tuong:
t1 khac t2
public class SoSanhDoiTuongTest {
public static void main(String []args) {
SoSanhDoiTuong t1 = new SoSanhDoiTuong(10);
SoSanhDoiTuong t2 = new SoSanhDoiTuong();
t2 = t1;
Gia tri t1 = 10
Gia tri t2 = 10
* So sanh hai doi tuong:
t1 bang voi t2
So sánh 2 đối tượng
#83
• Trả về true nếu mọi thành viên của 2 đối tượng có giá trị
bằng nhau
!!!Đối với các lớp định nghĩa mới: Không sử dụng được
Cần sử dụng nguyên lý nạp chồng phương thức để viết lại
public class SoSanhDoiTuongTest {
public static void main(String []args) {
SoSanhDoiTuong t1 = new SoSanhDoiTuong(10);
SoSanhDoiTuong t2 = new SoSanhDoiTuong(10);
Gia tri t1 = 10
Gia tri t2 = 10
* So sanh hai doi tuong:
t1 khac t2
public class SoSanhDoiTuong {
private int value;
public SoSanhDoiTuong() {
this.setValue(0);
}
public SoSanhDoiTuong(int value) {
this.setValue(value);
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
SoSanhDoiTuong dt2 = (SoSanhDoiTuong) obj;
if (this.value == dt2.value) return true;
else return false;
}
}
public class SoSanhDoiTuongTest {
public static void main(String []args) {
SoSanhDoiTuong t1 = new SoSanhDoiTuong(10);
SoSanhDoiTuong t2 = new SoSanhDoiTuong(10);
Gia tri t1 = 10
Gia tri t2 = 10
* So sanh hai doi tuong:
t1 bang voi t2
#87
• Cú pháp
• Trong đó:
Hoặc
Bổ sung vào chương trình đăng ký học phần một lớp quản lý học
phần (QuanLyHocPhan) bao gồm các chức năng:
• Tạo danh sách các học phần được mở gồm các thông tin được
người dùng nhập từ bàn phím
• Cho phép đăng ký thêm một sinh viên cho một học phần trong
danh sách học phần có sẵn. Mỗi lần đăng ký xong, hỏi lại người
dùng có tiếp tục không.
• Cho phép hủy đăng ký một sinh viên của một học phần nào đó.
Mỗi lần hủy đăng ký xong, hỏi lại người dùng có tiếp tục không
• Hiển thị thông tin học phần nếu người dùng không muốn tiếp tục
Q&A
#91