Chương 2
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Lớp là khái niệm trọng tâm của lập trình hướng đối tượng, java là ngôn ngữ
lập trình hướng đối tượng, một chương trình java gồm một tập các đối tượng, các
đối tượng này phối hợp với nhau để tạo thành một ứng dụng hoàn chỉnh. Các đối
tượng được mô tả qua khái niệm lớp, lớp là sự mở rộng khái niệm RECORD trong
pascal, hay struct của C, ngoài các thành phần dữ liệu, lớp còn có các hàm (
phươ
ng thức, hành vi ), ta có thể xem lớp là một kiểu dữ liệu, vì vậy người ta còn
gọi lớp là kiểu dữ liệu đối tượng. Sau khi định nghĩa lớp ta có thể tạo ra các đối
tượng ( bằng cách khai báo biến ) của lớp vừa tạo, do vậy có thể quan niệm lớp là
tập hợp các đối tượng cùng kiểu.
BÀI 1 ĐỊNH NGHĨA LỚP
I. Khai báo lớp
1.1. Một lớp được định nghĩa theo mẫu sau:
[pbulic][final][abstract] class <tên_lớp>{
// khai báo các thuộc tính
// khai báo các phương thức
}
sau đâu là ví dụ đơn giản định nghĩa lớp ngăn xếp:
Tổng quát: một lớp được khai báo dạng sau:
[public][<abstract><final>][ class <Tên lớp>
[extends <Tên lớp cha>] [implements <Tên giao diện>] {
<Các thành phần của lớp, bao gồm: thuộc tính và phương thức>
}
Trong đó:
1) bởi mặc định một lớp chỉ có thể sử dụng bởi một lớp khác trong cùng một gói
với lớp đó, nếu muốn gói khác có thể sử dụng lớp này thì lớp này phải được
khai báo là lớp public.
2) abstract là bổ từ cho java biế
t đây là một lớp trừu tượng, do vậy ta không thể
tạo ra một thể hiện của lớp này
3) final là bổ từ cho java biết đây là một lớp không thể kế thừa
4) class là từ khoá cho chương trình biết ta đang khai báo một lớp, lớp này có tên
là NameOfClass
5) extends là từ khoá cho java biết lớp này này được kế thừa từ lớp super
6) implements là từ khoá cho java biết lớp này sẽ tri
ển khai giao diện Interfaces,
đây là một dạng tương tự như kế thừa bội của java.
Chú ý:
1) Thuộc tính của lớp là một biến có kiểu dữ liệu bất kỳ, nó có thể lại là một biến
có kiểu là chính lớp đó
2) Khi khai báo các thành phần của lớp (thuộc tính và phương thức) có thể dùng
một trong các từ khoá private, public, protected để giứo hạn sự truy cập đến
thành ph
ần đó.
– các thành phần private chỉ có thể sử dụng được ở bên trong lớp, ta không thể
truy cập vào các thành phần private từ bên ngoài lớp
– Các thành phần public có thể truy cập được cả bên trong lớp lẫn bên ngoài
lớp.
– các thành phần protected tương tự như các thành phần private, nhưng có thể
truy cập được từ bất cứ lớp con nào kế thừa từ nó.
– Nếu một thành phần của lớp khi khai báo mà không sử dụng một trong 3 bổ
từ protected, private, public thì sự truy cập là bạn bè, tức là thành phần này có
thể truy cập được từ bất cứ lớp nào trong cùng gói với lớp đó.
3) Các thuộc tính nên để mức truy cập private để đảm bảo tính dấu kín và lúc đó
để bên ngoài phạm vi c
ủa lớp có thể truy cập được đến thành phần private này
ta phải tạo ra các phương thức phương thức get và set.
4) Các phương thức thường khai báo là public, để chúng có thể truy cập từ bất cứ
đâu.
5) Trong một tệp chương trình (hay còn gọi là một đơn vị biên dịch) chỉ có một
lớp được khai báo là public, và tên lớp public này phải trùng với tên của tệp kể
cả chữ hoa, chữ thường
- Khai báo thuộc tính
Trở lại lớp Stack
public class Stack {
private Vector items;
// a method with same name as a member variable
public Vector items() {
...
}
}
Trong lớp Stack trên ta có một thuộc tính được định nghĩa như sau:
private Vector items;
Việc khai báo như trên được gọi là khai báo thuộc tính hay còn gọi là biến thành
viên lớp
Tổng quát việc khai báo một thuộc tính được viết theo mẫu sau:
Trong đó:
• accessLevel có thể là một trong các từ public, private, protected hoặc có thể bỏ
trống, ý nghĩa của các bổ từ này được mô tả ở phần trên
• - static là từ khoá báo rằng đây là một thuộc tính lớp, nó là một thuộc tính sử
dụng chung cho cả lớp, nó không là của riêng một đối tượng nào.
• - transient và volatile chưa được dùng
• - type là một kiểu dữ liệu nào đó
• name là tên của thu
ộc tính
Chú ý: Ta phải phân biệt được việc khai báo như thế nào là khai báo thuộc tính,
khai báo thế nào là khai báo biến thông thường? Câu trả lời là tất cả các khai báo
bên trong thân của một lớp và bên ngoài tất cả các phương thức và hàm tạo thì đó
là khai báo thuộc tính, khai báo ở những chỗ khác sẽ cho ta biến.
- Khai báo phương thức
Trong lớp Stack trên ta có phương thức push dùng để đẩy một đối tượng vào đỉnh
ngăn xếp, nó được định nghĩ
a như sau:
Cũng giống như một lớp, một phương thức cũng gồm có 2 phần: phần khai báo và
phần thân
- Phần khai báo gồm có những phần sau( chi tiết của khai báo được mô tả sau):
- Phần thân của phương thức gồm các lệnh để mô tả hành vi của phương thức, các
hành vi này được viết bằng các lệnh của java.
II. Chi tiết về khai báo một phương thức
1. Tổng quát một phương thức được khai báo như sau:
accessLevel //mô tả mức độ truy cập đến phương thức
static //đây là phương thức lớp
abstract //đây là phương thức không có cài đặt
final //phương thức này không thể ghi đè
native //phương thức này được viết trong một ngôn ngữ khác
synchronized //đây là phương thức đồng bộ
returnType //giá trị trả về của phương thức
MethodName //tên của phương thức
throws
exception
//khai báo các ngoại lệ có thể được nem ra từ phương
thức
Trong đó:
- accessLevel có thể là một trong các từ khoá public, private, protected hoặc bỏ
trống, ý nghĩa của các bổ từ này được mô tả trong phần khai báo lớp
- static là từ khoá báo cho java biết đây là một phương thức lớp
- abstract từ khoá cho biết đây là một lớp trừu tượng, nó không có cài đặt.
- final đây là từ khoá báo cho java biết đây là phương thức không thể ghi đè từ lớp