Seri Tự học lập trình Java cơ bản – B4 – 4 tính chất lập trình hướng đối tượng trong Java – Trung tâm CodeFresher – Đào tạo lập trình thực chiến

Đặc điểm, ứng dụng của 4 tính chất lập trình hướng đối tượng trong Java

Trong các phần trước của Seri Tự học lập trình Java cơ bản, chúng ta đã tìm hiểu cách cài đặt Java, làm quen và thực hành với những cú pháp cơ bản trong Java. Nội dung bài này sẽ đi sâu vào tính chất / các khái niệm của lập trình hướng đối tượng (OOP) trong Java, cụ thể là tìm hiểu và thực hành 4 tính chất lập trình hướng đối tượng trong Java: tính đóng gói, tính kế thừa, tính đa hình, tính trừu tượng. Ứng dụng của các tính chất lập trình hướng đối tượng rất quan trọng trong lập trình Java nên các bạn cố gắng chú ý theo dõi và thực hành theo nhé, nếu gặp vấn đề khó khăn bạn để lại bình luận hoặc inbox page để ad giải đáp giúp bạn nhé.

(Bài viết được lược dịch: https://stackify.com/oops-concepts-in-java/)

Định nghĩa các khái niệm (tính chất) OOP trong Java

Java là ngôn ngữ lập trình thuần hướng đối tượng (Object Oriented Programing – OOP). Các khái niệm cơ bản về OOP trong Java là abstraction (trừu tượng), encapsulation (đóng gói)inheritance (kế thừa) polymorphism (đa hình). Nắm bắt chúng là chìa khóa để hiểu cách Java hoạt động. Về cơ bản, các khái niệm OOP của Java cho phép chúng ta tạo các phương thức và biến làm việc, sau đó sử dụng lại tất cả hoặc một phần của chúng mà không ảnh hưởng đến bảo mật.

Danh sách các khái niệm OOP trong Java

Có bốn khái niệm OOP chính trong Java. Đó là:

Trừu tượng (abstraction). Trừu tượng có nghĩa là sử dụng những điều đơn giản để thể hiện sự phức tạp. Tất cả chúng ta đều biết cách bật TV, nhưng chúng ta không cần biết nó hoạt động như thế nào để thưởng thức nó. Trong Java, sự trừu tượng có nghĩa là những thứ đơn giản như các đối tượng (object) , các lớp (class) và các biến (variables) đại diện cho mã và dữ liệu cơ bản phức tạp hơn. Điều này rất quan trọng vì nó cho phép tránh lặp lại cùng một công việc nhiều lần.

Đóng gói (encapsulation). Đây là cách thực hiện giữ các trường trong một lớp riêng tư, sau đó cung cấp quyền truy cập vào chúng thông qua các phương thức công khai. Đó là một hàng rào bảo vệ giữ cho dữ liệu và mã an toàn trong chính lớp đó. Theo cách này, chúng ta có thể sử dụng lại các đối tượng như các thành phần mã hoặc biến mà không cho phép truy cập mở vào toàn hệ thống dữ liệu.

Kế thừa (inheritance). Đây là một tính năng đặc biệt của Lập trình hướng đối tượng trong Java. Nó cho phép các lập trình viên tạo các lớp mới chia sẻ một số thuộc tính của các lớp hiện có. Điều này cho phép chúng ta xây dựng trên công việc trước đây mà không cần tạo lại hoàn toàn lớp mới.

Đa hình (polymorphism). Khái niệm OOP Java này cho phép các lập trình viên sử dụng cùng một từ để chỉ những thứ khác nhau trong các ngữ cảnh khác nhau. Một dạng đa hình trong Java là nạp chồng phương thức (method overloading). Đó là khi ý nghĩa khác nhau được ngụ ý bởi chính mã. Các hình thức khác là phương pháp ghi đè (method overriding). Đó là khi các ý nghĩa khác nhau được ngụ ý bởi các giá trị của các biến được cung cấp. Xem thêm về điều này dưới đây.

Các khái niệm OOP trong Java hoạt động như thế nào

Các tính chất OOP trong Java hoạt động bằng cách cho phép các lập trình viên tạo các thành phần có thể được sử dụng lại theo các cách khác nhau, nhưng vẫn duy trì bảo mật.

Cách thức hoạt động của trừu tượng (abstraction)

Trừu tượng hóa như một khái niệm OOP trong Java hoạt động bằng cách cho
phép các lập trình viên tạo ra các công cụ hữu ích, có thể tái sử dụng. Ví dụ, một lập trình viên có thể tạo ra một số loại đối tượng khác nhau. Đây có thể là các biến, hàm hoặc cấu trúc dữ liệu. Các lập trình viên cũng có thể tạo các lớp đối tượng khác nhau. Đây là những cách để xác định các đối tượng.

Ví dụ, một lớp biến có thể là một địa chỉ. Lớp có thể chỉ định rằng mỗi đối tượng địa chỉ sẽ có một tên, đường, thành phố và mã zip. Các đối tượng, trong trường hợp này, có thể là địa chỉ nhân viên, địa chỉ khách hàng hoặc địa chỉ nhà cung cấp.

Cách đóng gói (encapsulation) hoạt động

Đóng gói cho phép chúng ta sử dụng lại chức năng mà không gây nguy hiểm cho bảo mật. Đây là một khái niệm OOP mạnh mẽ trong Java vì nó giúp chúng ta tiết kiệm rất nhiều thời gian. Ví dụ: chúng ta có thể tạo một đoạn mã gọi dữ liệu cụ thể từ cơ sở dữ liệu. Nó có thể hữu ích để sử dụng lại mã đó với các cơ sở dữ liệu hoặc quy trình khác. Đóng gói cho phép chúng ta làm điều đó trong khi giữ dữ liệu gốc của chúng ta riêng tư. Nó cũng cho phép chúng ta thay đổi mã gốc của mình mà không phá vỡ mã cho những người khác đã chấp nhận mã này trong thời gian đó.

Cách thức kế thừa (inheritance) hoạt động

Kế thừa là một khái niệm OOP Java tiết kiệm lao động khác. Nó hoạt động bằng cách để một lớp mới chấp nhận các thuộc tính của lớp khác. Chúng ta gọi lớp kế thừa là lớp con hoặc lớp dẫn xuất . Lớp ban đầu thường được gọi là lớp cha . Chúng ta sử dụng từ khóa extends để xác định một lớp mới kế thừa các thuộc tính từ một lớp cũ.

Cách thức đa hình (polymorphism) hoạt động

Tính đa hình trong Java hoạt động bằng cách sử dụng một tham chiếu đến lớp cha để ảnh hưởng đến một đối tượng trong lớp con. Chúng ta có thể tạo ra một lớp có tên là Ngựa ngựa bằng cách mở rộng lớp Thú động vật. Lớp đó cũng có thể thực hiện lớp đua xe chuyên nghiệp của người Viking.
Lớp cưỡi ngựa của người Viking là kiểu đa hình của người Viking, vì nó
thừa hưởng các thuộc tính của cả lớp động vật và trò chơi đua xe chuyên
nghiệp.

Hai ví dụ nữa về tính đa hình trong Java là ghi đè phương thức và nạp chồng phương thức.

Trong ghi đè phương thức , lớp con có thể sử dụng khái niệm đa hình OOP để ghi đè một phương thức của lớp cha của nó. Điều đó cho phép một lập trình viên sử dụng một phương thức theo nhiều cách khác nhau tùy thuộc vào việc nó được gọi bởi một đối tượng của lớp cha hay một đối tượng của lớp con.

Trong nạp chồng phương thức, một phương thức có thể thực hiện các chức năng khác nhau tùy thuộc vào ngữ cảnh mà nó được gọi. Đó là, một tên phương thức có thể hoạt động theo các cách khác nhau tùy thuộc vào các đối số được truyền cho nó.

Ví dụ về các khái niệm OOP trong Java

Hãy xem xét một vài ví dụ phổ biến về các khái niệm OOP trong Java.

Ví dụ đóng gói ngắn trong Java

Trong ví dụ dưới đây , đóng gói được thể hiện dưới dạng khái niệm OOP trong Java. Ở đây, biến “name” được giữ kín hoặc được “đóng gói”.

//save as Student.java
package com.javatpoint;
public class Student {
 private String name;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name
 }
}
//save as Test.java
package com.javatpoint;
class Test {
 public static void main(String[] args) {
  Student s = new Student();
  s.setName(“vijay”);
  System.out.println(s.getName());
 }
}
Compile By: javac -d . Test.java
Run By: java com.javatpoint.Test

Output: vijay

Ví dụ về tính kế thừa trong Java

Khá đơn giản để đạt được sự kế thừa như một khái niệm OOP trong Java. Kế thừa có thể dễ dàng như sử dụng từ khóa extends :

class Mammal {

}
class Aardvark extends Mammal {

}

Để có hướng dẫn đầy đủ về các cách khác nhau để sử dụng tính kế thừa trong java, hãy xem bài đăng trên blog này .

Ví dụ ngắn về tính đa hình trong Java

Trong ví dụ dưới đây về đa hình như một khái niệm OOP trong Java, chúng ta có hai lớp: Người và Nhân viên. Lớp Nhân viên kế thừa từ lớp Người bằng cách sử dụng từ khóa extends . Ở đây, lớp con ghi đè lên lớp cha. Để biết ví dụ đầy đủ, xem bài đăng trên blog này .

class Person {
 void walk() {
  System.out.println(“Can Run….”);
 }
}
class Employee extends Person {
 void walk() {
  System.out.println(“Running Fast…”);
 }
 public static void main(String arg[]) {
  Person p = new Employee(); //upcasting
  p.walk();
 }
}

Ghi chú: các ví dụ code trong bài viết đều có thể chạy trên bất cứ IDE lập trình Java nào ví dụ Eclipse, NetBeans.

Tổng kết

Như vậy, qua bài viết chúng ta đã tìm hiểu và thực hành được về 4 tính chất cơ bản của OOP (đóng gói, kế thừa, đa hình, trừu tượng) trong Java. Để lập trình Java thành thạo, bạn tiếp tục theo dõi các bài viết trong Seri Tự học lập trình Java cơ bản hoặc đăng ký tham gia khoá học Lập trình Java Core tại trung tâm CodeFresher.vn để được giảng viên hỗ trợ và hướng dẫn trực tiếp nhé.

-LHD-