Định nghĩa Class Trong Java
Một class được mô hình hoá thành 3 thành phần cơ bản như sau:
- Name (or identity): tên của class
- Variables (or attribute, state, field): chứa các thuộc tính của class.
- Methods (or behaviors, function, operation): quy định các hành động của class.
Nói cách khác, một lớp đóng gói các thuộc tính tĩnh (dữ liệu) và các hành vi động (hoạt động trên dữ liệu) trong một hộp.
Hình dưới đây cho thấy một vài ví dụ về các lớp:
Hình dưới đây để mô tả hai instances của class
Student
, đặt tên biến là as "
paul
" and "
peter
".
Sơ đồ Lớp (Class Diagram) và ngôn ngữ mô hình thống nhất (UML): Các sơ đồ lớp trên được vẽ theo các ký hiệu UML. Một lớp được biểu diễn dưới dạng hộp 3 ngăn, chứa tên, biến và phương thức tương ứng. Tên lớp được in đậm và tập trung. Một thể hiện cũng được biểu diễn dưới dạng hộp 3 ngăn, với tên thể hiện được hiển thị dưới dạng và gạch chân.instanceName:Classname
Bản tóm tắt ngắn gọn
- Một lớp là một thực thể phần mềm có thể tái sử dụng, có tính trừu tượng, có tính đóng gói, có thể tái sử dụng, bắt chước một thứ trong thế giới thực.
- Một lớp là một hộp 3 ngăn chứa tên, biến và các phương thức.
- Một lớp đóng gói các cấu trúc dữ liệu (theo biến) và thuật toán (trong phương thức). Các giá trị của các biến tạo thành trạng thái của nó . Các phương pháp cấu thành hành vi của nó .
- Một thể hiện là một khởi tạo (hoặc thực hiện) một mục cụ thể của một lớp.
Ví Dụ về Định Nghĩa class trong Java
Trong Java, chúng tôi sử dụng từ khóa class
để định nghĩa một lớp. Ví dụ như:
public class Circle {
double radius;
String color;
double getRadius() { ...... }
double getArea() { ...... }
}
public class SoccerPlayer {
int number;
String name;
int x, y;
void run() { ...... }
void kickBall() { ...... }
}
Cú pháp cho định nghĩa lớp trong Java là:
[AccessControlModifier] class ClassName {
......
}
Tạo ra Instances (thể hiện) của Class
Để tạo một thể hiện của một lớp , bạn phải:
- Khai báo một định danh cá thể (tên thể hiện) của một lớp cụ thể.
- Xây dựng thể hiện (nghĩa là phân bổ lưu trữ cho thể hiện và khởi tạo thể hiện) bằng cách sử dụng toán tử
new
.
Ví dụ, giả sử rằng chúng ta có một lớp được gọi Circle
, chúng ta có thể tạo các thể hiện Circle
như sau:
Circle c1, c2, c3;
c1 = new Circle();
c2 = new Circle(2.0);
c3 = new Circle(3.0, "red");
Circle c4 = new Circle();
Khi một thể hiện được khai báo nhưng không được xây dựng, nó giữ một giá trị đặc biệt được gọi null
.
Toán Tử Chấm (.) - Dot Operator
Các biến và phương thức thuộc về một lớp được gọi chính thức là biến thành viên và phương thức thành viên . Để tham chiếu một biến thành viên hoặc phương thức, bạn phải:
- Trước tiên, xác định trường hợp bạn quan tâm, và sau đó,
- Sử dụng toán tử dấu chấm (
.
) để tham chiếu biến hoặc phương thức thành viên mong muốn.
Ví dụ, giả sử rằng chúng ta có một lớp được gọi Circle
, với hai biến thành viên ( radius
và color
) và hai phương thức thành viên ( getRadius()
và getArea()
). Chúng tôi đã tạo ra ba trường hợp của lớp Circle
, cụ thể là c1
, c2
và c3
. Để gọi phương thức getArea()
, trước tiên bạn phải xác định thể hiện quan tâm c2
, sau đó sử dụng toán tử dấu chấm , dưới dạng c2.getArea()
.
Ví dụ,
Circle c1 = new Circle ();
Circle c2 = new Circle ();
System.out.println(c1.getArea());
System.out.println(c1.getRadius());
c2.radius = 5.0;
c2.color = "blue";
Gọi getArea()
mà không xác định thể hiện là vô nghĩa, vì bán kính là không xác định (có thể có nhiều trường hợp Circle
- mỗi trường hợp duy trì bán kính riêng của mình). Hơn nữa, c1.getArea()
và c2.getArea()
có khả năng tạo ra kết quả khác nhau.
Nói chung, giả sử có một lớp được gọi AClass
với một biến thành viên được gọi aVariable
và một phương thức thành viên được gọi aMethod()
. Một thể hiện được gọi anInstance
là được xây dựng cho AClass
. Bạn sử dụng anInstance.aVariable
và anInstance.aMethod()
.
Biến Thành Viên - Member Variables
Một biến thành viên có tên (hoặc định danh ) và một loại ; và giữ một giá trị của loại cụ thể đó (như đã giải thích trong chương trước).
Quy ước đặt tên biến: Tên biến sẽ là danh từ hoặc cụm danh từ được tạo thành từ nhiều từ. Từ đầu tiên là chữ thường và các từ sau sẽ viết hoa chữ cái đầu tiên - quy tắc camel-case (lạc đà-case), ví dụ fontSize
, roomNumber
, xMax
, yMin
và xTopLeft
.
Cú pháp chính thức cho định nghĩa biến trong Java là:
[AccessControlModifier] type variableName [= initialValue];
[AccessControlModifier] type variableName-1 [= initialValue-1] [, type variableName-2 [= initialValue-2]] ... ;
Ví dụ,
private double radius;
public int length = 1, width = 1;
Phương Thức Thành Viên - Member Methods
Một phương thức
- nhận được đối số từ người gọi,
- thực hiện các hoạt động được xác định trong thân phương thức và
- trả về một phần kết quả (hoặc
void
) cho người gọi.
Cú pháp khai báo phương thức trong Java như sau:
[AccessControlModifier] returnType methodName ([parameterList]) {
......
}
Ví dụ:
public double getArea() {
return radius * radius * Math.PI;
}
Quy ước đặt tên phương thức: Tên phương thức sẽ là một động từ hoặc cụm động từ được tạo thành từ nhiều từ. Từ đầu tiên được viết bằng chữ thường và phần còn lại của các từ được viết hoa ban đầu (trường hợp lạc đà). Ví dụ, getArea()
, setRadius()
, getParameterValues()
, hasNext()
.
Tên biến so với Tên phương thức so với Tên lớp : Tên biến là danh từ, biểu thị một thuộc tính; trong khi tên phương thức là một động từ, biểu thị một hành động. Chúng có cùng quy ước đặt tên (từ đầu tiên viết thường và phần còn lại được viết hoa ban đầu). Tuy nhiên, bạn có thể dễ dàng phân biệt chúng với bối cảnh. Các phương thức lấy các đối số trong ngoặc đơn (có thể là các đối số bằng 0 với các dấu ngoặc rỗng), nhưng các biến thì không. Trong văn bản này, các phương thức được biểu thị bằng một cặp dấu ngoặc đơn, ví dụ println()
, getArea()
cho rõ ràng.
Mặt khác, tên lớp là một danh từ bắt đầu bằng chữ hoa.
Đặt chúng lại với nhau: Một ví dụ OOP
Một lớp được gọi Circle
được định nghĩa như thể hiện trong sơ đồ lớp. Nó chứa hai private
biến thành viên: radius
(loại double
) và color
(loại String
); và ba public
phương pháp thành viên: getRadius()
, getColor()
, và getArea()
.
Ba trường hợp của Circle
s, được gọi là c1
, c2
và c3
, sẽ được xây dựng với các thành viên dữ liệu tương ứng của chúng, như được hiển thị trong sơ đồ thể hiện.
Mã nguồn cho Circle.java
như sau:
Circle.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
public class Circle {
private double radius;
private String color;
public Circle() {
radius = 1.0;
color = "red";
}
public Circle(double r) {
radius = r;
color = "red";
}
public Circle(double r, String c) {
radius = r;
color = c;
}
public double getRadius() {
return radius;
}
public String getColor() {
return color;
}
public double getArea() {
return radius * radius * Math.PI;
}
}
|
Biên dịch " Circle.java
" thành " Circle.class
".
Lưu ý rằng Circle
lớp không có main()
phương thức. Do đó, nó KHÔNG phải là một chương trình độc lập và bạn không thể tự chạy Circle
lớp. Các Circle
lớp học được hiểu là một khối xây dựng - được sử dụng trong các chương trình khác.
TestCircle.java
Bây giờ chúng ta sẽ viết một lớp khác được gọi là lớp TestCircle
sử dụng Circle
lớp đó. Các TestCircle
lớp học có một main()
phương pháp và có thể được thực thi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public class TestCircle {
public static void main(String[] args) {
Circle c1 = new Circle(2.0, "blue");
System.out.println("The radius is: " + c1.getRadius());
System.out.println("The color is: " + c1.getColor());
System.out.printf("The area is: %.2f%n", c1.getArea());
Circle c2 = new Circle(2.0);
System.out.println("The radius is: " + c2.getRadius());
System.out.println("The color is: " + c2.getColor());
System.out.printf("The area is: %.2f%n", c2.getArea());
Circle c3 = new Circle();
System.out.println("The radius is: " + c3.getRadius());
System.out.println("The color is: " + c3.getColor());
System.out.printf("The area is: %.2f%n", c3.getArea());
}
}
|
Biên dịch TestCircle.java
thành TestCircle.class
.
Chạy TestCircle
và nghiên cứu đầu ra:
The radius is: 2.0
The color is: blue
The area is: 12.57
The radius is: 2.0
The color is: red
The area is: 12.57
The radius is: 1.0
The color is: red
The area is: 3.14
Constructors
Một constructor trông giống như một phương thức đặc biệt có cùng tên phương thức với tên lớp . Trong Circle
lớp trên , chúng tôi định nghĩa ba phiên bản quá tải của hàm tạo Circle(......)
. Một constructor được sử dụng để xây dựng và khởi tạo tất cả các biến thành viên. Để xây dựng một thể hiện mới của một lớp, bạn cần sử dụng một new
toán tử " " đặc biệt theo sau là một cuộc gọi đến một trong các hàm tạo. Ví dụ,
Circle c1 = new Circle();
Circle c2 = new Circle(2.0);
Circle c3 = new Circle(3.0, "red");
Một constructor khác với một phương thức thông thường trong các khía cạnh sau:
- Tên của phương thức constructor giống như tên lớp. Theo quy ước của classname, nó bắt đầu bằng chữ hoa (thay vì chữ thường cho các phương thức thông thường).
- Con constructor không có kiểu trả về. Nó ngầm trả lại
void
. Không có return
tuyên bố nào được cho phép bên trong cơ thể của nhà xây dựng.
- Trình xây dựng chỉ có thể được gọi thông qua
new
toán tử "". Nó chỉ có thể được sử dụng một lần để khởi tạo thể hiện được xây dựng. Khi một cá thể được xây dựng, bạn không thể gọi hàm tạo nữa.
- Các nhà xây dựng không được kế thừa (sẽ được giải thích sau).
Trình xây dựng mặc định : Một hàm tạo không có tham số được gọi là hàm tạo mặc định . Nó khởi tạo các biến thành viên với giá trị mặc định của chúng. Ví dụ, Circle()
trong ví dụ trên khởi tạo các biến thành viên radius
và color
giá trị mặc định của chúng.
Bài tập
Định nghĩa các Class, khởi tạo Object và test các phương thức cho các lớp như hình Examples of classes
Student, Circle, SoccerPlayer, Car
Đăng nhận xét