Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Lập Trình Hướng Đối Tượng - Đề 06 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 kế thừa (Inheritance)
- D. Tính đa hình (Polymorphism)
Câu 2: Xét tình huống có lớp "Động vật" với phương thức "Tiếng kêu". Lớp "Mèo" và "Chó" kế thừa từ "Động vật". Khi gọi phương thức "Tiếng kêu" trên đối tượng "mèo" và "chó", kết quả sẽ khác nhau (mèo kêu "meo", chó kêu "gâu gâu"). Đây là ví dụ minh họa rõ nhất cho tính chất nào của OOP?
- A. Tính đóng gói
- B. Tính đa hình
- C. Tính trừu tượng
- D. Tính kế thừa
Câu 3: Một lớp "Xe hơi" có các thuộc tính như "màu sắc", "kiểu dáng", "động cơ" và phương thức "khởi động", "tăng tốc", "dừng lại". Việc nhóm các thuộc tính và phương thức liên quan đến "Xe hơi" vào một đơn vị duy nhất được gọi là gì?
- 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 4: Trong một hệ thống quản lý thư viện, lớp "Sách" có thuộc tính "tiêu đề", "tác giả", "ISBN" và phương thức "mượn sách", "trả sách". Nếu muốn tạo lớp "Sách tham khảo" và "Tiểu thuyết" kế thừa từ "Sách", ta đang áp dụng tính chất nào của OOP?
- A. Tính đóng gói
- B. Tính kế thừa
- C. Tính đa hình
- D. Tính trừu tượng
Câu 5: Khi thiết kế lớp "Hình học", ta chỉ quan tâm đến các thuộc tính và phương thức chung nhất của mọi hình (ví dụ: "diện tích", "chu vi", "vẽ"). Các lớp cụ thể như "Hình tròn", "Hình vuông", "Tam giác" sẽ kế thừa và hiện thực hóa các phương thức này theo cách riêng. Đây là biểu hiện của tính chất nào?
- A. Tính đóng gói
- B. Tính kế thừa
- C. Tính đa hình
- D. Tính trừu tượng
Câu 6: Trong OOP, "lớp" (class) đóng vai trò như thế nào?
- A. Một thể hiện cụ thể của dữ liệu
- B. Một hành động mà đối tượng có thể thực hiện
- C. Bản thiết kế hoặc khuôn mẫu cho các đối tượng
- D. Một biến chứa giá trị đơn lẻ
Câu 7: "Đối tượng" (object) khác với "lớp" (class) ở điểm nào?
- A. Đối tượng là một thể hiện cụ thể của lớp
- B. Lớp là một thể hiện cụ thể của đối tượng
- C. Đối tượng chứa định nghĩa, lớp chứa dữ liệu
- D. Không có sự khác biệt, "lớp" và "đối tượng" là đồng nghĩa
Câu 8: 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 (function)
- B. Biến dữ liệu (data variable)
- C. Cấu trúc điều khiển (control structure)
- D. Thủ tục (procedure)
Câu 9: 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. Đặc điểm hình thức của đối tượng
- C. Hành vi hoặc thao tác mà đối tượng có thể thực hiện
- D. Mối quan hệ giữa các đối tượng
Câu 10: Từ khóa nào thường được sử dụng để khai báo một lớp trong các ngôn ngữ lập trình hướng đối tượng như Java, C++, C#?
- A. struct
- B. type
- C. object
- D. class
Câu 11: Điều gì xảy ra khi bạn tạo một "thể hiện" (instance) của một lớp?
- A. Lớp đó bị xóa khỏi bộ nhớ
- B. Một đối tượng cụ thể được tạo ra trong bộ nhớ
- C. Chương trình biên dịch lại toàn bộ mã
- D. Không có gì xảy ra cho đến khi đối tượng được sử dụng
Câu 12: "Tính đóng gói" (Encapsulation) giúp đạt được mục tiêu nào quan trọng trong thiết kế phần mềm?
- A. Tăng tốc độ thực thi chương trình
- B. Giảm dung lượng bộ nhớ sử dụng
- C. Che giấu thông tin và kiểm soát truy cập dữ liệu
- D. Cho phép đa kế thừa từ nhiều lớp
Câu 13: "Tính kế thừa" (Inheritance) mang lại lợi ích chính nào trong phát triển phần mềm?
- A. Tái sử dụng mã nguồn và giảm sự trùng lặp
- B. Tăng tính phức tạp của cấu trúc chương trình
- C. Giảm tính linh hoạt trong thay đổi thiết kế
- D. Bắt buộc sử dụng đa hình
Câu 14: Phương thức "khởi tạo" (constructor) trong lớp được sử dụng để làm gì?
- A. Hủy đố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. Thay đổi kiểu dữ liệu của đối tượng
- D. Gọi các phương thức khác của đối tượng
Câu 15: "Tính trừu tượng" (Abstraction) giúp nhà phát triển tập trung vào điều gì khi làm việc với đối tượng?
- A. Chi tiết cài đặt bên trong của đối tượng
- B. Toàn bộ mã nguồn của lớp
- C. Giao diện và hành vi bên ngoài của đối tượng
- D. Vị trí bộ nhớ của đối tượng
Câu 16: Trong ngữ cảnh "đa hình" (polymorphism), "ghi đè phương thức" (method overriding) xảy ra khi nào?
- A. Hai lớp có phương thức trùng tên nhưng khác tham số
- B. Một lớp có nhiều phương thức cùng tên
- C. Gọi một phương thức của lớp cha từ lớp con
- D. Lớp con định nghĩa lại phương thức của lớp cha
Câu 17: "Nạp chồng phương thức" (method overloading) khác với "ghi đè phương thức" (method overriding) như thế nào?
- A. Nạp chồng liên quan đến kế thừa, ghi đè thì không
- B. Nạp chồng trong cùng lớp, ghi đè giữa lớp cha và lớp con
- C. Nạp chồng thay đổi hành vi, ghi đè giữ nguyên hành vi
- D. Nạp chồng tạo phương thức mới, ghi đè sửa phương thức cũ
Câu 18: "Tính trừu tượng hóa dữ liệu" (data abstraction) thường được thực hiện thông qua cơ chế nào trong OOP?
- A. Tính đóng gói
- B. Tính kế thừa
- C. Lớp trừu tượng và giao diện
- D. Tính đa hình
Câu 19: Trong thiết kế lớp, phạm vi truy cập "private" có ý nghĩa gì đối với thành viên (thuộc tính hoặc phương thức) của lớp?
- A. Chỉ có thể truy cập từ bên trong lớp đó
- B. Có thể truy cập từ lớp con nhưng không từ bên ngoài
- C. Có thể truy cập từ bất kỳ đâu trong chương trình
- D. Chỉ có thể truy cập từ các lớp bạn (friend classes)
Câu 20: Phạm vi truy cập "protected" khác với "private" ở điểm nào?
- A. Không có sự khác biệt, "private" và "protected" là như nhau
- B. Cho phép lớp con kế thừa truy cập, "private" thì không
- C. "Protected" bảo mật hơn "private"
- D. "Protected" chỉ dùng cho phương thức, "private" cho thuộc tính
Câu 21: Phạm vi truy cập "public" cho phép thành viên lớp được truy cập từ đâu?
- A. Chỉ từ bên trong lớp và lớp con
- B. Chỉ từ các lớp cùng gói (package)
- C. Từ bất kỳ đâu trong chương trình
- D. Chỉ từ hàm main()
Câu 22: Trong sơ đồ lớp UML, hình chữ nhật biểu diễn khái niệm nào?
- A. Đối tượng (object)
- B. Lớp (class)
- C. Giao diện (interface)
- D. Thuộc tính (attribute)
Câu 23: Trong UML, đường thẳng có mũi tên rỗng biểu diễn mối quan hệ nào giữa các lớp?
- A. Quan hệ sử dụng (dependency)
- B. Quan hệ kết hợp (association)
- C. Quan hệ hợp thành (composition)
- D. Quan hệ kế thừa (inheritance/generalization)
Câu 24: Mục đích chính của việc sử dụng "giao diện" (interface) trong OOP là gì?
- A. Định nghĩa một tập hợp các phương thức mà các lớp phải thực hiện
- B. Tăng cường tính đóng gói của lớp
- C. Thay thế cho lớp trừu tượng
- D. Cho phép đa kế thừa từ nhiều lớp
Câu 25: "Tính trừu tượng hóa" (abstraction) khác với "tính đóng gói" (encapsulation) như thế nào?
- A. Không có sự khác biệt, chỉ là hai tên gọi khác nhau
- B. Đóng gói là một dạng đặc biệt của trừu tượng hóa
- C. Trừu tượng hóa là "cái gì", đóng gói là "làm thế nào" để bảo vệ nó
- D. Trừu tượng hóa chỉ dùng cho lớp, đóng gói cho đối tượng
Câu 26: Trong lập trình hướng đối tượng, "thông điệp" (message) được gửi giữa các đối tượng để làm gì?
- A. Lưu trữ dữ liệu giữa các đối tượng
- B. Yêu cầu một đối tượng khác thực hiện một hành động
- C. Đồng bộ hóa trạng thái của các đối tượng
- D. Thông báo lỗi giữa các đối tượng
Câu 27: Khi nào nên sử dụng "đa kế thừa" (multiple inheritance) trong thiết kế OOP?
- A. Luôn luôn để tận dụng tối đa tính kế thừa
- B. Để đơn giản hóa cấu trúc lớp
- C. Khi muốn tránh sử dụng giao diện
- D. Khi một lớp cần kết hợp hành vi từ nhiều lớp cha một cách hợp lý
Câu 28: "Tính linh hoạt" và "khả năng mở rộng" của phần mềm được tăng cường nhờ các nguyên tắc OOP nào?
- A. Tính trừu tượng, đóng gói, kế thừa và đa hình
- B. Chỉ tính đóng gói và trừu tượng
- C. Chỉ tính kế thừa và đa hình
- D. Chỉ tính đóng gói và kế thừa
Câu 29: Trong mô hình hướng đối tượng, mối quan hệ "is-a" thường được hiện thực hóa bằng cơ chế nào?
- A. Quan hệ kết hợp
- B. Quan hệ hợp thành
- C. Quan hệ kế thừa
- D. Quan hệ sử dụng
Câu 30: Chọn phát biểu đúng về lợi ích của lập trình hướng đối tượng:
- A. Giảm tốc độ thực thi chương trình
- B. Khó bảo trì và mở rộng hơn so với lập trình hướng cấu trúc
- C. Ít phù hợp với các dự án lớn và phức tạp
- D. Tăng khả năng tái sử dụng, bảo trì và mở rộng phần mềm