1. Trang chủ
  2. » Kỹ Năng Mềm

Bai 04 Khởi tạo và sử dụng đối tượng

13 14 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 1,01 MB

Nội dung

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

Ngày đăng: 17/11/2022, 09:01

w