Bai 03

You might also like

You are on page 1of 11

8/24/2011

Mục tiêu bài học

Bộ môn Công nghệ Phần mềm  Nêu được bản chất, vai trò của trừu tượng hóa
Viện CNTT & TT  Giải thích về đóng gói và che giấu thông tin
Trường Đại học Bách Khoa Hà Nội  Xây dựng lớp
 Đị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

 Tạo và sử dụng đối tượng


Bài 03. Đóng gói và xây dựng lớp,  Phương thức khởi tạo
tạo và sử dụng đối tượng  Khai báo và khởi tạo đối tượng
 Sử dụng đối tượng

Nội dung Nội dung

1. Trừu trượng hóa dữ liệu 1. Trừu trượng hóa dữ liệu


2. Đóng gói và xây dựng lớp 2. Đóng gói và xây dựng lớp
3. Tạo và sử dụng đối tượng 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)

 Any model that includes the most important,  Tập hợp các thể hiện của
essential, or distinguishing aspects of các thực thể thành các nhóm
something while suppressing or ignoring less có chung các thuộc tính
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()
- name
+ setMaxLoad() - address
+ takeSabbatical() - studentID
+ teachClass()
- dateOfBirth

Lớp và đối tượng trong UML Nội dung

Trừu trượng hóa dữ liệu


:Student
1.
- name = “M. Modano”

Student
- address = “123 Main St.”
- studentID = 9 2. Đóng gói và xây dựng lớp
Tạo và sử dụng đối tượng
- name - dateOfBirth = “03/10/1967”
- address 3.
- 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
+ debit(double): boolean
+credit(double)

Data
19 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
Input Don’t know how Output +credit(double)
it works, but it
works! 21 22

2.2. Xây dựng lớp (2) 2.2. Xây dựng lớp (3)
 Lớp đóng gói các thành viên (member)  Các lớp được nhóm lại thành package

String owner;
double balance;

23 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 26

2.2.2. Khai báo thành viên của lớp Ví dụ: private


class Student{
private String name;
public String getName() {
public Không có private return this.name;
}
Cùng lớp public void setName(String name)
Cùng gói {
Khác gói this.name = name;
}
}
27 28

Ví dụ: private (2) a. Thuộc tính


class Student{
private String name;
 Các thuộc tính phải được khai báo bên trong lớp
public String getName() {
return this.name;
}
public void setName(String name)
{
this.name = name;
} Student
}
class Manager{ - name
private Student[] students; - address
public initianize() - studentID
{ - dateOfBirth
students[0] = new Students();
Nguyễn Thu Hương
//student.name = “Hung”; error …
student.setName(“Hung”); Nguyễn Hoàng Nam Hải Phòng…
} Hà Nội…
} 29 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
boolean
+credit(double)

31 32

* Chữ ký phương thức (signature) * Kiểu dữ liệu trả về


 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;
if (i %2 ==0)
return true; public final int VAL_THREE = 39;
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 { 2.3. Che giấu dữ liệu (Data hiding)
private String owner;
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 38
}

Cơ chế che giấu dữ liệu

BankAccount
- owner: String
- balance: double
+ debit(double): boolean
39
+credit(double) 40

Cơ chế che giấu dữ liệu (2)


 Accessor (getter):
 Mutator (setter):

41 42

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
Nguyễn Hoàng Nam …
Hải Phòng…
43 Hà Nội… 44

Khởi tạo và hủy bỏ đối tượng 3.2. Phương thức khởi tạo
 Tạo  Mục đích chính?
 Hủy

Student
- name
- address
- studentID
- dateOfBirth
Nguyễn Thu Hương
Nguyễn Hoàng Nam …
Hải Phòng…
Hà Nội…
45 46

3.2. Phương thức khởi tạo (2) 3.2. Phương thức khởi tạo (3)
 Ví dụ:  Các chỉ định truy cập có thể dùng?
public BankAccount(String o, double b){  Được xem như là thành viên của lớp?
owner = o;
balance = b;
}

47 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  Đối tượng được tạo ra, thể hiện hóa
constructor) (instantiate) từ một mẫu chung (lớp).

49 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ử  Ví dụ:


dụng
BankAccount account = new BankAccount();

51 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)};

53 54

9
8/24/2011

Ví dụ 1 Ví dụ 2
class BankAccount{ public class BackAccount{
private String owner; private String owner;
private double balance;
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();
}
}
}

55 56

Ví dụ 3 3.4. Sử dụng đối tượng


Đối tượng cung cấp các hoạt động phức tạp
public class BankAccount {

private String owner;
private double balance; hơn các kiểu dữ liệu nguyên thủy
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();
BankAccount account2 = new BankAccount(“Hoang”);
}
57 58
}

3.4. Sử dụng đối tượng (2) public class BankAccount{


private String owner;
private double balance;
 Toán tử “.” public BankAccount(String name) { 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());
}

59 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 public BankAccount() { }
lớp. 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());
61
} 62

11

You might also like