Object-oriented-programming-concept

Khái niệm OOPS trong Java – Ví dụ về khái niệm OOPS

Các khái niệm về lập trình hướng đối tượng rất quan trọng đối với lập trình. Nếu không có ý tưởng về các khái niệm OOPS, bạn sẽ không thể thiết kế hệ thống theo mô hình lập trình hướng đối tượng.

Mô hình lập trình hướng đối tượng là gì?

Đối tượng là gì?

Một đối tượng là một thể hiện của một Class. Nó chứa các thuộc tính và chức năng. Chúng giống như những vật thể trong thế giới thực. Ví dụ, xe hơi, nhà cửa, máy tính xách tay, v.v. của bạn đều là đồ vật. Chúng có một số thuộc tính và phương thức cụ thể để thực hiện một số hành động.

LUYỆN THI CHỨNG CHỈ OCA

Class là gì?

Class xác định bản thiết kế của các Đối tượng. Chúng xác định các thuộc tính và chức năng của các đối tượng. Ví dụ: Máy tính xách tay là Class và máy tính xách tay của bạn là một ví dụ của nó.

Khái niệm OOPS

1. Trừu tượng

Trừu tượng có nghĩ là tổng quát hóa một cái gì đó lên, không cần chú ý chi tiết bên trong. Nó không màng đến chi tiết bên trong là gì và người ta vẫn hiểu nó mỗi khi nghe về nó.

Ví dụ: Bạn chạy xe tay ga thì có hành động là tăng ga để tăng tốc, thì chức năng tăng ga là đại diện cho trừu tượng (abstraction). Người dùng chỉ cần biết là tăng ga thì xe tăng tốc, không cần biết bên trong nó làm thế nào.

Ở đây trong lập trình OOP, tính trừu tượng nghĩa là chọn ra các thuộc tính, phương thức của đối tượng cần cho việc giải quyết bài toán đang lập trình. Vì một đối tượng có rất nhiều thuộc tính phương thức, nhưng với bài toán cụ thể không nhất thiết phải chọn tất cả.

Ví dụ: Bài toán quản lý sinh viên chúng ta chỉ cần quản lý các thông tin như

  • Họ tên
  • Ngày sinh
  • Giới tính
  • Điểm thi

mà lại không cần quản lý thêm các thông tin:

  • Màu tóc
  • Sở thích
  • Chiều cao

Tại vì chúng thực sự không cần thiết.

2. Đóng gói

Chú ý:

  • Các dữ liệu và phương thức có liên quan với nhau được đóng gói thành các lớp để tiện cho việc quản lý và sử dụng. Tức là mỗi lớp được xây dựng để thực hiện một nhóm chức năng đặc trưng của riêng lớp đó.
  •  Ngoài ra, đóng gói còn để che giấu một số thông tin và chi tiết cài đặt nội bộ để bên ngoài không thể nhìn thấy.

Nói chung trạng thái đối tượng không hợp lệ thường do: chưa được kiểm tra tính hợp lệ, các bước thực hiện không đúng trình tự hoặc bị bỏ qua nên trong OOP có một quy tắc quan trọng cần nhớ đó là phải luôn khai báo các trạng thái bên trong của đối tượng là private và chỉ cho truy cập qua các public/protected method/property.

Ví dụ: ta thấy một viên thuốc chữa cảm. Chúng ta chỉ biết nó chữa cảm sổ mũi nhức đầu và một số thành phần chính, còn cụ thể bên trong nó có những hoạt chất gì thì hoàn toàn

3. Đa hình

Tính đa hình là một hành động có thể được thực hiện bằng nhiều cách khác nhau. Đây lại là một tính chất có thể nói là chứa đựng hầu hết sức mạnh của lập trình hướng đối tượng.

Hiểu một cách đơn giản hơn: Đa hình là khái niệm mà hai hoặc nhiều lớp có những phương thức giống nhau nhưng có thể thực thi theo những cách thức khác nhau.

public class Circle {

	public void draw(){
		System.out.println("Drwaing circle with default color Black and diameter 1 cm.");
	}
	
	public void draw(int diameter){
		System.out.println("Drwaing circle with default color Black and diameter"+diameter+" cm.");
	}
	
	public void draw(int diameter, String color){
		System.out.println("Drwaing circle with color"+color+" and diameter"+diameter+" cm.");
	}
}Code language: JavaScript (javascript)

Ở đây chúng ta có nhiều phương pháp draw() nhưng chúng có hành vi khác nhau. Đây là trường hợp nạp chồng phương thức vì tất cả các tên phương thức đều giống nhau và các đối số khác nhau. Ở đây trình biên dịch sẽ có thể xác định phương thức để gọi tại thời điểm biên dịch, do đó nó được gọi là đa hình thời gian biên dịch.

Tính đa hình runtime thực hiện khi chúng ta có mối quan hệ “IS-A” giữa các đối tượng. Đây còn được gọi là phương thức ghi đè phương thức vì lớp con phải ghi đè phương thức lớp cha để đa hình runtime.

public interface Shape {

	public void draw();
}Code language: PHP (php)
public class Circle implements Shape{

	@Override
	public void draw(){
		System.out.println("Drwaing circle");
	}

}Code language: PHP (php)
public class Square implements Shape {

	@Override
	public void draw() {
		System.out.println("Drawing Square");
	}

}Code language: PHP (php)

Shape là lớp cha và có hai lớp con là Circle và Square. Dưới đây là một ví dụ về tính đa hình runtime.

Shape sh = new Circle();
sh.draw();

Shape sh1 = getShape(); //some third party logic to determine shape
sh1.draw();Code language: JavaScript (javascript)

Trong các ví dụ trên, trình biên dịch java không biết lớp triển khai thực tế của Shape sẽ được sử dụng trong runtime, do đó đa hình runtime.

4. Kế thừa

Nó cho phép xây dựng một lớp mới dựa trên các định nghĩa của lớp đã có. Có nghĩa là lớp cha có thể chia sẽ dữ liệu và phương thức cho các lớp con. Các lớp con khỏi phải định nghĩa lại, ngoài ra có thể mở rộng các thành phần kế thừa và bổ sung thêm các thành phần mới. Tái sử dụng mã nguồn 1 cách tối ưu, tận dụng được mã nguồn. Một số loại kế loại kế thừa thường gặp: đơn kế thừa, đa kế thừa, kế thừa đa cấp, kế thừa thứ bậc.

Khi bắt đầu xây dựng ứng dụng chúng ta sẽ bắt đầu thiết kế định nghĩa các lớp trước. Thông thường một số lớp có quan hệ với những lớp khác, chúng có những đặc tính giống nhau.

Top những IDE lập trình Java tốt nhất

Chúng tôi sử dụng từ khóa extends trong java để triển khai kế thừa. Dưới đây là một ví dụ đơn giản về kế thừa trong java.

class SuperClassA {

	public void foo(){
		System.out.println("SuperClassA");
	}
	
}

class SubClassB extends SuperClassA{
		
	public void bar(){
		System.out.println("SubClassB");
	}
	
}

public class Test {
	public static void main(String args[]){
		SubClassB a = new SubClassB();
		
		a.foo();
		a.bar();
	}
}Code language: JavaScript (javascript)

Các ưu điểm của lập trình hướng đối tượng

  • Dựa trên nguyên lý kế thừa, trong quá trình mô tả các lớp có thể loại bỏ những chương trình bị lặp, dư. Và có thể mở rộng khả năng sử dụng các lớp mà không cần thực hiện lại. Tối ưu và tái sử dụng code hiệu quả.
  • Đảm bảo rút ngắn thời gian xây dựng hệ thống và tăng năng suất thực hiện.
  • Sự xuất hiện của 2 khái niệm mới là lớp và đối tượng chính là đặc trưng của phương pháp lập trình hướng đối tượng. Nó đã giải quyết được các khuyết điểm của phương pháp lập trình hướng cấu trúc để lại. Ngoài ra 2 khái niệm này đã giúp biểu diễn tốt hơn thế giới thực trên máy tính.

Trên đây là một số khái niệm về OOPS. Bạn đọc có thắc mắc gì thì hãy comment nhé. Happy learning!!!

HỌC JAVA CORE

Bài viết liên quan

Leave a Reply

Your email address will not be published.

TÀI LIỆU DEV WORLD
Cẩm nang phát triển bền vững với nghề lập trình!