Ví dụ Đóng gói (Encapsulation) trong Lập trình Java OOP

Ngày đăng: 14/05/2019   -    Cập nhật: 14/05/2019

Lập trình hướng đối tướng có nhiều concept, trong đó Đóng gói (Encapsulation) là một khái niệm cực kỳ quan trọng.

Hôm nay mình sẽ giới thiệu với bạn về Đóng gói trong lập trình Java hướng đối tượng bằng ví dụ cụ thể.


Ví dụ về Đóng gói (Encapsulation) trong Java OOP

Ví dụ về Đóng gói (Encapsulation) trong Java OOP

Trong bài học này bạn sẽ được học:

  1. Đóng gói trong Java là gì? 
  2. Ví dụ về Đóng gói trong Java 
  3. Ẩn dữ liệu trong Java 
  4. Các phương thức Getter và Setter trong Java 
  5. Trừu tượng so với Đóng gói 
  6. Ưu điểm của đóng gói trong Java

1. Đóng gói (Encapsulation) là gì trong Java?

Đóng gói là một nguyên tắc đóng gói dữ liệu (biến) và với nhau dưới dạng một đơn vị. Đây là một trong bốn khái niệm OOP. Ba cái còn lại là Kế thừa, Đa hình và Trừu tượng.

2. Ví dụ về Đóng gói trong Java qua cách Hack tài khoản Ngân hàng

Cách học nhanh nhất là học qua ví dụ thực tế. Và để hiểu chi tiết đóng gói là gì, mình sẽ thử hack tài khoản ngân hàng:

Trước tiên, tài khoản ngân hàng đơn giản được mô phỏng bằng class Account sau với phương thức tiền gửi và hiển thị số dư.
            
        

Giả sử mình định Hack tài khoản ngân hàng này, mình sẽ cố gắng để có quyền truy cập vào mã tài khoản ngân hàng.

Bây giờ, mình thử cố gắng trừ 100 đồng ở tài khoản này bằng hai cách. Hãy cùng xem cách làm này như thế nào nhé:


  • Cách tiếp cận 1: Mình cố gắng thực hiện một lệnh không hợp lệ (giả sử -100 đồng) vào tài khoản ngân hàng này bằng cách thao túng code như sau:
            
        

Bây giờ, câu hỏi là - Cách này có thể thành công không? Hãy thử kiểm tra xem:

Thông thường, một biến trong một lớp được đặt là 'private' như hình bên dưới. Nó chỉ có thể được truy cập với các phương thức được định nghĩa trong class đó. Không có class hoặc đối tượng nào khác có thể truy cập vào chúng.

Ví dụ về Encapsulation trong Java OOP: Chức năng của private

Ví dụ về Encapsulation trong Java OOP: Chức năng của private


 

Nếu một data member là private, điều đó có nghĩa là nó chỉ có thể được truy cập trong cùng một class. Không có class bên ngoài có thể truy cập private data member hoặc biến của class khác. 

Vì vậy, trong trường hợp giả định này, mình không thể trừ -100 đồng ở tài khoản của ngân hàng này.


  • Cách thứ 2: Cách tiếp cận đầu tiên của mình nhằm cố gắng trừ tiền nhưng không thể, thế nên tiếp theo, mình sẽ thử trừ 100 đồng bằng cách sử dụng phương thức 'deposit'.
            
        

Nhưng trong class Account ban đầu có kiểm tra các giá trị âm. Vì vậy, cách thứ hai cũng lại thất bại.
Ví dụ về Encapsulation trong Java OOP: Kiểm tra giá trị âm

Ví dụ về Encapsulation trong Java OOP: Kiểm tra giá trị âm

Do đó, tài khoản ngân hàng này không bị lộ dữ liệu của nó ra bên ngoài. Chính vì thế, điều này làm cho tài khoản ngân hàng này trở nên an toàn.

Ví dụ về Encapsulation trong Java OOP: Ứng dụng an toàn nhờ Đóng gói

Ví dụ về Encapsulation trong Java OOP: Ứng dụng an toàn nhờ Đóng gói

Toàn bộ mã có thể được coi là một viên nang (là kiểu dạng thuốc viên nang đó) và bạn chỉ có thể giao tiếp qua các tin nhắn. Chính vì thế nó có tên là Đóng gói (Encapsulation).

3. Ẩn dữ liệu trong Java

Thông thường, Java Encapsulation được gọi là ẩn dữ liệu (data hiding). Nhưng hơn cả việc ẩn dữ liệu, khái niệm Encapsulation có nghĩa là để quản lý tốt hơn hoặc nhóm các dữ liệu liên quan lại với nhau.

Để giảm mức độ đóng gói trong Java, bạn có thể sử dụng 'protected' hoặc 'public'.

Thêm nữa, với việc đóng gói, các lập trình viên Java có thể dễ dàng thay đổi một phần của mã mà không ảnh hưởng đến phần khác.

4. Phương thức Getter và Setter trong Java

Nếu một data member được khai báo là 'private', thì nó chỉ có thể được truy cập trong cùng một class. Không có class bên ngoài nào có thể truy cập data member của class đó.

Nếu bạn cần truy cập các biến này, bạn phải sử dụng các phương thức public 'getter' và 'setter'.

Các phương thức của Getter và Setter được sử dụng để tạo, sửa đổi, xóa và xem các giá trị biến.

Ví dụ về phương thức Getter và Setter trong lập trình Java:



            
        

Trong ví dụ trên:

  • Phương thức getBalance() là phương thức getter đọc giá trị của biến account_balance
  • Phương thức setNumber () là phương thức setter đặt hoặc cập nhật giá trị cho biến account_number

5. Trừu tượng so với đóng gói trong Java

Thông thường, Đóng gói hay bị hiểu nhầm với Trừu tượng.
  • Encapsulation nói về 'Làm thế nào' để làm được chức năng đó
  • Trừu tượng thì là 'Cái gì' mà một class có thể làm.

Một ví dụ đơn giản để hiểu sự khác biệt này là điện thoại di động.

Trong đó, logic phức tạp bên trong bảng mạch được gói gọn trong màn hình cảm ứng và giao diện được cung cấp để trừu tượng hóa nó ra cho người dùng.

6. Ưu điểm của Đóng gói trong Java

Đóng gói là một trong 4 khái niệm quan trọng trong lập trình hướng đối tượng Java. Nó được tạo ra là có mục đích, vì vậy nó có ưu điểm như là:

  • Đóng gói là ràng buộc dữ liệu với các chức năng liên quan của nó. Ở đây các chức năng có nghĩa là 'phương thức' và dữ liệu có nghĩa là 'biến'


  • Vì vậy, chúng ta giữ biến và phương thức ở một nơi. Nơi đó là 'class'. Class là cơ sở để đóng gói. 


  • Với việc Đóng gói trong Java, bạn có thể ẩn (hạn chế quyền truy cập) dữ liệu quan trọng trong mã của mình, điều này giúp cải thiện khả năng bảo mật. 


  • Như chúng ta đã nói ở trên, nếu một data member được khai báo là 'private' thì chỉ có thể truy cập trong cùng một class. Không có class bên ngoài có thể truy cập thành viên dữ liệu (biến) của lớp khác. 


  • Tuy nhiên, nếu bạn cần truy cập các biến này, bạn phải sử dụng các phương thức public 'getter' và 'setter'.

Ok, như vậy là qua ví dụ Hack tài khoản ngân hàng về Đóng gói (Encapsulation) trong lập trình java hướng đối tượng bạn cũng đã hiểu sơ qua về Đóng gói. Như vậy là được rồi.

Chúng ta sẽ tiếp xúc và tìm hiểu kỹ hơn trong các bài học tiếp theo.

>>> Hoặc bạn có thể đăng ký tham gia ngay Lớp học lập trình Java để được hướng dẫn đầy đủ hơn về Encapsulation.


Bình luận Facebook
Cùng danh mục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!