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/31/17  
Mục tiêu bài học  
n Nêu được bản chất, vai trò của trừu tượng hóa  
n Giải thích về đóng gói và che giấu thông tin  
n 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  
n
Định nghĩa lớp, thực hiện ẩ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  
n Tạo và sử dụng đối tượng  
n
n
n
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
8/31/17  
1.1. Trừu tượng hóa  
1.1. Trừu tượng hóa (2)  
n Trừu tượng hóa điều khiển: Sử dụng các  
chương trình con (subprogram) và các luồng  
điều khiển (control flow)  
n Giảm thiểu và tinh lọc các chi tiết nhằm tập  
trung vào một số khái niệm/vấn đề quan tâm  
tại một thời điểm.  
n
Ví dụ: a := (1 + 2) * 5  
n
“abstraction – a concept or idea not associated  
with any specific instance”.  
n
Nếu không có trừu tượng hóa điều khiển, LTV phải chỉ ra  
tất cả các thanh ghi, các bước tính toán mức nhị phân…  
n Trừu tượng hóa dữ liệu: Xử lý dữ liệu theo các  
n
Ví dụ: Các định nghĩa toán học  
cách khác nhau  
n 2 loại trừu tượng hóa  
n
Ví dụ: Kiểu dữ liệu  
n
Trừu tượng hóa điều khiển (control abstraction)  
Trừu tượng hóa dữ liệu (data abstraction)  
n
Sự tách biệt rõ ràng giữa các đặc tính trừu tượng của kiểu  
dữ liệu và các chi tiết thực thi cụ thể của kiểu dữ liệu đó.  
n
1.2. Trừu tượng hóa dữ liệu trong OOP  
n Đối tượng trong thực tế phức tạp  
n Cần đơn giản hóa, bỏ qua những chi tiết  
không cần thiết  
n Chỉ “trích rút” lấy những thông tin liên quan,  
thông tin quan tâm, quan trọng với bài toán  
7
8
2
8/31/17  
1.2. Trừu tượng hóa dữ liệu (2)  
n Trừu tượng hóa là một cách  
nhìn hoặc cách biểu diễn  
một thực thể chỉ bao gồm  
các thuộc tính liên quan  
unclassified  
"things"  
trong một ngữ cảnh nào đó.  
n 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 gọi  
là Lớp (class).  
9
11  
n organisms,  
mammals,  
humans  
n organisms,  
mammals,  
dangerous  
mammals  
12  
13  
3
8/31/17  
1.3. Lớp vs. Đối tượng  
Biểu diễn lớp trong UML  
u
Đối tượng là sự vật thật,  
là thực thể thực sự  
n Lớp là mô hình khái  
niệm, mô tả các thực  
thể  
n Lớp (class) được biểu diễn bằng 1 hình chữ  
nhật với 3 thành phần:  
u
Đối tượng là một thể  
hiện (instance) của một  
lớp, dữ liệu của các đối  
tượng khác nhau là khác  
nhau  
Professor  
- name  
n Lớp như một bản  
mẫu, định nghĩa các  
thuộc tính và phương  
thức chung của các  
đối tượng  
- employeeID : UniqueId  
- hireDate  
- status  
- discipline  
- maxLoad  
n
n
n
Tên lớp  
Cấu trúc (thuộc tính)  
Hành vi (thao tác)  
u
Mỗi đối tượng có một  
lớp xác định dữ liệu và  
hành vi của nó.  
+ submitFinalGrade()  
+ acceptCourseOffering()  
+ setMaxLoad()  
+ takeSabbatical()  
+ teachClass()  
n Một lớp là sự trừu  
tượng hóa của một  
tập các đối tượng  
14  
Thuộc tính (attribute) là gì?  
Lớp và đối tượng trong UML  
Class  
n Một thuộc tính là một đặc tính được đặt tên  
:Student  
- name = “M. Modano”  
- address = “123 Main St.”  
- studentID = 9  
- dateOfBirth = “03/10/1967”  
của một lớp mô tả khoảng giá trị mà các thể  
hiện của đặc tính đó có thể chứa.  
Student  
- name  
- address  
- studentID  
- dateOfBirth  
n
Một lớp có thể không có thuộc tính nào hoặc có số lượng  
thuộc tính bất kỳ.  
Objects  
Student  
- name  
- address  
sv2:Student  
- name = “D. Hatcher”  
- address = “456 Oak Ln.”  
- studentID = 2  
Attributes  
- studentID  
- dateOfBirth  
- dateOfBirth = “12/11/1969”  
4
8/31/17  
Nội dung  
2.1. Đóng gói (Encapsulation)  
n Một đối tượng có hai khung nhìn:  
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  
n
Bên trong: Chi tiết về các thuộc tính và các  
phương thức của lớp tương ứng với đối tượng  
n
Bên ngoài: Các dịch vụ mà một đối tượng có thể  
cung cấp và cách đối tượng đó tương tác với  
phần còn lại của hệ thống  
Client  
Methods  
Data  
18  
19  
2.1. Đóng gói (2)  
2.1. Đóng gói (3)  
n
n
Một đối tượng là một thực thể được đóng gói, cung  
cấp tập các dịch vụ nhất định  
Một đối tượng được đóng gói có thể được xem như  
một hộp đen – các công việc bên trong là ẩn so với  
n Dữ liệu/thuộc tính và hành vi/phương thức  
được đóng gói trong một lớp à  
Encapsulation  
client  
Dù thay đổi thiết kế/mã nguồn  
bên trong nhưng giao diện bên  
ngoài không bị thay đổi theo  
BankAccount  
- owner: String  
- balance: double  
+ debit(double): boolean  
+credit(double)  
Don’t know how  
it works, but it  
works!  
Input  
Output  
20  
21  
5
8/31/17  
2.2. Xây dựng lớp  
2.2. Xây dựng lớp (2)  
n Lớp đóng gói các thành viên (member)  
n Thông tin cần thiết để định nghĩa một  
lớp  
n
Các trường/thuộc tính (field/attribute)  
n
Tên (Name)  
n
n
Tên lớp nên mô tả đối tượng trong  
n
Các hàm/phương thức (function/method):  
thế giới thật  
Tên lớp nên là số ít, ngắn gọn, và xác  
định rõ ràng cho sự trừu tượng hóa.  
String owner;  
Attribute declarations  
double balance;  
n
n
Danh sách các phần tử dữ liệu  
BankAccount  
- owner: String  
- balance: double  
n
Các phần dữ liệu cần lấy ra khi  
trừu tượng hóa  
Danh sách các thông điệp & thực  
thi  
Method declarations  
+ debit(double): boolean  
+credit(double)  
n
Các thông điệp mà đối tượng đó  
có thể nhận được  
22  
23  
2.2. Xây dựng lớp (3)  
2.2.1. Khai báo lớp  
n Các lớp được nhóm lại thành package  
n Cú pháp khai báo:  
n
Package bao gồm một tập hợp các lớp có quan hệ logic  
với nhau,  
package tenpackage;  
chi_dinh_truy_cap class TenLop {  
// Than lop  
n
Package được coi như các thư mục, là nơi tổ chức các  
lớp, giúp xác định vị trí dễ dàng và sử dụng các lớp một  
cách phù hợp.  
}
n
chi_dinh_truy_cap:  
n
public: Lớp có thể được truy cập từ bất cứ đâu, kể  
n Ví dụ:  
cả bên ngoài package chứa lớp đó.  
n
Một số package có sẵn của Java: java.lang, javax.swing,  
n
Không có (mặc định): Lớp có thể được truy cập từ bên  
trong package chứa lớp đó.  
java.io…  
n
Package có thể do ta tự đặt  
n
Cách nhau bằng dấu “.”  
n
n
Quy ước sử dụng ký tự thường để đặt tên package  
Ví dụ: package oop.k52.cnpm;  
24  
25  
6
8/31/17  
Ví dụ - Khai báo lớp  
2.2.2. Khai báo thành viên của lớp  
package oop.k52.cnpm;  
n Các thành viên của lớp cũng có chỉ định  
truy cập gần tương tự như lớp.  
public class Student {  
public  
private  
Không có  
…
}
Cùng lớp  
Cùng gói  
Khác gói  
27  
28  
Ví dụ: private  
2.2.2. Khai báo thành viên của lớp (2)  
class Student{  
n Các thành viên của lớp cũng có chỉ định  
private String name;  
public String getName() {  
return this.name;  
}
truy cập gần tương tự như lớp.  
public  
private  
Không có  
Cùng lớp  
Cùng gói  
Yes  
Yes  
Yes  
Yes  
Yes  
No  
public void setName(String name)  
{
this.name = name;  
Khác gói  
Yes  
No  
No  
}
}
29  
30  
7
8/31/17  
Ví dụ: private (2)  
a. Thuộc tính  
class Student{  
n Các thuộc tính phải được khai báo bên trong lớp  
n Mỗi đối tượng có bản sao các thuộc tính của riêng nó  
private String name;  
public String getName()  
return this.name;  
}
public void setName(String name)  
{
{
n
Giá trị của một thuộc tính thuộc các đối tượng khác nhau là khác  
nhau.  
this.name  
= name;  
}
}
class Manager{  
Student  
- name  
- address  
- studentID  
- dateOfBirth  
private Student[] students;  
public initianize()  
{
students  
students[0]  
//students[0].name  
=
new Student[10];  
new Student();  
“Hung”; error  
=
=
students[0].setName(“Hung”);  
Nguyễn Thu Hương  
Hải Phòng…  
}
…
Nguyễn Hoàng Nam  
Hà Nội…  
}
31  
32  
a. Thuộc tính (2)  
b. Phương thức  
n
Xác định cách một đối tượng đáp ứng lại thông  
điệp  
Phương thức xác định các hoạt động của lớp  
Bất kỳ phương thức nào cũng phải thuộc về một  
lớp nào đó  
n Thuộc tính có thể được khởi tạo khi khai báo  
n
Các giá trị mặc định sẽ được sử dụng nếu không được  
khởi tạo.  
n
n
BankAccount  
- owner: String  
- balance: double  
+ debit(double): boolean  
+credit(double)  
boolean  
33  
34  
8
8/31/17  
* Kiểu dữ liệu trả về  
* Chữ ký phương thức (signature)  
n Mỗi phương thức phải có một chữ ký riêng  
n Khi phương thức trả về ít nhất một giá trị  
hoặc một đối tượng thì bắt buộc phải có câu  
lệnh return để trả điều khiển cho đối tượng  
gọi phương thức.  
gồm:  
n
Tên phương thức  
n
Số lượng các tham số và kiểu của chúng  
n Nếu phương thức không trả về 1 giá trị nào  
(void) và có thể không cần câu lệnh return  
n Có thể có nhiều lệnh return trong một  
phương thức; câu lệnh đầu tiên mà chương  
trình gặp sẽ được thực thi.  
35  
36  
Ví dụ  
c. Thành viên hằng  
Public boolean checkOdd(int i)  
n Một thuộc tính/phương thức không thể thay  
{
đổi giá trị/nội dung trong quá trình sử dụng.  
if (i %2 ==0)  
return true;  
else  
n Cú pháp khai báo:  
chi_dinh_truy_cap final kieu_du_lieu  
TEN_HANG = gia_tri;  
return false;  
}
n Ví dụ:  
Public boolean checkOdd(int i)  
final double PI = 3.141592653589793;  
public final int VAL_THREE = 39;  
{
return true;  
private final int[] A = { 1, 2, 3, 4, 5, 6 };  
return false; //error  
}
37  
9
8/31/17  
package com.megabank.models;  
public class BankAccount {  
private String owner;  
BankAccount  
- owner: String  
- balance: double  
+ debit(double): boolean  
+credit(double)  
2.3. Che giấu dữ liệu (Data hiding)  
private double balance;  
n Dữ liệu được che giấu ở bên trong lớp và chỉ  
được truy cập và thay đổi ở các phương thức  
bên ngoài  
public boolean debit(double amount){  
if (amount > balance)  
return false;  
n
Tránh thay đổi trái phép hoặc làm sai lệch dữ  
liệu  
else {  
balance -= amount; return true;  
}
}
public void credit(double amount){  
balance += amount;  
}
39  
40  
}
Cơ chế che giấu dữ liệu  
n Các thành viên dữ liệu  
n
Chỉ có thể truy cập từ các  
phương thức bên trong lớp  
n
Chỉ định truy cập là private  
để bảo vệ dữ liệu  
n Các đối tượng khác muốn  
truy nhập vào dữ liệu  
riêng tư này phải thông  
qua các phương thức  
public  
BankAccount  
- owner: String  
- balance: double  
+ debit(double): boolean  
+credit(double)  
41  
43  
10  
8/31/17  
Cơ chế che giấu dữ liệu (2)  
Bài tập: lớp BankAccount  
package demo;  
n Vì dữ liệu là riêng tư à Thông thường một  
lớp cung cấp các dịch vụ để truy cập và  
chỉnh sửa các giá trị của dữ liệu  
public class BankAccount {  
private String owner;  
private double balance;  
n
Accessor (getter): Trả về giá trị hiện tại của một thuộc  
tính (dữ liệu)  
public String getOwner() {  
return owner;  
}
n
n
Mutator (setter): Thay đổi giá trị của một thuộc tính  
Thường là getX và setX, trong đó x là tên thuộc tính  
public void setOwner(String owner1) {  
owner = owner1;  
}
public double getBalance() {  
return balance;  
}
public void setBalance(double balance1) {  
balance = balance1;  
}
44  
45  
}
Bài tập: lớp BankAccount  
Bài tập 1  
NhanVien  
-tenNhanVien: String  
-luongCoBan: double  
-heSoLuong: double  
+LUONG_MAX: double  
package demo;  
n Viết mã nguồn cho lớp NhanVien  
public class BankAccount {  
private String owner;  
private double balance;  
như trong hình bên biết:  
n
Lương = Lương cơ bản * Hệ số  
lương  
+tangLuong(double):boolean  
+tinhLuong(): double  
+inTTin()  
public String getOwner() {  
n
Phương thức inTTin() hiển thị  
thông tin của đối tượng NhanVien  
tương ứng.  
return owner;  
}
public void setOwner(String owner) {  
this.owner = owner;  
n
Phương thức tangLuong(double) tăng hệ số lương hiện tại lên  
một lượng bằng giá trị tham số double truyền vào. Nếu điều  
này làm cho lương của nhân viên > lương tối đa cho phép thì  
không cho phép thay đổi, in ra thông báo và trả về false,  
ngược lại trả về true.  
}
public double getBalance() {  
return balance;  
}
public void setBalance(double balance) {  
this.balance = balance;  
n Viết các phương thức get và set cho các thuộc tính của lớp  
}
46  
NhanVien.  
47  
}
11  
8/31/17  
Nội dung  
3.1. Khởi tạo dữ liệu  
n
Dữ liệu cần được khởi tạo trước khi sử dụ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  
n
Lỗi khởi tạo là một trong các lỗi phổ biến  
n
n
Với kiểu dữ liệu đơn giản, sử dụng toán tử =  
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  
Hải Phòng…  
…
Nguyễn Hoàng Nam  
Hà Nội…  
48  
49  
3.2. Phương thức khởi tạo  
Khởi tạo và hủy bỏ đối tượng  
n Mỗi đối tượng khi tồn tại và hoạt động được hệ điều hành  
cấp phát một vùng nhớ để lưu lại các giá trị của dữ liệu  
thành phần  
n Là phương thức đặc biệt được gọi tự động  
khi tạo ra đối tượng  
n Khi tạo ra đối tượng HĐH sẽ gán giá trị khởi tạo cho các dữ  
n Mục đích chính: Khởi tạo cho các thuộc tính  
của đối tượng  
Student  
liệu thành phần  
n
Phải được thực hiện tự động trước khi người lập trình có  
thể tác động lên đối tượng  
n
Sử dụng hàm/phương thức khởi tạo  
- name  
- address  
n Ngược lại khi kết thúc cần phải giải phóng hợp lý tất cả các  
- studentID  
- dateOfBirth  
Nguyễn Thu Hương  
bộ nhớ đã cấp phát cho đối tượng.  
n
Java: JVM  
n
C++: Hàm hủy (destructor)  
…
Nguyễn Hoàng Nam  
Hải Phòng…  
Hà Nội…  
50  
51  
12  
8/31/17  
3.2. Phương thức khởi tạo (2)  
3.2. Phương thức khởi tạo (3)  
n Phương thức khởi tạo có thể dùng các chỉ  
n Mỗi lớp phải chứa ít nhất một constructor  
định truy cập  
n
n
n
Có nhiệm vụ tạo ra một thể hiện mới của lớp  
Tên của constructor trùng với tên của lớp  
Constructor không có kiểu dữ liệu trả về  
n
n
public  
private  
n
Không có (mặc định – phạm vi package)  
n Ví dụ:  
n Một phương thức khởi tạo không thể dùng  
các từ khóa abstract, static, final,  
native, synchronized.  
public BankAccount(String o, double b){  
owner = o;  
balance = b;  
n Các phương thức khởi tạo không được xem  
}
như là thành viên của lớp.  
52  
53  
3.2. Phương thức khởi tạo (4)  
3.3. Khai báo và khởi tạo đối tượng  
n Phương khởi tạo mặc định (default  
n Đối tượng được tạo ra, thể hiện hóa  
constructor)  
(instantiate) từ một mẫu chung (lớp).  
n
Là phương thức khởi tạo KHÔNG THAM SỐ  
public BankAccount(){  
owner = “noname”; balance = 100000;  
}
n Các đối tượng phải được khai báo kiểu của  
đối tượng trước khi sử dụng:  
n
Kiểu của đối tượng là lớp các đối tượng  
n
Ví dụ:  
n
n
Nếu ta không viết một phương khởi tạo nào trong lớp  
n
n
String strName;  
BankAccount acc;  
n
JVM mới cung cấp phương thức khởi tạo mặc định  
n
Phương thức khởi tạo mặc định do JVM cung cấp có chỉ định truy  
cập giống như lớp của nó  
Một lớp nên có phương thức khởi tạo mặc định  
54  
55  
13  
8/31/17  
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)  
n Đối tượng cần được khởi tạo trước khi sử  
n Có thể kết hợp vừa khai báo vào khởi tạo đối  
dụng  
tượng  
n
n
Sử dụng toán tử = để gán  
n
Cú pháp:  
Sử dụng từ khóa newvới constructor để khởi tạo đối  
tượng:  
Ten_lop ten_doi_tuong = new  
Pthuc_khoi_tao(ds_tham_so);  
n
n
Từ khóa newdùng để tạo ra một đối tượng mới  
Tự động gọi phương thức khởi tạo tương ứng  
n
Một đối tượng được khởi tạo mặc định là null  
n
Ví dụ:  
n Đối tượng được thao tác thông qua tham  
BankAccount account = new BankAccount();  
chiếu (~ con trỏ).  
n Ví dụ:  
BankAccount acc1;  
acc1 = new BankAccount();  
56  
57  
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)  
n Phương thức khởi tạo không có giá trị trả về,  
n Mảng các đối tượng được khai báo giống như  
nhưng khi sử dụng với từ khóa new trả về một tham  
mảng dữ liệu cơ bản  
chiếu đến đối tượng mới  
n Mảng các đối tượng được khởi tạo mặc định  
với giá trị null.  
n Ví dụ:  
Employee emp1 = new Employee(123456);  
Employee emp2;  
emp2 = emp1;  
Department dept[] = new Department[100];  
Test[] t = {new Test(1),new Test(2)};  
58  
59  
14  
8/31/17  
Ví dụ 1  
Ví dụ 2  
public class BackAccount{  
class BankAccount{  
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[]){  
public class Test{  
BankAccount acc1 = new BankAccount();  
public static void main(String args[]){  
}
}
BankAccount acc1 = new BankAccount();  
}
}
à Phương thức khởi tạo mặc định do Java cung cấp.  
à Phương thức khởi tạo mặc định tự viết.  
60  
61  
Ví dụ 3  
3.4. Sử dụng đối tượng  
public class BankAccount {  
n Đối tượng cung cấp các hoạt động phức tạp  
private String owner;  
private double balance;  
public BankAccount(String name){  
hơn các kiểu dữ liệu nguyên thủy  
n Đối tượng đáp ứng lại các thông điệp  
setOwner(name);  
}
n
Toán tử "." được sử dụng để gửi một thông điệp  
đến một đối tượng  
public void setOwner(String o){  
owner = o;  
}
}
public class Test{  
public static void main(String args[]){  
BankAccount account1 = new BankAccount();  
//Error  
BankAccount account2 = new BankAccount(“Hoang”);  
}
62  
63  
}
15  
8/31/17  
3.4. Sử dụng đối tượng (2)  
public class BankAccount{  
private String owner;  
private double balance;  
public BankAccount(String name) {  
setOwner(name);  
}
n Để gọi thành viên (dữ liệu hoặc thuộc tính)  
của lớp hoặc đối tượng, sử dụng toán tử “.”  
public void setOwner(String o){ owner = o; }  
public String getOwner(){ return owner; }  
}
n Nếu gọi phương thức ngay trong lớp thì toán  
tử “.” không cần thiết.  
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());  
}
64  
65  
Bài tập  
Student.java  
package example;  
public class Student {  
private int year;  
name  
private String name;  
public Student(int year, String name) {  
this.year = year;  
this.name = name;  
}
n
n
Tự tạo phương thức getter, setter cho đủ dùng  
Đảm bảo đóng gói, che dấu dữ liệu  
n Lớp Test  
public int getYear() {  
return year;  
}
n
n
n
Nhập số phần tử cho mảng Student (trong 1 lớp học)  
Nhập lần lượt các Student  
In ra danh sách tên Student trong lớp và hiển thị tổng số  
tuổi của các Student  
public String getName() {  
return name;  
}
}
66  
67  
16  
8/31/17  
Test.java  
Tự tham chiếu – this  
package example;  
import java.util.Scanner;  
public class Test {  
n Cho phép truy cập vào đối tượng hiện tại của  
public static void main(String[] args) {  
lớp.  
Scanner scanner = new Scanner(System.in);  
int N = scanner.nextInt();  
Student[] cls = new Student[N];  
for (Student s: cls){  
n Quan trọng khi hàm/phương thức thành  
phần thao tác trên hai hay nhiều đối tượng.  
String name = scanner.next();  
int year = scanner.nextInt();  
s = new Student(year, name);  
n Xóa đi sự nhập nhằng giữa một biến cục bộ,  
tham số với thành phần dữ liệu của lớp  
}
int total = 0;  
n Không dùng bên trong các khối lệnh static  
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);  
}
68  
69  
}
NhanVien  
-tenNhanVien: String  
-luongCoBan: double  
-heSoLuong: double  
+LUONG_MAX: double  
+tangLuong(double):boolean  
+tinhLuong(): double  
+inTTin()  
Bài tập 3  
public class BankAccount{  
private String owner;  
private double balance;  
public BankAccount() { }  
public void setOwner(String owner){  
n Viết mã nguồn cho lớp NhanVien  
(đã làm)  
this.owner = owner;  
}
public String getOwner(){ return owner; }  
}
n Viết phương thức khởi tạo với các  
tham số cần thiết để khởi tạo cho  
các thuộc tính của lớp NhanVien.  
public class Test{  
public static void main(String args[]){  
BankAccount acc1 = new BankAccount();  
BankAccount acc2 = new BankAccount();  
n Viết lớp TestNV trong đó tạo ra 2 đối tượng của lớp  
NhanVien, thực hiện truyền thông điệp đến các đối tượng vừa  
tạo để hiển thị thông tin, hiển thị lương, tăng lương...  
acc1.setOwner(“Hoa”);  
acc2.setOwner(“Hong”);  
System.out.println(acc1.getOwner() + “ ” +  
acc2.getOwner());  
70  
71  
}
17  
pdf 17 trang yennguyen 21180 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