Bài giảng 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
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{
private String name;
public String getName() {
return this.name;
Các thuộc tính phải được khai báo bên trong lớp
}
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
Bạn đang xem tài liệu "Bài giảng 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ải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_lap_trinh_huong_doi_tuong_bai_03_dong_goi_va_xay_d.pdf

