Trong bài này, chúng ta sẽ tìm hiểu 2 trong những thành phần quan trọng nhất khi lập trình hướng đối tượng đó là đối tượng (Object), lớp (Class) và các thành phần của lớp (thuộc tính, phương thức), sơ lược về hàm tạo và phạm vi truy cập của lớp. Đây là một bài rất quan trọng, là tiền đề cho các bài khác sau này.
Nội dung
1. Đối tượng
Trong lập trình hướng đối tượng, một thực thể được gọi là đối tượng nếu thực thể đó có 2 đặc điểm: trạng thái (state) và hành vi (behavior).
Trạng thái: Những đặc điểm của một đối tượng, chẳng hạn như đối tượng Sinh viên thì có mã, họ tên, ngày tháng năm sinh,…
Hành vi: Những hành động mà một đối tượng thực hiện, ví dụ: Sinh viên thì có các hành vi như đi học, đi dã ngoại vui chơi giải trí,…
Như vậy, thông qua ví dụ trên chúng ta có thể định nghĩa đối tượng như sau: đối tượng là một khái niệm được dùng để chỉ một thực thể cụ thể có trạng thái và hành vi. Một thực thể sẽ không được gọi là đối tượng nếu thực thể đó không thỏa mãn một trong các điều kiện trên.
2. Lớp
Một lớp là một nhóm các đối tượng mà có các thuộc tính, phương thức chung. Lớp là một Template hoặc bản thiết kế từ đó đối tượng được tạo. Một lớp trong Java có thể bao gồm:
- Thuộc tính
- Phương thức
- Constructor
- Block
- Lớp và Interface
Cú pháp khai báo lớp:
public class ten_lop{
thuoc_tinh
phuong_thuc;
}
Trong đó:
Public là access_modifier: phạm vi truy cập của lớp, thuộc tính và phương thức.
ten_lop là Tên lớp (class name): mỗi lớp có một tên duy nhất để phân biệt với các lớp khác trong cùng một phạm vi.
Các thuộc tính (attributes): mô tả các trường để lưu dữ liệu cho mỗi đối tượng của lớp đang mô tả hay là lưu các tham chiếu đến các đối tượng của lớp khác. Sau này khi tạo lập một đối tượng của lớp thì mỗi thành phần dữ liệu trong đối tượng sẽ chứa hay liên kết với đối tượng dữ liệu cần thiết.
Hệ thống các phương thức của lớp (methods): mỗi phương thức của lớp thực chất là một hàm được viết riêng cho các đối tượng của lớp, chỉ được phép gọi để tác động lên chính các đối tượng của lớp này.
Ví dụ:
package com.company;
public class People {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Sau đây là một số vấn đề mà chúng ta cần nắm khi xem qua cấu trúc của lớp. Những vấn đề này chúng ta sẽ tìm hiểu rõ hơn trong các bài sau.
Phạm vi truy cập (Access Modifier) của lớp, thuộc tính và phương thức
Trong Java, có 4 phạm vi truy cập đó là public, default, protected và private
Access Modifier | within class | within package | outside package by subclass only | outside package |
---|---|---|---|---|
public | x | x | x | x |
protected | x | x | x | |
default | x | x | ||
private | x |
public: có thể truy cập ở mọi vị trí trong Project.
protected: truy cập được từ trong lớp khai báo, lớp con của lớp khai báo và các lớp cùng gói với lớp khai báo.
default: truy cập được từ trong lớp khai báo và các lớp cùng gói với lớp khai báo.
private: chỉ có thể truy cập bên trong lớp.
Thuộc tính (Attributes)
Thuộc tính là 1 biến được khai báo bên trong lớp nhưng ở bên ngoài một phương thức, hàm tạo hoặc 1 khối lệnh. Nói cách khác , thuộc tính chính là một biến toàn cục. Thuộc tính được khởi tạo khi một lớp được khởi tạo và có thể được sử dụng ở bên trong một hàm, hàm tạo hoặc trong một khối lệnh trong lớp đó.
Phương thức (Methods)
Phương thức là một hàm được viết riêng cho các đối tượng của lớp, chỉ được phép gọi để tác động lên chính các đối tượng của lớp này. Một phương thức của lớp bao gồm 3 thành phần chính đó là phạm vi truy câp, giá trị trả về và tên của phương thức đó. Một phương thức là một tập hợp các câu lệnh được nhóm lại với nhau để thực hiện một chức năng nào đó.
Cú pháp tạo phương thức:
[quyền_truy_cập] [kiểu_của_phương_thức] tênPhươngThức(Danh_sách_các_tham_số_truyền_vào) {
[Khai báo các biến bên trong phương thức];
[Các câu lệnh bên trong];
return [giá_trị_trả_về];
}
, trong đó:
- [quyền_truy_cập] là phạm vi truy cập của phương thức
- [kiểu_của_phương_thức] là kiểu dữ liệu trả về của phương thức đó (void, int, long, float,…).
- tênPhươngThức là tên do chúng ta tự định nghĩa và phải tuân theo quy tắc đặt tên phương thức (hàm) trong Java.
- [Danh_sách_các_tham_số_truyền_vào] (nếu có) là các tham số chúng ta truyền vào cho phương thức (thường nằm tại phần đầu của định nghĩa phương thức), với mỗi tham số bao gồm tên tham số và kiểu dữ liệu của tham số. Phương thức có thể có hoặc không có tham số, nếu có nhiều hơn một tham số thì các tham số được viết cách nhau bởi một dấu phẩy.
- [Các câu lệnh bên trong] là các lệnh trong thân phương thức để xử lý các công việc nhằm thực hiện chức năng của phương thức.
- [giá_trị_trả_về] : giá trị trả về của phương thức phải phù hợp với [kiểu_của_phương_thức]. Trong trường hợp phương thức có kiểu void thì chúng ta có thể dùng lệnh return để kết thúc hàm hoặc khi thực hiện xong lệnh cuối cùng (gặp dấu } cuối cùng) thì phương thức cũng sẽ kết thúc. Sau lệnh return có thể trả lại 1 biểu thức để tính giá trị.
Hàm tạo (Constructor)
Trong lập trình hướng đối tượng, chúng ta có 1 loại hàm đặc biệt đó là hàm tạo. Hàm tạo trong Java là hàm có cùng tên với lớp và không có giá trị trả về.
Một lớp trong Java có thể có một hoặc nhiều hàm tạo. Có 2 loại hàm tạo chúng ta thường gặp đó là: hàm tạo mặc định (không có đối số) và hàm tạo có đối số.
Ví dụ:
package com.company;
public class People {
private String name;
public People() {
}
public People(String name) {
this.name = name;
}
}
Ý nghĩa của hàm tạo: tự động khởi tạo các thông tin mặc định khi đối tượng được tạo ra.
Lưu ý: Khi người lập trình khai báo bất kỳ một hàm tạo nào cho lớp thì hàm tạo mặc định sẽ không được phát sinh bởi trình biên dịch cho lớp này nữa. Trong trường hợp này, nếu muốn sử dụng hàm tạo mặc định, người lập trình phải tự viết thêm vào.