Bộ 2 - Trắc nghiệm Lập trình hướng đối tượng có đáp án
Thời gian còn lại: --:--
Kết quả của bạn:
Bạn đã đúng:
Bạn đã sai:
Tổng số câu:
Câu 1:Trong lập trình hướng đối tượng, hàm ảo thuần túy (pure virtual function) có đặc điểm gì nổi bật?
💡 Lời giải chi tiết:
Theo nguyên tắc thiết kế hướng đối tượng, hàm ảo thuần túy đóng vai trò là một khuôn mẫu không có cài đặt cụ thể nhằm bắt buộc các lớp dẫn xuất phải định nghĩa lại. Kết luận Lý giải Không có định nghĩa trong lớp cơ sở và buộc các lớp con phải cài đặt.
Câu 2:Đặc điểm nào sau đây mô tả chính xác nhất về biến tĩnh (static variable) trong một lớp?
💡 Lời giải chi tiết:
Trong lập trình hướng đối tượng, biến tĩnh thuộc về phạm vi lớp thay vì phạm vi đối tượng, cho phép tất cả các thực thể dùng chung một vùng nhớ. Kết luận Lý giải Được chia sẻ chung bởi tất cả các đối tượng thuộc lớp đó.
Câu 3:Mục đích chính của tính đóng gói (Encapsulation) là gì?
💡 Lời giải chi tiết:
Tính đóng gói bảo vệ tính toàn vẹn của dữ liệu bằng cách hạn chế quyền truy cập trực tiếp vào các thành phần nội bộ của đối tượng. Kết luận Lý giải Che giấu chi tiết cài đặt bên trong và chỉ lộ ra giao diện tương tác.
Câu 4:Mối quan hệ 'is-a' (là một) trong lập trình hướng đối tượng thường được thể hiện thông qua cơ chế nào?
💡 Lời giải chi tiết:
Kế thừa thiết lập một phân cấp giữa lớp cha và lớp con, trong đó lớp con kế thừa các đặc tính để khẳng định nó là một kiểu của lớp cha. Kết luận Lý giải Kế thừa (Inheritance).
Câu 5:Tính đa hình (Polymorphism) cho phép thực hiện điều gì sau đây?
💡 Lời giải chi tiết:
Tính đa hình cho phép các đối tượng thuộc các lớp khác nhau phản hồi cùng một thông điệp (lời gọi hàm) theo những cách riêng biệt. Kết luận Lý giải Một đối tượng có thể thực hiện một hành động theo nhiều cách khác nhau.
Câu 6:Điều gì xảy ra khi bạn cố gắng khởi tạo một đối tượng từ một lớp trừu tượng (Abstract Class)?
💡 Lời giải chi tiết:
Lớp trừu tượng được thiết kế để làm lớp cơ sở cho các lớp khác kế thừa và không đầy đủ các cài đặt để có thể tồn tại độc lập dưới dạng đối tượng. Kết luận Lý giải Chương trình sẽ báo lỗi biên dịch vì lớp trừu tượng không thể khởi tạo.
Câu 7:'Vấn đề viên kim cương' (Diamond Problem) trong đa kế thừa dẫn đến hệ quả tiêu cực nào?
💡 Lời giải chi tiết:
Theo lý thuyết hướng đối tượng, đa kế thừa từ hai lớp có chung một lớp cha sẽ khiến lớp con cuối cùng không xác định được phương thức nào cần gọi. Kết luận Lý giải Gây ra sự nhập nhằng khi gọi các phương thức trùng tên từ các lớp cha.
Câu 8:Khẳng định nào sau đây là ĐÚNG về phương thức khởi tạo (Constructor)?
💡 Lời giải chi tiết:
Constructor là một phương thức đặc biệt được tự động kích hoạt khi đối tượng được tạo ra để thiết lập các giá trị ban đầu mà không trả về kết quả. Kết luận Lý giải Không có kiểu trả về và tên phải trùng với tên lớp.
Câu 9:Thành phần được đánh dấu với phạm vi truy cập 'private' có thể được truy cập từ đâu?
💡 Lời giải chi tiết:
Từ khóa 'private' thiết lập mức độ bảo mật cao nhất bằng cách giới hạn quyền truy cập vào thành phần chỉ trong nội bộ của chính lớp đó. Kết luận Lý giải Chỉ từ bên trong lớp mà nó được định nghĩa.
Câu 10:Để ghi đè (override) một phương thức của lớp cha, lớp con cần đảm bảo điều kiện gì?
💡 Lời giải chi tiết:
Ghi đè phương thức yêu cầu sự trùng khớp hoàn toàn về chữ ký phương thức để trình biên dịch có thể thực hiện liên kết động tại thời điểm chạy. Kết luận Lý giải Phải có cùng tên, kiểu trả về và danh sách tham số với lớp cha.
Câu 11:Mối quan hệ 'Aggregation' (tập hợp) khác với 'Composition' (tổng hợp) ở điểm nào?
💡 Lời giải chi tiết:
Aggregation là một dạng quan hệ 'một phần của' lỏng lẻo hơn, nơi mà vòng đời của các đối tượng thành phần không phụ thuộc hoàn toàn vào đối tượng chứa. Kết luận Lý giải Trong Aggregation, các thành phần có thể tồn tại độc lập với lớp chứa.
Câu 12:Khi nào phương thức hủy (Destructor) thường được gọi?
💡 Lời giải chi tiết:
Destructor chịu trách nhiệm giải phóng các tài nguyên đã cấp phát cho đối tượng khi nó không còn cần thiết cho chương trình nữa. Kết luận Lý giải Khi đối tượng bị xóa hoặc đi ra khỏi phạm vi sử dụng.
Câu 13:Từ khóa 'this' trong hầu hết các ngôn ngữ hướng đối tượng được dùng để làm gì?
💡 Lời giải chi tiết:
Con trỏ hoặc tham chiếu 'this' cho phép lập trình viên phân biệt rõ ràng giữa các thuộc tính của đối tượng và các tham số cục bộ trong phương thức. Kết luận Lý giải Để tham chiếu đến chính thực thể (đối tượng) hiện tại của lớp.
Câu 14:Giao diện (Interface) trong lập trình hướng đối tượng chủ yếu dùng để làm gì?
💡 Lời giải chi tiết:
Interface đóng vai trò như một bản hợp đồng yêu cầu các lớp thực thi phải cung cấp cài đặt cho các hành vi đã được liệt kê. Kết luận Lý giải Định nghĩa một tập hợp các quy tắc (hành vi) mà các lớp phải tuân theo.
Câu 15:Từ khóa 'super' (hoặc 'base' trong C#) thường được dùng để làm gì trong lớp con?
💡 Lời giải chi tiết:
Từ khóa này cho phép lớp con tận dụng hoặc ghi đè mở rộng các chức năng từ lớp cơ sở mà nó kế thừa. Kết luận Lý giải Để truy cập vào các thành viên hoặc phương thức khởi tạo của lớp cha.
Câu 16:Nếu một lớp được khai báo là 'final' (trong Java) hoặc 'sealed' (trong C#), điều đó có nghĩa là gì?
💡 Lời giải chi tiết:
Các từ khóa này được sử dụng để bảo mật cấu trúc thiết kế, ngăn chặn việc thay đổi logic thông qua cơ chế kế thừa. Kết luận Lý giải Lớp đó không thể bị kế thừa bởi bất kỳ lớp nào khác.
Câu 17:Hạn chế nào sau đây áp dụng cho phương thức tĩnh (static method)?
💡 Lời giải chi tiết:
Do phương thức tĩnh thuộc về lớp chứ không thuộc về bất kỳ đối tượng cụ thể nào, nó không có khái niệm tham chiếu 'this' để truy cập dữ liệu đối tượng. Kết luận Lý giải Không thể truy cập trực tiếp các biến thực thể (non-static) của lớp.
Câu 18:Điều kiện cần thiết để nạp chồng phương thức (Method Overloading) là gì?
💡 Lời giải chi tiết:
Nạp chồng phương thức cho phép cùng một tên hàm thực hiện các nhiệm vụ tương tự với các kiểu dữ liệu hoặc số lượng tham số khác nhau. Kết luận Lý giải Các phương thức phải cùng tên nhưng khác nhau về danh sách tham số.
Câu 19:Phạm vi truy cập 'protected' cho phép một thành phần được truy cập bởi ai?
💡 Lời giải chi tiết:
Cấp độ truy cập 'protected' được thiết kế để hỗ trợ tính kế thừa, cho phép các lớp dẫn xuất sử dụng tài nguyên của lớp cha. Kết luận Lý giải Các lớp con và các lớp trong cùng một gói (package).
Câu 20:Trong kỹ thuật 'Deep Copy' (sao chép sâu), các đối tượng con được xử lý như thế nào?
💡 Lời giải chi tiết:
Sao chép sâu đảm bảo rằng hai đối tượng hoàn toàn độc lập về bộ nhớ bằng cách đệ quy tạo mới tất cả các tham chiếu bên trong. Kết luận Lý giải Toàn bộ nội dung và các đối tượng con được tạo mới hoàn toàn.
Câu 21:Tại sao trong C++, một lớp cơ sở nên có một phương thức hủy ảo (virtual destructor)?
💡 Lời giải chi tiết:
Nếu phương thức hủy không ảo, việc xóa một đối tượng lớp con qua con trỏ lớp cha có thể dẫn đến rò rỉ bộ nhớ do chỉ có phần lớp cha bị hủy. Kết luận Lý giải Để đảm bảo phương thức hủy của lớp con được gọi khi xóa đối tượng thông qua con trỏ lớp cha.
Câu 22:Sự khác biệt cơ bản giữa Trừu tượng hóa (Abstraction) và Đóng gói (Encapsulation) là gì?
💡 Lời giải chi tiết:
Trừu tượng hóa giúp ẩn đi các chi tiết phức tạp để trình bày giao diện đơn giản, trong khi đóng gói là cơ chế để thực hiện việc ẩn giấu đó. Kết luận Lý giải Trừu tượng hóa tập trung vào 'cái gì', Đóng gói tập trung vào 'như thế nào'.
Câu 23:Ép kiểu xuống (Downcasting) trong lập trình hướng đối tượng là gì?
💡 Lời giải chi tiết:
Downcasting là hành động chuyển đổi kiểu dữ liệu ngược lên trong cây kế thừa nhưng tiềm ẩn rủi ro nếu đối tượng thực sự không thuộc lớp con đó. Kết luận Lý giải Chuyển đổi một đối tượng từ lớp cha sang kiểu của lớp con.
Câu 24:Nguyên lý 'Single Responsibility Principle' (SRP) trong SOLID quy định điều gì?
💡 Lời giải chi tiết:
Nguyên lý này giúp giảm sự phụ thuộc chéo và làm cho mã nguồn dễ bảo trì, mở rộng hơn bằng cách phân tách rõ ràng nhiệm vụ. Kết luận Lý giải Một lớp chỉ nên có một lý do duy nhất để thay đổi (đảm nhận một trách nhiệm duy nhất).
Câu 25:Nguyên lý 'Open/Closed Principle' (OCP) khuyên lập trình viên điều gì?
💡 Lời giải chi tiết:
Mục tiêu của OCP là cho phép thêm chức năng mới cho hệ thống mà không cần phải thay đổi các đoạn mã nguồn hiện có đã hoạt động ổn định. Kết luận Lý giải Phần mềm nên mở để mở rộng nhưng đóng để sửa đổi.