SlideShare a Scribd company logo
Bài 4
Các kỹ thuật
xây dựng lớp
Trịnh Thành Trung
trungtt@soict.hust.edu.vn
Nội dung
1. Đóng gói
2. Hàm khởi tạo
3. Nạp chồng
4. Kết tập
Đóng gói
Encapsulation
1
4
Đóng gói
• Một đối tượng có hai khung nhì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
− 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
Methods
Data
Client
5
Đóng gói
• Đóng gói
(Encapsulation)
• Dữ liệu và phương thức
được đóng gói trong
một lớp
• 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
6
Đóng gói
• 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 client
Input Output
DON’T KNOW
HOW IT
WORKS, BUT
IT WORKS
7
Che giấu dữ liệu
• 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
• Tránh thay đổi trái
phép hoặc làm sai
lệch dữ liệu
8
Cơ chế che giấu dữ liệu
• Các thành viên dữ liệu
• Chỉ có thể truy cập từ các
phương thức bên trong lớp
• Chỉ định truy cập là private để
bảo vệ dữ liệu
• 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)
9
Cơ chế che giấu dữ liệu
• Các thành phần dữ liệu là private  Để truy cập
và chỉnh sửa các giá trị của dữ liệu, lớp cần phải
cung cấp các dịch vụ
− Accessor (getter): Trả về giá trị hiện tại của một thuộc
tính (dữ liệu)
− 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
10
Phương thức Get
• Các phương thức truy vấn (query method,
accessor) là các phương thức dùng để hỏi về giá
trị của các thành viên dữ liệu của một đối tượng
• Có nhiều loại câu hỏi truy vấn có thể:
− truy vấn đơn giản (“giá trị của x là bao nhiêu?”)
− truy vấn điều kiện (“thành viên x có lớn hơn 10 không?”)
− truy vấn dẫn xuất (“tổng giá trị của các thành viên x và y
là bao nhiêu?”)
• Đặc điểm quan trọng của phương thức truy vấn là
nó không nên thay đổi trạng thái hiện tại của đối
tượng
− không thay đổi giá trị của thành viên dữ liệu nào.
11
Phương thức Set
• Các phương thức thiết lập (Mutator, setter) là các
phương thức dùng để thay đổi giá trị các thành
viên dữ liệu
• Ưu điểm của việc sử dụng các phương thức setter
là có thể sử dụng các phương thức setter để đảm
bảo tính hợp lệ của các thành phần dữ liệu
− Kiểm tra giá trị đầu vào trước khi gán vào các thuộc tính
12
Ví dụ
Hàm khởi tạo
Constructor
2
15
Khởi tạo đối tượng
• Để khởi tạo đối tượng: sử dụng từ khóa new
BankAccount acc = new BankAccount();
• Phương thức khởi tạo ngầm định (implicit) sẽ tự
động gán các giá trị mặc định cho các thành phần
dữ liệu
− Được thực hiện trước khi lập trình viên có thể tác động
lên đối tượng
− Nếu không muốn sử dụng phương thức khởi tạo ngầm
định  có thể viết phương thức khởi tạo cụ thể (explicit)
cho lớp
phương thức khởi tạo (ngầm định)
16
Phương thức khởi tạo
• Là phương thức được gọi để gán các giá trị cho
các thành phần dữ liệu khi đối tượng được khởi
tạo
− Tên của phương thức trùng tên lớp
− KHÔNG có kiểu dữ liệu trả về
− Có thể có hoặc không có tham số
• Phương thức khởi tạo KHÔNG được coi là thành
viên của lớp
• Java sẽ không sử dụng phương thức khởi tạo
ngầm định khi lập trình viên đã viết phương thức
khởi tạo cho lớp
17
Phương thức khởi tạo
• Ví dụ phương thức khởi tạo không có tham số (còn
gọi là phương thức khởi tạo mặc định)
class BankAccount {
private String owner;
private long balance;
public BankAccount() {
this.name = "NONAME"; this.balance = 0;
}
}
18
Phương thức khởi tạo
• Ví dụ phương thức khởi tạo có tham số
class BankAccount {
private String owner;
private long balance;
public BankAccount(String name, double balance) {
this.name = name; this.balance = balance;
}
}
• Mục đích: giúp khởi tạo đối tượng dễ dàng hơn
VD: BankAccount account =
new BankAccount("Nguyen Van A", 100000);
19
Khởi tạo đối tượng trong C++
• Phương thức khởi tạo: Tương tự Java
• Khởi tạo đối tượng
− Đối với đối tượng
BankAccount acc;
BankAccount acc("Tran Van A", 100000);
− Đối với con trỏ đối tượng
BankAccount *acc = new BankAccount();
BankAccount *acc = new BankAccount("Tran Van
A", 100000);
20
Hàm hủy C++
• Ngược lại với quá trình khởi tạo đối tượng, khi
giải phóng đối tượng chúng ta phải giải phóng
toàn bộ bộ nhớ đã được cấp phát cho đối tượng.
Chức năng của hàm huỷ (destructor) sẽ thực hiện
vai trò này
• Ví dụ:
class A {
int n;
public:
A(); // constructor
~A(); // destructor
};
• Java: không dùng hàm hủy.
Ví dụ 1
public class BankAccount {
private String owner;
private double balance;
}
public class Test {
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.
Ví dụ 2
public class BankAccount {
private String owner;
private double balance;
public BankAccount() {
owner = ”noname”;
}
}
public class Test {
public static void main(String args[]) {
BankAccount acc1 = new BankAccount();
}
}
 Phương thức khởi tạo mặc định tự viết.
Ví dụ 3
public class BankAccount {
private String owner;
private double balance;
public BankAccount(String name) {
owner = name;
}
}
public class Test {
public static void main(String args[]) {
BankAccount account1 = new
BankAccount();
BankAccount account2 = new
BankAccount(“Hoang”);
}
}
//Error
Nạp chồng
Overload
3
26
Chữ ký phương thức
• Chữ ký của phương thức bao gồm:
− Tên phương thức
− Số lượng các đối số và kiểu của chúng
27
Nạp chồng
• Nạp chồng hay chồng phương thức (method
overloading): Các phương thức trong cùng một
lớp có thể trùng tên nhưng khác chữ ký:
− Số lượng tham số khác nhau
− Nếu cùng số lượng tham số thì kiểu dữ liệu các tham số
phải khác nhau
• Mục đích:
− Tên trùng nhau để mô tả bản chất công việc
− Thuận tiện cho lập trình vì không cần phải nhớ quá nhiều
tên phương thức mà chỉ cần nhớ một tên và lựa chọn các
tham số cho phù hợp.
Ví dụ
class MyDate {
int year, month, day;
public boolean setMonth(int m) { …}
public boolean setMonth(String s) { …}
}
public class Test{
public static void main(String args[]){
MyDate d = new MyDate();
d.setMonth(9);
d.setMonth(”September”);
}
}
29
Ví dụ về nạp chồng trong Java
• Trong Java:
− Phương thức println() trong System.out.println()
có 10 khai báo với các tham số khác nhau: boolean,
char[], char, double, float, int, long,
Object, String, và một không có tham số.
− Không cần sử dụng các tên khác nhau (chẳng hạn
printString hoặc printDouble) cho mỗi kiểu dữ liệu
muốn hiển thị.
30
Chú ý
• Các phương thức chỉ được xem xét là chồng khi
chúng thuộc cùng một lớp
• Chỉ nên sử dụng kỹ thuật này với các phương
thức có cùng mục đích, chức năng; tránh lạm
dụng
• Khi dịch, trình dịch căn cứ vào số lượng hoặc kiểu
dữ liệu của tham số để quyết định gọi phương
thức nào phù hợp.
 Nếu không chọn được hoặc chọn được nhiều hơn 1
phương thức thì sẽ báo lỗi.
Ví dụ
void prt(String s) {
System.out.println(s); }
void f1(char x) { prt("f1(char)"); }
void f1(byte x) { prt("f1(byte)"); }
void f1(short x) { prt("f1(short)"); }
void f1(int x) { prt("f1(int)"); }
void f1(long x) { prt("f1(long)"); }
void f1(float x) { prt("f1(float)"); }
void f1(double x) { prt("f1(double)"); }
• Điều gì xảy ra nếu thực hiện:
• f1(5);
• char x=‘a’; f1(x);
• byte y=0; f1(y);
• float z = 0; f1(z);…
Ví dụ
void prt(String s) {
System.out.println(s); }
void f3(short x) { prt("f3(short)"); }
void f3(int x) { prt("f3(int)"); }
void f3(long x) { prt("f3(long)"); }
void f3(float x) { prt("f3(float)"); }
• Điều gì xảy ra nếu thực hiện:
• f3(5);
• char x=‘a’; f3(x);
• byte y=0; f3(y);
• float z = 0; f3(z);
• f3(5.5);
Error: cannot find symbol: method f3(double)
33
Chồng phương thức khởi tạo
• Trong cùng một lớp ta có thể xây dựng nhiều
phương thức khởi tạo với danh sách tham số
khác nhau
Chồng phương thức khởi tạo (constructor overloading)
• Nếu muốn gọi đến phương thức khởi tạo khác
của lớp: có thể sử dụng toán tử this
this(danh sách tham số);
Kết tập
Aggregation
4
35
Mối quan hệ kết tập
• Lớp toàn thể chứa các đối tượng của lớp thành
phần
− Đối tượng lớp thành phần: Là một phần (is-a-part of) của
lớp toàn thể
− Quan hệ chứa/có (“has-a”) hoặc là một phần ("is-a-part-
of")
• Ví dụ
− Tứ giác gồm 4 Điểm
− Ô tô gồm 4 Bánh xe
− Lớp học chứa 91 Sinh viên
Ví dụ
class Diem {
private int x, y;
public Diem() {}
public Diem(int x, int y) {
this.x = x; this.y = y;
}
public void setX(int x) { this.x = x; }
public int getX() { return x; }
public void hienThiDiem(){
System.out.print("("+x+", "+y+")");
}
}
Ví dụ
class TuGiac {
private Diem d1, d2;
private Diem d3, d4;
public TuGiac(Diem p1, Diem p2,
Diem p3, Diem p4){
d1 = p1; d2 = p2; d3 = p3; d4 = p4;
}
public TuGiac(){
d1 = new Diem(); d2 = new Diem(0,1);
d3 = new Diem (1,1); d4 = new Diem (1,0);
}
public void printTuGiac(){
d1.printDiem(); d2.printDiem();
d3.printDiem(); d4.printDiem();
System.out.println();
}
}
Ví dụ
public class Test {
public static void main(String args[])
{
Diem d1 = new Diem(2,3);
Diem d2 = new Diem(4,1);
Diem d3 = new Diem(5,1);
Diem d4 = new Diem(8,4);
TuGiac tg1 = new TuGiac(d1, d2, d3, d4);
TuGiac tg2 = new TuGiac();
tg1.printTuGiac();
tg2.printTuGiac();
}
}
39
Bản chất của kết tập
• Kết tập (aggregate)
− Các thành phần của lớp mới là các đối tượng của các lớp
có sẵn.
− Tái sử dụng các thành phần dữ liệu và các hành vi của lớp
thành phần thông qua đối tượng của lớp thành phần
• Lớp mới
− Lớp toàn thể (Aggregate/Whole)
• Lớp cũ
− Lớp thành phần (Part).
40
Thứ tự khởi tạo
• Khi một đối tượng được tạo mới, các thuộc tính
của đối tượng đó đều phải được khởi tạo và gán
những giá trị tương ứng.
• Các đối tượng thành phần được khởi tạo trước
 Các phương thức khởi tạo của các lớp của các đối tượng
thành phần được thực hiện trước
41
Biểu diễn kết tập bằng UML
• Sử dụng “hình thoi”
tại đầu của lớp toàn
thể
• Sử dụng bội số quan
hệ (multiplicity) tại 2
đầu
• 1 số nguyên dương: 1,
2,...
• Dải số (0..1, 2..4)
• *: Bất kỳ số nào
• Không có: Mặc định là 1
TuGiac Diem
41
Thank you!
Any questions?

More Related Content

What's hot

Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
Tráng Hà Viết
 
Oop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiệnOop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiện
Tráng Hà Viết
 
Oop unit 13 tổng quan về uml
Oop unit 13 tổng quan về umlOop unit 13 tổng quan về uml
Oop unit 13 tổng quan về uml
Tráng Hà Viết
 
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngOop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượng
Tráng Hà Viết
 
Bai07 da hinh
Bai07 da hinhBai07 da hinh
Bai07 da hinh
Nhuận Lê Văn
 
Bai05 ket tapvakethua
Bai05 ket tapvakethuaBai05 ket tapvakethua
Bai05 ket tapvakethua
Nhuận Lê Văn
 
Bai08 lap trinhtongquat
Bai08 lap trinhtongquatBai08 lap trinhtongquat
Bai08 lap trinhtongquat
Nhuận Lê Văn
 
Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
Nhuận Lê Văn
 
Bai04 tao vasudungdoituong
Bai04 tao vasudungdoituongBai04 tao vasudungdoituong
Bai04 tao vasudungdoituong
Nhuận Lê Văn
 
Bài 8 - Collection Generics - Nền tảng lập trình ứng dụng với C#
Bài 8 - Collection Generics - Nền tảng lập trình ứng dụng với C#Bài 8 - Collection Generics - Nền tảng lập trình ứng dụng với C#
Bài 8 - Collection Generics - Nền tảng lập trình ứng dụng với C#
MasterCode.vn
 
Bai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaileBai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaile
Nhuận Lê Văn
 
Bai03 xay dunglop
Bai03 xay dunglopBai03 xay dunglop
Bai03 xay dunglop
Nhuận Lê Văn
 
Bai02 java introduction
Bai02 java introductionBai02 java introduction
Bai02 java introduction
Nhuận Lê Văn
 
[Cntt] bài giảng lập trình java bkhcm
[Cntt] bài giảng lập trình java   bkhcm[Cntt] bài giảng lập trình java   bkhcm
[Cntt] bài giảng lập trình java bkhcm
Hong Phuoc Nguyen
 
Bai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaBai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethua
Nhuận Lê Văn
 
Bai11 ooad bieu_dolop
Bai11 ooad bieu_dolopBai11 ooad bieu_dolop
Bai11 ooad bieu_dolop
Nhuận Lê Văn
 
Bai01 oop overview
Bai01 oop overviewBai01 oop overview
Bai01 oop overview
Nhuận Lê Văn
 
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPTBài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
MasterCode.vn
 
Bài 2: Biến và toán tử - Giáo trình FPT
Bài 2: Biến và toán tử - Giáo trình FPTBài 2: Biến và toán tử - Giáo trình FPT
Bài 2: Biến và toán tử - Giáo trình FPT
MasterCode.vn
 
[Cntt] all java
[Cntt] all java[Cntt] all java
[Cntt] all java
Hong Phuoc Nguyen
 

What's hot (20)

Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
 
Oop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiệnOop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiện
 
Oop unit 13 tổng quan về uml
Oop unit 13 tổng quan về umlOop unit 13 tổng quan về uml
Oop unit 13 tổng quan về uml
 
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượngOop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 01 tổng quan lập trình hướng đối tượng
 
Bai07 da hinh
Bai07 da hinhBai07 da hinh
Bai07 da hinh
 
Bai05 ket tapvakethua
Bai05 ket tapvakethuaBai05 ket tapvakethua
Bai05 ket tapvakethua
 
Bai08 lap trinhtongquat
Bai08 lap trinhtongquatBai08 lap trinhtongquat
Bai08 lap trinhtongquat
 
Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
 
Bai04 tao vasudungdoituong
Bai04 tao vasudungdoituongBai04 tao vasudungdoituong
Bai04 tao vasudungdoituong
 
Bài 8 - Collection Generics - Nền tảng lập trình ứng dụng với C#
Bài 8 - Collection Generics - Nền tảng lập trình ứng dụng với C#Bài 8 - Collection Generics - Nền tảng lập trình ứng dụng với C#
Bài 8 - Collection Generics - Nền tảng lập trình ứng dụng với C#
 
Bai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaileBai09 ngoai levaxulyngoaile
Bai09 ngoai levaxulyngoaile
 
Bai03 xay dunglop
Bai03 xay dunglopBai03 xay dunglop
Bai03 xay dunglop
 
Bai02 java introduction
Bai02 java introductionBai02 java introduction
Bai02 java introduction
 
[Cntt] bài giảng lập trình java bkhcm
[Cntt] bài giảng lập trình java   bkhcm[Cntt] bài giảng lập trình java   bkhcm
[Cntt] bài giảng lập trình java bkhcm
 
Bai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaBai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethua
 
Bai11 ooad bieu_dolop
Bai11 ooad bieu_dolopBai11 ooad bieu_dolop
Bai11 ooad bieu_dolop
 
Bai01 oop overview
Bai01 oop overviewBai01 oop overview
Bai01 oop overview
 
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPTBài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
Bài 2: Lập trình hướng đối tượng (OOP) - Giáo trình FPT
 
Bài 2: Biến và toán tử - Giáo trình FPT
Bài 2: Biến và toán tử - Giáo trình FPTBài 2: Biến và toán tử - Giáo trình FPT
Bài 2: Biến và toán tử - Giáo trình FPT
 
[Cntt] all java
[Cntt] all java[Cntt] all java
[Cntt] all java
 

Viewers also liked

Delight 2016 part2
Delight 2016 part2Delight 2016 part2
Delight 2016 part2
x-mss
 
Presentation by abhijith suresh
Presentation by abhijith sureshPresentation by abhijith suresh
Presentation by abhijith suresh
abhijith suresh
 
2016_HMK Portfolio_JHumphries
2016_HMK Portfolio_JHumphries2016_HMK Portfolio_JHumphries
2016_HMK Portfolio_JHumphriesJoseph Humphries
 
рOland 2016
рOland 2016рOland 2016
рOland 2016
x-mss
 
Why hackers love public Wi-fi
Why hackers love public Wi-fiWhy hackers love public Wi-fi
Why hackers love public Wi-fi
techexpert2345
 
redes-sociales
redes-socialesredes-sociales
redes-sociales
JORMAN MANRIQUE
 
Uniforme moderno
Uniforme modernoUniforme moderno
Uniforme moderno
Estefy Ordoñez
 
Hvrsports news
Hvrsports  newsHvrsports  news
Hvrsports news
HVR Sports Inc
 
SIJS and SAPCRS Autosaved update 072416
SIJS and SAPCRS Autosaved update 072416SIJS and SAPCRS Autosaved update 072416
SIJS and SAPCRS Autosaved update 072416Karon Washburn Rowden
 
Jerett_Jara_Resume_2016
Jerett_Jara_Resume_2016Jerett_Jara_Resume_2016
Jerett_Jara_Resume_2016Jerett Jara
 
Rec naturais e energia
Rec naturais e energiaRec naturais e energia
Rec naturais e energia
Alex Santiago Nina
 
11639 fi tks_ru_fin
11639 fi tks_ru_fin11639 fi tks_ru_fin
11639 fi tks_ru_fin
x-mss
 

Viewers also liked (13)

Delight 2016 part2
Delight 2016 part2Delight 2016 part2
Delight 2016 part2
 
Presentation by abhijith suresh
Presentation by abhijith sureshPresentation by abhijith suresh
Presentation by abhijith suresh
 
2016_HMK Portfolio_JHumphries
2016_HMK Portfolio_JHumphries2016_HMK Portfolio_JHumphries
2016_HMK Portfolio_JHumphries
 
рOland 2016
рOland 2016рOland 2016
рOland 2016
 
Company Profile - NEW
Company Profile - NEWCompany Profile - NEW
Company Profile - NEW
 
Why hackers love public Wi-fi
Why hackers love public Wi-fiWhy hackers love public Wi-fi
Why hackers love public Wi-fi
 
redes-sociales
redes-socialesredes-sociales
redes-sociales
 
Uniforme moderno
Uniforme modernoUniforme moderno
Uniforme moderno
 
Hvrsports news
Hvrsports  newsHvrsports  news
Hvrsports news
 
SIJS and SAPCRS Autosaved update 072416
SIJS and SAPCRS Autosaved update 072416SIJS and SAPCRS Autosaved update 072416
SIJS and SAPCRS Autosaved update 072416
 
Jerett_Jara_Resume_2016
Jerett_Jara_Resume_2016Jerett_Jara_Resume_2016
Jerett_Jara_Resume_2016
 
Rec naturais e energia
Rec naturais e energiaRec naturais e energia
Rec naturais e energia
 
11639 fi tks_ru_fin
11639 fi tks_ru_fin11639 fi tks_ru_fin
11639 fi tks_ru_fin
 

Similar to Oop unit 04 các kỹ thuật xây dựng lớp

Lappj trình hướng đối tượng
Lappj trình hướng đối tượngLappj trình hướng đối tượng
Lappj trình hướng đối tượng
Hưởng Nguyễn
 
Android Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderAndroid Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content Provider
Phuoc Nguyen
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituong
Minh Ngoc Tran
 
Ket tap, ke thua
Ket tap, ke thuaKet tap, ke thua
Ket tap, ke thua
Tuan Do
 
Python Beginner Class day-10-class
Python Beginner Class day-10-classPython Beginner Class day-10-class
Python Beginner Class day-10-class
Khánh Nguyễn
 
Linq net
Linq net Linq net
Linq net
NguynSang29
 
Ky thuat l.trinh_java
Ky thuat l.trinh_javaKy thuat l.trinh_java
Ky thuat l.trinh_javaLam Man
 
02 chuong2-laydulieutheocachconnected-140404114611-phpapp02
02 chuong2-laydulieutheocachconnected-140404114611-phpapp0202 chuong2-laydulieutheocachconnected-140404114611-phpapp02
02 chuong2-laydulieutheocachconnected-140404114611-phpapp02
huynhtrong774129
 
02 chuong 2 - lay du lieu theo cach connected
02   chuong 2 - lay du lieu theo cach connected02   chuong 2 - lay du lieu theo cach connected
02 chuong 2 - lay du lieu theo cach connected
truong le hung
 
Lap trinh java hieu qua
Lap trinh java hieu quaLap trinh java hieu qua
Lap trinh java hieu qua
Lê Anh
 
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
MasterCode.vn
 
LTJAVA_TV_Slides.ppt
LTJAVA_TV_Slides.pptLTJAVA_TV_Slides.ppt
LTJAVA_TV_Slides.ppt
ssuserf603dc1
 
Pplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09aPplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09aPix Nhox
 
Python Beginner Class day-07-08-module
Python Beginner Class day-07-08-modulePython Beginner Class day-07-08-module
Python Beginner Class day-07-08-module
Khánh Nguyễn
 
OOP_02_Java can ban.pdf
OOP_02_Java can ban.pdfOOP_02_Java can ban.pdf
OOP_02_Java can ban.pdf
ssuserd01a5c
 

Similar to Oop unit 04 các kỹ thuật xây dựng lớp (20)

Lappj trình hướng đối tượng
Lappj trình hướng đối tượngLappj trình hướng đối tượng
Lappj trình hướng đối tượng
 
Android Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderAndroid Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content Provider
 
Chuong9 lop vadoituong
Chuong9 lop vadoituongChuong9 lop vadoituong
Chuong9 lop vadoituong
 
Ket tap, ke thua
Ket tap, ke thuaKet tap, ke thua
Ket tap, ke thua
 
Chuong5 (2)
Chuong5 (2)Chuong5 (2)
Chuong5 (2)
 
Python Beginner Class day-10-class
Python Beginner Class day-10-classPython Beginner Class day-10-class
Python Beginner Class day-10-class
 
Linq net
Linq net Linq net
Linq net
 
Ky thuat l.trinh_java
Ky thuat l.trinh_javaKy thuat l.trinh_java
Ky thuat l.trinh_java
 
Chuong3 c
Chuong3 c Chuong3 c
Chuong3 c
 
02 chuong2-laydulieutheocachconnected-140404114611-phpapp02
02 chuong2-laydulieutheocachconnected-140404114611-phpapp0202 chuong2-laydulieutheocachconnected-140404114611-phpapp02
02 chuong2-laydulieutheocachconnected-140404114611-phpapp02
 
02 chuong 2 - lay du lieu theo cach connected
02   chuong 2 - lay du lieu theo cach connected02   chuong 2 - lay du lieu theo cach connected
02 chuong 2 - lay du lieu theo cach connected
 
Lap trinh java hieu qua
Lap trinh java hieu quaLap trinh java hieu qua
Lap trinh java hieu qua
 
On thitotnghiep
On thitotnghiepOn thitotnghiep
On thitotnghiep
 
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...
 
LTJAVA_TV_Slides.ppt
LTJAVA_TV_Slides.pptLTJAVA_TV_Slides.ppt
LTJAVA_TV_Slides.ppt
 
Pplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09aPplthdt c02 lop_doi_tuong_v13.09a
Pplthdt c02 lop_doi_tuong_v13.09a
 
Python Beginner Class day-07-08-module
Python Beginner Class day-07-08-modulePython Beginner Class day-07-08-module
Python Beginner Class day-07-08-module
 
OOP_02_Java can ban.pdf
OOP_02_Java can ban.pdfOOP_02_Java can ban.pdf
OOP_02_Java can ban.pdf
 
Chuong 4
Chuong 4Chuong 4
Chuong 4
 
Chuong 3
Chuong 3Chuong 3
Chuong 3
 

More from Tráng Hà Viết

Tài liệu môn trí tuệ nhân tạo đh bách khoa tp hồ chí minh tài liệu, ebook
Tài liệu môn trí tuệ nhân tạo đh bách khoa tp hồ chí minh   tài liệu, ebookTài liệu môn trí tuệ nhân tạo đh bách khoa tp hồ chí minh   tài liệu, ebook
Tài liệu môn trí tuệ nhân tạo đh bách khoa tp hồ chí minh tài liệu, ebook
Tráng Hà Viết
 
Artificial intelligence ai l1-gioi thieu
Artificial intelligence ai l1-gioi thieuArtificial intelligence ai l1-gioi thieu
Artificial intelligence ai l1-gioi thieu
Tráng Hà Viết
 
Artificial intelligence ai l2-tac tu
Artificial intelligence ai l2-tac tuArtificial intelligence ai l2-tac tu
Artificial intelligence ai l2-tac tu
Tráng Hà Viết
 
Artificial intelligence ai gioi thieu-mon_hoc_it4040
Artificial intelligence ai gioi thieu-mon_hoc_it4040Artificial intelligence ai gioi thieu-mon_hoc_it4040
Artificial intelligence ai gioi thieu-mon_hoc_it4040
Tráng Hà Viết
 
Artificial intelligence ai l5-thoa man-rang_buoc
Artificial intelligence ai l5-thoa man-rang_buocArtificial intelligence ai l5-thoa man-rang_buoc
Artificial intelligence ai l5-thoa man-rang_buoc
Tráng Hà Viết
 
Artificial intelligence ai l6-logic va-suy_dien
Artificial intelligence ai l6-logic va-suy_dienArtificial intelligence ai l6-logic va-suy_dien
Artificial intelligence ai l6-logic va-suy_dien
Tráng Hà Viết
 
Artificial intelligence ai l4-tim kiem-heuristic
Artificial intelligence ai l4-tim kiem-heuristicArtificial intelligence ai l4-tim kiem-heuristic
Artificial intelligence ai l4-tim kiem-heuristic
Tráng Hà Viết
 
Artificial intelligence ai l7-bieu dien-tri_thuc
Artificial intelligence ai l7-bieu dien-tri_thucArtificial intelligence ai l7-bieu dien-tri_thuc
Artificial intelligence ai l7-bieu dien-tri_thuc
Tráng Hà Viết
 
Artificial intelligence ai l9-hoc may
Artificial intelligence ai l9-hoc mayArtificial intelligence ai l9-hoc may
Artificial intelligence ai l9-hoc may
Tráng Hà Viết
 
Artificial intelligence ai l3-tim kiem-co_ban
Artificial intelligence ai l3-tim kiem-co_banArtificial intelligence ai l3-tim kiem-co_ban
Artificial intelligence ai l3-tim kiem-co_ban
Tráng Hà Viết
 
Công cụ mã nguồn mở BlueFish
Công cụ mã nguồn mở BlueFishCông cụ mã nguồn mở BlueFish
Công cụ mã nguồn mở BlueFish
Tráng Hà Viết
 

More from Tráng Hà Viết (11)

Tài liệu môn trí tuệ nhân tạo đh bách khoa tp hồ chí minh tài liệu, ebook
Tài liệu môn trí tuệ nhân tạo đh bách khoa tp hồ chí minh   tài liệu, ebookTài liệu môn trí tuệ nhân tạo đh bách khoa tp hồ chí minh   tài liệu, ebook
Tài liệu môn trí tuệ nhân tạo đh bách khoa tp hồ chí minh tài liệu, ebook
 
Artificial intelligence ai l1-gioi thieu
Artificial intelligence ai l1-gioi thieuArtificial intelligence ai l1-gioi thieu
Artificial intelligence ai l1-gioi thieu
 
Artificial intelligence ai l2-tac tu
Artificial intelligence ai l2-tac tuArtificial intelligence ai l2-tac tu
Artificial intelligence ai l2-tac tu
 
Artificial intelligence ai gioi thieu-mon_hoc_it4040
Artificial intelligence ai gioi thieu-mon_hoc_it4040Artificial intelligence ai gioi thieu-mon_hoc_it4040
Artificial intelligence ai gioi thieu-mon_hoc_it4040
 
Artificial intelligence ai l5-thoa man-rang_buoc
Artificial intelligence ai l5-thoa man-rang_buocArtificial intelligence ai l5-thoa man-rang_buoc
Artificial intelligence ai l5-thoa man-rang_buoc
 
Artificial intelligence ai l6-logic va-suy_dien
Artificial intelligence ai l6-logic va-suy_dienArtificial intelligence ai l6-logic va-suy_dien
Artificial intelligence ai l6-logic va-suy_dien
 
Artificial intelligence ai l4-tim kiem-heuristic
Artificial intelligence ai l4-tim kiem-heuristicArtificial intelligence ai l4-tim kiem-heuristic
Artificial intelligence ai l4-tim kiem-heuristic
 
Artificial intelligence ai l7-bieu dien-tri_thuc
Artificial intelligence ai l7-bieu dien-tri_thucArtificial intelligence ai l7-bieu dien-tri_thuc
Artificial intelligence ai l7-bieu dien-tri_thuc
 
Artificial intelligence ai l9-hoc may
Artificial intelligence ai l9-hoc mayArtificial intelligence ai l9-hoc may
Artificial intelligence ai l9-hoc may
 
Artificial intelligence ai l3-tim kiem-co_ban
Artificial intelligence ai l3-tim kiem-co_banArtificial intelligence ai l3-tim kiem-co_ban
Artificial intelligence ai l3-tim kiem-co_ban
 
Công cụ mã nguồn mở BlueFish
Công cụ mã nguồn mở BlueFishCông cụ mã nguồn mở BlueFish
Công cụ mã nguồn mở BlueFish
 

Recently uploaded

Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptxDẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
nvlinhchi1612
 
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdfBAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
phamthuhoai20102005
 
AV6 - PIE CHART WRITING skill in english
AV6 - PIE CHART WRITING skill in englishAV6 - PIE CHART WRITING skill in english
AV6 - PIE CHART WRITING skill in english
Qucbo964093
 
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
ngocnguyensp1
 
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nayẢnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
chinhkt50
 
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
Nguyen Thanh Tu Collection
 
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
duykhoacao
 
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
https://www.facebook.com/garmentspace
 
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
Nguyen Thanh Tu Collection
 
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdfGIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
Điện Lạnh Bách Khoa Hà Nội
 

Recently uploaded (10)

Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptxDẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
Dẫn luận ngôn ngữ - Tu vung ngu nghia.pptx
 
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdfBAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
BAI TAP ON HE LOP 2 LEN 3 MON TIENG VIET.pdf
 
AV6 - PIE CHART WRITING skill in english
AV6 - PIE CHART WRITING skill in englishAV6 - PIE CHART WRITING skill in english
AV6 - PIE CHART WRITING skill in english
 
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
30 - ĐỀ THI HSG - HÓA HỌC 9 - NĂM HỌC 2021 - 2022.pdf
 
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nayẢnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
Ảnh hưởng của nhân sinh quan Phật giáo đến đời sống tinh thần Việt Nam hiện nay
 
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
98 BÀI LUYỆN NGHE TUYỂN SINH VÀO LỚP 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ ...
 
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
Chương III (Nội dung vẽ sơ đồ tư duy chương 3)
 
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
Khoá luận tốt nghiệp ngành Truyền thông đa phương tiện Xây dựng kế hoạch truy...
 
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
CHUYÊN ĐỀ BỒI DƯỠNG HỌC SINH GIỎI KHOA HỌC TỰ NHIÊN 9 CHƯƠNG TRÌNH MỚI - PHẦN...
 
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdfGIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
GIÁO TRÌNH 2-TÀI LIỆU SỬA CHỮA BOARD MONO TỦ LẠNH MÁY GIẶT ĐIỀU HÒA.pdf
 

Oop unit 04 các kỹ thuật xây dựng lớp

  • 1. Bài 4 Các kỹ thuật xây dựng lớp Trịnh Thành Trung trungtt@soict.hust.edu.vn
  • 2. Nội dung 1. Đóng gói 2. Hàm khởi tạo 3. Nạp chồng 4. Kết tập
  • 4. 4 Đóng gói • Một đối tượng có hai khung nhì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 − 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 Methods Data Client
  • 5. 5 Đóng gói • Đóng gói (Encapsulation) • Dữ liệu và phương thức được đóng gói trong một lớp • 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
  • 6. 6 Đóng gói • 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 client Input Output DON’T KNOW HOW IT WORKS, BUT IT WORKS
  • 7. 7 Che giấu dữ liệu • 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 • Tránh thay đổi trái phép hoặc làm sai lệch dữ liệu
  • 8. 8 Cơ chế che giấu dữ liệu • Các thành viên dữ liệu • Chỉ có thể truy cập từ các phương thức bên trong lớp • Chỉ định truy cập là private để bảo vệ dữ liệu • 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)
  • 9. 9 Cơ chế che giấu dữ liệu • Các thành phần dữ liệu là private  Để truy cập và chỉnh sửa các giá trị của dữ liệu, lớp cần phải cung cấp các dịch vụ − Accessor (getter): Trả về giá trị hiện tại của một thuộc tính (dữ liệu) − 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
  • 10. 10 Phương thức Get • Các phương thức truy vấn (query method, accessor) là các phương thức dùng để hỏi về giá trị của các thành viên dữ liệu của một đối tượng • Có nhiều loại câu hỏi truy vấn có thể: − truy vấn đơn giản (“giá trị của x là bao nhiêu?”) − truy vấn điều kiện (“thành viên x có lớn hơn 10 không?”) − truy vấn dẫn xuất (“tổng giá trị của các thành viên x và y là bao nhiêu?”) • Đặc điểm quan trọng của phương thức truy vấn là nó không nên thay đổi trạng thái hiện tại của đối tượng − không thay đổi giá trị của thành viên dữ liệu nào.
  • 11. 11 Phương thức Set • Các phương thức thiết lập (Mutator, setter) là các phương thức dùng để thay đổi giá trị các thành viên dữ liệu • Ưu điểm của việc sử dụng các phương thức setter là có thể sử dụng các phương thức setter để đảm bảo tính hợp lệ của các thành phần dữ liệu − Kiểm tra giá trị đầu vào trước khi gán vào các thuộc tính
  • 14. 15 Khởi tạo đối tượng • Để khởi tạo đối tượng: sử dụng từ khóa new BankAccount acc = new BankAccount(); • Phương thức khởi tạo ngầm định (implicit) sẽ tự động gán các giá trị mặc định cho các thành phần dữ liệu − Được thực hiện trước khi lập trình viên có thể tác động lên đối tượng − Nếu không muốn sử dụng phương thức khởi tạo ngầm định  có thể viết phương thức khởi tạo cụ thể (explicit) cho lớp phương thức khởi tạo (ngầm định)
  • 15. 16 Phương thức khởi tạo • Là phương thức được gọi để gán các giá trị cho các thành phần dữ liệu khi đối tượng được khởi tạo − Tên của phương thức trùng tên lớp − KHÔNG có kiểu dữ liệu trả về − Có thể có hoặc không có tham số • Phương thức khởi tạo KHÔNG được coi là thành viên của lớp • Java sẽ không sử dụng phương thức khởi tạo ngầm định khi lập trình viên đã viết phương thức khởi tạo cho lớp
  • 16. 17 Phương thức khởi tạo • Ví dụ phương thức khởi tạo không có tham số (còn gọi là phương thức khởi tạo mặc định) class BankAccount { private String owner; private long balance; public BankAccount() { this.name = "NONAME"; this.balance = 0; } }
  • 17. 18 Phương thức khởi tạo • Ví dụ phương thức khởi tạo có tham số class BankAccount { private String owner; private long balance; public BankAccount(String name, double balance) { this.name = name; this.balance = balance; } } • Mục đích: giúp khởi tạo đối tượng dễ dàng hơn VD: BankAccount account = new BankAccount("Nguyen Van A", 100000);
  • 18. 19 Khởi tạo đối tượng trong C++ • Phương thức khởi tạo: Tương tự Java • Khởi tạo đối tượng − Đối với đối tượng BankAccount acc; BankAccount acc("Tran Van A", 100000); − Đối với con trỏ đối tượng BankAccount *acc = new BankAccount(); BankAccount *acc = new BankAccount("Tran Van A", 100000);
  • 19. 20 Hàm hủy C++ • Ngược lại với quá trình khởi tạo đối tượng, khi giải phóng đối tượng chúng ta phải giải phóng toàn bộ bộ nhớ đã được cấp phát cho đối tượng. Chức năng của hàm huỷ (destructor) sẽ thực hiện vai trò này • Ví dụ: class A { int n; public: A(); // constructor ~A(); // destructor }; • Java: không dùng hàm hủy.
  • 20. Ví dụ 1 public class BankAccount { private String owner; private double balance; } public class Test { 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.
  • 21. Ví dụ 2 public class BankAccount { private String owner; private double balance; public BankAccount() { owner = ”noname”; } } public class Test { public static void main(String args[]) { BankAccount acc1 = new BankAccount(); } }  Phương thức khởi tạo mặc định tự viết.
  • 22. Ví dụ 3 public class BankAccount { private String owner; private double balance; public BankAccount(String name) { owner = name; } } public class Test { public static void main(String args[]) { BankAccount account1 = new BankAccount(); BankAccount account2 = new BankAccount(“Hoang”); } } //Error
  • 24. 26 Chữ ký phương thức • Chữ ký của phương thức bao gồm: − Tên phương thức − Số lượng các đối số và kiểu của chúng
  • 25. 27 Nạp chồng • Nạp chồng hay chồng phương thức (method overloading): Các phương thức trong cùng một lớp có thể trùng tên nhưng khác chữ ký: − Số lượng tham số khác nhau − Nếu cùng số lượng tham số thì kiểu dữ liệu các tham số phải khác nhau • Mục đích: − Tên trùng nhau để mô tả bản chất công việc − Thuận tiện cho lập trình vì không cần phải nhớ quá nhiều tên phương thức mà chỉ cần nhớ một tên và lựa chọn các tham số cho phù hợp.
  • 26. Ví dụ class MyDate { int year, month, day; public boolean setMonth(int m) { …} public boolean setMonth(String s) { …} } public class Test{ public static void main(String args[]){ MyDate d = new MyDate(); d.setMonth(9); d.setMonth(”September”); } }
  • 27. 29 Ví dụ về nạp chồng trong Java • Trong Java: − Phương thức println() trong System.out.println() có 10 khai báo với các tham số khác nhau: boolean, char[], char, double, float, int, long, Object, String, và một không có tham số. − Không cần sử dụng các tên khác nhau (chẳng hạn printString hoặc printDouble) cho mỗi kiểu dữ liệu muốn hiển thị.
  • 28. 30 Chú ý • Các phương thức chỉ được xem xét là chồng khi chúng thuộc cùng một lớp • Chỉ nên sử dụng kỹ thuật này với các phương thức có cùng mục đích, chức năng; tránh lạm dụng • Khi dịch, trình dịch căn cứ vào số lượng hoặc kiểu dữ liệu của tham số để quyết định gọi phương thức nào phù hợp.  Nếu không chọn được hoặc chọn được nhiều hơn 1 phương thức thì sẽ báo lỗi.
  • 29. Ví dụ void prt(String s) { System.out.println(s); } void f1(char x) { prt("f1(char)"); } void f1(byte x) { prt("f1(byte)"); } void f1(short x) { prt("f1(short)"); } void f1(int x) { prt("f1(int)"); } void f1(long x) { prt("f1(long)"); } void f1(float x) { prt("f1(float)"); } void f1(double x) { prt("f1(double)"); } • Điều gì xảy ra nếu thực hiện: • f1(5); • char x=‘a’; f1(x); • byte y=0; f1(y); • float z = 0; f1(z);…
  • 30. Ví dụ void prt(String s) { System.out.println(s); } void f3(short x) { prt("f3(short)"); } void f3(int x) { prt("f3(int)"); } void f3(long x) { prt("f3(long)"); } void f3(float x) { prt("f3(float)"); } • Điều gì xảy ra nếu thực hiện: • f3(5); • char x=‘a’; f3(x); • byte y=0; f3(y); • float z = 0; f3(z); • f3(5.5); Error: cannot find symbol: method f3(double)
  • 31. 33 Chồng phương thức khởi tạo • Trong cùng một lớp ta có thể xây dựng nhiều phương thức khởi tạo với danh sách tham số khác nhau Chồng phương thức khởi tạo (constructor overloading) • Nếu muốn gọi đến phương thức khởi tạo khác của lớp: có thể sử dụng toán tử this this(danh sách tham số);
  • 33. 35 Mối quan hệ kết tập • Lớp toàn thể chứa các đối tượng của lớp thành phần − Đối tượng lớp thành phần: Là một phần (is-a-part of) của lớp toàn thể − Quan hệ chứa/có (“has-a”) hoặc là một phần ("is-a-part- of") • Ví dụ − Tứ giác gồm 4 Điểm − Ô tô gồm 4 Bánh xe − Lớp học chứa 91 Sinh viên
  • 34. Ví dụ class Diem { private int x, y; public Diem() {} public Diem(int x, int y) { this.x = x; this.y = y; } public void setX(int x) { this.x = x; } public int getX() { return x; } public void hienThiDiem(){ System.out.print("("+x+", "+y+")"); } }
  • 35. Ví dụ class TuGiac { private Diem d1, d2; private Diem d3, d4; public TuGiac(Diem p1, Diem p2, Diem p3, Diem p4){ d1 = p1; d2 = p2; d3 = p3; d4 = p4; } public TuGiac(){ d1 = new Diem(); d2 = new Diem(0,1); d3 = new Diem (1,1); d4 = new Diem (1,0); } public void printTuGiac(){ d1.printDiem(); d2.printDiem(); d3.printDiem(); d4.printDiem(); System.out.println(); } }
  • 36. Ví dụ public class Test { public static void main(String args[]) { Diem d1 = new Diem(2,3); Diem d2 = new Diem(4,1); Diem d3 = new Diem(5,1); Diem d4 = new Diem(8,4); TuGiac tg1 = new TuGiac(d1, d2, d3, d4); TuGiac tg2 = new TuGiac(); tg1.printTuGiac(); tg2.printTuGiac(); } }
  • 37. 39 Bản chất của kết tập • Kết tập (aggregate) − Các thành phần của lớp mới là các đối tượng của các lớp có sẵn. − Tái sử dụng các thành phần dữ liệu và các hành vi của lớp thành phần thông qua đối tượng của lớp thành phần • Lớp mới − Lớp toàn thể (Aggregate/Whole) • Lớp cũ − Lớp thành phần (Part).
  • 38. 40 Thứ tự khởi tạo • Khi một đối tượng được tạo mới, các thuộc tính của đối tượng đó đều phải được khởi tạo và gán những giá trị tương ứng. • Các đối tượng thành phần được khởi tạo trước  Các phương thức khởi tạo của các lớp của các đối tượng thành phần được thực hiện trước
  • 39. 41 Biểu diễn kết tập bằng UML • Sử dụng “hình thoi” tại đầu của lớp toàn thể • Sử dụng bội số quan hệ (multiplicity) tại 2 đầu • 1 số nguyên dương: 1, 2,... • Dải số (0..1, 2..4) • *: Bất kỳ số nào • Không có: Mặc định là 1 TuGiac Diem 41