Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Lập Trình Hướng Đối Tượng - Đề 03 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 biệt 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 kế thừa (Inheritance)
- C. Tính đa hình (Polymorphism)
- D. Tính trừu tượng (Abstraction)
Câu 2: Một lớp "Động vật" có phương thức "phát ra tiếng kêu". Lớp "Chó" và "Mèo" kế thừa từ lớp "Động vật". Khi đối tượng chó gọi phương thức "phát ra tiếng kêu", nó sẽ sủa "Gâu gâu", còn đối tượng mèo sẽ kêu "Meo meo". Đây là ví dụ minh họa cho tính chất nào của OOP?
- A. Đa hình (Polymorphism)
- B. Kế thừa (Inheritance)
- C. Đóng gói (Encapsulation)
- D. Trừu tượng (Abstraction)
Câu 3: Tính đóng gói trong OOP mang lại lợi ích chính nào sau đây?
- A. Tăng tốc độ thực thi chương trình
- B. Bảo vệ dữ liệu và che giấu thông tin
- C. Cho phép tái sử dụng mã nguồn rộng rãi
- D. Giảm dung lượng bộ nhớ sử dụng
Câu 4: Xét đoạn mã giả sau:
```
class HìnhHọc {
phương thức TínhDiệnTích() {}
}
class HìnhVuông kế thừa HìnhHọc {
thuộc tính cạnh;
phương thức TínhDiệnTích() { trả về cạnh * cạnh; }
}
class HìnhTròn kế thừa HìnhHọc {
thuộc tính bánKính;
phương thức TínhDiệnTích() { trả về PI * bánKính * bánKính; }
}
```
Đoạn mã trên thể hiện rõ nhất điều gì?
- A. Tính đóng gói và trừu tượng
- B. Tính trừu tượng và kế thừa
- C. Tính kế thừa và đa hình
- D. Tính đóng gói và đa hình
Câu 5: Trong OOP, "lớp" (class) được xem như là:
- A. Một thể hiện cụ thể của đối tượng
- B. Một hành động mà đối tượng có thể thực hiện
- C. Một giá trị dữ liệu mà đối tượng lưu trữ
- D. Bản thiết kế hoặc khuôn mẫu cho các đối tượng
Câu 6: "Đối tượng" (object) trong OOP là gì?
- A. Một thể hiện cụ thể của một lớp
- B. Một định nghĩa trừu tượng về dữ liệu
- C. Một tập hợp các lớp có liên quan
- D. Một phương thức để quản lý bộ nhớ
Câu 7: Phương thức khởi tạo (constructor) trong một lớp có vai trò chính là gì?
- A. Hủy bỏ đối tượng khi không còn sử dụng
- B. Khởi tạo trạng thái ban đầu cho đối tượng
- C. Thực hiện các phép toán trên đối tượng
- D. Truy cập dữ liệu của đối tượng
Câu 8: Từ khóa nào sau đây thường được sử dụng để thể hiện tính kế thừa trong các ngôn ngữ OOP?
- A. private
- B. static
- C. extends
- D. class
Câu 9: Trong ngữ cảnh của tính đóng gói, phạm vi truy cập "private" có nghĩa là:
- A. Có thể truy cập từ bất kỳ đâu
- B. Có thể truy cập từ lớp con
- C. Chỉ có thể truy cập từ cùng package
- D. Chỉ có thể truy cập từ bên trong lớp đó
Câu 10: Tính trừu tượng trong OOP giúp giải quyết vấn đề nào sau đây?
- A. Tăng tính bảo mật cho dữ liệu
- B. Quản lý sự phức tạp của hệ thống
- C. Cải thiện hiệu suất chương trình
- D. Tái sử dụng mã nguồn hiệu quả hơn
Câu 11: Phương thức "ảo" (virtual method) thường được sử dụng để hỗ trợ tính chất nào của OOP?
- 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 12: Trong OOP, mối quan hệ "is-a" (là một) thường được thể hiện thông qua cơ chế nào?
- A. Đóng gói
- B. Kế thừa
- C. Đa hình
- D. Trừu tượng
Câu 13: Giả sử bạn có lớp "Xe" và lớp "Ôtô" kế thừa từ lớp "Xe". Điều gì sau đây là đúng?
- A. Lớp "Xe" có tất cả các thuộc tính và phương thức của lớp "Ôtô".
- B. Lớp "Ôtô" không liên quan đến lớp "Xe".
- C. Lớp "Ôtô" kế thừa các thuộc tính và phương thức của lớp "Xe".
- D. Lớp "Xe" và "Ôtô" là hoàn toàn giống nhau.
Câu 14: Mục đích chính của việc sử dụng giao diện (interface) trong OOP là gì?
- A. Tăng hiệu suất thực thi của chương trình
- B. Giảm sự phức tạp trong kế thừa đa lớp
- C. Che giấu hoàn toàn thông tin bên trong đối tượng
- D. Định nghĩa một khuôn mẫu hành vi cho các lớp khác nhau
Câu 15: "Tính đa kế thừa" (multiple inheritance) có nghĩa là gì?
- A. Một lớp có thể kế thừa từ nhiều lớp cha.
- B. Một lớp cha có thể có nhiều lớp con.
- C. Một đối tượng có thể thuộc nhiều lớp khác nhau.
- D. Một phương thức có thể được gọi theo nhiều cách khác nhau.
Câu 16: Khi nào nên sử dụng tính kế thừa trong thiết kế OOP?
- A. Khi muốn tạo ra các đối tượng độc lập và không liên quan.
- B. Khi có mối quan hệ "is-a" và muốn tái sử dụng mã nguồn.
- C. Khi cần tăng tính bảo mật cho dữ liệu.
- D. Khi muốn giảm độ phức tạp của chương trình.
Câu 17: Trong thiết kế hướng đối tượng, nguyên tắc "SOLID" là viết tắt của những nguyên tắc thiết kế quan trọng nào?
- A. Simple, Open, Layered, Independent, Detailed
- B. Single-purpose, Organized, Linear, Iterative, Documented
- C. Structured, Object-based, Logical, Integrated, Dynamic
- D. Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion
Câu 18: Nguyên tắc "Single Responsibility Principle" (SRP) trong SOLID khuyến cáo điều gì?
- A. Một lớp chỉ nên có một trách nhiệm duy nhất.
- B. Các lớp nên được thiết kế đơn giản và dễ hiểu.
- C. Mỗi phương thức chỉ nên thực hiện một hành động.
- D. Chương trình nên được chia thành các module nhỏ và độc lập.
Câu 19: "Liskov Substitution Principle" (LSP) trong SOLID phát biểu rằng:
- A. Các lớp con nên kế thừa tất cả các thuộc tính và phương thức của lớp cha.
- B. Các lớp con có thể thay thế lớp cha mà không gây lỗi.
- C. Nên sử dụng kế thừa đơn thay vì đa kế thừa.
- D. Các lớp nên được thiết kế sao cho dễ dàng thay thế lẫn nhau.
Câu 20: Trong OOP, "composition" (tổng hợp) khác với "inheritance" (kế thừa) như thế nào?
- A. Kế thừa tạo ra mối quan hệ "has-a", tổng hợp tạo ra mối quan hệ "is-a".
- B. Kế thừa linh hoạt hơn tổng hợp.
- C. Kế thừa thể hiện quan hệ "is-a", tổng hợp thể hiện quan hệ "has-a".
- D. Tổng hợp chỉ áp dụng cho dữ liệu, kế thừa chỉ áp dụng cho hành vi.
Câu 21: Xét tình huống: Một lớp "Động cơ" và một lớp "Ôtô". Ôtô "có một" động cơ. Mối quan hệ này trong OOP được mô tả tốt nhất bằng:
- A. Kế thừa (Inheritance)
- B. Đa hình (Polymorphism)
- C. Đóng gói (Encapsulation)
- D. Tổng hợp (Composition/Aggregation)
Câu 22: Ưu điểm chính của việc sử dụng "composition" so với "inheritance" trong một số trường hợp là gì?
- A. Composition giúp tái sử dụng mã nguồn tốt hơn.
- B. Composition tạo ra sự linh hoạt và giảm sự phụ thuộc.
- C. Composition tăng hiệu suất chương trình.
- D. Composition đơn giản hóa cấu trúc lớp.
Câu 23: "Dependency Injection" (DI) là một kỹ thuật trong OOP nhằm mục đích gì?
- A. Tăng cường tính đóng gói của đối tượng.
- B. Cải thiện hiệu suất khởi tạo đối tượng.
- C. Giảm sự phụ thuộc giữa các thành phần.
- D. Đơn giản hóa quá trình kế thừa.
Câu 24: Mục đích của việc sử dụng "design patterns" (mẫu thiết kế) trong OOP là gì?
- A. Cung cấp các giải pháp tái sử dụng cho vấn đề thiết kế thường gặp.
- B. Tăng tốc độ phát triển phần mềm.
- C. Đảm bảo tính bảo mật tuyệt đối cho ứng dụng.
- D. Giảm thiểu tối đa số lượng dòng code cần viết.
Câu 25: Mẫu thiết kế "Singleton" được sử dụng khi nào?
- A. Khi cần tạo ra nhiều đối tượng cùng loại.
- B. Khi cần đảm bảo chỉ có một thể hiện duy nhất của một lớp.
- C. Khi muốn quản lý bộ nhớ hiệu quả hơn.
- D. Khi cần thực hiện các phép toán phức tạp.
Câu 26: Mẫu thiết kế "Factory" (Nhà máy) giúp giải quyết vấn đề gì?
- A. Quản lý vòng đời của đối tượng.
- B. Đảm bảo tính toàn vẹn dữ liệu.
- C. Tạo đối tượng mà không cần biết lớp cụ thể.
- D. Thực hiện các thao tác đồng bộ trên đối tượng.
Câu 27: "SOLID" và "Design Patterns" có mối quan hệ như thế nào?
- A. SOLID là các mẫu thiết kế cụ thể, Design Patterns là các nguyên tắc.
- B. SOLID và Design Patterns là hai khái niệm hoàn toàn độc lập.
- C. Design Patterns thay thế cho các nguyên tắc SOLID.
- D. Design Patterns thường được xây dựng dựa trên các nguyên tắc SOLID.
Câu 28: Trong OOP, "đa hình tham số" (parametric polymorphism) còn được gọi là:
- A. Generics/Templates
- B. Method Overloading
- C. Dynamic Binding
- D. Operator Overloading
Câu 29: Lợi ích chính của việc sử dụng "Generics" (hoặc Templates) trong OOP là gì?
- A. Tăng hiệu suất thực thi chương trình.
- B. Tăng tính tái sử dụng mã và kiểu an toàn.
- C. Đơn giản hóa cấu trúc kế thừa.
- D. Cải thiện khả năng quản lý bộ nhớ.
Câu 30: Khi thiết kế một hệ thống quản lý thư viện bằng OOP, bạn sẽ chọn cách tiếp cận nào để mô hình hóa mối quan hệ giữa "Sách", "Độc giả" và "Phiếu mượn"?
- A. Chỉ sử dụng các lớp "Sách" và "Độc giả", bỏ qua "Phiếu mượn".
- B. Sử dụng lập trình hướng thủ tục để quản lý mối quan hệ.
- C. Mô hình hóa "Sách", "Độc giả", "Phiếu mượn" thành các lớp và xác định quan hệ giữa chúng.
- D. Lưu trữ tất cả thông tin trong một lớp duy nhất.