--- Bài mới hơn ---
Phải Làm Gì Với Chiếc Samsung J7 Pro Lỗi Cảm Ứng Của Bạn?
Khắc Phục Nhanh Samsung Galaxy J7 Pro Bị Vào Nước Cực Đơn Giản
Chức Năng Không Có Ở Prôtêin Là:
Giới Thiệu Về Thanh Ribbon Và Giao Diện Chương Trình Microsoft Word
Blog Chia Sẽ Kiến Thức Học Excel
Trong bài viết này, mình sẽ nói về các khái niệm lập trình hướng đối tượng trong Java. Bởi vì Java như là một hình mẫu lý tưởng cho triết lý lập trình hướng đối tượng.
Vậy lập trình hướng đối tượng là gì? Đó chính là một kiểu lập trình với các khái niệm như Lớp (Class), Đối tượng (Object), Kế thừa (Inheritance), tính đóng gói (Encapsulation), Trừu tượng (Abstraction), Đa hình (Polymorphism) gọi tắt là OOP.
Phần lớn các ngôn ngữ lập trình giống như Java, C++, C#, Ruby… đều theo mô hình lập trình hướng đối tượng.
Qua bài viết này, chúng ta sẽ hiểu rõ bản chất các khái niệm cốt lõi của lập trình hướng đối tượng Java qua 4 tính chất của lập trình hướng đối tượng
Nội dung chính của bài viết
#Lập trình hướng đối tượng là gì?
Lập trình hướng đối tượng hay còn gọi là lập trình OOP là kỹ thuật lập trình mà tất cả các logic, yêu cầu thực tế đều được xây dựng xoay quanh các đối tượng.
Khi sử dụng OOP, chúng ta sẽ định nghĩa các class để mô hình hóa các đối tượng thực tế. Trong ứng dụng các class sẽ được khởi tạo thành các instance. Trong suốt thời gian ứng dụng chạy, các phương thức (method) của đối tượng này sẽ được gọi.
Trong thế giới thực, đối tượng là những thực thể tồn tại có trạng thái và hành vi.
#Ưu điểm của OOP
Do lập trình hướng đối tượng ra đời sau này, nên nó kế thừa và khắc phục được những nhược điểm của các mô hình lập trình trước đó.
Với 4 tính chất OOP đặc thù của mình, có thể nói lập trình hướng đối tượng rất thích hợp cho các ứng dụng dành cho doanh nghiệp.
Mình có thể liệt kê một số ưu điểm của OOP:
- Khả năng mở rộng cao.
- Có khả năng tái sử dụng rất tốt nhờ tính kế thừa.
- Dễ quản lý code khi cần thêm tính năng.
- Dễ học, đơn giản, dễ bảo trì…
#4 Tính chất của lập trình hướng đối tượng
Chúng ta hãy bắt đầu với khái niệm đầu tiên của lập trình hướng đối tượng: Tính kế thừa
1.Tính kế thừa
Trong lập trình hướng đối tượng, các chương trình máy tính được thiết kế theo nguyên tắc là tất cả mọi thứ đều được xem là đối tượng và tương tác với những đối tượng khác.
Tính kế thừa là một khái niệm được hiểu những thuộc tính của một lớp có thể được kế thừa bởi một lớp khác. Nó giúp chúng ta có thể sử dụng lại code và thiết lập một mối quan hệ giữa các class khác nhau.
- Lớp cha còn được hiểu là Lớp siêu cấp, Lớp cơ sở (Parent class hoặc Super class hay Base class)
- Lớp con còn được hiểu Lớp phụ, Lớp dẫn xuất (Child class hoặc Sub class hoặc Derived class)
Một lớp kế thừa những thuộc tính được biết đến là một Sub class trong khi một lớp có các thuộc tính được kế thừa được gọi là Parent class.
Kế thừa được phân chia làm 4 loại:
1.1 Đơn kế thừa (Single Inheritance)
Điều này sẽ cho phép code khả năng tái sử dụng code cũng như thêm các tính năng mới vào các đoạn code hiện có.
Ở ví dụ bên dưới, Class A là lớp cha và Class B là lớp con với những thuộc tính và hành vi của lớp cha.
Trong java thì để kế thừa, đơn giản là sử dụng từ khóa extend
Class A
{
---
}
Class B extends A {
---
}
1.2.Kế thừa kiểu Đa cấp (Multilevel Inheritance)
Hãy xem sơ đồ, Class B kế thừa các thuộc tính và hành vi của class A, và class C kế thừa các thuộc tính, hành vi của Class B. Ở đây, Class A là lớp cha của Class B và Class B là lớp cha của Class C.
Trong trường hợp này, Class C ngầm kế thừa các thuộc tính và hành vi của Class A thông qua Class B. Đó chính là kế thừa kiểu Đa cấp
Cách viết kế thừa kiểu đa cấp trong java cũng tương tự như đơn kế thừa
Class A{
---
}
Class B extends A{
---
}
Class C extends B{
---
}
1.3. Kế thừa thứ bậc (Hierarchical Inheritance)
Hãy xem sơ đồ bên trên, Class B and Class C là lớp con đang kế thừa chung lớp cha là Class A.
Cùng xem cấu trúng kế thừa thứ bậc trong Java
Class A{
---
}
Class B extends A{
---
}
Class C extends A{
---
}
1.4. Kế thừa lai (Hybrid Inheritance)
Hãy xem sơ đồ trên, Class A là lớp cha của Class B và Class C. Trong khi Class B và Class C đều là lớp cha của Class D
2. Tính đóng gói (Encapsulation)
Tính đóng gói là một cơ chế liên kết dữ liệu và code chung với nhau thành một đơn vị duy nhất. Nó cũng được hiểu với mục đích che giấu dữ liệu của bạn để đảm bảo toàn vẹn dữ liệu từ những chỉnh sửa bên ngoài.
Điều này có nghĩa là gì?
Cách tốt nhất để hiểu tính đóng gói là nhìn vào viên nang y tế bên dưới. Ở đây, thuốc luôn được an toàn bên trong viên nang.
Tương tự, thông qua việc đóng gói, các phương thức và biến của một lớp cũng được ẩn và an toàn.
- Định nghĩa các biến của lớp với phạm vi là private.
- Chỉ cho phép truy cập vào các thuộc tính/biến của đối tượng thông qua hàm getter, setter.
Hãy xem đoạn code bên dưới để hiểu rõ hơn về tính đóng gói:
public class Employee {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
chúng tôi = name;
}
public static void main(String args) {
// TODO Auto-generated method stub
Audi A6 = new Audi();
A6.speedUp(50);
A6.printStates();
A6.changeGear(4);
A6.SpeedUp(100);
A6.printStates();
}
}
4. Tính đa hình (Polymorphism)
Đa hình có nghĩa là nhiều hình thức, trong đó ‘ poly‘ có nghĩa là nhiều, còn ‘ morph ‘ có nghĩa là hình thức. Đa hình có thể là một biến, một chức năng hoặc một đối tượng được đưa vào nhiều hình thức.
Nói cách khác, đa hình cho phép bạn định nghĩa một giao diện hoặc một chức năng với nhiều cách cài đặt.
Để hiểu hơn về đa hình, mình lấy ví dụ như thế này
Như bạn thấy ở hình bên trên, lớp cha BowlerClass có 3 lớp con là FastPacer, MediumPacer và Spinner.
Lớp Bower có phương thức bowlingMethod() nơi tất cả các lớp con đều kế thừa phương thức này. Như chúng ta biết, tốc độ một trái banh bánh sẽ khác so với ném trung bình và ném banh xoáy cũng như trong cách chơi và kinh nghiệm của người ném banh,..v.v..
Tương tự như vậy, việc thực hiện bowling của phương thức bowlingMethod() cũng sẽ khác so với những bowler khác. Và cũng tương tự với class spinner.
Hi vọng, qua bài viết này bạn sẽ có cái nhìn toàn diện về lập trình java cũng như lập trình hướng đối tượng. Từ đó dễ dàng tiếp cận thế giới lập trình bao la.
Chờ chút, nếu bạn muốn học lập trình Java ngay bây giờ và cần tìm một lời khuyên thì của bạn đây: Học lập trình java ở đâu tốt nhất? Có cần phải đến trung tâm học lập trình?
--- Bài cũ hơn ---
Các Tính Năng Quan Trọng Của Java
Java Là Gì? Tại Sao Nên Chọn Java?
Java Là Gì? Lợi Ích Của Việc Sử Dụng
Annotation Trong Java Là Gì Và Chức Năng Của Nó?
Lịch Sử Phát Triển Và Tính Năng Của Java