Chào bạn, nếu bạn là người mới tìm hiểu về lập trình Java, hẳn bạn đã từng nghe tới khái niệm về lập trình hướng đối tượng Java. Tuy nhiên, nếu bạn đang không hiểu các khái niệm về các tính chất của lập trình hướng đối tượng bao gồm tính đa hình, tính trừu tượng, tính kế thừa, và tính đóng gói trong lập trình hướng đối tượng Java thì bài viết sau đây sẽ giúp bạn hiểu rõ hơn các khái niệm thông qua các ví dụ thực tế kèm theo.
Lập trình hướng đối tượng là 1 kỹ thuật lập trình, cho phép lập trình viên trừu tượng hóa các đối tượng thực tế thành các đối tượng trong code . Anh sẽ lấy một ví dụ : Trong thực tế để quản lý 1 khách sạn thì mình có các công việc như : quản lý khách hàng ở tại khách sạn, mình có kế toán để thống kê tài chính, mình có bảo vệ. Cũng tương tự như vậy lập trình hướng đối tượng nghĩa là trong thực tế có đối tượng khách hàng thì trong lập trình mình cũng có đối tượng khách hàng Trong thực tế khách hàng có tên, tuổi, địa chỉ thì trong lập trình hướng đối tượng mình cũng có tên, tuổi, địa chỉ. Nói tóm lại hướng đối tượng là ngoài thực tế có gì thì mình ánh xạ y chang như vậy trong lập trình.
Ví dụ như anh dùng Java để viết một ứng dụng quản lý nhà hàng ở trên, thực tế có đối tượng là Khách hàng thì anh sẽ ánh xạ nó thành ngôn ngữ Java như sau.
1
2
3
4
5
class KhachHang {
private String name;
private int age;
}
Như vậy khi chương trình chạy các đối tượng đó tương tác trao đổi dữ liệu với nhau để thực thi các nghiệp vụ mà mình mong muốn. Trong thực tế mình có hàng trăm đối tượng trong một chương trình. Nhờ có lập trình hướng đối tượng mà mình có thể dễ dàng xây dựng được các ứng dụng, chức năng tương ứng với thực tế .
Bạn đã từng mua hàng online trên trang Tiki chưa ? Khi bạn click vào mua sản phẩm sau đó 1 tuần sau bạn nhận được sản phẩm của mình. Trừu tượng ở chỗ mình không biết Tiki sẽ lấy đơn hàng của mình, đóng gói ra sao và họ vận chuyển như thế nào qua các thành phố. Bạn chỉ biết là khi bấm nút mua hàng thì bạn sẽ nhận được hàng mà không cần quan tâm họ làm như thế nào để ship hàng về đúng địa chỉ. Trong lập trình cũng vậy khi bạn gọi một phương thức từ một đối tượng, bạn chỉ quan tâm giá trị (tham số) cung cấp cho phương thức và kết quả trả về của phương thức đó. Bạn không biết code thực sự bên trong phương thức đó làm gì. Trong thực tế gặp rất nhiều khi mình gọi một API từ một dịch vụ khác. Anh ví dụ như mình tích hợp chức năng login của facebook vào chương trình của mình. Mình chỉ cần nhúng thư viện facebook vào và cung cấp các tham số mà thư viện facebook cần. Mình không quan tâm các cái code viết trong thư viện đó là gì? Điều mình quan tâm là khi mình truyền đúng các tham số thì facebook sẽ trả về một giá trị tương ứng và mình dùng nó để đăng nhập vào hệ thống của mình.
Ví dụ cũng là phương thức chạy thì con gà chạy bằng 2 chân nhưng con chó chạy bằng 4 chân. Cùng một hành động chạy nhưng ở những ngữ cảnh khác nhau thì hành động khác nhau. Ví dụ như ứng dụng thanh toán điện tử mà anh đã từng tham gia. Cũng là phương thức thanh toán nhưng nếu người dùng dùng thẻ HSBC thì anh sẽ dùng thư viện HSBC để thực hiện giao dịch. Nếu người dùng muốn sử dụng thẻ Techcombank thì anh sẽ dùng thư viện Techcombank. Vậy như mọi người thấy cũng là phương thức payment nhưng nếu là ngữ cảnh khác nhau (HSBC, Techcombank) thì anh sẽ dùng thư viện thanh toán tương ứng
Ví dụ như con kế thừa tài sản của cha. Hoặc ví dụ khác như có lớp Animal có các thuộc tính tên, tuổi , và phương thức di chuyển. Nếu con chó kế thừa Animal thì nó sẽ kế thừa các thuộc tính tên , tuổi , và phương thức của lớp cha Animal. Chúng ta không cần phải khai báo lại biến tên, tuổi trong lớp con chó. Trong lúc lập trình anh sử dụng rất nhiều kế thừa vì nó giảm đi số lượng các dòng code thay vì phải khai báo đi khai báo lại một cái biến ở nhiều nơi.
Tính đóng gói hay còn gọi là che dấu dữ liệu . Đối với những dữ liệu quan trọng chúng ta không muốn cho các lớp khác truy cập và sử dụng thì ta hạn chế không cho các lớp khác truy cập vào biến hay phương thức bảo mật. Chúng ta dùng các access modifier như public , protected , private , default để che giấu các dữ liệu và không để lớp khác có thể thấy nó. Để hiểu rõ hơn mục đích các em hãy xem bài viêt Access Modifier ở đây (https://levunguyen.com/laptrinhjava/2020/04/05/phan-biet-access-modifier-trong-java/)