Setter và getter trong lập trình hướng đối tượng

Lập trình Java cơ bản đến hướng đối tượng

4.8 (5 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 00:52 26-07-2020 82.535 lượt xem 0 bình luận
Tác giả/Dịch giả: Kteam
Học nhanh

Danh sách bài học

Setter và getter trong lập trình hướng đối tượng

Dẫn nhập

Trong bài trước, Kteam đã giới thiệu các bạn về KẾ THỪA TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG. Ở bài này, chúng ta sẽ tìm hiểu lại 2 phương thức setter và getter.


Nội dung

Để đọc hiểu bài này, tốt nhất các bạn nên có kiến thức cơ bản về các phần sau:

Bài này chúng ta sẽ tìm hiểu những vấn đề sau:

  • Setter và Getter là gì? Lý do sử dụng
  • Cú pháp và sử dụng Setter và Getter
  • Chú ý

Setter và Getter là gì? Lý do sử dụng

Setter Getter là 2 phương thức sử dụng để cập nhật hoặc lấy ra giá trị thuộc tính, đặc biệt dành cho các thuộc tính ở phạm vi private.

Việc sử dụng Setter và Getter cần thiết trong việc kiểm soát những thuộc tính quan trọng mà ta thường được sử dụng và yêu cầu giá trị chính xác. Ví dụ thuộc tính age lưu tuổi con người, thực tế thì phạm vi tuổi là từ 0 đến 100, thì ta không thể cho chương trình lưu giá trị age âm hoặc quá 100 được.


Cú pháp và sử dụng Setter và Getter

Cú pháp:

Setter

public void set<tên thuộc tính> (<tham số giá trị mới>) {

      this. <tên thuộc tính> = <tham số giá trị mới>;

}

Getter

<kiểu dữ liệu thuộc tính> get<tên thuộc tính> () {

      return this. <tên thuộc tính>;

}

Ví dụ: ta sẽ tạo phương thức setter và getter cho thuộc tính age lớp Person

public class Person {
	
	public String name;
	private int age;
	public float height;
	
	public Person(String name, int age, float height) {
		this.name = name;
		this.age = age;
		this.height = height;
	}
	
	public void setAge(int age) {
		if (age>=0 && age<=100 ) {
			this.age = age;
		}
	}
	
	public int getAge() {
		return this.age;
	}
	
	public void getInfo() {
		System.out.println("Name:"+this.name);
		System.out.println("Age:"+this.age);
		System.out.println("Height:"+this.height);
	}
	
}

Vì ta đã chỉnh age sang private nên giờ chỉ có thể truy cập thông qua 2 phương thức này:

public class HelloWorld {

	public static void main(String[] args) {
		Person a = new Person("Chau", 21, 1.7f);
		System.out.println(a.getAge());
		a.setAge(22);
		System.out.println(a.getAge());
		a.setAge(-5);
		System.out.println(a.getAge());
	}
}

Theo kết quả, giá trị age cuối cùng là 22

Setter và getter trong lập trình hướng đối tượng


Chú ý

Khi đã dùng setter và getter thì thuộc tính nên để private

Vì setter và getter nhằm quản lý truy cập của thuộc tính, thì ta không nên để thuộc tính có thể truy cập dễ dàng, không nên để ở dạng public.


Hãy cẩn thận với kiểu dữ liệu tham chiếu

Ta tạo một class có thuộc tính là kiểu dữ liệu tham chiếu là một mảng như sau

public class Example {
	
	private int[] array;
	
	public void setArray (int[] array) {
		this.array = array;
	}
	
	public void displayArray() {
		for (int a : this.array) {
			System.out.print(a);
		}
		System.out.println();
	}

}

Ta hãy thử trường hợp này:

public class HelloWorld {

	public static void main(String[] args) {
		Example a = new Example();
		int[] mang = {1,2,3};
		a.setArray(mang);
		a.displayArray();
		mang[1] = 3;
		a.displayArray();
	}
}

Setter và getter trong lập trình hướng đối tượng

Như kết quả, lúc đầu ta tạo mảng mang ở chương trình main và gán nó cho thuộc tính array của lớp Example, như vậy array có giá trị là {1,2,3}. Tuy nhiêu, sau đó ta thử thay đổi giá trị một phần tử trong mang thì giá trị array cũng thay đổi theo.

Lý do khi ta gán giá trị trong kiểu dữ liệu tham chiếu, bản chất ta gán giá trị vùng bộ nhớ lưu trữ. Có nghĩa lúc này array và mang đang ánh xạ chung một đối tượng trong bộ nhớ.

Cách xử lý là tạo một bộ nhớ khác và copy giá trị đó vào. Ta sẽ dùng phương thức clone(), đây là phương thức hỗ trợ của Java, nó sẽ tạo một bản sao rồi trả bản sao đó cho đối tượng được gán.

public class Example {
	
	private int[] array;
	
	public void setArray (int[] array) {
		this.array = array.clone();
	}
	
	public void displayArray() {
		for (int a : this.array) {
			System.out.print(a);
		}
		System.out.println();
	}

}

Ta chạy thử thì kết quả thì nó hết sai:

Setter và getter trong lập trình hướng đối tượng

Cũng tương tụ cho phương thức Getter, ta cũng return về bản sao của thuộc tính đó:

public class Example {
	
	private int[] array;
	
	public void setArray (int[] array) {
		this.array = array.clone();
	}
	
	public int[] getArray() {
		return this.array.clone();
	}
	
	public void displayArray() {
		for (int a : this.array) {
			System.out.print(a);
		}
		System.out.println();
	}

}

Lưu ý: Riêng với kiểu dữ liệu String, mặc dù là kiểu dữ liệu tham chiếu. Tuy nhiên, String có cơ chế là khi thay đổi giá trị thì nó bàn chất nó đang tạo ra một đối tượng String mới. Vì vậy, như các kiểu dữ liệu nguyên thủy, bạn có thể làm phương thức getter và setter bình thường.


Tự tạo phương thức clone() cho lớp của mình

Như ở bài giải thích về hướng đối tượng, thì lớp cũng chính là kiểu dữ liệu do ta tự định nghĩa ra. Vì nó là kiểu dữ liệu tham chiếu, có những lúc lớp ta viết sẽ nằm trong tham số phương thức Getter và Setter.

Vậy ta thứ viết phương thức clone() trong lớp Person như sau:

public class Person {
	
	public String name;
	private int age;
	public float height;
	
	public Person(String name, int age, float height) {
		this.name = name;
		this.age = age;
		this.height = height;
	}
	
	public void setAge(int age) {
		if (age>=0 && age<=100 ) {
			this.age = age;
		}
	}
	
	public int getAge() {
		return this.age;
	}
	
	public Person clone() {
		Person other = new Person(this.name, this.age, this.height);
		return other;
	}
	
	public void getInfo() {
		System.out.println("Name:"+this.name);
		System.out.println("Age:"+this.age);
		System.out.println("Height:"+this.height);
	}
	
}

Kết

Như vậy chúng ta đã tìm hiểu setter và getter trong lập trình hướng đối tượng

Ở bài sau, Kteam sẽ giới thiệu đến bạn về OVERRIDING VÀ OVERLOADING TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Setter và getter trong lập trình hướng đối tượng dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả/Dịch giả

Khóa học

Lập trình Java cơ bản đến hướng đối tượng

Với mục đích giới thiệu đến mọi người về Ngôn ngữ Java -  một ngôn ngữ lập trình khá mới mẻ so với C, C++, Java, PHP ở Việt Nam.

Thông qua khóa học LẬP TRÌNH JAVA CƠ BẢN ĐẾN HƯỚNG ĐỐI TƯỢNG, Kteam sẽ hướng dẫn các bạn kiến thức cơ bản của Java. Để từ đó, có được nền tảng cho phép bạn tiếp tục tìm hiểu những kiến thức tuyệt vời khác của Java hoặc là một ngôn ngữ khác.

Cụ thể trong khóa học này, Kteam sẽ giới thiệu với các bạn Java ở phiên bản Java 8

Đánh giá

Vo Tan Duc đã đánh giá 10:12 31-12-2022

ntduong đã đánh giá 15:49 12-12-2022

chauminhtrung đã đánh giá 18:14 30-10-2022

Quốc Thịnh đã đánh giá 08:13 19-06-2019

Hay và rất bổ ích , cần thêm nhiều video hơn

ha chuong đã đánh giá 16:42 25-05-2019

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Không có video.