4 câu hỏi 90 phút
Hãy giải thích và cho ví dụ minh họa các khái niệm tính trừu tượng (Abstraction), Tính bao bọc (Encapsulation) của lập trình hướng đối tượng
Tính trừu tượng (Abstraction) là việc ẩn đi các chi tiết phức tạp và chỉ hiển thị những thông tin cần thiết.
Ví dụ, khi lái xe, bạn không cần biết động cơ hoạt động thế nào, bạn chỉ cần biết cách điều khiển vô lăng, phanh, ga.
Tính bao bọc (Encapsulation) là việc đóng gói dữ liệu và phương thức vào trong một đơn vị (class) và bảo vệ dữ liệu khỏi sự truy cập trực tiếp từ bên ngoài.
Ví dụ, một lớp 'Ngân hàng' có thuộc tính 'số dư' được bảo vệ và chỉ có thể truy cập thông qua các phương thức 'gửi tiền' và 'rút tiền'.
50 câu hỏi 60 phút
45 câu hỏi 60 phút
50 câu hỏi 60 phút
22 câu hỏi 60 phút
50 câu hỏi 60 phút
50 câu hỏi 60 phút
50 câu hỏi 60 phút
50 câu hỏi 60 phút
50 câu hỏi 60 phút
50 câu hỏi 60 phút
Tính trừu tượng (Abstraction) là việc ẩn đi các chi tiết phức tạp và chỉ hiển thị những thông tin cần thiết.
Ví dụ, khi lái xe, bạn không cần biết động cơ hoạt động thế nào, bạn chỉ cần biết cách điều khiển vô lăng, phanh, ga.
Tính bao bọc (Encapsulation) là việc đóng gói dữ liệu và phương thức vào trong một đơn vị (class) và bảo vệ dữ liệu khỏi sự truy cập trực tiếp từ bên ngoài.
Ví dụ, một lớp 'Ngân hàng' có thuộc tính 'số dư' được bảo vệ và chỉ có thể truy cập thông qua các phương thức 'gửi tiền' và 'rút tiền'.
Tính kế thừa (Inheritance):
Tính kế thừa là một cơ chế cho phép một lớp (lớp con/lớp dẫn xuất) kế thừa các thuộc tính và phương thức từ một lớp khác (lớp cha/lớp cơ sở). Lớp con sẽ tự động có tất cả các đặc điểm của lớp cha và có thể mở rộng hoặc sửa đổi chúng. Điều này giúp tránh việc lặp lại code, tăng tính tái sử dụng và tổ chức code một cách có hệ thống.
Vehicle
(Phương tiện) với các thuộc tính chung như brand
(Nhãn hiệu), model
(Mẫu xe) và phương thức startEngine()
(Khởi động động cơ). Ta có thể tạo các lớp con như Car
(Ô tô), Motorcycle
(Xe máy) kế thừa từ lớp Vehicle
. Các lớp Car
và Motorcycle
sẽ tự động có các thuộc tính brand
, model
và phương thức startEngine()
. Ngoài ra, chúng có thể có thêm các thuộc tính và phương thức riêng, ví dụ Car
có thêm thuộc tính numberOfDoors
(Số cửa) và Motorcycle
có thêm thuộc tính hasSidecar
(Có thùng xe).Tính đa hình (Polymorphism):
Tính đa hình cho phép các đối tượng thuộc các lớp khác nhau phản ứng khác nhau đối với cùng một phương thức gọi. Có hai dạng đa hình chính:
Đa hình thời gian biên dịch (Compile-time polymorphism) / Nạp chồng (Overloading): Cho phép định nghĩa nhiều phương thức cùng tên nhưng khác nhau về tham số (số lượng, kiểu dữ liệu). Khi gọi phương thức, trình biên dịch sẽ chọn phương thức phù hợp dựa trên tham số truyền vào.
Đa hình thời gian chạy (Runtime polymorphism) / Ghi đè (Overriding): Cho phép lớp con định nghĩa lại một phương thức đã có ở lớp cha. Khi gọi phương thức này trên một đối tượng thuộc lớp con, phương thức được định nghĩa trong lớp con sẽ được thực thi.
Ví dụ: Tiếp tục với ví dụ trên, lớp Vehicle
có phương thức accelerate()
(Tăng tốc). Các lớp Car
và Motorcycle
có thể ghi đè phương thức accelerate()
để thể hiện cách tăng tốc khác nhau. Khi gọi accelerate()
trên một đối tượng Car
, nó sẽ tăng tốc theo cách của ô tô, còn khi gọi trên một đối tượng Motorcycle
, nó sẽ tăng tốc theo cách của xe máy. Một ví dụ khác về nạp chồng, trong lớp Calculator
ta có thể định nghĩa nhiều phương thức add()
với các tham số khác nhau (ví dụ add(int a, int b)
, add(double a, double b)
, add(int a, int b, int c)
), trình biên dịch sẽ chọn phương thức add()
phù hợp dựa trên kiểu và số lượng tham số được truyền vào khi gọi hàm.
Câu hỏi yêu cầu xây dựng một lớp (class) trong lập trình để biểu diễn khái niệm đơn thức P(x) = a*x^b, nơi 'a' là hệ số và 'b' là số mũ. Lớp này cần có các chức năng sau:
Để giải quyết bài toán này, ta cần định nghĩa một lớp (class) có các thuộc tính (attributes) để lưu trữ hệ số và số mũ, và các phương thức (methods) để thực hiện các chức năng trên. Việc cài đặt cụ thể sẽ phụ thuộc vào ngôn ngữ lập trình được sử dụng (ví dụ: Python, Java, C++).
Vì câu hỏi này thuộc dạng tự luận và yêu cầu xây dựng code, không có một đáp án đúng duy nhất được định nghĩa trước. Các bạn học sinh sẽ cần viết code để triển khai các chức năng được mô tả. Do đó, trường 'answer_iscorrect' sẽ được để là 'Không có đáp án đúng'.
Câu hỏi này yêu cầu thiết kế một hệ thống quản lý sách cho thư viện trường học sử dụng lập trình hướng đối tượng. Các yêu cầu cụ thể bao gồm: thiết kế sơ đồ lớp, định nghĩa các lớp (Sách, Sách Giáo Khoa, Sách Tham Khảo), và xây dựng các phương thức để nhập/xuất danh sách sách, tính thành tiền, tìm sách giáo khoa theo nhà xuất bản.
Phân tích chi tiết:
Sách
sẽ là lớp cha, chứa các thuộc tính chung như mã sách, tên sách, nhà xuất bản, số lượng, đơn giá. Lớp Sách Giáo Khoa
và Sách Tham Khảo
sẽ kế thừa từ lớp Sách
và thêm các thuộc tính riêng (tình trạng sách cho Sách Giáo Khoa, tiền thuế cho Sách Tham Khảo).ArrayList
). Sau đó, xây dựng phương thức để hiển thị danh sách sách.Đây là một bài tập lập trình hướng đối tượng điển hình, đòi hỏi kiến thức về kế thừa, đa hình và sử dụng các cấu trúc dữ liệu để lưu trữ và quản lý dữ liệu. Vì câu hỏi này yêu cầu thiết kế và xây dựng chương trình, nên không có một đáp án cụ thể duy nhất mà sẽ có nhiều cách tiếp cận và triển khai khác nhau.