Lập trình hướng thủ tục:
- Giải quyết vấn đề từng bước cho đến khi đạt yêu cầu
- Lập trình từ trên xuống
- Lập trình theo hàm -> chỉ tạo ra hàm xử lý khi gặp vấn đề nào đó
Lập trình hướng đối tượng:
- Dựa trên nền tảng các lớp đã xây dựng sẵn
- Xác định trước các chức năng cần phải thực hiện
Đặt điểm OOP:
- OOP (Object-oriented programming) - Lập trình hướng đối tượng là kiểu lập trình lấy đối tượng làm nền tảng.
- Đơn giản hóa việc phát triển chương trình
- Tạo ra các chương trình có tính mềm dẻo và linh động cao
- Dễ dàng phát triển, bảo trì và nâng cấp
NỘI DUNG:
Ví dụ:
1. Làm quen lớp, đối tượng, thuộc tính và phương thức
2. Getter và Setter
3. Qui tắc đặt tên
4. Phạm vi truy cập
THỰC HIỆN:
1. Làm quen lớp, đối tượng, thuộc tính và phương thức
- Class/Lớp: chỉ là cái gì đó chung chung chưa áp chỉ một cái nào cả, như là một khuôn mẫu được sử dụng mô tả các đối thượng cùng loại
- Object/Đối tượng: là cái cụ thể nào đó bao gồm các thuộc tính (là các danh từ/thuộc tính), các phương thức (hàm..)
- Property/Thuộc tính/Trường dữ liệu: là các đặc điểm, đặc tính của một lớp. Ví dụ: Cao, mập, tóc dài, da trắng,..
- Method/Phương thức: Là các hành động có thể được thực hiện từ lớp. Phương thức cũng giống như hàm, nhưng là hàm riêng của từng lớp. Ví dụ: ăn, ngủ, chạy, ...
Ví dụ 4.1:
- Viết chương trình tạo lớp/class sinh viên với các thuộc tính: maSoSV, hoTen, diemTrungBinh.
- Xây dựng phương thức nhận dữ liệu truyền vào cho đối tượng sinh viên (từ class Main)
- Xây dựng phương thức xếp loại học lực dựa vào điểm trung bình sau đó trả về kết quả nếu < 5 là Yếu, < 7 là Trung Bình, còn lại là Khá Giỏi
- Xây dựng phương thức in thông tin sinh viên có tên In_SinhVien.
- Tạo mới đối tượng sinh viên, truyền/gán dữ liệu cho các thuộc tính của sinh viên, gọi phương thức In_SinhVien
Hướng dẫn:
- Tạo class mới có tên SinhVien_1.java (KHÔNG có phương thức main)
Code:
public class SinhVien_1 {
public String maSoSV;
public String hoTen;
public double diemTrungBinh;
public SinhVien_1(String vMaSoSV, String vHoTen, double vDiemTrungBinh){
this.maSoSV = vMaSoSV;
this.hoTen = vHoTen;
this.diemTrungBinh = vDiemTrungBinh;
}
public String XepLoai(){
String ketQua;
if (this.diemTrungBinh < 5) ketQua = "Yeu";
else if (this.diemTrungBinh < 7) ketQua = "Trung Binh";
else ketQua ="Kha Gioi";
return ketQua;
}
public void In_SinhVien(){
System.out.println("MSSV: " + this.maSoSV);
System.out.println("Ho ten: " + this.hoTen);
System.out.println("Xep loai: " + this.XepLoai());
}
}
Trong đó:
- Tạo class mới có tên Main_SinhVien_1.java với bao gồm phương thức main. Truy cập tạo mới đối tượng sinh viên và gán giá trị cho thuộc tính, truy xuất vào phương thức.
Code:
public class Main_SinhVien_1 {
public static void main(String[] args) {
SinhVien_1 sv_001 = new SinhVien_1("sv001", "Van Cong Khanh", 9); //SinhVien_1 là tên của class SinhVien_1.Java
sv_001.In_SinhVien(); // gọi phương thức In_SinhVien từ class SinhVien_1
}
}
Trong đó:
2. Getter và Setter (Enscapsulation)
Getter: đọc thuộc tính đối tượng, trả về giá trị của thuộc tính => có giá trị trả về
Setter: thiết lập giá trị nên không có kiểu dữ liệu trả về
Ví dụ:
public class SinhVien_2 {
public String hoTen;
public double diem;
// === GETTER ===
public String getHoTen() {
return hoTen;
}
public double getDiem() {
return diem;
}
// === SETTER ===
public void setHoTen(String vHoTen) {
this.hoTen = vHoTen;
}
public void setDiem(double vDiem) {
this.diem = vDiem;
}
}
Noted:
- Trên thực tế việc truy cập và gán giá trị cho dữ liệu đều thông qua getter và setter, sử dụng công cụ để tạo ra một cách tự động.
- Từ khóa this sử dụng để đại diện cho đối tượng hiện tại của class, this được sử dụng để tham chiếu đến các field, method. Trong một số trường hợp tên biến cục bộ được đặt trùng với tên trường dữ liệu trong class, chúng ta sử dụng từ khóa this để dễ phân biệt.
Truy xuất và gán dữ liệu cũng tương tự
Code:
public class Main_SinhVien_2 {
public static void main(String[] args) {
SinhVien_2 sv_002 = new SinhVien_2();
sv_002.setHoTen("Van Cong Khanh");
sv_002.setDiem(8);
}
}
3. Qui tắc đặt tên
4. Phạm vi truy cập
- Public: Có thể truy cập từ bất cứ đâu. Dùng cho class, property, method
- Protected: Truy trong packet và subclass (kế thừa). Dùng cho property, method
- Null (rỗng)/{default}: Truy cập trong packet. Dùng cho class, property, method
- Private: Chỉ được phép truy cập trong chính class nào đó. Dùng cho property, method
Xong!