Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng

Phương thức khởi tạo

Dữ liệu cần được khởi tạo trước khi sử dụng

Lỗi khởi tạo là một trong các lỗi phổ biến

Với kiểu dữ liệu đơn giản, sử dụng toán tử =

Với đối tượng → Cần dùng phương thức khởi tạo

Khởi tạo và hủy bỏ đối tượng

Mỗi đối tượng khi tồn tại và hoạt động được hệ điều hành

cấp phát một vùng nhớ để lưu lại các giá trị của dữ liệu

thành phần

Khi tạo ra đối tượng HĐH sẽ gán giá trị khởi tạo cho các dữ

liệu thành phần

Phải được thực hiện tự động trước khi người lập trình có

thể tác động lên đối tượng

Sử dụng hàm/phương thức khởi tạo

Ngược lại khi kết thúc cần phải giải phóng hợp lý tất cả các

bộ nhớ đã cấp phát cho đối tượng.

Java: JVM

C++: Hàm hủy (destructor)

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng trang 1

Trang 1

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng trang 2

Trang 2

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng trang 3

Trang 3

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng trang 4

Trang 4

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng trang 5

Trang 5

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng trang 6

Trang 6

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng trang 7

Trang 7

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng trang 8

Trang 8

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng trang 9

Trang 9

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 49 trang duykhanh 5700
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng

Bài giảng Lập trình hướng đối tượng - Bài 4: Khởi tạo và sử dụng đối tượng
h?v=450maTzSIvA
 ◼ https://www.youtube.com/watch?v=1rLHJJqx98Q
◼ Equals và ==
 ◼ https://www.youtube.com/watch?v=qQe69w1YF54
◼ Java finalize method
 ◼ https://www.youtube.com/watch?v=j3fRK7T1pQo
 3
 Nội dung
1. Phương thức khởi tạo
2. Các loại phương thức khởi tạo
3. Khai báo và khởi tạo đối tượng
4. Sử dụng đối tượng
5. Quản lý bộ nhớ và so sánh đối tượng
6. Hủy bỏ đối tượng
7. Ví dụ và bài tập
 4
 1. Phương thức khởi tạo
 ◼ Dữ liệu cần được khởi tạo trước khi sử dụng
 ◼ Lỗi khởi tạo là một trong các lỗi phổ biến
 ◼ Với kiểu dữ liệu đơn giản, sử dụng toán tử =
 ◼ Với đối tượng → Cần dùng phương thức khởi tạo
 Student
- name
- address
- studentID
- dateOfBirth
 Nguyễn Thu Hương
 Nguyễn Hoàng Nam Hải Phòng
 Hà Nội 5
 Khởi tạo và hủy bỏ đối tượng
◼ Mỗi đối tượng khi tồn tại và hoạt động được hệ điều hành 
 cấp phát một vùng nhớ để lưu lại các giá trị của dữ liệu 
 thành phần
◼ Khi tạo ra đối tượng HĐH sẽ gán giá trị khởi tạo cho các dữ 
 liệu thành phần
 ◼ Phải được thực hiện tự động trước khi người lập trình có 
 thể tác động lên đối tượng
 ◼ Sử dụng hàm/phương thức khởi tạo
◼ Ngược lại khi kết thúc cần phải giải phóng hợp lý tất cả các 
 bộ nhớ đã cấp phát cho đối tượng.
 ◼ Java: JVM
 ◼ C++: Hàm hủy (destructor)
 6
 1. Phương thức khởi tạo
 ◼ Là phương thức đặc biệt được gọi tự động 
 khi tạo ra đối tượng
 ◼ Mục đích chính: Khởi tạo cho các thuộc tính 
 của đối tượng
 Student
- name
- address
- studentID
- dateOfBirth
 Nguyễn Thu Hương
 Nguyễn Hoàng Nam Hải Phòng
 Hà Nội
 7
 1. Phương thức khởi tạo
◼ Mỗi lớp phải chứa ít nhất một constructor
 ◼ Có nhiệm vụ tạo ra một thể hiện mới của lớp
 ◼ Tên của constructor trùng với tên của lớp
 ◼ Constructor không có kiểu dữ liệu trả về
◼ Ví dụ:
public BankAccount(String o, double b){
 owner = o; 
 balance = b;
}
 8
 1. Phương thức khởi tạo
◼ Phương thức khởi tạo có thể dùng các chỉ 
 định truy cập
 ◼ public
 ◼ private
 ◼ Không có (mặc định – phạm vi package)
◼ Một phương thức khởi tạo không thể dùng
 các từ khóa abstract, static, final, 
 native, synchronized.
◼ Các phương thức khởi tạo không được xem 
 như là thành viên của lớp.
 9
 Nội dung
1. Phương thức khởi tạo
2. Các loại phương thức khởi tạo
3. Khai báo và khởi tạo đối tượng
4. Sử dụng đối tượng
5. Quản lý bộ nhớ và so sánh đối tượng
6. Hủy bỏ đối tượng
7. Ví dụ và bài tập
 10
 2. Các loại phương thức khởi tạo
◼ 2 loại phương thức khởi tạo
 ◼ Phương thức khởi tạo mặc định (Phương thức 
 khởi tạo không tham số)
 ◼ Phương thức khởi tạo có tham số
 11
 Phương khởi tạo mặc định
 (default constructor) 
◼ Là phương thức khởi tạo KHÔNG THAM SỐ
 public BankAccount(){
 owner = "noname"; balance = 100000;
 }
◼ Một lớp nên có phương thức khởi tạo mặc định
 12
 Phương thức khởi tạo mặc định
◼ Khi LTV không viết một phương khởi tạo nào trong lớp 
 ◼ JVM cung cấp phương thức khởi tạo mặc định
 ◼ Phương thức khởi tạo mặc định do JVM cung cấp có chỉ định truy 
 cập giống như lớp của nó
public class MyClass{
 public static void main(String args){
 //...
 }
} public class MyClass{
MyClass.java public MyClass(){
 }
 public static void main(String args){
 //...
 Compiled }
 }
 MyClass.class
 13
 Phương thức khởi tạo không tham số
◼ Một phương thức khởi dựng có thể có các
 tham số truyền vào
◼ Dùng khi muốn khởi tạo giá trị cho các thuộc
 tính
◼ Ví dụ:
 public BankAccount(String o, double b){
 owner = o; 
 balance = b;
 }
 14
 Nội dung
1. Phương thức khởi tạo
2. Các loại phương thức khởi tạo
3. Khai báo và khởi tạo đối tượng
4. Sử dụng đối tượng
5. Quản lý bộ nhớ và so sánh đối tượng
6. Hủy bỏ đối tượng
7. Ví dụ và bài tập
 15
 3. Khai báo và khởi tạo đối tượng
◼ Đối tượng được tạo ra, thể hiện hóa 
 (instantiate) từ một mẫu chung (lớp).
◼ Các đối tượng phải được khai báo kiểu của 
 đối tượng trước khi sử dụng:
 ◼ Kiểu của đối tượng là lớp các đối tượng
 ◼ Ví dụ:
 ◼ String strName;
 ◼ BankAccount acc;
 16
 3. Khai báo và khởi tạo đối tượng
◼ Đối tượng cần được khởi tạo trước khi sử 
 dụng
 ◼ Sử dụng toán tử = để gán
 ◼ Sử dụng từ khóa new với constructor để khởi tạo đối 
 tượng:
 ◼ Từ khóa new dùng để tạo ra một đối tượng mới
 ◼ Tự động gọi phương thức khởi tạo tương ứng
 ◼ Một đối tượng được khởi tạo mặc định là null
◼ Đối tượng được thao tác thông qua tham 
 chiếu (~ con trỏ).
◼ Ví dụ:
 BankAccount acc1;
 acc1 = new BankAccount(); 17
 3. Khai báo và khởi tạo đối tượng
◼ Có thể kết hợp vừa khai báo và khởi tạo đối 
 tượng
 ◼ Cú pháp:
 Ten_lop ten_doi_tuong = new 
 Pthuc_khoi_tao(ds_tham_so);
 ◼ Ví dụ:
 BankAccount account = new BankAccount();
 18
 3. Khai báo và khởi tạo đối tượng
◼ Phương thức khởi tạo không có giá trị trả về, 
 nhưng khi sử dụng với từ khóa new trả về một tham 
 chiếu đến đối tượng mới
 19
 3. Khai báo và khởi tạo đối tượng
◼ Mảng các đối tượng được khai báo giống như
 mảng dữ liệu cơ bản
◼ Mảng các đối tượng được khởi tạo mặc định
 với giá trị null.
◼ Ví dụ:
 Employee emp1 = new Employee(123456);
 Employee emp2;
 emp2 = emp1;
 Department dept[] = new Department[100];
 Test[] t = {new Test(1),new Test(2)};
 20
 Ví dụ 1
class BankAccount{
 private String owner; 
 private double balance;
}
public class Test{
 public static void main(String args[]){
 BankAccount acc1 = new BankAccount();
 }
}
→ Phương thức khởi tạo mặc định do Java cung cấp.
 21
 Ví dụ 2
public class BackAccount{
 private String owner; 
 private double balance;
 public BankAccount(){
 owner = "noname";
 }
}
public class Test{
 public static void main(String args[]){
 BankAccount acc1 = new BankAccount();
 }
}
→ Phương thức khởi tạo mặc định tự viết. 22
 Ví dụ 3
public class BankAccount {
 private String owner;
 private double balance;
 public BankAccount(String name) {
 setOwner(name);
 }
 public void setOwner(String o) {
 owner = o;
 }
}
public class Test {
 public static void main(String args[]){ 
 BankAccount account1 = new BankAccount(); //Error
 BankAccount account2 = new BankAccount("Hoang");
 }
} 23
 Nội dung
1. Phương thức khởi tạo
2. Các loại phương thức khởi tạo
3. Khai báo và khởi tạo đối tượng
4. Sử dụng đối tượng
5. Quản lý bộ nhớ và so sánh đối tượng
6. Hủy bỏ đối tượng
7. Ví dụ và bài tập
 24
 4. Sử dụng đối tượng
◼ Đối tượng cung cấp các hoạt động phức tạp 
 hơn các kiểu dữ liệu nguyên thủy
◼ Đối tượng đáp ứng lại các thông điệp
 ◼ Toán tử "." được sử dụng để gửi một thông điệp 
 đến một đối tượng
 25
 4. Sử dụng đối tượng (2)
◼ Để gọi thành viên (dữ liệu hoặc thuộc tính) 
 của lớp hoặc đối tượng, sử dụng toán tử “.”
◼ Nếu gọi phương thức ngay trong lớp thì toán 
 tử “.” không cần thiết.
 26
public class BankAccount{
 private String owner;
 private double balance;
 public BankAccount(String name) {
 setOwner(name);
 // Là viết tắt của this.setOwner(name)
 }
 public void setOwner(String o){ owner = o; }
 public String getOwner(){ return owner; }
}
public class Test{
 public static void main(String args[]){
 BankAccount acc1 = new BankAccount(“”);
 BankAccount acc2 = new BankAccount(“Hong”);
 acc1.setOwner(“Hoa”);
 System.out.println(acc1.getOwner()
 + “ ”+ acc2.getOwner());
} 27
 Tự tham chiếu – this
◼ Cho phép truy cập vào đối tượng hiện tại của 
 lớp. 
◼ Quan trọng khi hàm/phương thức thành 
 phần thao tác trên hai hay nhiều đối tượng.
◼ Xóa đi sự nhập nhằng giữa một biến cục bộ, 
 tham số với thành phần dữ liệu của lớp
◼ Không dùng bên trong các khối lệnh static
 28
public class BankAccount{
 private String owner;
 private double balance;
 public BankAccount() { }
 public void setOwner(String owner){ 
 this.owner = owner;
 }
 public String getOwner(){ return owner; }
}
public class Test{
 public static void main(String args[]){
 BankAccount acc1 = new BankAccount();
 BankAccount acc2 = new BankAccount();
 acc1.setOwner(“Hoa”);
 acc2.setOwner(“Hong”);
 System.out.println(acc1.getOwner() + “ ” + 
 acc2.getOwner());
} 29
 Nội dung
1. Phương thức khởi tạo
2. Các loại phương thức khởi tạo
3. Khai báo và khởi tạo đối tượng
4. Sử dụng đối tượng
5. Quản lý bộ nhớ và so sánh đối tượng
6. Hủy bỏ đối tượng
7. Ví dụ và bài tập
 30
 5. Quản lý bộ nhớ và so sánh đối tượng
◼ Java không sử dụng con trỏ nên các địa chỉ 
 bộ nhớ không thể bị ghi đè lên một cách 
 ngẫu nhiên hoặc cố ý.
◼ Các vấn đề định vị và tái định vị bộ nhớ, 
 quản lý bộ nhớ do JVM kiểm soát, hoàn toàn 
 trong suốt với lập trình viên.
◼ Lập trình viên không cần quan tâm đến việc 
 ghi dấu các phần bộ nhớ đã cấp phát trong 
 heap để giải phóng sau này.
 31
 Bộ nhớ Heap
String s = new String(“hello”);
◼ s là biến tham
 chiếu, lưu trên
 Stack
◼ Giá trị của s là địa
 chỉ của vùng nhớ
 Heap lưu trữ đối
 tượng s tham
 chiếu tới
◼ Bộ nhớ Heap sử
 dụng để ghi thông
 tin được tạo bởi
 toán tử new.
 Bộ nhớ Stack Bộ nhớ Heap
 32
 Bộ nhớ Heap
 String s = new String(“hello”);
 String t = s;
◼ s và t cùng
 tham chiếu tới
 một đối tượng
 (cùng trỏ tới
 một vùng nhớ
 trên heap)
 Bộ nhớ Stack Bộ nhớ Heap
 33
 Bộ nhớ Stack
 String s = new String(“hello”);
 String t = s; 
 int i = 201;
 int j = i;
◼ Giá trị cục bộ trong bộ 
 nhớ Stack được sử 
 dụng như con trỏ 
 i 201
 tham chiếu tới Heap
◼ Giá trị của dữ liệu j 201
 nguyên thủy được ghi 
 trực tiếp trong Stack
 Bộ nhớ Stack Bộ nhớ Heap34
 Bộ thu gom rác (Garbage Collector)
◼ Một tiến trình chạy ngầm gọi đến bộ “thu 
 gom rác” để phục hồi lại phần bộ nhớ mà các 
 đối tượng không tham chiếu đến (tái định vị)
◼ Các đối tượng không có tham chiếu đến 
 được gán null.
◼ Bộ thu gom rác định kỳ quét qua danh sách 
 các đối tượng của JVM và phục hồi các tài 
 nguyên của các đối tượng không có tham 
 chiếu.
 35
 Bộ thu gom rác (2)
◼ JVM quyết định khi nào thực hiện thu gom 
 rác:
 ◼ Thông thường sẽ thực thi khi thiếu bộ nhớ
 ◼ Tại thời điểm không dự đoán trước
◼ Không thể ngăn quá trình thực hiện của bộ 
 thu gom rác nhưng có thể yêu cầu thực hiện 
 sớm hơn:
 System.gc(); hoặc Runtime.gc();
 36
 So sánh đối tượng
◼ Đối với các kiểu dữ liệu nguyên thủy, toán tử 
 == kiểm tra xem chúng có giá trị bằng nhau 
 hay không
◼ Ví dụ:
 int a = 1;
 int b = 1;
 if (a==b)... // true
 37
 So sánh đối tượng (2)
 ◼ Đối với các đối tượng, toán tử == kiểm tra 
 xem hai đối tượng có đồng nhất hay không, 
 (có cùng tham chiếu đến một đối tượng hay 
 không)
 ◼ Ví dụ:
a và b tham chiếu Employee a = new Employee(1);
tới 2 đối tượng Employee b = new Employee(1);
khác nhau if (a==b)... // false
a và b cùng Employee a = new Employee(1);
tham chiếu tới 1 Employee b = a;
đối tượng if (a==b)... // true
 38
 So sánh đối tượng (3)
◼ Phương thức equals
 ◼ Đối với kiểu dữ liệu nguyên thủy: Không tồn tại.
 ◼ Đối với các đối tượng: Bất kỳ đối tượng nào cũng 
 có phương thức này, dùng để so sánh giá trị của 
 đối tượng
 ◼ Phương thức equals kế thừa từ lớp Object (nhắc 
 lại trong bài kế thừa)
 ◼ Cài đặt mặc định của phương thức equals là như
 toán tử ==. Cần cài đặt lại để so sánh 2 đối 
 tượng dựa trên từng thuộc tính
 39
 Ví dụ == và equals – Lớp Integer
public class Equivalence {
 public static void main(String[] args) {
 Integer n1 = new Integer(47);
 Integer n2 = new Integer(47);
 System.out.println(n1 == n2);
 System.out.println(n1.equals(n2));
 }
}
 Lớp Integer (lớp cung cấp trong Java SDK) đã cài đặt lại phương thức 
 equals của lớp Object,1.equals(n nên n 2) trả về true 40
 Ví dụ sử dụng equals với lớp tự viết
class Value {
 int i;
}
public class EqualsMethod2 {
 public static void main(String[] args) {
 Value v1 = new Value();
 Value v2 = new Value();
 v1.i = v2.i = 100;
 System.out.println(v1.equals(v2));
 }
}
 Lớp Value (LTV tự viết) chưa cài đặt lại phương thức equals của lớp 
 Object, nên v1.equals(v2) trả về false, giống như toán tử == 41
 Nội dung
1. Phương thức khởi tạo
2. Các loại phương thức khởi tạo
3. Khai báo và khởi tạo đối tượng
4. Sử dụng đối tượng
5. Quản lý bộ nhớ và so sánh đối tượng
6. Hủy bỏ đối tượng
7. Ví dụ và bài tập
 42
 6. Hủy bỏ đối tượng
◼ Trong C#, C++:
 ◼ Sử dụng phương thức hủy (destructor)
 ◼ Phương thức hủy là phương thức tự động được gọi trước 
 khi đối tượng được hủy
 ◼ Phương thức hủy thường dùng để dọn dẹp bộ nhớ, thu 
 hồi tài nguyên (VD đối tượng khi hoạt động cần truy cập 
 tới file/CSDL, cấp phát bộ nhớ động)
◼ Trong Java:
 ◼ Không có khái niệm phương thức hủy
 ◼ Sử dụng phương thức finalize()
 43
 Phương thức void finalize()
◼ Lớp nào cũng có phương thức finalize() – được thực thi
 ngay lập tức khi quá trình thu gom xảy ra
◼ Thường chỉ sử dụng cho các trường hợp đặc biệt để “tự
 dọn dẹp” các tài nguyên sử dụng khi đối tượng được gc 
 giải phóng
 ◼ Ví dụ cần đóng các socket, file,... nên được xử lý trong luồng
 chính trước khi các đối tượng bị ngắt bỏ tham chiếu.
◼ Có thể coi là phương thức hủy (destructor) của lớp mặc
 dù Java không có khái niệm này.
 44
 Nội dung
1. Phương thức khởi tạo
2. Các loại phương thức khởi tạo
3. Khai báo và khởi tạo đối tượng
4. Sử dụng đối tượng
5. Quản lý bộ nhớ và so sánh đối tượng
6. Hủy bỏ đối tượng
7. Ví dụ và bài tập
 45
 Bài tập 1
◼ Viết lớp Student
 ◼ name
 ◼ year
 ◼ 1 phương thức khởi dựng
 ◼ Student(String name, int year)
 ◼ Tự tạo phương thức getter, setter cho đủ dùng
 ◼ Đảm bảo đóng gói, che dấu dữ liệu
◼ Lớp Test
 ◼ Nhập số phần tử cho mảng Student (trong 1 lớp học)
 ◼ Nhập lần lượt các Student
 ◼ In ra danh sách tên Student trong lớp và hiển thị tổng số
 tuổi của các Student
 46
 Student.java
package example;
public class Student {
 private int year;
 private String name;
 public Student(int year, String name) {
 this.year = year;
 this.name = name;
 }
 public int getYear() {
 return year;
 }
 public String getName() {
 return name;
 }
} 47
 Test.java
package example;
import java.util.Scanner;
public class Test {
 public static void main(String[] args) {
 Scanner scanner = new Scanner(System.in);
 int N = scanner.nextInt();
 Student[] cls = new Student[N];
 for (Student s: cls){
 String name = scanner.next();
 int year = scanner.nextInt();
 s = new Student(year, name);
 }
 int total = 0;
 System.out.println("Danh sach lop: ");
 for (int i=0; i<N; ++i){
 total += 2012-cls[i].getYear();
 System.out.println(cls[i].getName());
 }
 System.out.println("Tong so tuoi: " + total);
 } 48
}
 Bài tập 2 NhanVien
 -tenNhanVien: String
 -luongCoBan: double
◼ Viết mã nguồn cho lớp NhanVien 
 (đã làm) -heSoLuong: double
 +LUONG_MAX: double
 +tangLuong(double):boolean
◼ Viết phương thức khởi tạo với các 
 tham số cần thiết để khởi tạo cho +tinhLuong(): double
 các thuộc tính của lớp NhanVien. +inTTin()
◼ Viết lớp TestNV trong đó tạo ra 2 đối tượng của lớp 
 NhanVien, thực hiện truyền thông điệp đến các đối tượng 
 vừa tạo để hiển thị thông tin, hiển thị lương, tăng lương...
 49

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_bai_4_khoi_tao_va_su_dun.pdf