oop 2
DESCRIPTION
Slide java o lopTRANSCRIPT
2009-2010OOP -
http://mim.hus.edu.vn/elearning 1
Bài 2: Sử dụng đối tượng
Giảng viên: Nguyễn Thị Minh Huyền
Đỗ Thanh Hà
2009-2010 OOP - http://mim.hus.edu.vn/elearning 2
Tài liệu tham khảo
BigJava - Chương 2, 4, 6, 7
2009-2010 OOP - http://mim.hus.edu.vn/elearning 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 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 6 chữ số thập phân)
4 bytes 1.4*10-45 3.4*1038
double số thực (chính xác đến 15 chữ số thập phân)
8 bytes 4.9*10-324 1.7*10308
boolean lôgic 1 bit true, false
2009-2010 OOP - http://mim.hus.edu.vn/elearning 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 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 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 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 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 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)
statement1else
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 11
Câu lệnh điều khiển (2)
Lệnh lặp for (initialization; condition; update)
statement while (condition)
statement do
statementwhile (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 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 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 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 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 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 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 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 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 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 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 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 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 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ỷ
int luckyNumber = 13;
int luckyNumber2 = luckyNumber;
luckyNumber2 = 12;
Rectangle box = new Rectangle(5, 10, 20, 30);
Rectangle box2 = box;
box2.translate(15, 25);
2009-2010 OOP - http://mim.hus.edu.vn/elearning 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ớpcầ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 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 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 rectangle10: box.translate(15, 25); 11: 12: // Print information about the moved rectangle13: 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:2035
2009-2010 OOP - http://mim.hus.edu.vn/elearning 30
Thử nghiệm trong môi trường tương tác BlueJ
2009-2010 OOP - http://mim.hus.edu.vn/elearning 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 33
API doc của lớp Rectangle
2009-2010 OOP - http://mim.hus.edu.vn/elearning 34
Danh sách các phương thức của lớp Rectangle
2009-2010 OOP - http://mim.hus.edu.vn/elearning 35
Phương thức translate
2009-2010 OOP - http://mim.hus.edu.vn/elearning 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()