Nhắc lại Đối tượng
Khai báo lớp đơn giản
Phạm vi truy xuất thành phần lớp
Đối tượng
Đối tượng this
Phương thức khởi tạo
Phương thức huỷ
Thành phần tĩnh - static
Thành phần hằng - final
1. Nhắc lại Đối tượng
Một chương trình là tập hợp các đối
tượng tương tác với nhau.
Các đối tượng kết hợp với nhau để
hoàn thành nhiệm vụ.
Để làm được điều này, chúng giao
tiếp với nhau bằng cách truyền thông
điệp. 3
1. Nhắc lại Đối tượng
Đối tượng có
• Thuộc tí nh: đặc trưng iê t miêu tả đối tượng
• Hành vi: là những gì đối tượng có thể làm.
Thuộc tính có thể là:
• attributes: miêu tả đối tượng.
• components: những thành phần của đối tượng
• associations: những điều mà đối tượng biết nhưng không
là thành phần của nó.
Hành vi có thể là:
• Constructors: thiết lập đối tượng.
• commands: thay đổi thuộc tính đối tượng.
• queries: cung cấp những câu trả lời dựa trên thuộc tính
đối tượng
21 trang |
Chia sẻ: candy98 | Lượt xem: 596 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hướng đối tượng (OOP) - Chương 3: Lớp và đối tượng - Văn Thị Thiên Trang, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 3. Lớp và Đối tượng
1
Bài 3 .
Lớp và Đối tượng
Nội dung
Nhắc lại Đối tượng
h bá lớ đ ả K ai o p ơn gi n
Phạm vi truy xuất thành phần lớp
Đối tượng
Đối tượng this
Phươ thứ khởi t ng c ạo
Phương thức huỷ
Thành phần tĩnh - static
Thành phần hằng - final 2
1. Nhắc lại Đối tượng
Một chương trình là tập hợp các đối
tượng tương tác với nhau.
Các đối tượng kết hợp với nhau để
hoàn thành nhiệm vụ.
Để làm được điều này, chúng giao
tiếp với nhau bằng cách truyền thông
điệp. 3
1. Nhắc lại Đối tượng
Đối tượng có
Th ộ tí h đặ t ư iê tả đối tượ• u c n : c r ng m u ng
• Hành vi: là những gì đối tượng có thể làm.
Thuộc tính có thể là:
• attributes: miêu tả đối tượng.
• components: những thành phần của đối tượng
• associations: những điều mà đối tượng biết nhưng không
là thành phần của nó.
Hành vi có thể là:
• Constructors: thiết lập đối tượng.
• commands: thay đổi thuộc tính đối tượng.
• queries: cung cấp những câu trả lời dựa trên thuộc tính
đối tượng. 4
Chương 3. Lớp và Đối tượng
2
1. Nhắc lại Đối tượng
Ví dụ: Thùng rác
Thuộc tính:
• Attributes: màu, chất liệu, mùi.
• Components: nắp, thùng, bịch rác
• Associations: phòng mà nó được đặt trong
đó.
Hành vi (khả năng đối tượng)
• Constructor: tạo thùng
• commands: nhận rác, đổ hết rác.
• queries: trả lời nắp mở hay đóng, thùng
rỗng hay đầy.
5
1. Nhắc lại Đối tượng
Ví dụ: trò chơi xếp gạch
Tetris
• Những đối tượng của trò
chơi này là gì?
• Chúng biết làm gì?
Nhữ th ộ tí h ủ • ng u c n c a
chúng.
6
1. Đối tượng
Đối tượng: chữ, bản điều
khiển.
Khả năng gì?
• chữ:
Tạo
Quay
Rơi
Dừng
• Bảng điều khiển
tạo bảng
bỏ dòng (khi có điểm)
kiểm tra kết thúc trò chơi
7
1. Đối tượng
Thuộc tính gì?
• Chữ:
Hướng
Vị trí
Hình dạng
Màu sắc
• Bảng điều khiển
Kích thước
Số dòng
8
Chương 3. Lớp và Đối tượng
3
1. Đối tượng
Lớp là hiện thực chung cho tập các đối
tượng có cùng đặc điểm và hành vi.
Cài đặt các khả năng lớp là phương thức.
Cài đặt các thuộc tính là biến.
Lớp Chữ
9
2. Lớp
Lớp: Hiện thực chung cho một tập
các đối tượng có cùng đặc điểm và
phương thức.
Một lớp có thể là lớp con của một lớp
đã có
Lớp và mỗi thành phần cần phải chỉ
đị h ứ độ h hé t ậ (tí hn m c c o p p ruy c p n
bảo mật) Æ access modifier
10
2. Khai báo lớp đơn giản
Cú pháp:
ê ớclass
{
Khai báo các thuộc tính
Khai báo các phương thức
}
Khai báo thuộc tính:
Phạm vi truy xuất Kiểu tênThuộcTính;
11
2. Khai báo lớp đơn giản
Khai báo phương thức:
PVTX Kiểu tênPhươngThức(ds Tham số)
{
Các lệnh của phương thức;
return kếtQuả;
}
12
Chương 3. Lớp và Đối tượng
4
Phạm vi truy xuất
Modifier private friendly protected public
Cùng class YES YES YES YES
Cùng gói, khác
class
NO YES YES YES
lớp con trong
cùng gói với
lớp cha
NO YES YES YES
Khác gói, khác
lớp
NO NO NO YES
Lớp con khác
gói với lớp cha
NO NO YES YES
13
Phạm vi truy xuất
Không có modifier: Mặc định là
f i dl h hé á đối tượr en y, c o p p c c ng
thuộc các class cùng package ( cùng
thư mục)truy cập
14
3. Phạm vi truy xuất các thành
phần của lớp
Thông thường các thuộc tính được quy
định phạm vi truy xuất là private.
Để truy xuất được các thuộc tính từ bên
ngoài lớp, ta cung cấp các phương thức
lấ iá t ị à á iá t ị h th ộ tí h y g r v g n g r c o u c n .
15
3. Phạm vi truy xuất các thành
phần của lớp
16
Chương 3. Lớp và Đối tượng
5
3. Phạm vi truy xuất các thành
phần của lớp
17
3. Phạm vi truy xuất các thành
phần của lớp
Xuất hiện lỗi !
18
3. Phạm vi truy xuất các thành
phần của lớp
Hiệu chỉnh.
19
Ví dụ
20
Chương 3. Lớp và Đối tượng
6
4. Đối tượng
Đối tượng được tạo từ lớp
h ú há
Heap
t eo c p p:
new TênLớp();
• Ví dụ: new PhanSo();
• Sẽ cấp phát vùng nhớ lưu đối
tượng
data
1000
.
• Trong Java vùng nhớ cấp phát
cho đối tượng là Heap.
new PhanSo();
21
4. Đối tượng
Tham chiếu:
Heap
• Để thao tác với đối tượng cần có
tên, gọi là tham chiếu.
• Khai báo tham chiếu:
TênLớp tênThamChiếu;
• Ví dụ: PhanSo phanSo;
• Phép gán tham chiếu:
tênThamChiếu1 = tênThamChiếu2;
PhanSo phanSo ;
phanSo
22
4. Đối tượng
Ví dụ: Cấp phát và tham chiếu tới đối tượng
PhanSo phanSo = new PhanSo();
data
1000
phanSo 1000
PhanSo phanSo ; phanSo= new PhanSo();
phanSo
23
4. Đối tượng
Thao tác với đối tượng qua tham
chiếu:
• Thao tác với thuộc tính:
tênThCh.tênThuộcTính
Ví dụ: phanSo.tu=1; phanSo.mau=2;
• Thao tác với phương thức:
tênThCh.tênPhươngThức(ds đối số);
Ví dụ: phanSo.hienThi();
24
Chương 3. Lớp và Đối tượng
7
5. Đối tượng this
Là đối tượng ngầm định khi viết mã
lệ h á h hứ ủ ộ lớn c c p ương t c c a m t p.
Ví dụ: trong lớp PhanSo
class PhanSo
{
private int tu, mau;
public void setTu(int tu){ this.tu = tu; }
...
}
25
5. Đối tượng this
Khi thực hiện:
PhanSo phanSo new PhanSo();=
phanSo.setTu(5);
thì this chính là phân số p.
26
6. Phương thức khởi tạo
PTKT (constructor) là phương thức đặc
biệt dùng để khởi tạo giá trị các thuộc tính
của đối tượng khi mới được tạo ra.
Phương thức được thực thi ngay vào lúc
khởi tạo đối tượng.
27
6. Phương thức khởi tạo
Khai báo PTKT: tên PTKT trùng tên
lớp.
public TênLớp(ds tham số) {}
Chú ý:
- Constructor không có kiểu trả trị.
- Một lớp có thể có 0/1/n contructor.
Ví dụ: khai báo một số phương thức
khởi tạo cho lớp PhanSo. 28
Chương 3. Lớp và Đối tượng
8
6. constructor....
- Constructor không tham số còn được gọi
là constructor chuẩn (mặc định)
- Ngôn ngữ có sẵn 1 constructor chuẩn làm
công việc xóa trống vùng nhớ chứa dữ liệu
của đối tượng Î Trị 0/null
- Khi một lớp đã có constructor thì
constructor mặc định của ngôn ngữ không
còn được áp dụng nữa
- Tập các constructor hình thành các cách
định nghĩa đối tượng
- Định nghĩa một đối tượng không theo một
mẫu constructor sẽ gây lỗi. 29
Thí dụ: constructor mặc định
y
z
0
0
b
x1000
b
0
Nếu là constructor tự tạo thì việc
khởi tạo trị ban đầu được ấn định
bởi code trong constructor.
30
Thí dụ: constructor là mẫu khởi tạo đối tượng
Nếu một lớp có constructor thì constructor mặc định của ngôn ngữ
không được sử dụng nữa.
31
Thí dụ: lớp có nhiều constructor
Viết lại default
constructor
t t tự cons ruc or
tạo
Constructor sao
chép
32
Chương 3. Lớp và Đối tượng
9
Thí dụ: gọi phương thức trong
constructor
33
Bài tập ví dụ
Khai báo lớp phân số với tất cả các
l i t t ó thể ó X ất hâ oạ cons ruc or c c . u p n
số.
34
7. Phương thức khởi tạo {3}
35
6. Phương thức khởi tạo
Sử dụng phương thức khởi tạo:
36
Chương 3. Lớp và Đối tượng
10
7. Phương thức hủy
Đối tượng sống kể từ khi ta khởi tạo đối
h đế hế khối hứ ótượng c o n t c a n .
Khi ra khỏi khối chứa đối tượng, ta nói đối
tượng đã chết.
{ ..... Góc nhìn thời gian:Thời gian sống của.......
ClassName obj = new ClassName();
......
.....
}
đối tượng
Góc nhìn nội dung
văn bản chương trình:
phạm vi của đối tượng
37
7. Phương thức hủy
Một số ngôn ngữ OOP ( C++, C#) cho phép
ta viết code sẽ được thực thi vào lúc đối
tượng chết nhằm trả tài nguyên đã cấp phát
động.
J hỉ dù á h ấ hát đối tượ độ ava c ng c c c p p ng ng,
có trình gom rác riêng và không hỗ trợ hành
vi hủy.
38
8. Thành phần tĩnh
Là những thành phần dùng chung
h i đối tượ đượ t từ ột c o mọ ng c ạo ra m
lớp.
Khai báo thuộc tính tĩnh
static <tên
thuộc tính>
Khai báo phương thức tĩnh
static <tên
phương thức>()
39
8. Thành phần tĩnh
Ví dụ:
class A
{
int x;
static int y;
}
A a1 = new A(), a2= new A() ;
a1.x=5; a1.y=7;
a2.x=10; a2.y=9;
System.out.println(a1.y);??
A a3 = new A();
System.out.println(a3.y);??
40
Chương 3. Lớp và Đối tượng
11
8. Thành phần tĩnh
Thành phần tĩnh có thể thao tác qua
tên lớp. Chẳng hạn với ví dụ trên có
thể thực hiện:
A.y = 5;
Trong phương thức tĩnh ta chỉ được
phép dùng các phương thức tĩnh
hoặc dữ liệu tĩnh.
41
8. Thành phần tĩnh
Ví dụ:
class A
{
int x;
static int y;
static void pt1() { y=1;}
//không được gán x=1;
void pt2() { x=1;y=1;}
} 42
8. Thành phần tĩnh
Ví dụ:
43
8. Thành phần tĩnh
44
Chương 3. Lớp và Đối tượng
12
8. Thành phần tĩnh
45
9. Chỉ thị final
Dữ liệu hằng: là những thuộc tính có giá trị
cố định trong một đối tượng.
Dữ liệu hằng:
final tênThuộcTính=;
Ví dụ: khai báo hằng PI = 3.14
public final float PI = 3.14;
46
9. Chỉ thị final - Dữ liệu hằng
47
9. Chỉ thị final - Dữ liệu hằng
48
Chương 3. Lớp và Đối tượng
13
9. Chỉ thị final-
final class là lớp không con
49
Chỉ thị final - final method là phương thức
không cho phép lớp con viết lại (override)
50
9. Overloading –
Nạp chồng phương thức
Overloading: Kỹ thuật cho phép xây dựng các
phương thức trùng tên nhưng khai báo tham số
khác nhau trong cùng một lớp.
Các phương thức nạp chồng này phân biệt với
nhau thông qua:
• kiểu tham số
• Hoặc số lượng tham số.
51
9. Nạp chồng phương thức
52
Chương 3. Lớp và Đối tượng
14
9. Nạp chồng phương thức
53
10. Truyền tham số trong các
phương thức
Việc truyền tham số trong các
phương thức của Java được quy định
như sau:
• Nếu tham số là các dữ liệu nguyên thủy
như: int, boolean, char, float, thì
tham số được truyền theo trị.
54
10. Truyền tham số trong các
phương thức
• Ví dụ: xét hàm đổi giá trị của hai biến
ê h nguy n n ư sau
55
10. Truyền tham số trong các
phương thức
Kết quả giá trị không đổi.
56
Chương 3. Lớp và Đối tượng
15
10. Truyền tham số trong các
phương thức
Việc truyền các đối tượng thực chất
là truyền tham chiếu của các đối
tượng.
57
10. Truyền tham số trong các
phương thức
Ví dụ:
58
10. Truyền tham số trong các
phương thức
Ví dụ:
59
10. Truyền tham số trong các
phương thức
Ví dụ:
60
Chương 3. Lớp và Đối tượng
16
11 Bài tập
Bài 1: Cài đặt lớp NTN (ngày/tháng/năm).
• Viết chương trình sử dụng lớp vừa định
nghĩa:
Tạo 2 đối tượng n1=1/1/2006, n2=10/9/2007.
Tính khoảng cách giữa hai ngày.
So sánh hai ngày.
61
11 Bài tập – Sơ đồ lớp NTN
NTN
i
+ int layThang()
+ void datNam(int nam)
- nt ngay
- int thang
- int nam
+ NTN()
+ NTN(int nam)
+ NTN(int ng, int th, int na)
+ int layNam()
-int songay(int th, int na)
- NTN cong1ngay()
- NTN tru1ngay()
+ NTN cong(int n)
+ NTN tru(int n)
+ NTN(NTN ntn)
+ void datNgay(int ngay)
+ int layNgay()
+ void datThang(int thang)
+ int tru(NTN ng)
+ String toString()
+ void HienThi()
+ int SoSanh(NTN ntn)
62
12. Tổ chức các lớp trong
chương trình
Trong một chương trình Java có thể khai
báo nhiều lớp .
Chương trình thực thi từ lớp chính chứa
hàm main
Ta có thể khai báo các lớp dùng chung
trong một file chương trình java:
// th i j uv en. ava
class Lop1{
}
class Lop2{
}
63
12. Bài tập
Bài 2: Khai báo lớp ma trận số nguyên sao
cho có thể khởi tạo gán giá trị truy xuất , ,
đến từng phần tử, cộng, trừ, nhân các ma
trận.
Dùng lớp này để minh họa các thao tác:
+ Tạo 2 ma trận m1(3,3), m2(3,3)
+ Tìm vị trí phần tử lớn nhất trong ma trận m1.
+ Cộng hai ma trận m3 = m1 + m2
+ Trừ hai ma trận m4 = m1 - m2
+ Nhân hai ma trận m5 = m1 × m2
64
Chương 3. Lớp và Đối tượng
17
Sơ đồ lớp MATRAN
MATRAN
- int[][] mt
- int soDong
- int soCot
+ MATRAN(int d, int c)
+ MATRAN(int[][] mang, int m, int n)
+ MATRAN(MATRAN mt)
+ int laySoDong()
+ i t l S C t()n ay o o
+ int layGiaTri(int d, int c)
+ void ganGiaTri(int d, int c, int gt)
+ MATRAN cong(MATRAN m)
+ MATRAN tru(MATRAN m)
+ MATRAN nhan(MATRAN m)
+ void hienThi()
65
Tìm chỗ sai trong chương
trình
class ABC
{ private int x;
class SDABC
{
public int y;
public static int z;
public ABC(int
a){x=a;}
private ABC(int a, int b,
int c){x=c;y=a;z=b;}
public static void pt1(int
ABC o1 = new ABC();
ABC o2 = new ABC(3);
ABC o3 = new
ABC(o2);
o2.x=5; o2.y=7;
o2.z=9;
o2.pt2(7);
a) { x = a; y= a; z=a;}
private void pt2(int b)
{x=b; y=b; z=b;}
}
ABC.z=10; ABC.x=11;
ABC.y=12;
ABC.pt2(7);
}
66
Luyện tập
Viết thư viện lớp SoHoc chứa các phương thức:
• soChan(int)
• max(int,int)
• max(double, double)
• max(int, int, int)
• max(int[],int)
• sapXep(int[], int)
• inMang(int[], int)
Sử dụng lớp SoHoc thực hiện:
• Kiểm tra 1 số là số chẵn hay lẻ.
• Tìm số lớn trong 2 số nguyên, 2 số thực, 3 số nguyên.
• Tìm số lớn trong mảng.
• Sắp xếp mảng.
67
Một số lớp cơ bản của
Java
Lớp Object
Lớp String
Các lớp gói (wrapper)
Lớp Math
Chương 3. Lớp và Đối tượng
18
Là lớp cha của mọi lớp trong java ( trực
tiếp/gián tiếp)
Lớp Object
Được để trong gói java.lang
(java.lang.Object)
Định nghĩa các trạng thái cơ bản và các
phương thức cơ bản của mọi lớp phải có như:
So sánh nó với 1 đối tượng khác (equals),
chuyển đổi mô tả thành chuỗi (toString) đợi,
(wait) điều kiện, nhận biết (notify) các đối
tượng khác khi biến điều kiện có thay đổi, lấy
Class (getClass)
phương thức hashCode() cho biết địa chỉ của
dữ liệu của đối tượng. 69
Lớp Object
70
Thí dụ
Student2@18d107f
Kết qủa của method toString() :
Tên lớp + @ + Địa chỉ hệ 16 của thực thể
(Lưu ý: Địa chỉ của thực thể chứ không
phải là địa chỉ của biến đối tượng )
71
Nhét obj vào lớp để khi
lấy hashcode của lớp
bao thì sẽ biết địa chỉ
của biến obj này.
Lớp có thành phần là lớp
và địa chỉ biến đối tượng
72
Chương 3. Lớp và Đối tượng
19
Giải thích
69609650 Hello
biến đối tượng a được đặt ở
A a1
String s
20392474
19313225
25358555
4565111A a
String s2 69609650
B b 26399554
4565111
69609650
25358555
fields
•
địa chỉ 20392474, có trị là địa
chỉ ô nhớ 4565111. Ở địa chỉ
4565111 là một thực thể của
lớp A (a=5).
• Hai chuỗi s1,s2 được đặt ở 2
địa chỉ khác nhau nhưng chúng
cùng chỉ đến 1 thực thể là hằng
chuỗi “Hello” được để ở địa chỉ
4565111
11352996
a=5
String s1 69609650
biến Address value
69609650.
• Đối tượng b được để ở ô
26399554 có trị là thực thể ở
25358555 gồm 2 thành phần
mang trị là đối tượng a và s1.
73
Nhận xétThực thể của lớp
là một vùng nhớ
chứa dữ liệu của
thực thể.
Biến đối tượng
t ị là ột
Hello Hello Hello
Hi
mang r m
tham chiếu đến
thực thể của lớp.
obj1= obj2; là
phép gán địa
chỉ tham chiếu
giữa 2 đối
String s1
String s2
100
biến value s2=s1;
100
100
100
100
s2=“Hi”;
tượng.
Chú ý tình
huống bên:
74
Định nghĩa 1 String:
String Str1=“Hello”;
Lớp String – Chuỗi kí tự
String Str2= new String(“Hi”);
Nối String
String Str3= Str1 + Str2; // Str3=“HelloHi”
String Str4 = Str3 + 1; // Str4= “HelloHi1”
String pool ( hồ/ bảng chứa chuỗi)
Khi nhiều biến String cùng mang 1 nội dung ,
chúng cùng chỉ đến 1 phần tử trong String pool
Thí dụ:
String Str1 = “Hello”;
String Str5= “Hello”;
I love you
Hello
Forget me not
Str1
Str5
75
Lớp String – methods
76
Chương 3. Lớp và Đối tượng
20
Lớp String – methods
77
Lớp String – ví dụ
Các phương thức của lớp String trả về chuỗi
kết qủa thì sẽ trả về chuỗi mới còn chuỗi
gốc không đổi.
Nếu muốn làm thay đổi chuỗi gốc thì
dùng lớp StringBuffer cũng thuộc gói
java.lang. Các phương thức cũng tương tự
như lớp String.
78
Dữ liệu thuộc kiểu cơ bản như
int, long, char,... chỉ là dữ liệu
khô ó h thứ kết h 151000
321100
Các lớp bao bọc - Wrapper
ng c p ương c ợp.
Wrapper , trong gói java.lang, là
lớp bao lấy các kiểu dữ liệu cơ
bản nhằm tạo ra tính OOP cho
các kiểu cơ bản.
Các phương thức của lớp
Wrapper đa số là các phương Integer obj1 1000
Integer obj2 1100
thức static hiện thực các thao
tác lên dữ liệu thuộc kiểu
tương ứng.
Biến thuộc lớp Wrapper chứa
địa chỉ của dữ liệu.
int x 5
int x=5;
Integer obj1= new Integer(15);
Integer obj2= new Integer(“32”);
79
Wrapper classes
Data type Wrapper class
b l B l
Đọc
D t tioo ean oo ean
byte Byte
char Character
double Double
float Float
i t I t
ocumen a on
để biết về các
phương thức
của các wrapper
class
n n eger
long Long
short Short
80
Chương 3. Lớp và Đối tượng
21
Wrapper-Thí dụ
81
Lớp Math
Trong gói java.lang
Chứa các hàm xử lý toán học.
Là lớp final.
82
Thí dụ:
Hàm random
trả trị
[ 0.0, 1.0 [
83