Lập trình hướng đối tượng quá quen thuộc rồi bạn nào học lập trình đều phải học, đi phỏng vấn cũng vậy hỏi suốt(chắc cái này tùy vào vị trí tuyển dụng chủ yếu junior chắc chắn sẽ hỏi).nó là nền tảng cho hầu hết các design pattern hiện nay.Bài viết này đúc rút kinh nghiệm thực tế và độ hiểu của mình về OOP. Lập trình hướng đối tượng là một kỹ thuật lập trình cho phép lập trình viên tạo ra các đối tượng trong code để trừu tượng hóa các đối tượng thực tế trong cuộc sống.
Lập trình hướng đối tượng (OOP), khái niệm quá quen thuộc với bạn nào đi học lập trình cũng đều phải học. Đi phỏng vấn vị trí lập trình viên hoặc gần gần như vậy, người rất hay hỏi câu dạng câu “kể 4 đặc tính, tính chất OOP”. Vậy hãy tìm hiểu, tổng kết chúng và ghi nhớ thông qua bài viết này nha. Đầu tiên hâu như ai cũng trả được là tính thừa kế, đóng gói, đa hình, trừu tượng. Tuy vậy, hãy đề phòng nhưng câu hỏi sâu hơn thì sẽ được đánh giá cao hơn.
Nội dung bài viết gồm
- 1/ Tính đóng gói (encapsulation)
- 2/ Tính thừa kế (Inheritance)
- 3/ Tính đa hình (polymorphism)
- 4/ Tính trừu tượng (Abstraction)
1/ Tính đóng gói (encapsulation)
Còn được gọi với cái tên bình dân hơn là che giấu thông tin tức là trạng thái không cho phép những đối tượng khác bên ngoài truy xuất trực tiếp và thay đổi dữ liệu bên trong. Muốn làm được điều đó, đối tượng bên ngoài phải thông qua phương thức kèm với phạm vi truy cập (access modifier)
Đây là một ví dụ rõ ràng nói về việc che giấu thông tin: Bối cảnh 1 khách hàng đi mua đồ trong cửa hàng bạn, khi xuất hóa đơn một cách thật thà trong sáng thì sẽ đúng kịch bản, khách thứ 1 là có số thứ tự 1, tương tự khách 2 có số thứ tự 2, …
1234567891011121314151617 | public class Customer { private String username = “”; private int stt = 0; public Customer(String u, int stt) { this.username = u; this.stt = stt; } public int getStt() { return this.stt; } public static void main(String[] args) { Customer userA = new Customer(“UserA”, 1); System.out.println(userA.getStt()); //1, giả sử đây là lúc xuất hóa đơn }} |
Oh thế là khách biết shop mình mới mở cửa và bản thân là vị khách đầu tiên luôn @@. Vậy ít nhiều khách sẽ có ít sự tin tưởng với shop và giảm khả năng ghé lại shop lần sau nếu món hàng tương đối bình thường.
Vậy có cách nào để lưu dữ liệu vào phần mềm trung thực nhưng xuất ra số thứ tự cho khách ảo ảo tí. Vậy mình sẽ biến tấu phương thức setStt()
lại chút:
123 | public int getStt() { return this.stt + 1357;} |
Rồi thế là khách thấy mình là người thứ …
12 | Customer userA = new Customer(“UserA”, 1);System.out.println(userA.getStt()); // 1358 |
Đó là ví dụ dễ nhớ tính che giấu thông tin của lập trình hướng đối tượng, hi vọng các bạn dễ nhớ ví dụ này và xem tiếp tính chất tiếp theo nhé.
2/ Tính thừa kế (Inheritance)
Là kỹ thuật cho phép ta xây dựng nên class con mới dựa trên class cha sẵn có, class con ấy có thể mở rộng hoặc chia sẻ tính chất của class cha mà không cần phải định nghĩa lại. Công dụng là tránh lặp lại và dư thừa code chỉ xử lý tương tự.
Một ví dụ thích thú cho lập trình viên đây. Trong công ty nhân viên sẽ nhận lương x nhưng mà lập trình viên sẽ kế thừa class nhân viên
và có thêm tính chất …
123 | public class Employee { int salary = 1000;} |
còn class Programmer có nhiều tính chất hơn
12345678910 | public class Programmer extends Employee { int bonus = 200; public static void main(String[] args) { Employee emp = new Employee(); System.out.println(“Thu nhập nhân viên: “+ emp.salary); //1000 Programmer pro = new Programmer(); System.out.println(“Thu nhập lập trình viên: “+ Math.addExact(pro.salary, pro.bonus)); //1200 }} |
Vậy bạn có thể thấy class Programmer
đã dùng lại thuộc tính salary và mở rộng thêm thuộc tính bonus. Rất dễ hiểu đúng không?
3/ Tính đa hình (polymorphism)
Tính chất này thể hiện ta dùng một tác vụ theo nhiều cách khác nhau, điển hình là kỹ thuật overloading (nạp chồng phương thức) và overriding (ghi đè phương thức).
Ví dụ ngoài thực tế: “Con vật kêu” là một tác vụ nhưng con mèo kêu “meo meo” khác với cách con chó kêu “gâu gâu”. Ở ví dụ đường link trên còn có ví dụ tính chu vi các hình học khác nhau. Hình tứ giác tính khác cách với hình tam giác.
4/ Tính trừu tượng (Abstraction)
Là tính chất nêu lên những hành động, thuộc tính mà đối tượng phải có nhưng không thực hiện chi tiết. Điều nay giúp lập trình viên tập chung nhiều hơn về thiết kế mà khoan quan tâm đến cách hiện thực. Điển hình cho tính chất này là sử dụng abstract class và interface
==> Vậy là kết thúc phần 4 đặc tính của lập trình hướng đối tượng (oop) giống như các bài post trước về oop để hiểu rõ bạn cần xem lại các ví dụ và practice nhiều hơn …