Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Lập Trình Hướng Đối Tượng bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Trong lập trình hướng đối tượng, khái niệm nào sau đây thể hiện khả năng một đối tượng thuộc lớp con có thể hành xử khác so với đối tượng thuộc lớp cha khi được gọi cùng một phương thức?
- A. Tính đóng gói (Encapsulation)
- B. Tính trừu tượng (Abstraction)
- C. Tính đa hình (Polymorphism)
- D. Tính kế thừa (Inheritance)
Câu 2: Điều gì KHÔNG phải là lợi ích chính của việc sử dụng lập trình hướng đối tượng?
- A. Tăng khả năng tái sử dụng mã nguồn
- B. Giảm độ phức tạp trong quản lý dự án lớn
- C. Dễ dàng bảo trì và mở rộng hệ thống
- D. Tăng tốc độ thực thi chương trình so với lập trình hướng thủ tục
Câu 3: Trong OOP, "tính đóng gói" (encapsulation) đạt được chủ yếu thông qua cơ chế nào?
- A. Sử dụng hàm và thủ tục
- B. Sử dụng các từ khóa kiểm soát truy cập (access modifiers)
- C. Phân chia chương trình thành các module
- D. Áp dụng cấu trúc dữ liệu trừu tượng
Câu 4: Cho đoạn code Python sau:
```python
class DongVat:
def __init__(self, ten):
self.ten = ten
def tieng_keu(self):
return
- A. Tính đóng gói
- B. Tính trừu tượng
- C. Tính đa hình
- D. Tính kế thừa
Câu 5: "Lớp" (class) trong OOP có vai trò tương tự như khái niệm nào trong thế giới thực?
- A. Một hành động cụ thể
- B. Một bản thiết kế hoặc khuôn mẫu
- C. Một dữ liệu đơn lẻ
- D. Một chương trình hoàn chỉnh
Câu 6: Phương thức khởi tạo (constructor) trong một lớp đối tượng thường được sử dụng để làm gì?
- A. Khởi tạo các thuộc tính (dữ liệu) của đối tượng khi mới được tạo
- B. Xóa đối tượng khi nó không còn được sử dụng
- C. Gọi một phương thức khác trong lớp
- D. Kiểm tra kiểu dữ liệu của đối tượng
Câu 7: "Tính trừu tượng" (abstraction) trong OOP giúp lập trình viên tập trung vào điều gì?
- A. Tất cả các chi tiết cài đặt phức tạp của đối tượng
- B. Cách đối tượng được lưu trữ trong bộ nhớ
- C. Ngôn ngữ lập trình được sử dụng để tạo đối tượng
- D. Các đặc điểm và hành vi thiết yếu của đối tượng, bỏ qua chi tiết không cần thiết
Câu 8: Trong ngữ cảnh kế thừa, lớp "cha" còn được gọi bằng thuật ngữ nào khác?
- A. Lớp dẫn xuất
- B. Lớp cơ sở
- C. Lớp giao diện
- D. Lớp trừu tượng
Câu 9: Điều gì xảy ra khi một lớp con kế thừa từ lớp cha?
- A. Lớp con mất hết các thuộc tính và phương thức của chính nó
- B. Lớp cha không còn tồn tại sau khi lớp con được tạo
- C. Lớp con tự động có các thuộc tính và phương thức của lớp cha
- D. Lớp con và lớp cha trở thành hoàn toàn độc lập
Câu 10: Mục đích chính của việc sử dụng "tính kế thừa" (inheritance) trong OOP là gì?
- A. Tái sử dụng mã nguồn và xây dựng hệ thống phân cấp lớp
- B. Tăng tính phức tạp của chương trình
- C. Giảm hiệu suất thực thi của chương trình
- D. Che giấu hoàn toàn dữ liệu của đối tượng
Câu 11: Trong OOP, "đối tượng" (object) là gì?
- A. Một bản thiết kế cho các thực thể
- B. Một tập hợp các lớp có liên quan
- C. Một thể hiện cụ thể của một lớp
- D. Một phương pháp lập trình
Câu 12: Thuộc tính (attribute) của một đối tượng trong OOP tương ứng với khái niệm nào trong lập trình hướng cấu trúc?
- A. Hàm
- B. Biến
- C. Cấu trúc điều khiển
- D. Module
Câu 13: Phương thức (method) của một đối tượng trong OOP thể hiện điều gì?
- A. Dữ liệu mà đối tượng lưu trữ
- B. Kiểu dữ liệu của đối tượng
- C. Tên của đối tượng
- D. Hành vi hoặc thao tác mà đối tượng có thể thực hiện
Câu 14: Trong các ngôn ngữ OOP, từ khóa nào thường được sử dụng để khai báo một lớp?
- A. class
- B. object
- C. struct
- D. type
Câu 15: "Tính đa hình" (polymorphism) giúp giải quyết vấn đề nào trong lập trình?
- A. Vấn đề bảo mật dữ liệu
- B. Vấn đề quản lý bộ nhớ
- C. Vấn đề xử lý các đối tượng thuộc nhiều kiểu khác nhau một cách linh hoạt
- D. Vấn đề tối ưu hiệu suất chương trình
Câu 16: Cho sơ đồ lớp như sau: `HìnhHọc` <- `HìnhVuông`, `HìnhHọc` <- `HìnhTròn`. Mối quan hệ giữa `HìnhHọc` và `HìnhVuông` là gì?
- A. Quan hệ chứa (composition)
- B. Quan hệ sử dụng (association)
- C. Quan hệ phụ thuộc (dependency)
- D. Quan hệ kế thừa (inheritance)
Câu 17: Phương thức nào sau đây KHÔNG phải là một trong bốn trụ cột chính của lập trình hướng đối tượng?
- A. Tính đóng gói
- B. Tính kế thừa
- C. Tính module hóa
- D. Tính đa hình
Câu 18: Trong OOP, "giao diện" (interface) thường được sử dụng để định nghĩa điều gì?
- A. Cách dữ liệu được lưu trữ trong đối tượng
- B. Một tập hợp các phương thức mà các lớp phải thực hiện
- C. Cấu trúc bên trong của một đối tượng
- D. Mối quan hệ giữa các đối tượng
Câu 19: Khi nào nên sử dụng "lớp trừu tượng" (abstract class) trong OOP?
- A. Khi muốn tạo ra các đối tượng cụ thể
- B. Khi muốn tăng tốc độ thực thi chương trình
- C. Khi muốn che giấu hoàn toàn dữ liệu
- D. Khi muốn định nghĩa một lớp cha chung với một số phương thức trừu tượng cần lớp con hiện thực
Câu 20: Điều gì KHÔNG phải là một loại quan hệ phổ biến giữa các lớp trong OOP?
- A. Kế thừa (Inheritance)
- B. Kết hợp (Association)
- C. Quan hệ phản chiếu (Reflection)
- D. Hợp thành (Composition)
Câu 21: Trong OOP, "phương thức tĩnh" (static method) khác với "phương thức đối tượng" (instance method) như thế nào?
- A. Phương thức tĩnh chỉ có thể được gọi bên trong lớp
- B. Phương thức tĩnh được gọi trực tiếp từ lớp, không cần đối tượng cụ thể
- C. Phương thức tĩnh có tốc độ thực thi nhanh hơn
- D. Phương thức tĩnh không thể trả về giá trị
Câu 22: "SOLID" là một tập hợp các nguyên tắc thiết kế quan trọng trong OOP. Chữ "O" trong SOLID đại diện cho nguyên tắc nào?
- A. Single Responsibility Principle
- B. Liskov Substitution Principle
- C. Open/Closed Principle
- D. Interface Segregation Principle
Câu 23: Trong OOP, "đa kế thừa" (multiple inheritance) là gì?
- A. Một lớp con kế thừa từ nhiều lớp cha
- B. Một lớp cha có nhiều lớp con
- C. Một đối tượng thuộc nhiều lớp khác nhau
- D. Một phương thức có nhiều cài đặt khác nhau
Câu 24: Lợi ích chính của việc sử dụng "design patterns" (mẫu thiết kế) trong OOP là gì?
- A. Tăng tốc độ viết code
- B. Cung cấp các giải pháp đã được kiểm chứng cho các vấn đề thiết kế phổ biến
- C. Giảm kích thước chương trình
- D. Che giấu mã nguồn khỏi người dùng
Câu 25: Trong OOP, "composition" (hợp thành) là một loại quan hệ "has-a" mạnh mẽ. Điều gì phân biệt "composition" với "aggregation" (tập hợp)?
- A. Aggregation mạnh mẽ hơn composition
- B. Composition cho phép chia sẻ đối tượng, aggregation thì không
- C. Aggregation chỉ áp dụng cho dữ liệu, composition cho cả dữ liệu và hành vi
- D. Trong composition, đối tượng thành phần phụ thuộc vào đối tượng chứa và có vòng đời phụ thuộc vào nó
Câu 26: Cho đoạn code Java sau:
```java
public interface Shape {
double getArea();
}
public class Circle implements Shape {
private double radius;
public Circle(double r) { radius = r; }
public double getArea() { return Math.PI * radius * radius; }
}
```
`interface Shape` trong đoạn code trên thể hiện khái niệm OOP nào?
- A. Tính trừu tượng (Abstraction)
- B. Tính đóng gói (Encapsulation)
- C. Tính kế thừa (Inheritance)
- D. Tính đa hình (Polymorphism)
Câu 27: Điều gì KHÔNG phải là một ưu điểm của lập trình hướng đối tượng so với lập trình hướng thủ tục?
- A. Khả năng quản lý dự án lớn tốt hơn
- B. Tính tái sử dụng mã cao hơn
- C. Đơn giản hơn cho các chương trình nhỏ và đơn giản
- D. Mô hình hóa thế giới thực tự nhiên hơn
Câu 28: Trong OOP, "overloading" (nạp chồng) phương thức là gì?
- A. Thay đổi hành vi của phương thức trong lớp con
- B. Định nghĩa nhiều phương thức cùng tên nhưng khác tham số trong một lớp
- C. Gọi một phương thức từ một lớp khác
- D. Ẩn chi tiết cài đặt của phương thức
Câu 29: "Dependency Injection" (DI - Tiêm phụ thuộc) là một kỹ thuật thường được sử dụng trong OOP để đạt được mục tiêu nào?
- A. Tăng hiệu suất chương trình
- B. Bảo mật dữ liệu tốt hơn
- C. Giảm sự phụ thuộc giữa các thành phần và tăng tính module hóa
- D. Đơn giản hóa việc quản lý bộ nhớ
Câu 30: Trong ngữ cảnh kiểm soát truy cập, thành phần "protected" của một lớp có thể được truy cập từ đâu?
- A. Chỉ từ bên trong lớp chứa nó
- B. Từ bên trong lớp chứa nó và các lớp con kế thừa từ nó
- C. Từ bất kỳ đâu trong chương trình
- D. Chỉ từ chương trình chính (main program)