1. Bài 2: Sử dụng đối tượng
Giảng viên: Nguyễn Thị Minh Huyền
nguyenthiminhhuyen@hus.edu.vn
Đỗ Thanh Hà
dothanhha@hus.edu.vn
OOP -
2009-2010 http://mim.hus.edu.vn/elearning 1
3. Kiểu dữ liệu
Chương trình = Cấu trúc dữ liệu + giải thuật
(N. Wirth)
Dữ liệu trong Java
Kiểu dữ liệu nguyên thủy: Số nguyên, số
thực, kí tự và xâu kí tự, lôgic (boolean)
Đối tượng
2009-2010 OOP - http://mim.hus.edu.vn/elearning 3
4. Kiểu dữ liệu nguyên thủy (1)
Tên kiểu Ý nghĩa Kích thước Miền giá trị
char kí tự 2 bytes kí tự bảng mã Unicode
byte số nguyên rất ngắn 1 byte -128 127
short số nguyên ngắn 2 bytes -215 215 – 1
int số nguyên 4 bytes -231 231 – 1
long số nguyên dài 8 bytes -2255 2255 – 1
float số thực (chính xác đến 4 bytes 1.4*10-45 3.4*1038
6 chữ số thập phân)
double số thực (chính xác đến 8 bytes 4.9*10-324 1.7*10308
15 chữ số thập phân)
boolean lôgic 1 bit true, false
2009-2010 OOP - http://mim.hus.edu.vn/elearning 4
5. Kiểu dữ liệu nguyên thủy (2)
Kiểu trống: void
Mỗi kiểu nguyên thủy đều có lớp bao
(wrapper class): Character, Byte, Short,
Integer, Long, Float, Double, Boolean, Void
Xâu kí tự: Lớp String
Ép kiểu (casting):
(typeName) expression
int x;
x = 1.23; // Error
x = (int) 1.23; // x = 1
2009-2010 OOP - http://mim.hus.edu.vn/elearning 5
6. Các toán tử
Số học: +, -, *, /
Gán: =, +=, -=, *=, /=
Tăng, giảm: ++, --
So sánh: ==, !=, >, >=, <, <=
Lôgic: ||, &, !
Thao tác từng bit: & (AND), | (OR), ^ (XOR)
Dịch chuyển bit: <<, >>, >>>
Thứ tự ưu tiên: như trong C
2009-2010 OOP - http://mim.hus.edu.vn/elearning 6
7. Tên
Các loại tên: tên biến, tên phương thức, tên lớp
Quy tắc đặt tên:
Không được trùng với từ khoá
Bao gồm các chữ cái, chữ số và dấu _
Không được bắt đầu bằng chữ số
Phân biệt chữ hoa chữ thường
Quy ước đặt tên:
Tên biến, tên phương thức bắt đầu bằng chữ thường, tên
lớp bắt đầu bằng chữ hoa, tên hằng viết hoa hoàn toàn
Nếu tên là một chuỗi các từ thì chữ cái đầu các từ sau đều
viết hoa (VD: oneVariable, oneMethod, OneClass)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 7
8. Biến (1)
Lưu giữ giá trị thuộc kiểu dữ liệu nào đó
Định nghĩa biến
Khai báo:
typeName variableName; // dễ gây lỗi
Khai báo và khởi tạo giá trị biến:
typeName variableName = value;
Ví dụ:
String greeting = "Hello, World!";
PrintStream printer = System.out;
int luckyNumber = 13;
2009-2010 OOP - http://mim.hus.edu.vn/elearning 8
9. Biến (2)
Thay đổi (gán) giá trị biến:
variableName = value;
Ví dụ:
int luckyNumber = 13;
luckyNumber = 12;
Như trong C, có phép gán dạng +=, -=, *=, /=,
++, --
Khái niệm hằng trong Java: biến chỉ có thể
gán giá trị một lần
final typeName CONSTNAME;
final typeName CONSTNAME = value;
2009-2010 OOP - http://mim.hus.edu.vn/elearning 9
10. Câu lệnh điều khiển (1)
Cú pháp câu lệnh điều khiển như trong C
Lệnh điều kiện
if (condition)
statement1
else
statement2
(condition) ? statement1 : statement2;
switch (variable){
case <value1>: statement1
break;
…
case < valuen>: statementn
break;
default: statementn+1
}
2009-2010 OOP - http://mim.hus.edu.vn/elearning 10
11. Câu lệnh điều khiển (2)
Lệnh lặp
for (initialization; condition; update)
statement
while (condition)
statement
do
statement
while (condition);
Điều khiển trong vòng lặp:
Chuyển sang bước lặp tiếp theo continue;
Thoát khỏi vòng lặp break;
2009-2010 OOP - http://mim.hus.edu.vn/elearning 11
12. Đối tượng và lớp
Đối tượng (object): Thực thể mà ta thao tác trong
chương trình (bằng cách gọi các phương thức)
Mỗi đối tượng thuộc vào một lớp (class):
System.out thuộc lớp PrintStream
2009-2010 OOP - http://mim.hus.edu.vn/elearning 12
13. Phương thức (1)
Phương thức (method): Dãy lệnh thao tác
trên dữ liệu của các đối tượng
Các đối tượng được xử lí trong chương trình
bằng cách gọi tới các phương thức (hàm) của
đối tượng đó
Tập các phương thức của một lớp gọi là giao
diện của lớp đó
Đặc tả giao diện cho biết người ta có thể làm gì
với đối tượng
2009-2010 OOP - http://mim.hus.edu.vn/elearning 13
14. Phương thức (2)
Khi sử dụng một phương thức, cần biết các
yếu tố sau:
Tên phương thức
Tham biến ẩn (implicit parameter): phương thức
đó của đối tượng nào
Các tham biến hiện (explicit parameters) và kiểu
của chúng: dữ liệu đầu vào (input) của phương
thức, tức là các đối của phương thức/hàm
Giá trị trả lại (return value) và kiểu của nó
Quyền truy nhập tới phương thức đó (private,
public, protected)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 14
15. Phương thức (3)
Một phương thức có thể không có tham biến hiện
Một phương thức cũng có thể không có tham biến
ẩn, đó là trường hợp của các phương thức tĩnh
(static)
Một phương thức có thể không trả lại giá trị nào, khi
đó kiểu trả lại của phương thức là void
Tên phương thức là tải bội (overloaded) nếu như
trong một lớp có định nghĩa 2 phương thức trùng tên
nhưng danh sách các kiểu tham biến hiện khác nhau
2009-2010 OOP - http://mim.hus.edu.vn/elearning 15
16. Phương thức (4)
Phương thức đặc biệt
Mỗi lớp có một hay nhiều hàm dựng (constructor)
Được gọi khi cần tạo một đối tượng mới thuộc lớp đó
Tên hàm dựng trùng với tên lớp
Giá trị trả lại của hàm dựng là một đối tượng của lớp đó
Mục đích của hàm dựng là khởi tạo giá trị cho các thuộc
tính của đối tượng đó
Trong Java không có hàm huỷ (destructor). Việc
giải phóng bộ nhớ của đối tượng được thực hiện
tự động
2009-2010 OOP - http://mim.hus.edu.vn/elearning 16
17. Định nghĩa phương thức
Trong một lớp, khi khai báo phương thức cần chỉ ra:
Quyền truy nhập phương thức, kiểu giá trị trả lại, tên
phương thức, danh sách tham biến hiện (kiểu dữ liệu, tên
tham biến)
VD 1: 2 phương thức sau thuộc giao diện của lớp String
public int length()
// return type: int; no explicit parameter
public String
replace(String target, String replacement)
// return type: String;
// 2 explicit parameters of type String
VD 2: println là tên phương thức tải bội của lớp PrintStream
public void println(String output)
public void println(int output)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 17
18. Lời gọi phương thức (1)
Mỗi lời gọi phương thức xác định đối tượng có
phương thức (tham biến ẩn), tên phương thức và
danh sách các tham biến hiện
VD: System.out.println("Hello")
System.out là tham biến ẩn tương ứng với tên đối tượng
println là tên phương thức
"Hello" là tham biến hiện - xâu cần in ra
Khi định nghĩa một phương thức trong một lớp, nếu
cần gọi tới một phương thức khác của cùng lớp đó
thì không cần chỉ ra tham biến ẩn của phương thức
gọi đến.
2009-2010 OOP - http://mim.hus.edu.vn/elearning 18
19. Lời gọi phương thức (2)
Ví dụ
String greeting = "Hello, World!";
System.out.println(greeting.length());
2009-2010 OOP - http://mim.hus.edu.vn/elearning 19
20. Sử dụng đối tượng (1)
Xét ví dụ thao tác với các đối tượng hình chữ nhật
Trong thư viện các lớp có sẵn trong Java, có lớp
Rectangle bao gồm các đối tượng hình chữ nhật
Đây là 3 đối tượng hình chữ nhật:
2009-2010 OOP - http://mim.hus.edu.vn/elearning 20
21. Sử dụng đối tượng (2)
Các thuộc tính (dữ liệu) của các đối tượng hình
chữ nhật gồm:
x, y: Toạ độ đỉnh góc trên bên trái hình chữ nhật
width, height: chiều rộng, chiều cao hình chữ nhật
2009-2010 OOP - http://mim.hus.edu.vn/elearning 21
22. Sử dụng đối tượng (3)
Giao diện (tập các phương thức) của lớp Rectangle:
Nhiều hàm dựng, trong đó có Rectangle(int x, int y,
int width, int height)
Một số phương thức cho phép lấy giá trị các thuộc tính của 1
đối tượng hình chữ nhật như getX(), getWidth(), ...
Một số phương thức cho phép thay đổi giá trị các thuộc tính
của 1 đối tượng hình chữ nhật như setSize(int width,
int height), translate(int x, int y), ...
Một số phương thức khác cho phép thao tác với các đối
tượng hình chữ nhật và các điểm
2009-2010 OOP - http://mim.hus.edu.vn/elearning 22
23. Sử dụng đối tượng (4)
Phương thức truy cập (accessor/getter
method) và phương thức biến đổi
(mutator/setter method) thuộc tính đối tượng
VD: truy cập - getX, getY; biến đổi -
translate
Dùng để cho phép truy cập và biến đổi giá trị các
thuộc tính riêng (có quyền truy nhập là private)
của 1 đối tượng
Bảo đảm tính toàn vẹn (integrity) dữ liệu khi thao tác
trên các thuộc tính này (VD: chiều dài hình chữ nhật
không được là số âm)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 23
24. Sử dụng đối tượng (5)
Tạo 1 đối tượng mới thuộc 1 lớp
new ClassName(parameters)
ClassName(parameters) là 1 hàm dựng
Trả lại tham chiếu (reference) tới đối tượng mới được tạo
VD: Tạo đối tượng hình chữ nhật
Rectangle box = new Rectangle(5, 10, 20, 30);
Cùng 1 đối tượng có thể có nhiều biến kiểu đối tượng tham chiếu
(trỏ) đến
Rectangle box2 = box;
Biến kiểu đối tượng do vậy khác với biến kiểu nguyên thuỷ
2009-2010 OOP - http://mim.hus.edu.vn/elearning 24
25. int luckyNumber = 13;
int luckyNumber2 = luckyNumber;
luckyNumber2 = 12;
27. Sử dụng đối tượng (6)
Cài đặt 1 chương trình thử nghiệm
Tạo 1 tệp chứa một lớp mới
Phần chính của tên tệp phải trùng với tên lớp, phần mở
rộng của tên tệp là .java
Đầu tệp, trước khi định nghĩa lớp phải khai báo các lớp
cần sử dụng trong lớp này
Viết phương thức main (chương trình chính)
Tạo ra các đối tượng cần xử lí
Gọi các phương thức để xử lí các đối tượng
In ra kết quả
2009-2010 OOP - http://mim.hus.edu.vn/elearning 27
28. Sử dụng đối tượng (7)
Khai báo các lớp cần sử dụng
Thư viện các lớp trong Java được tổ chức thành
các gói (package)
Khi khai báo các lớp cần sử dụng phải chỉ ra tên
gói và tên lớp
import packageName.ClassName;
VD, lớp Rectangle nằm trong gói java.awt:
import java.awt.Rectangle;
Thư viện ngầm định được sử dụng trong tất cả
các tệp chương trình Java là gói java.lang,
dùng các lớp trong gói này không cần khai báo
(VD String, System)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 28
29. MoveTester.java
01: import java.awt.Rectangle;
02:
03: public class MoveTester
04: {
05: public static void main(String[] args)
06: {
07: Rectangle box = new Rectangle(5, 10, 20, 30);
08:
09: // Move the rectangle
10: box.translate(15, 25);
11:
12: // Print information about the moved rectangle
13: System.out.println("After moving, the top-left corner is:");
14: System.out.println(box.getX());
15: System.out.println(box.getY());
16: }
17: }
After moving, the top-left corner is:
20
35
2009-2010 OOP - http://mim.hus.edu.vn/elearning 29
30. Thử nghiệm trong môi trường
tương tác BlueJ
2009-2010 OOP - http://mim.hus.edu.vn/elearning 30
31. API Documentation
API: Application Programming Interface
Tài liệu tra cứu các thư viện chương trình - liệt kê các lớp và các
phương thức
Khi lập trình:
Tra cứu API doc để biết cách sử dụng, thao tác với các đối tượng
thuộc các lớp đã có sẵn
Tạo API doc cho các lớp của mình để có thể sử dụng lại
Thư viện Java chuẩn:
http://java.sun.com/j2se/1.5/docs/api/index.html
Có thể tải về trên máy
2009-2010 OOP - http://mim.hus.edu.vn/elearning 31
32.
33. API doc của lớp Rectangle
2009-2010 OOP - http://mim.hus.edu.vn/elearning 33
34. Danh sách các phương thức
của lớp Rectangle
2009-2010 OOP - http://mim.hus.edu.vn/elearning 34
36. Phương thức tĩnh (static)
Ví dụ:
Phương thức main
1 số phương thức trong lớp Math
Đặc điểm:
Phương thức tĩnh không có tham biến ẩn
Lời gọi phương thức tĩnh
ClassName. methodName(parameters)
VD:
Math.sqrt(4)
Nhận xét: câu lệnh java ClassName giống như
lời gọi ClassName.main()
2009-2010 OOP - http://mim.hus.edu.vn/elearning 36