LỚP VÀ ĐỐI TƯỢNG
Java là một ngôn ngữ hướng đối tượng. Như các ngôn ngữ hướng đối tượng khác, java hỗ trợ các khái niệm cơ bản sau đây:
- Đa hình
- Thừa kế
- Đóng gói
- Trừu tượng
- Các lớp
- Đối tượng
- Phương thức
- Thuộc tính
Trong bài này, chúng ta sẽ cùng xem xét các khái niệm về lớp và các đối tượng.
- Đối tượng - đối tượng có trạng thái và hành vi. Ví dụ: Một con chó có trạng thái màu sắc, tên, giống cũng như hành vi - vẫy đuôi, sủa, ăn, uống. Một đối tượng là một thể hiện của một lớp.
- Lớp - Một lớp có thể được định nghĩa như là một mẫu mô tả các trạng thái, hành vi của các đối tượng mà các đối tượng này là thể hiện của lớp đó.
Đối tượng trong Java:
Bây giờ chúng ta nhìn sâu vào các đối tượng là gì. Nếu chúng ta xem xét thực tế chúng ta có thể tìm thấy nhiều đối tượng xung quanh chúng ta: ô tô, con chó, con người,.. Tất cả các đối tượng này có trạng thái và hành vi.
Nếu ta xem xét một con chó, các trạng thái/đặc điểm của nó là - tên, giống, màu sắc, và hành vi của nó là - sủa, vẫy đuôi, chạy.
Nếu ta so sánh các đối tượng ta đề cập trong lập trình với một đối tượng thế giới thực, thì chúng có những trạng thái/đặc điểm rất giống nhau.
Đối tượng trong lập trình cũng có trạng thái/đặc điểm và hành vi. Trạng thái/đặc điểm được thể hiện thong qua các thuộc tính và hành vi là các phương thức.
Các lớp trong Java:
Một ví dụ về một lớp học được đưa ra dưới đây:
Một lớp có thể chứa bất kỳ các loại biến sau đây:
- Các biến địa phương. Biến được định nghĩa trong phương thức, hàm dựng hoặc các khối mã lệnh được gọi là các biến địa phương. Biến sẽ được cấp phát và khởi tạo trong phương thức và các biến sẽ bị phá hủy khi phương thức này đã hoàn thành.
- Biến thể hiện (thuộc tính). Biến thể hiện là các biến trong một lớp nhưng bên ngoài các phương thức. Các biến này được khởi tạo khi lớp được nạp. Biến thể hiện có thể được truy cập từ bên trong mọi phương thức, hàm dựng hoặc các khối mã lệnh của lớp cụ thể.
- Các biến lớp (biến tĩnh). Các biến lớp là các biến khai báo trong một lớp, nằm ngoài các phương thức, với từ khóa static.
Một lớp có thể có nhiều phương thức. Trong ví dụ trênbarking(), hungry(), sleeping() là phương thức.
Sau đây, chúng ta cùng xem xét một số những chủ đề quan trọng cần được thảo luận khi nhìn vào các lớp của ngôn ngữ Java.
Hàm dựng (Constructor):
Khi thảo luận về các lớp, một trong những chủ đề quan trọng nhất là hàm dựng. Mỗi lớp đều có ít nhất một hàm dựng. Nếu chúng ta không viết hàm dựng nào cho lớp cả thì trình biên dịch java xây dựng một hàm dựng mặc định cho lớp đó.
Mỗi lần một đối tượng mới được tạo ra thì ít nhất một hàm dựng sẽ được gọi. Nguyên tắc chính của hàm dựng là chúng cần phải có cùng tên với lớp. Một lớp có thể có nhiều hơn một hàm dựng.
Ví dụ về một hàm dựng được đưa ra dưới đây:
Java cũng hỗ trợ lớp Singleton, nơi bạn chỉ có thể tạo ra một thể hiện của một lớp mà thôi (chúng ta sẽ đề cập sau).
Tạo ra một đối tượng:
Như đã đề cập trước đây là lớp cung cấp những bản thiết kế cho các đối tượng. Vì vậy, về cơ bản là một đối tượng được tạo ra từ một lớp. Trong java từ khóa new được sử dụng để tạo các đối tượng mới.
Có ba bước khi tạo một đối tượng từ một lớp:
- Khai báo (Declaration). Một khai báo biến với một tên biến với một loại đối tượng.
- Tạo thể hiện (Instantiation). Từ khóa "new" được sử dụng để tạo ra các đối tượng.
- Khởi tạo (Initialization). Từ khoá “new” được theo sau bởi một lời gọi hàm dựng. Lời gọi này khởi tạo đối tượng mới.
Ví dụ về việc tạo ra một đối tượng được đưa ra dưới đây:
Nếu chúng ta biên dịch và chạy chương trình trên thì nó sẽ cho ra kết quả như sau:
Passed Name is: tommy
Truy cập thuộc tính và phương thức:
Thuộc tính và phương thức được truy cập thông qua đối tượng được tạo ra. Để truy cập chúng, ta thực hiện như sau:
Ví dụ:
Nếu chúng ta biên dịch và chạy chương trình trên thì nó sẽ cho ra kết quả như sau:
Passed Name is :tommy
Puppy’s age is :2
Variable Value :2
Quy tắc khai báo tập tin nguồn:
Những quy định này là rất cần thiết khi khai báo các lớp:
- Chỉ có thể có một lớp public cho mỗi tập tin nguồn.
- Một tập tin nguồn có thể có nhiều lớp không public (non public).
- Tên lớp public được dùng để đặt tên cho tập tin nguồn và có đuôi là .java. Ví dụ: tên lớp là public class Employee{…}. Sau đó, tập tin nguồn phải được đặt tên là Employee.java.
- Nếu lớp được định nghĩa bên trong một gói, từ khóa package khai báo gói phải được báo cáo đầu tiên trong tập tin nguồn.
- Nếu có khai báo import thì phải được viết giữa từ khóa package và khai báo lớp. Nếu không có báo cáo package thì khai báo import phải là dòng đầu tiên trong tập tin nguồn.
- Khai báo import và package này sẽ bao hàm tất cả các lớp có trong tập tin nguồn.
- Các lớp có nhiều cấp độ truy cập và có nhiều loại khác nhau của các lớp: các lớp trừu tượng, các lớp hằng,.. Tôi sẽ giải thích ở các bài sau trong bài định danh truy cập.
Ngoài các loại được đề cập ở trên lớp, Java cũng có một số lớp đặc biệt gọi là các lớp bên trong (Inner classes) và lớp vô danh (Anonymous classes).
Gói trong Java (Java Package):
Hiểu một cách đơn giản, nó là một cách để phân loại các lớp và giao diện. Khi phát triển các ứng dụng trong Java, hàng trăm lớp và giao diện sẽ được viết, do đó phân loại các lớp là điều cần làm cũng như làm cho cuộc sống dễ dàng hơn nhiều.
Khai báo import:
Trong java nếu tên đầy đủ, trong đó bao gồm tên gói và tên lớp, được đưa ra thì sau đó trình biên dịch có thể dễ dàng xác định vị trí mã nguồn. Khai báo import là một cách để chỉ cho trình biên dịch thấy được vị trí mã nguồn.
Ví dụ sau sẽ yêu cầu trình biên dịch tải tất cả các lớp có sẵn trong thư mục java/io:
Một CASE STUDY đơn giản
Chúng ta sẽ tạo ra hai lớp: Employee và EmployeeTest.
Trước tiên, mở notepad và thêm đoạn mã sau. Hãy nhớ rằng đây là lớp Employee và là lớp public. Bây giờ lưu tập tin này với tên Employee.java.
Lớp Employee có bốn thuộc tính có tên là name, age, designator và salary. Lớp có một hàm dựng một tham số được khai báo rõ ràng.
Để chạy được chương trình, ta cần phương thức main() và các đối tượng cần được tạo ra. Chúng ta sẽ tạo ra một lớp riêng cho những công việc này.
Dưới đây là lớp EmployeeTest mà tạo ra hai đối tượng của lớp Employee và gọi các phương thức cho từng đối tượng để gán giá trị cho mỗi biến.
Lưu mã sau đây trong tập tin EmployeeTest.java
Bây giờ biên dịch cả 2 lớp và sau đó chạy EmployeeTest để xem kết quả như sau:
C:\> javac Employee.java
C:\> javac EmployeeTest.java
C:\> java EmployeeTest
Name: James Smith
Age: 26
Designation: Senior Software Engineer
Salary: 1000.0
Name: Mary Anne
Age: 21
Designation: Software Engineer
Salary: 500.0
0 Comment:
Đăng nhận xét
Thank you for your comments!