Nội dung• Nhắc lại Đối tượng • Khai báo lớp đơn giản • Đối tượng • Phạm vi truy xuất thành phần lớp • Đối tượng this • Phương thức khởi tạo • Phương thức huỷ • Thành phần tĩnh & hằng...
Trang 1LỚP VÀ ĐỐI TƯỢNG
Trang 2Mục đích & Yêu cầu
• Nắm vững cấu trúc của một lớp.
• Nắm vững các chỉ thị truy cập.
• Giải thích được constructor và destructor
• Hiểu cách sử dụng phương thức
Trang 3Nội dung
• Nhắc lại Đối tượng
• Khai báo lớp đơn giản
• Đối tượng
• Phạm vi truy xuất thành phần lớp
• Đối tượng this
• Phương thức khởi tạo
• Phương thức huỷ
• Thành phần tĩnh & hằng
Trang 41 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
Trang 51 Nhắc lại Đối tượng
• Đối tượng có
– Thuộc tính: đặc trưng 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.
Trang 61 Nhắc lại Đối tượng
• Ví dụ: Thùng rác
– 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 đó
– 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.
Trang 71 Nhắc lại Đối tượng
Trang 81 Nhắc lại Đối tượng
• Đối tượng: chữ, bản điều khiển.
Trang 91 Nhắc lại Đối tượng
Trang 101 Nhắc lại Đố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ữ
Trang 112 Khai báo lớp đơn giản
Trang 122 Khai báo lớp đơn giản
• Khai báo phương thức:
Kiểu tênPhươngThức(ds Tham số)
{
Các lệnh của phương thức;
return kếtQuả;
}
Trang 132 Khai báo lớp đơn giản
Trang 153 Đối tượng
• Tham chiếu:
– Để 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:
Heap
Trang 163 Đối tượng
• Ví dụ: Cấp phát và tham chiếu tới đối tượng
PhanSo phanSo = new PhanSo();
Trang 173 Đối tượng
• Thao tác với đối tượng qua tham chiếu:
– Thao tác với thuộc tính:
Trang 184 Phạm vi truy xuất các thành phần của lớp
• Khai báo các thành phần với phạm vi truy xuất:
<Phạm vi> <Khai báo thành phần>
– <Phạm vi> gồm:
•public: dùng chung tại mọi vị trí.
•private: chỉ được truy xuất trong phạm vi của
lớp.
Trang 194 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ấy giá trị và gán giá trị cho thuộc tính
Trang 204 Phạm vi truy xuất các thành phần của lớp
Trang 214 Phạm vi truy xuất các thành phần của lớp
Trang 224 Phạm vi truy xuất các thành phần của lớp
• Xuất hiện lỗi !
Trang 234 Phạm vi truy xuất các thành phần của lớp
• Hiệu chỉnh.
Trang 244 Phạm vi truy xuất các thành phần của lớp
Trang 255 Đối tượng this
• Là đối tượng ngầm định khi viết mã lệnh các phương thức của một lớp
• Ví dụ: trong lớp PhanSo
class PhanSo {
private int tu, mau;
public void setTu(int tu){ this.tu = tu; }
}
Trang 265 Đố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
Trang 276 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 khởi tạo ngầm định: khi không
khai báo phương thức khởi tạo Chẳng hạn:
PhanSo p = new PhanSo(); Khi đó p=?
Trang 286 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ố) {…}
• Ví dụ: khai báo một số phương thức khởi tạo
cho lớp PhanSo
Trang 297 Phương thức khởi tạo {3}
Trang 307 Phương thức khởi tạo
• Sử dụng phương thức khởi tạo:
Trang 317 Phương thức khởi tạo
• Kết quả
Trang 32phạm vi của đối tượng
Trang 337 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.
• Java chỉ dùng cách cấp phát đối tượng động, có trình gom
rác riêng và không hỗ trợ hành vi hủy.
Trang 348 Thành phần tĩnh
• Là những thành phần dùng chung cho mọi đối
tượng được tạo ra từ một lớp
• Khai báo thuộc tính tĩnh
<phạm vi> static <kiểu dữ liệu> <tên thuộc tính>
• Khai báo phương thức tĩnh
<phạm vi> static <kiểu dữ liệu> <tên phương
thức>(<danh sách tham số>)
Trang 368 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
Trang 378 Thành phần tĩnh
• Ví dụ:
Trang 388 Thành phần tĩnh
Trang 398 Thành phần tĩnh
Trang 408 Thành phần tĩnh
Trang 429 Thành phần hằng
Trang 439 Thành phần hằng
Trang 4410 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.
Trang 4510 Nạp chồng phương thức
Trang 4610 Nạp chồng phương thức
Trang 4711 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ị
Trang 4811 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 nguyên
như sau
Trang 4911 Truyền tham số trong các
phương thức
• Kết quả giá trị không đổi.
Trang 5011 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.
Trang 5111 Truyền tham số trong các
phương thức
Ví dụ:
Trang 5211 Truyền tham số trong các
phương thức
Ví dụ:
Trang 5311 Truyền tham số trong các
phương thức
Ví dụ:
Trang 5412 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
Trang 55-int songay(int th, int na)
- NTN cong1ngay()
- NTN tru1ngay()
+ NTN cong(int n) + NTN tru(int n) + int tru(NTN ng) + String toString() + void HienThi() + int SoSanh(NTN ntn)
Trang 5613 Tổ chức các lớp trong
chương trình
• Khi biên dịch:
javac thuvien.java
• Sẽ tạo ra các file: Lop1.class, Lop2.class, …
• Tuy nhiên ta không thực hiện được các lớp này vì không có hàm
main.
• Trong một chương trình java có nhiều lớp, ngầm định lớp trùng tên
với tên file là lớp chính
• Nếu nhiều lớp cùng khai báo hàm main thì khi thực hiện chỉ thi hành
các lệnh của hàm main thuộc lớp chính.
Trang 5712 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
• Ta có thể khai báo các lớp dùng chung trong một
file chương trình java:
// thuvien.java
class Lop1{
… } class Lop2{
… }
…
Trang 5814 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:
Trang 59+ int laySoDong() + int laySoCot() + int layGiaTri(int d, int c) + void ganGiaTri(int d, int c, int gt) + MATRAN cong(MATRAN m)
+ MATRAN tru(MATRAN m)
Trang 60Tìm chỗ sai trong chương trình
class ABC
{ private int x;
public int y;
public static int z;
public ABC(int a){x=a;}
private ABC(int a, int b, int
ABC o2 = new ABC(3);
ABC o3 = new ABC(o2); o2.x=5; o2.y=7; o2.z=9;
Trang 61– 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.