Định nghĩa Class Trong Java

OOP_ThreeCompartment.png
Một class được mô hình hoá thành 3 thành phần cơ bản như sau: 
  1. Name (or identity): tên của class 
  2. Variables (or attribute, state, field): chứa các thuộc tính của class.
  3. 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:
OOP_ClassExamples.png
Hình dưới đây để mô tả hai instances của class Student, đặt tên biến là as "paul" and "peter".
OOP_InstanceExamples.png
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
  1. 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.
  2. 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.
  3. 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ó .
  4. 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 {        // class name
   double radius;            // variables
   String color;
   
   double getRadius() { ...... }  // methods
   double getArea() { ...... }
}
public class SoccerPlayer {  // class name
   int number;               // variables
   String name;
   int x, y;
   
   void run() { ...... }     // methods
   void kickBall() { ...... } 
}
Cú pháp cho định nghĩa lớp trong Java là:
[AccessControlModifier] class ClassName {
   // Class body contains members (variables and methods)
   ......
}

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:
  1. Khai báo một định danh cá thể (tên thể hiện) của một lớp cụ thể.
  2. 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 Circlenhư sau:
// Declare 3 instances of the class Circle, c1, c2, and c3
Circle c1, c2, c3;  // They hold a special value called null
// Construct the instances via new operator
c1 = new Circle();
c2 = new Circle(2.0);
c3 = new Circle(3.0, "red");
 
// You can Declare and Construct in the same statement
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:
  1. Trước tiên, xác định trường hợp bạn quan tâm, và sau đó,
  2. 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à c1c2 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ụ,
// Suppose that the class Circle has variables radius and color,
//  and methods getArea() and getRadius().
// Declare and construct instances c1 and c2 of the class Circle
Circle c1 = new Circle ();
Circle c2 = new Circle ();
// Invoke member methods for the instance c1 via dot operator
System.out.println(c1.getArea());
System.out.println(c1.getRadius());
// Reference member variables for instance c2 via dot operator
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 AClassBạ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ụ fontSizeroomNumberxMaxyMin 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
  1. nhận được đối số từ người gọi,
  2. thực hiện các hoạt động được xác định trong thân phương thức và
  3. 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]) {
   // method body or implementation
   ......
}
Ví dụ: 
// Return the area of this Circle instance
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

OOP_Circle.png
Một lớp được gọi Circleđược định nghĩa như thể hiện trong sơ đồ lớp. Nó chứa hai privatebiến thành viên: radius(loại double) và color(loại String); và ba publicphương pháp thành viên: getRadius()getColor(), và getArea().
Ba trường hợp của Circles, được gọi là c1c2và 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.javanhư 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
/*
 * The Circle class models a circle with a radius and color.
 */
public class Circle {    // Save as "Circle.java"
   // Private instance variables
   private double radius;
   private String color;
   
   // Constructors (overloaded)
   public Circle() {                   // 1st Constructor
      radius = 1.0;
      color = "red";
   }
   public Circle(double r) {           // 2nd Constructor
      radius = r;
      color = "red";
   }
   public Circle(double r, String c) { // 3rd Constructor
      radius = r;
      color = c;
   }
   
   // Public methods
   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 Circlelớ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 Circlelớp. Các Circlelớ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 TestCirclesử dụng Circlelớp đó. Các TestCirclelớ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
/*
 * A Test Driver for the "Circle" class
 */
public class TestCircle {    // Save as "TestCircle.java"
   public static void main(String[] args) {   // Program entry point
      // Declare and Construct an instance of the Circle class called c1
      Circle c1 = new Circle(2.0, "blue");  // Use 3rd constructor
      System.out.println("The radius is: " + c1.getRadius());  // use dot operator to invoke member methods
      System.out.println("The color is: " + c1.getColor());
      System.out.printf("The area is: %.2f%n", c1.getArea());
   
      // Declare and Construct another instance of the Circle class called c2
      Circle c2 = new Circle(2.0);  // Use 2nd constructor
      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());
   
      // Declare and Construct yet another instance of the Circle class called c3
      Circle c3 = new Circle();  // Use 1st constructor
      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 Circlelớ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 newtoá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 voidKhông có returntuyê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 newtoá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 radiusvà colorgiá 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 

Post a Comment

Mới hơn Cũ hơn