Lập trình hướng đối tượng, hay OOP, là một mô hình lập trình triển khai khái niệm đối tượng trong chương trình. Nhằm mục đích cung cấp một giải pháp dễ dàng hơn cho các vấn đề trong thực tế, bằng cách triển khai các thực thể trong thế giới thực như: kế thừa, trừu tượng hóa, polymorphism, v.v.. Khái niệm OOP được sử dụng rộng rãi trong nhiều ngôn ngữ phổ biến như Java, Python, C++, v.v.

OOPs cũng là một trong những chủ đề quan trọng nhất cho các cuộc phỏng vấn technical. Vì thế, trong bài viết này VietnamWork inTECH sẽ giới thiệu đến bạn 30 câu hỏi phổ biến về OOP.

1. Lập trình hướng đối tượng (OOP) là gì?

Đây là một mô hình lập trình trong đó phần mềm hoàn chỉnh hoạt động như một nhóm các đối tượng giao tiếp với nhau. Một đối tượng là một tập hợp dữ liệu và các phương thức hoạt động trên dữ liệu đó.

2. Tại sao lại là OOP?

Ưu điểm chính của OOP là code có thể quản lý tốt hơn bao gồm:

  •  Hiển thị trực quan khi chuyển từ mô hình phân tích thực tế sang mô hình thực thi phần mềm.

  • Khả năng bảo trì và thay đổi chương trình nhanh chóng và hiệu quả.

  • Mô hình OOP chủ yếu hữu ích cho phần mềm tương đối lớn.

3. Class là gì?

Là kiểu dữ liệu do người dùng định nghĩa, có chứa các thành phần dữ liệu, và các hàm thành phần hoạt động trên các thành phần dữ liệu đó. Nó giống như một bản thiết kế hoặc khuôn mẫu của các đối tượng có các thuộc tính và phương thức chung.

4. Object là gì?

Một Object là một instance của một lớp. Các thành phần dữ liệu và phương thức của một lớp không thể được sử dụng trực tiếp. Chúng ta cần tạo một Object (hoặc instance) của class để sử dụng chúng. Nói một cách đơn giản, chúng là những thứ trong thế giới thực có trạng thái và hành vi.

Ví dụ minh họa cụ thể:

C++

#include <iostream>
using namespace std;
 
class Student{
private:
string name;
string surname;
int rollNo;
 
public:
Student(string studentName, string studentSurname, int studentRollNo){
name = studentName;
surname = studentSurname;
rollNo = studentRollNo;
}
 
void getStudentDetails(){
cout << "The name of the student is " << name << " " << surname << endl;
cout << "The roll no of the student is " << rollNo << endl;
}
};
 
int main() {
Student student1("Vivek", "Yadav", 20);
student1.getStudentDetails();
 
return 0;
}

Java

class Student{
String name;
String surname;
int rollNo;
Student(String studentName, String studentSurname, int studentRollNo){
    this.name= studentName;
    this.surname = studentSurname;
    this.rollNo= studentRollNo;
}
public void getStudentDetails(){
    System.out.println("The name of the student is "+ this.name +" "+ this.surname);
    System.out.println("The roll no of the student is "+ this.rollNo);
}
}
class OOPS{
public static void main(String args[]) {
    Student student1 = new Student("Vivek", "Yadav" , 20);
    student1.getStudentDetails();
}
}

Python3

# code
class Student:
def __init__(self, studentName, studentSurname, studentRollNo):
self.name = studentName
self.surname = studentSurname
self.rollNo = studentRollNo
 
def getStudentDetails(self):
print("The name of the student is", self.name, self.surname)
print("The roll no of the student is", self.rollNo)
 
 
student1 = Student("Vivek", "Yadav", 20)
student1.getStudentDetails()

Output

The name of the student is Vivek Yadav
The roll no of the student is 20

5. Tính năng chính của OOP là gì?

Các tính năng chính hay còn gọi là 4 trụ cột của OOP bao gồm:

  • Tính đóng gói (Encapsulation)

  • Tính kế thừa (Inheritance)

  • Tính đa hình (Polymorphism)

  • Tính trừu tượng (Abstraction)

pillars of oops

6. Tính đóng gói là gì?

Đóng gói là sự ràng buộc của dữ liệu và các phương thức, kết hợp chúng thành một đơn vị duy nhất sao cho dữ liệu nhạy cảm được ẩn khỏi người dùng. Quy trình thực hiện bao gồm:

  • Ẩn dữ liệu: Một tính năng ngôn ngữ để hạn chế quyền truy cập vào các thành phần của một đối tượng. Ví dụ, các thành phần private và protected trong C++.

  • Kết hợp dữ liệu và phương thức với nhau: Dữ liệu và phương thức hoạt động trên dữ liệu đó được kết hợp với nhau. Ví dụ: các thành phần dữ liệu và phương thức thành phần hoạt động trên chúng được bao bọc trong một đơn vị duy nhất được gọi là class.

encapsulation

7. Tính trừu tượng là gì?

Trừu tượng hóa tương tự như đóng gói dữ liệu và rất quan trọng trong OOP. Nó có nghĩa là chỉ hiển thị những thông tin cần thiết và ẩn những thông tin không liên quan khác khỏi người dùng. Trừu tượng hóa được thực hiện bằng cách sử dụng các class và giao diện.

abstraction in OOPs

8. Tính đa hình là gì?

Từ “ Đa hình ” có nghĩa là có nhiều dạng. Đó là thuộc tính của một số code để xử lý vấn đề khác nhau đối với các ngữ cảnh khác nhau. Ví dụ, trong ngôn ngữ C++, chúng ta có thể định nghĩa nhiều hàm có tên giống nhau nhưng hoạt động khác nhau tùy thuộc vào ngữ cảnh.

Đa hình có thể được phân thành hai loại:

  • Dựa trên thời gian khi call (giao tiếp) đến đối tượng 

  • Theo Chức năng được giải quyết. 

9. Kế thừa là gì? Mục đích của nó

Kế thừa có thể được định nghĩa là quá trình mà một lớp (class) có được các thuộc tính của một lớp khác. Các thuộc tính đó có thể là một phương thức (method) hoặc một trường (field) nào đó. Lớp được kế thừa sẽ được gọi chung là lớp cha, còn lớp kế thừa sẽ được gọi chung là lớp con.

Ý tưởng nảy sinh của Tính kế thừa chính là những mối quan hệ trong đời sống. Chẳng hạn như “chó đốm” và “chó sói” đều là hai lớp con thuộc lớp cha là “chó”. Do đó, cả hai lớp con này đều thừa hưởng được những đặc điểm của lớp cha.

Mục đích chính của Kế thừa là tăng khả năng tái sử dụng lại code. Nó cũng được sử dụng để đạt được tính đa hình trong thời gian chạy.

10. Access Specifier là gì? Tầm quan trọng của chúng trong OOP là gì?

Access Specifier là các loại từ khóa đặc biệt được sử dụng để chỉ định hoặc kiểm soát khả năng truy cập của các thực thể như class, phương thức, v.v

Private, Public và Protected là những ví dụ về access specifier hoặc access modifiers.

Các thành phần chính của OOP, đóng gói và ẩn dữ liệu phần lớn hoạt động được là nhờ các access specifier này.

11. Ưu điểm và nhược điểm của OOP là gì?

Ưu điểm của OOP

Nhược điểm của OOP

Có khả năng tái sử dụng code

Lập trình viên phải có kỹ năng tốt và phải có tư duy xuất sắc về đối tượng vì mọi thứ đều được coi là đối tượng trong OOP.

Dễ bảo trì và cập nhật

Cần lập kế hoạch phù hợp vì OOP hơi phức tạp một chút.

Cung cấp bảo mật dữ liệu tốt hơn bằng cách hạn chế quyền truy cập dữ liệu và tránh tiếp xúc không cần thiết.

OOP không phù hợp với mọi dự án.

Nhanh chóng thực hiện và dễ dàng thiết kế lại dẫn đến giảm thiểu sự phức tạp của một chương trình tổng thể.

 

12. Có những mô hình lập trình nào khác ngoài OOP?

Các mô hình lập trình có thể được phân thành các loại sau:

Mô hình lập trình mệnh lệnh ( Imperative Programming Paradigm): Đó là một mô hình lập trình hoạt động bằng cách thay đổi trạng thái chương trình thông qua các câu lệnh gán. Trọng tâm chính trong mô hình này là làm thế nào để đạt được mục tiêu, bao gồm:

  • Mô hình lập trình thủ tục 

  • Lập trình hướng đối tượng hoặc OOP 

  • Lập trình song song 

Mô hình lập trình khai báo (Declarative Programming Paradigm): Lập trình khai báo tập trung vào những gì sẽ được thực thi hơn là cách nó nên được thực thi. Trong mô hình này, chúng thể hiện logic của tính toán mà không cần xem xét luồng điều khiển của nó, mô hình này bao gồm:

  • Mô hình lập trình logic

  • Mô hình lập trình hàm

  • Mô hình lập trình cơ sở dữ liệu

13. Sự khác biệt giữa Lập trình cấu trúc (Structured Programming) và Lập trình hướng đối tượng (OOP) là gì?

Lập trình cấu trúc là một kỹ thuật được coi là tiền thân của OOP và thường bao gồm các mô-đun được cấu trúc tốt và tách biệt. Nó là một tập hợp con của lập trình thủ tục (procedural programming). Sự khác biệt giữa OOP và Lập trình có cấu trúc như sau:

Lập trình hướng đối tượng

Lập trình cấu trúc

Được xây dựng trên các đối tượng có trạng thái và hành vi.

Được cung cấp bởi lập trình cấu trúc, phân chia chương trình thành các chức năng tương ứng của chúng.

Tuân theo cách tiếp cận từ dưới lên trên.

Tuân theo cách tiếp cận từ trên xuống.

Hạn chế luồng dữ liệu mở đối với các bộ phận được ủy quyền, mang lại khả năng bảo mật dữ liệu tốt hơn.

Không hạn chế luồng dữ liệu. Bất cứ ai cũng có thể truy cập dữ liệu.



Tăng cường khả năng tái sử dụng code do các khái niệm về đa hình và kế thừa.

Tái sử dụng code bằng cách sử dụng các hàm và vòng lặp.

Sửa đổi và cập nhật code dễ dàng hơn.

Sửa đổi code khó hơn so với OOP

Dữ liệu được coi trọng hơn trong OOP.

Code được coi trọng hơn

14. Một số ngôn ngữ lập trình hướng đối tượng thường được sử dụng là gì?

Mô hình OOP là một trong những mô hình lập trình phổ biến nhất. Nó được sử dụng rộng rãi trong nhiều ngôn ngữ lập trình phổ biến như:

  • C++

  • Java

  • Python

  • Javascript

  • C#

  • Ruby

15. Các loại Đa hình khác nhau là gì?

Đa hình có thể được phân thành hai loại dựa trên thời gian khi call (giao tiếp) đến đối tượng hoặc chức năng được giải quyết, gồm:

  • Đa hình thời gian biên dịch (Compile Time Polymorphism)

  • Đa hình thời gian chạy (Runtime Polymorphism)

Trên đây là tổng hợp 15 câu hỏi về chủ đề OOP thường được hỏi khi phỏng vấn. Hãy cùng chờ đón phần 2 với những câu hỏi thú vị hơn nhé!

VietnamWorks inTECH