Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Lập Trình Hướng Đối Tượng - Đề 04 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 việc che giấu thông tin chi tiết bên trong của một đối tượng và chỉ cho phép truy cập thông qua các giao diện công khai?
- A. Tính kế thừa (Inheritance)
- B. Tính đa hình (Polymorphism)
- C. Tính đóng gói (Encapsulation)
- D. Tính trừu tượng (Abstraction)
Câu 2: Điều gì KHÔNG phải là lợi ích chính của tính kế thừa trong lập trình hướng đối tượng?
- A. Tái sử dụng mã nguồn (Code reusability)
- B. Mở rộng chức năng của lớp (Extensibility)
- C. Tổ chức mã nguồn theo cấu trúc phân cấp (Hierarchical code organization)
- D. Giảm độ phức tạp của thuật toán (Algorithm simplification)
Câu 3: Xét đoạn mã giả sau:
```
Class Animal {
method speak() {
print
- A. Tính đóng gói (Encapsulation)
- B. Tính đa hình (Polymorphism)
- C. Tính trừu tượng (Abstraction)
- D. Tính kế thừa (Inheritance)
Câu 4: Trong lập trình hướng đối tượng, "tính trừu tượng" (Abstraction) được thể hiện rõ nhất qua việc nào sau đây?
- A. Chỉ hiển thị các thuộc tính và phương thức cần thiết của đối tượng, ẩn đi chi tiết cài đặt.
- B. Cho phép một lớp kế thừa thuộc tính và phương thức từ lớp khác.
- C. Gộp nhóm dữ liệu và phương thức thao tác trên dữ liệu đó vào trong một đơn vị.
- D. Cho phép các đối tượng thuộc các lớp khác nhau phản ứng khác nhau với cùng một thông điệp.
Câu 5: Khái niệm "lớp" (class) trong lập trình hướng đối tượng có thể được hiểu như thế nào?
- A. Một thể hiện cụ thể của một đối tượng trong bộ nhớ.
- B. Một bản thiết kế hoặc khuôn mẫu để tạo ra các đối tượng.
- C. Một phương thức đặc biệt được gọi khi đối tượng được tạo.
- D. Một biến toàn cục được sử dụng trong toàn bộ chương trình.
Câu 6: "Đối tượng" (object) trong lập trình hướng đối tượng là gì?
- A. Một từ khóa dùng để khai báo lớp.
- B. Một tập hợp các lớp có liên quan đến nhau.
- C. Một thể hiện cụ thể của một lớp, có trạng thái và hành vi.
- D. Một phương pháp lập trình không sử dụng lớp.
Câu 7: Phương thức khởi tạo (constructor) trong một lớp có vai trò gì?
- A. Khởi tạo trạng thái ban đầu cho đối tượng khi đối tượng được tạo.
- B. Giải phóng bộ nhớ khi đối tượng không còn được sử dụng.
- C. Định nghĩa các hành vi của đối tượng.
- D. Truy cập các thuộc tính private của đối tượng.
Câu 8: Trong ngữ cảnh của tính đóng gói, các "phương thức getter" (getter methods) và "phương thức setter" (setter methods) thường được sử dụng để làm gì?
- A. Tăng tốc độ truy cập trực tiếp vào thuộc tính của đối tượng.
- B. Kiểm soát việc truy cập và sửa đổi các thuộc tính private của đối tượng.
- C. Ẩn hoàn toàn các thuộc tính của đối tượng khỏi bên ngoài.
- D. Tạo ra các bản sao của đối tượng.
Câu 9: Điều gì xảy ra khi một lớp con (subclass) kế thừa từ một lớp cha (superclass)?
- A. Lớp con không thể truy cập bất kỳ thành phần nào của lớp cha.
- B. Lớp cha mất quyền kiểm soát các thành phần của nó.
- C. Lớp con tự động có các thuộc tính và phương thức của lớp cha (trừ thành phần private).
- D. Lớp con phải định nghĩa lại tất cả các thành phần của lớp cha.
Câu 10: Từ khóa nào thường được sử dụng để thể hiện mối quan hệ kế thừa giữa lớp con và lớp cha trong nhiều ngôn ngữ lập trình hướng đối tượng?
- A. import
- B. implements
- C. create
- D. extends
Câu 11: Trong lập trình hướng đối tượng, "đa hình" (polymorphism) mang lại lợi ích gì chính?
- A. Giảm sự phụ thuộc giữa các lớp.
- B. Cho phép đối tượng thuộc các lớp khác nhau phản ứng khác nhau với cùng một thông điệp.
- C. Tăng cường tính bảo mật của dữ liệu.
- D. Đơn giản hóa việc tạo ra các đối tượng mới.
Câu 12: "Tính đa hình thời gian biên dịch" (compile-time polymorphism) thường được thực hiện thông qua cơ chế nào?
- A. Kế thừa (Inheritance)
- B. Trừu tượng hóa (Abstraction)
- C. Nạp chồng phương thức (Method Overloading)
- D. Ghi đè phương thức (Method Overriding)
Câu 13: "Tính đa hình thời gian chạy" (runtime polymorphism) thường được thực hiện thông qua cơ chế nào?
- A. Đóng gói (Encapsulation)
- B. Nạp chồng toán tử (Operator Overloading)
- C. Nạp chồng phương thức (Method Overloading)
- D. Ghi đè phương thức (Method Overriding)
Câu 14: Trong lập trình hướng đối tượng, "interface" (giao diện) được sử dụng để làm gì?
- A. Định nghĩa một tập hợp các phương thức mà các lớp thực hiện interface phải cung cấp.
- B. Tạo ra các đối tượng cụ thể từ một lớp.
- C. Ẩn chi tiết cài đặt của lớp.
- D. Thực hiện tính kế thừa đa lớp.
Câu 15: Sự khác biệt chính giữa "lớp trừu tượng" (abstract class) và "interface" (giao diện) là gì?
- A. Lớp trừu tượng có thể tạo ra đối tượng, interface thì không.
- B. Lớp trừu tượng có thể chứa cài đặt phương thức, interface thì thường chỉ định nghĩa phương thức (từ phiên bản Java 8 interface có thể có default method).
- C. Interface hỗ trợ kế thừa đa lớp, lớp trừu tượng thì không.
- D. Không có sự khác biệt, "lớp trừu tượng" và "interface" là các khái niệm tương đương.
Câu 16: "Tính kết hợp" (Association) giữa các lớp trong lập trình hướng đối tượng mô tả mối quan hệ như thế nào?
- A. Mối quan hệ "là một loại" (is-a relationship).
- B. Mối quan hệ "sở hữu" mạnh mẽ (strong ownership).
- C. Mối quan hệ "sử dụng" hoặc "biết về" giữa các đối tượng.
- D. Mối quan hệ "thành phần của" (part-of relationship).
Câu 17: "Tính tập hợp" (Aggregation) khác với "tính hợp thành" (Composition) ở điểm nào?
- A. Aggregation thể hiện mối quan hệ "là một loại", Composition thể hiện "sử dụng".
- B. Composition là một dạng yếu hơn của Aggregation.
- C. Aggregation và Composition là hoàn toàn giống nhau, chỉ khác tên gọi.
- D. Trong Composition, đối tượng "thành phần" phụ thuộc vào vòng đời của đối tượng "chứa", còn Aggregation thì không.
Câu 18: Trong UML (Unified Modeling Language), ký hiệu nào thường được sử dụng để biểu diễn mối quan hệ kế thừa?
- A. Đường thẳng liền nét
- B. Mũi tên tam giác rỗng (mũi tên trắng)
- C. Đường thẳng nét đứt
- D. Mũi tên tam giác đặc (mũi tên đen)
Câu 19: Nguyên tắc "SOLID" trong lập trình hướng đối tượng là tập hợp các nguyên tắc thiết kế nhằm mục đích gì?
- A. Tăng tốc độ thực thi chương trình.
- B. Giảm thiểu sử dụng bộ nhớ.
- C. Thiết kế phần mềm dễ bảo trì, mở rộng và linh hoạt.
- D. Đảm bảo tính bảo mật tuyệt đối cho ứng dụng.
Câu 20: Nguyên tắc "Single Responsibility Principle" (SRP) trong SOLID phát biểu điều gì?
- A. Một lớp chỉ nên có một và chỉ một lý do để thay đổi.
- B. Các lớp mở rộng nên có thể thay thế cho lớp cơ sở của chúng mà không làm thay đổi tính đúng đắn của chương trình.
- C. Phần mềm nên mở để mở rộng, nhưng đóng để sửa đổi.
- D. Nhiều interface đặc thù tốt hơn là một interface đa năng.
Câu 21: Nguyên tắc "Open/Closed Principle" (OCP) trong SOLID khuyến khích điều gì?
- A. Mỗi interface nên phục vụ một nhóm chức năng cụ thể.
- B. Phần mềm nên mở để mở rộng, nhưng đóng để sửa đổi.
- C. Các lớp con phải có khả năng thay thế hoàn toàn cho lớp cha.
- D. Một lớp chỉ nên có một trách nhiệm duy nhất.
Câu 22: "Dependency Inversion Principle" (DIP) trong SOLID đề xuất giải pháp nào để giảm sự phụ thuộc giữa các module?
- A. Tăng cường tính đóng gói của các lớp.
- B. Sử dụng kế thừa để tái sử dụng mã.
- C. Phụ thuộc vào trừu tượng (interfaces hoặc abstract classes) thay vì phụ thuộc vào cài đặt cụ thể.
- D. Giảm số lượng lớp trong chương trình.
Câu 23: Trong lập trình hướng đối tượng, thuật ngữ "coupling" (kết nối) và "cohesion" (liên kết nội tại) được sử dụng để đánh giá điều gì?
- A. Hiệu suất và tốc độ thực thi của chương trình.
- B. Mức độ bảo mật và an toàn của dữ liệu.
- C. Tính dễ sử dụng và giao diện người dùng thân thiện.
- D. Chất lượng thiết kế module và mối quan hệ giữa các module.
Câu 24: "Low coupling" (kết nối thấp) là một mục tiêu quan trọng trong thiết kế hướng đối tượng vì sao?
- A. Tăng tính phức tạp của hệ thống.
- B. Giảm sự phụ thuộc lẫn nhau giữa các module, giúp hệ thống dễ bảo trì và thay đổi.
- C. Tăng kích thước của mã nguồn.
- D. Làm cho việc kiểm thử trở nên khó khăn hơn.
Câu 25: "High cohesion" (liên kết nội tại cao) trong một lớp có nghĩa là gì?
- A. Lớp có nhiều trách nhiệm khác nhau.
- B. Các phương thức trong lớp không liên quan đến nhau.
- C. Các thành phần bên trong lớp có liên quan chặt chẽ và cùng hướng tới một mục tiêu chung.
- D. Lớp có ít phương thức và thuộc tính.
Câu 26: Trong lập trình hướng đối tượng, Design Pattern (mẫu thiết kế) là gì?
- A. Các giải pháp thiết kế đã được kiểm chứng và tái sử dụng cho các vấn đề thường gặp.
- B. Một loại ngôn ngữ lập trình mới.
- C. Một công cụ để tự động sinh mã.
- D. Một phương pháp kiểm thử phần mềm.
Câu 27: Design Pattern "Singleton" (Đơn thể) được sử dụng khi nào?
- A. Khi cần tạo ra nhiều đối tượng của một lớp.
- B. Khi cần đảm bảo một lớp chỉ có duy nhất một thể hiện trong ứng dụng.
- C. Khi cần thực hiện đa hình thời gian chạy.
- D. Khi cần ẩn chi tiết cài đặt của một lớp.
Câu 28: Design Pattern "Factory" (Nhà máy) giải quyết vấn đề gì?
- A. Đảm bảo tính duy nhất của đối tượng (Singleton).
- B. Quản lý trạng thái của đối tượng.
- C. Cung cấp một giao diện để tạo đối tượng nhưng để lớp con quyết định lớp nào sẽ được khởi tạo.
- D. Thực hiện chức năng ghi log trong ứng dụng.
Câu 29: Trong lập trình hướng đối tượng, "composition over inheritance" (hợp thành hơn kế thừa) là một nguyên tắc thiết kế khuyến khích điều gì?
- A. Luôn ưu tiên sử dụng kế thừa để tái sử dụng mã.
- B. Tránh sử dụng cả composition và inheritance.
- C. Chỉ sử dụng inheritance cho các mối quan hệ "là một loại".
- D. Ưu tiên sử dụng composition để tái sử dụng mã và mở rộng chức năng, thay vì chỉ dựa vào inheritance.
Câu 30: Khi nào việc sử dụng "inheritance" (kế thừa) là phù hợp nhất trong thiết kế hướng đối tượng?
- A. Khi có mối quan hệ "is-a" (là một loại) rõ ràng giữa các lớp và muốn tái sử dụng mã.
- B. Khi cần tạo ra nhiều đối tượng độc lập của một lớp.
- C. Khi muốn ẩn chi tiết cài đặt của một lớp.
- D. Khi cần giảm sự phụ thuộc giữa các lớp.