Khái niệm về lớp và đối tượng trong lập trình hướng đối tượng

Trong các giáo trình về lập trình hướng đối tượng, mình thấy người ta viết các khái niệm một cách rất chung chung và khó hiểu, ban đầu mình học cũng rất vất vả luôn. Vì vậy trong bài này mình sẽ nêu lên một số khái niệm về lớp và đối tượng một cách đơn giản nhất và liên hệ với thực tết nhất có thể.

Khái niệm lớp và đối tượng

Chắc các bạn vẫn nhớ môn sinh học chúng ta có học về các lớp như lớp thú, lớp bò sát, lớp chim,… Trong mỗi lớp đó có các tính chất, đặc điểm riêng như lớp thú thì có xương sống, có 4 chi, lớp chim có 2 cánh và 2 chân, lớp bò sát thì thường bò sát dưới đất.

lập trình hướng đối tượng

Vậy thế nào được gọi là một lớp. Lớp các bạn hiểu đó là một khái niệm bao quát nói lên những đặc điểm chung nhất của các phần tử, các thành viên trong lớp đó.
Thế nào là đối tượng? Đối tượng chính là một phần tử, một thành viên cụ thể nào đó trong lớp. Ví dụ như trong lớp thú thì con khỉ A, con khỉ B là các đối tượng vì nó thực sự tồn tại trong thực tế. Mỗi đối tượng người ta cũng gọi là một thể hiện của lớp vì thông qua đối tượng đó chúng ta biết được những tính chất chung nhất của lớp. Ví dụ khi nhìn con khỉ A, nó thuộc lớp thú và vì thế chúng ta biết lớp thú là những động vật có xương sống, có 4 chi,…

Các bạn lại chú ý, trong mỗi lớp thì các đối tượng trong lớp đó có các tính chất và hành động nhất định. Thì khi đó các tính chất chúng ta gọi là thuộc tính (thuộc tính có 4 chi), các hành động chúng ta gọi là phương thức (phương thức ăn, ngủ,…).

Ví dụ gần gũi một chút là lớp Student (sinh viên, học sinh) thì gồm có name (tên) và scores (điểm số), đó là cá thuộc tính, mỗi học sinh đều eat (ăn) và study (học) thì đó là phương thức.

lập trình hướng đối tượng

Từ khái niệm đến lập trình

Khi đã nhớ rõ và phân biệt được các khái niệm về lớp, đối tượng, thuộc tính và phương thức, chúng ta làm sao áp dụng nó vào lập trình? Các bạn có thể sử dụng các ngôn ngữ lập trình hướng đối tượng khác nhau như C#, Java hay php, ở đây mình dùng Java để mô tả, các ngôn ngữ khác cũng tương tự, mình không đề cập tới việc sử dụng ngôn ngữ nhé.

Ví dụ chúng ta có đoạn code như sau để khai báo một lớp Student. Mỗi Student có 2 thuộc tính là name và scores, cò 2 phương thức là eat và study.

package cachhoc.net;

public class Student {
	String name;
	double scores;

	void eat() {
		System.out.println(name + " eat");
	}

	void study() {
		System.out.println(name + " study");
	}

	public static void main(String[] args) {
		Student student1 = new Student();
		Student student2 = new Student();
		student1.name = "Jone";
		student2.name = "Ana";

		student1.study();
		student2.study();
	}
}

Các bạn chú ý trong phương thức main, chúng ta không được gọi trưc tiếp các phuơng thức (eat, study) hay các thuộc tính ra để thực hiện xử lý mà chúng ta cần thông qua một đối tượng nào đó để thực hiện (ở đây là 2 đối tượng student1 và student2). Cũng giống như trong thực tế là chúng ta không thể gọi trực tiếp được là Lớp sinh viên đi ăn, lớp sinh viên đi ăn, lớp sinh viên đi học mà phải nói là sinh viên A đi ăn, sinh viên B đi học,…

Để khai báo một đối tượng chúng ta sử dụng toán tử new như trên.