Đóng gói trong Java - Làm thế nào để nắm vững các OOP với tính năng Đóng gói?



Bài viết về Đóng gói trong Java này sẽ giúp bạn hiểu các khái niệm cốt lõi về ẩn các chi tiết triển khai cùng với các ví dụ đơn giản khác nhau.

Lập trình hướng đối tượng hay còn gọi là OOP là một trong những trụ cột chính của Java đã tận dụng được sức mạnh và tính dễ sử dụng của nó. Để trở thành một nhà phát triển Java chuyên nghiệp, bạn phải có quyền kiểm soát hoàn hảo đối với các giống , Trừu tượng , Đóng gói và Đa hình. Thông qua phương tiện của bài viết này, tôi sẽ cung cấp cho bạn cái nhìn toàn diện về một trong những khái niệm quan trọng nhất của OOP, tức là Đóng gói trong Java và cách đạt được nó.

Dưới đây là các chủ đề, tôi sẽ thảo luận trong bài viết này:





Bạn cũng có thể xem qua bản ghi này của nơi bạn có thể hiểu các chủ đề một cách chi tiết với các ví dụ.



chuỗi công khai tostring ()

Giới thiệu về đóng gói

Đóng gói là gói dữ liệu dưới một đơn vị duy nhất. Đó là cơ chế liên kết mã và dữ liệu mà nó thao tác. Một cách khác để nghĩ về tính đóng gói là, nó là một lá chắn bảo vệ ngăn không cho dữ liệu được truy cập bởi mã bên ngoài lá chắn này. Trong đó, các biến hoặc dữ liệu của một được ẩn khỏi bất kỳ lớp nào khác và chỉ có thể được truy cập thông qua bất kỳ hàm thành viên nào của lớp riêng mà chúng được khai báo.

Bây giờ, hãy lấy ví dụ về viên nang y tế, nơi thuốc luôn an toàn bên trong viên nang. Tương tự, thông qua tính năng đóng gói, các phương thức và biến của một lớp được ẩn và an toàn.



Đóng gói -Encapsulation trong Java-EdurekaViệc đóng gói trong Java có thể đạt được bằng cách:

  • Khai báo các biến của một lớp là private.
  • Cung cấp các phương thức setter và getter công khai để sửa đổi và xem các giá trị của biến.

Bây giờ, hãy xem mã để hiểu rõ hơn về đóng gói:

public class Student {private String name public String getName () {return name} public void setName (String name) {this.name = name}} class Test {public static void main (String [] args) {Student s = new Student () s.setName ('Harry Potter') System.out.println (s.getName ())}}

Như bạn có thể thấy trong đoạn mã trên, tôi đã tạo một lớp Học sinh có Tên . Tiếp theo, tôi đã tạo getter and setter để lấy và đặt tên của một học sinh. Với sự trợ giúp của các phương thức này, bất kỳ lớp nào muốn truy cập vào biến tên đều phải thực hiện bằng cách sử dụng các phương thức getter và setter này.

Bây giờ chúng ta hãy xem thêm một ví dụ và hiểu sâu hơn về Tính đóng gói. Trong ví dụ này, lớp Xe có hai trường –name và topSpeed. Ở đây, cả hai đều được khai báo là private, có nghĩa là chúng không thể được truy cập trực tiếp bên ngoài lớp. Chúng tôi có một số phương thức getter và setter như getName, setName, setTopSpeed, v.v. và chúng được khai báo là công khai. Các phương pháp này được tiếp xúc với “người ngoài” và có thể được sử dụng để thay đổi và truy xuất dữ liệu từ đối tượng Xe. Chúng tôi có một phương pháp để đặt tốc độ tối đa của xe và hai phương pháp lấy tốc độ để truy xuất giá trị tốc độ tối đa theo MPH hoặc KMHt. Về cơ bản, đây là những gì đóng gói - nó ẩn việc triển khai và cung cấp cho chúng ta các giá trị mà chúng ta muốn. Bây giờ, hãy xem đoạn mã bên dưới.

package Edureka public class Car {private String name private double topSpeed ​​public Car () {} public String getName () {return name} public void setName (String name) {this.name = name} public void setTopSpeed ​​(double speedMPH) {topSpeed = speedMPH} public double getTopSpeedMPH () {return topSpeed} public double getTopSpeedKMH () {return topSpeed ​​* 1.609344}}

Ở đây, chương trình chính tạo một đối tượng Car với một tên đã cho và sử dụng phương thức setter để lưu trữ tốc độ cao nhất cho trường hợp này. Bằng cách này, chúng tôi có thể dễ dàng nhận được tốc độ theo MPH hoặc KMH mà không cần quan tâm đến cách chuyển đổi tốc độ trong hạng Xe.

package Edureka public class Ví dụ {public static void main (String args []) Car car = new Car () car.setName ('Mustang GT 4,8 lít V8') car.setTopSpeed ​​(201) System.out.println (car. getName () + 'tốc độ tối đa trong MPH là' + car.getTopSpeedMPH ()) System.out.println (car.getName () + 'tốc độ tối đa trong KMH là' + car.getTopSpeedKMH ())

So, đây là cách Encapsulation có thể đạt được trong Java. Bây giờ, hãy tiến xa hơn và xem tại sao chúng ta cần Encapsulation.

Tại sao chúng ta cần Encapsulation trong Java?

Đóng gói là điều cần thiết trong Java vì:

  • Nó kiểm soát cách thức truy cập dữ liệu
  • Sửa đổi mã dựa trên các điều kiện cần thiết
  • Giúp chúng tôi đạt được một cặp đôi lỏng lẻo
  • Đạt được sự đơn giản của ứng dụng của chúng tôi
  • Nó cũng cho phép bạn thay đổi một phần của mã mà không làm gián đoạn bất kỳ chức năng hoặc mã nào khác có trong chương trình

Bây giờ, hãy xem xét một ví dụ nhỏ minh họa nhu cầu đóng gói.

class Student {int id String name} public class Demo {public static void main (String [] args) {Student s = new Student () s.id = 0 s.name = '' s.name = null}}

Trong ví dụ trên, nó chứa hai biến thể hiện làm công cụ sửa đổi quyền truy cập. Vì vậy, bất kỳ lớp nào trong cùng một gói có thể gán và thay đổi giá trị của các biến đó bằng cách tạo một đối tượng của lớp đó. Do đó, chúng tôi không có quyền kiểm soát các giá trị được lưu trữ trong lớp Sinh viên dưới dạng các biến. Để giải quyết vấn đề này, chúng tôi đóng gói lớp Sinh viên.

Vì vậy, đây là một vài gợi ý mô tả sự cần thiết của Encapsulation. Bây giờ, chúng ta hãy xem một số lợi ích của việc đóng gói.

Lợi ích của việc đóng gói

    • Ẩn dữ liệu: Ở đây, người dùng sẽ không biết gì về việc triển khai bên trong của lớp. Thậm chí người dùng sẽ không nhận thức được cách lớp đang lưu trữ các giá trị trong các biến. Anh ấy / cô ấy sẽ chỉ biết rằng chúng tôi đang chuyển các giá trị đến một phương thức setter và các biến đang được khởi tạo với giá trị đó.
    • Tăng tính linh hoạt: Ở đây, chúng ta có thể đặt các biến của lớp dưới dạng chỉ đọc hoặc chỉ ghi tùy thuộc vào yêu cầu của chúng ta. Trong trường hợp bạn muốn đặt các biến ở dạng chỉ đọc thì chúng ta phải bỏ qua các phương thức setter như setName (),độ tuổi() vv hoặc nếu chúng ta muốn tạo các biến ở dạng chỉ ghi thì chúng ta phải bỏ qua các phương thức get như getName (), getAge (), v.v. từ chương trình trên.
    • Khả năng tái sử dụng: Nó cũng cải thiện khả năng tái sử dụng và dễ dàng thay đổi theo yêu cầu mới.

Bây giờ chúng ta đã hiểu các nguyên tắc cơ bản về tính đóng gói, hãy đi sâu vào chủ đề cuối cùng của bài viết này và hiểu chi tiết về tính năng Đóng gói với sự trợ giúp của ví dụ thời gian thực.

Một ví dụ thời gian thực về đóng gói

Hãy xem xét một ví dụ về truyền hình và hiểu cách các chi tiết triển khai nội bộ bị ẩn với lớp bên ngoài.Về cơ bản, trong ví dụ này, chúng ta đang che giấu dữ liệu mã bên trong, tức là các mạch khỏi thế giới bên ngoài bằng vỏ bọc. Bây giờ trong , điều này có thể đạt được với sự trợ giúp của các công cụ sửa đổi quyền truy cập. Công cụ sửa đổi quyền truy cập đặt quyền truy cập hoặc cấp của một lớp, các biến hàm tạo, v.v. Như bạn có thể thấy trong đoạn mã dưới đây, tôi đã sử dụng công cụ sửa đổi truy cập riêng tư để hạn chế cấp độ truy cập của lớp. Các biến được khai báo là riêng tư chỉ có thể truy cập được trong lớp Tivi.

public class Tivi {private double width private double height private double Screensize private int maxVolume print int volume private boolean power public Tivi (double width, double height, double screenSize) {this.width this.height this.screenSize = ScreenSize} kênh đôi công cộngTuning (int channel) {switch (channel) {case1: return 34,56 case2: return 54,89 case3: return 73,89 case1: return 94,98} return 0} public int ReduceVolume () {if (0volume) volume ++ return volume}} class test {public static void main (String args []) {Tivi t = new Tivi (11,5,7,9) t.powerSwitch () t.channelTuning (2) t.decreaseVolume () t.increaseVolume () tivi. // Ném lỗi vì biến là riêng tư và không thể truy cập bên ngoài lớp}}

Trong ví dụ trên, tôi đã khai báo tất cả các biến là private và các phương thức, hàm tạo và lớp là public. Tại đây, các hàm tạo, các phương thức có thể được truy cập bên ngoài lớp. Khi tôi tạomột đối tượngcủa lớp Tivi, nó có thể truy cập các phương thức và hàm tạo có trong lớp, trong khi các biến được khai báo với công cụ sửa đổi quyền truy cập riêng bị ẩn. Đó là lý do tại sao khi bạn cố gắng truy cập biến chiều rộng trong ví dụ trên, nó némmột lỗi. Đó là cách ẩn chi tiết triển khai nội bộ khỏi các lớp khác. Đây là cách Encapsulation đạt được trong Java.

hoạt cảnh kết hợp hai nguồn dữ liệu

Chúng ta đến phần cuối của bài viết này về “Đóng gói trong Java”. Hy vọng, bạn thấy nó có nhiều thông tin và nó giúp tăng thêm giá trị cho kiến ​​thức của bạn. Nếu bạn muốn tìm hiểu thêm về Java, bạn có thể tham khảo

Bây giờ bạn đã hiểu “Đóng gói trong Java là gì”, hãy xem của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo và cấp chứng chỉ về Java J2EE và SOA của Edureka được thiết kế cho sinh viên và các chuyên gia muốn trở thành Nhà phát triển Java. Khóa học được thiết kế để cung cấp cho bạn khởi đầu về lập trình Java và đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung Java khác nhau như Hibernate & Spring.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến vấn đề này trong phần nhận xét của blog “Đóng gói trong Java” này và chúng tôi sẽ liên hệ lại với bạn sớm nhất có thể.