Tải bản đầy đủ (.pdf) (11 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.57 MB, 11 trang )

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

k o?sqìmg?g ︰mf?I。h?s ︸mf
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
1.
2.
3.

Nội dung



Trừu trượng hóa dữliệu
Đóng gói và xây dựng lớp
Tạo và sửdụng đối tượng

1.
2.
3.

Trừ u trư ợ ng hóa dữ liệ u
Đóng gói và xây dựng lớp
Tạo và sửdụng đối tượng

3

1.1. Trừu tượng hóa
2 loại trừu tượng hóa

4

1.1. Trừu tượng hóa (2)
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

8

7

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
- name
- address
- studentID
- dateOfBirth


+ submitFinalGrade()
+ acceptCourseOffering()
+ setMaxLoad()
+ takeSabbatical()
+ teachClass()

Lớp và đối tượng trong UML
:Student
Student
- name
- address
- studentID
- dateOfBirth

- name = “M. Modano”
- address = “123 Main St.”
- studentID = 9
- dateOfBirth = “03/10/1967”

Nội dung
1.
2.
3.

Trừu trượng hóa dữliệu
Đóng gói và xây dự ng lớ p
Tạo và sửdụng đối tượng

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:

b ¡‹

BankAccount
- owner: String
- balance: double

Methods

+ debit(double): boolean
+credit(double)
Data
19

2.1. Đóng gói (3)


20

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

Input

Don’t know how
it works, but it
works!

+ debit(double): boolean
+credit(double)

Output
21

2.2. Xây dựng lớp (2)

22

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;

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 {

public class Student {

// Than lop


}



}

25

Ví dụ: private

2.2.2. Khai báo thành viên của lớp

public

Không có

26

private

Cùng lớp
Cùng gói
Khác gói

class Student{
private String name;
public String getName() {
return this.name;
}
public void setName(String name)

{
this.name = name;
}
}
28

27

Ví dụ: private (2)
class Student{
private String name;
public String getName() {
return this.name;
}
public void setName(String name)
{
this.name = name;
}
}
class Manager{
private Student[] students;
public initianize()
{
students[0] = new Students();
//student.name = “Hung”; error
student.setName(“Hung”);
}
}

a. Thuộc tính

Các thuộc tính phải được khai báo bên trong lớp

Student
- name
- address
- studentID
- dateOfBirth
Nguyễn Thu Hương
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
+credit(double)

boolean

32

31

* Kiểu dữliệu trảvề

* Chữký phương thức (signature)

Lệnh return

33

Ví dụ

34

c. Thành viên hằng

public Boolean checkOdd(int i)
{
if (i %2 ==0)
return true;

else
return false;
}

Ví dụ:
final double PI = 3.141592653589793;
public final int VAL_THREE = 39;
private final int[] A = { 1, 2, 3, 4, 5, 6 };

public Boolean checkOdd(int i)
{
return true;
return false;
}
35

6


8/24/2011

package com.megabank.models;
public class BankAccount {
private String owner;
private double balance;

2.3. Che giấu dữliệu (Data hiding)

public boolean debit(double amount){
if (amount > balance)

return false;
else {
balance -= amount; return true;
}
}
public void credit(double amount){
balance += amount;
}
38

37

}

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

39

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

41

42

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

Accessor (getter):
Mutator (setter):

7


8/24/2011

Nội dung
1.
2.
3.

3.1. Khởi tạo dữliệu

Trừu trượng hóa dữliệu
Đóng gói và xây dựng lớp
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…




Hà Nội…

43

44

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

Khởi tạo và hủy bỏđối tượng
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


3.2. Phương thức khởi tạo (2)

46

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

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

constructor)

Đối tượng được tạo ra, thểhiện hóa
(instantiate) từmột mẫu chung (lớp).

49

3.3. Khai báo và khởi tạo đối tượng (2)

50

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();

51

3.3. Khai báo và khởi tạo đối tượng (4)

52

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

}

class BankAccount{
private String owner;
private double balance;
}
public class Test{
public static void main(String args[]){
BankAccount acc1 = new BankAccount();
}
}

55

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();
BankAccount account2 = new BankAccount(“Hoang”);
}

}

56

3.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

58

57

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

public class BankAccount{
private String owner;
private double balance;
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());
}


Toán tử“.”

59

60

10


8/24/2011

Tựtham chiếu – this
Cho phép truy cập vào đối tượng hiện tại của
lớp.

61

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

62

11



×