Bài giảng Lập trình hướng đối tượng - Bài 3: Đóng gói và xây dựng lớp, tạo và sử dụng đối tượng

8/24/2011  
Mục tiêu bài học  
Nêu được bản chất, vai trò của trừu tượng hóa  
Giải thích về đóng gói và che giấu thông tin  
Xây dựng lớp  
Bộ môn Công nghệ Phần mềm  
Viện CNTT & TT  
Trường Đại học Bách Khoa Hà Nội  
Định nghĩa lớp, thực hiện ẩn  
Tạo các phương thức, các trường/thuộc tính  
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG  
Bài 03. Đóng gói và xây dựng lớp,  
tạo và sử dụng đối tượng  
Tạo và sử dụng đối tượng  
Phương thức khởi tạo  
Khai báo và khởi tạo đối tượng  
Sử dụng đối tượng  
2
Nội dung  
Nội dung  
1. Trừu trượng hóa dữ liệu  
2. Đóng gói và xây dựng lớp  
3. Tạo và sử dụng đối tượng  
1. Trừu trượng hóa dữ liệu  
2. Đóng gói và xây dựng lớp  
3. Tạo và sử dụng đối tượng  
3
4
1.1. Trừu tượng hóa  
1.1. Trừu tượng hóa (2)  
2 loại trừu tượng hóa  
Trừu tượng hóa điều khiển  
Trừu tượng hóa dữ liệu  
1
8/24/2011  
1.2. Trừu tượng hóa dữ liệu trong OOP  
Đối tượng trong thực tế phức tạp  
7
8
1.2. Trừu tượng hóa dữ liệu (3)  
1.2. Trừu tượng hóa dữ liệu (2)  
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  
Any model that includes the most important,  
essential, or distinguishing aspects of  
something while suppressing or ignoring less  
important, immaterial, or diversionary details.  
The result of removing distinctions so as to  
emphasize commonalties (Dictionary of  
Object Technology, Firesmith, Eykholt,  
1995).  
9
10  
11  
12  
2
8/24/2011  
1.3. Lớp vs. Đối tượng  
13  
14  
Biểu diễn lớp trong UML  
Thuộc tính (attribute) là gì?  
3 thành phần:  
Professor  
- name  
- employeeID : UniqueId  
- hireDate  
- status  
- discipline  
- maxLoad  
Student  
+ submitFinalGrade()  
+ acceptCourseOffering()  
+ setMaxLoad()  
+ takeSabbatical()  
+ teachClass()  
- name  
- address  
- studentID  
- dateOfBirth  
Lớp và đối tượng trong UML  
Nội dung  
:Student  
1. Trừu trượng hóa dữ liệu  
2. Đóng gói và xây dựng lớp  
3. Tạo và sử dụng đối tượng  
- name = “M. Modano”  
- address = “123 Main St.”  
- studentID = 9  
- dateOfBirth = “03/10/1967”  
Student  
- name  
- address  
- studentID  
- dateOfBirth  
sv2:Student  
- name = “D. Hatcher”  
- address = “456 Oak Ln.”  
- studentID = 2  
- dateOfBirth = “12/11/1969”  
18  
3
8/24/2011  
2.1. Đóng gói (Encapsulation)  
2.1. Đóng gói (2)  
Một đối tượng có hai khung nhìn:  
BankAccount  
- owner: String  
- balance: double  
Client  
Methods  
Data  
+ debit(double): boolean  
+credit(double)  
19  
21  
23  
20  
2.1. Đóng gói (3)  
2.2. Xây dựng lớp  
Thông tin cần thiết để định nghĩa  
một lớp  
BankAccount  
- owner: String  
- balance: double  
+ debit(double): boolean  
+credit(double)  
Don’t know how  
it works, but it  
works!  
Input  
Output  
22  
2.2. Xây dựng lớp (2)  
2.2. Xây dựng lớp (3)  
Các lớp được nhóm lại thành package  
Lớp đóng gói các thành viên (member)  
String owner;  
double balance;  
24  
4
8/24/2011  
2.2.1. Khai báo lớp  
Ví dụ - Khai báo lớp  
Cú pháp khai báo:  
package oop.k52.cnpm;  
package tenpackage;  
chi_dinh_truy_cap class TenLop {  
// Than lop  
public class Student {  
}
…
}
25  
27  
29  
26  
Ví dụ: private  
2.2.2. Khai báo thành viên của lớp  
class Student{  
private String name;  
public String getName() {  
public  
private  
Không có  
return this.name;  
}
Cùng lớp  
public void setName(String name)  
Cùng gói  
{
this.name = name;  
Khác gói  
}
}
28  
Ví dụ: private (2)  
a. Thuộc tính  
class Student{  
Các thuộc tính phải được khai báo bên trong lớp  
private String name;  
public String getName()  
return this.name;  
}
{
public void setName(String name)  
{
this.name  
= name;  
}
Student  
- name  
- address  
- studentID  
- dateOfBirth  
}
class Manager{  
private Student[] students;  
public initianize()  
{
students[0] = new Students();  
//student.name = “Hung”; error  
student.setName(“Hung”);  
}
Nguyễn Thu Hương  
Hải Phòng…  
…
Nguyễn Hoàng Nam  
Hà Nội…  
}
30  
5
8/24/2011  
a. Thuộc tính (2)  
b. Phương thức  
Thuộc tính có thể được khởi tạo khi khai báo  
BankAccount  
- owner: String  
- balance: double  
+ debit(double): boolean  
+credit(double)  
boolean  
31  
32  
* Kiểu dữ liệu trả về  
* Chữ ký phương thức (signature)  
Lệnh return  
33  
34  
Ví dụ  
c. Thành viên hằng  
public Boolean checkOdd(int i)  
Ví dụ:  
{
final double PI = 3.141592653589793;  
public final int VAL_THREE = 39;  
if (i %2 ==0)  
return true;  
else  
private final int[] A = { 1, 2, 3, 4, 5, 6 };  
return false;  
}
public Boolean checkOdd(int i)  
{
return true;  
return false;  
}
35  
6
8/24/2011  
package com.megabank.models;  
public class BankAccount {  
private String owner;  
2.3. Che giấu dữ liệu (Data hiding)  
private double balance;  
public boolean debit(double amount){  
if (amount > balance)  
return false;  
else {  
balance -= amount; return true;  
}
}
public void credit(double amount){  
balance += amount;  
}
37  
39  
41  
38  
}
Cơ chế che giấu dữ liệu  
BankAccount  
- owner: String  
- balance: double  
+ debit(double): boolean  
+credit(double)  
40  
Cơ chế che giấu dữ liệu (2)  
Accessor (getter):  
Mutator (setter):  
7
8/24/2011  
Nội dung  
3.1. Khởi tạo dữ liệu  
1. Trừu trượng hóa dữ liệu  
2. Đóng gói và xây dựng lớp  
3. Tạo và sử dụng đối tượng  
Student  
- name  
- address  
- studentID  
- dateOfBirth  
Nguyễn Thu Hương  
Hải Phòng…  
…
Nguyễn Hoàng Nam  
Hà Nội…  
43  
45  
47  
44  
3.2. Phương thức khởi tạo  
Khởi tạo và hủy bỏ đối tượng  
Tạo  
Hủy  
Mục đích chính?  
Student  
- name  
- address  
- studentID  
- dateOfBirth  
Nguyễn Thu Hương  
Hải Phòng…  
…
Nguyễn Hoàng Nam  
Hà Nội…  
46  
3.2. Phương thức khởi tạo (2)  
3.2. Phương thức khởi tạo (3)  
Các chỉ định truy cập có thể dùng?  
Được xem như là thành viên của lớp?  
Ví dụ:  
public BankAccount(String o, double b){  
owner = o;  
balance = b;  
}
48  
8
8/24/2011  
3.2. Phương thức khởi tạo (4)  
3.3. Khai báo và khởi tạo đối tượng  
Phương khởi tạo mặc định (default  
constructor)  
Đối tượng được tạo ra, thể hiện hóa  
(instantiate) từ một mẫu chung (lớp).  
49  
51  
53  
50  
3.3. Khai báo và khởi tạo đối tượng (2)  
3.3. Khai báo và khởi tạo đối tượng (3)  
Đối tượng cần được khởi tạo trước khi sử  
dụng  
Ví dụ:  
BankAccount account = new BankAccount();  
52  
3.3. Khai báo và khởi tạo đối tượng (4)  
3.3. Khai báo và khởi tạo đối tượng (5)  
Ví dụ:  
Employee emp1 = new Employee(123456);  
Employee emp2;  
emp2 = emp1;  
Department dept[] = new Department[100];  
Test[] t = {new Test(1),new Test(2)};  
54  
9
8/24/2011  
Ví dụ 1  
Ví dụ 2  
public class BackAccount{  
private String owner;  
private double balance;  
public BankAccount(){  
class BankAccount{  
private String owner;  
private double balance;  
}
owner  
= ”noname”;  
public class Test{  
}
}
public static void main(String args[]){  
public class Test{  
BankAccount acc1 = new BankAccount();  
public static void main(String args[]){  
}
}
BankAccount acc1  
= new BankAccount();  
}
}
55  
57  
59  
56  
Ví dụ 3  
3.4. Sử dụng đối tượng  
public class BankAccount  
private String owner;  
{
Đố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  
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  
BankAccount account2  
=
=
new BankAccount();  
new BankAccount(“Hoang”);  
}
58  
}
3.4. Sử dụng đối tượng (2)  
public class BankAccount{  
private String owner;  
private double balance;  
public BankAccount(String name)  
}
{ setOwner(name);  
Toán tử “.”  
public void setOwner(String o){ owner  
=
o;  
}
}
public String getOwner(){ return owner;  
}
public class Test{  
public static void main(String args[]){  
BankAccount acc1  
BankAccount acc2  
=
=
new BankAccount(“”);  
new BankAccount(“Hong”);  
acc1.setOwner(“Hoa”);  
System.out.println(acc1.getOwner()  
+
“ ”+ acc2.getOwner());  
}
60  
10  
8/24/2011  
Tự tham chiếu – this  
public class BankAccount{  
private String owner;  
private double balance;  
Cho phép truy cập vào đối tượng hiện tại của  
lớp.  
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  
BankAccount acc2  
=
=
new BankAccount();  
new BankAccount();  
acc1.setOwner(“Hoa”);  
acc2.setOwner(“Hong”);  
System.out.println(acc1.getOwner() +  
“ ” +  
acc2.getOwner());  
}
61  
62  
11  
pdf 11 trang myanh 26480 Free
Bạn đang xem tài liệu "Bài giảng Lập trình hướng đối tượng - Bài 3: Đóng gói và xây dựng lớp, 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

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_bai_3_dong_goi_va_xay_du.pdf