You are on page 1of 11

ÔN TẬP LÝ THUYẾT MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Câu 1:

Nêu khái niệm về sự kế thừa và những ưu nhược điểm của kế thừa trong việc
lập trình hướng đối tượng. Trường hợp nào thì có thể vi phạm tính kế thừa?
Cho ví dụ minh họa.

Khái niệm: Kế thừa là một trong những kỹ thuật của lập trình Hướng đối tượng, là cách 1
lớp có thể thừa hưởng lại những thuộc tính, phương thức từ 1 lớp khác và sử dụng chúng như
là của bản thân mình, trong đó lớp cho kế thừa (gọi là lớp cơ sở- Super class), lớp được kế thừa
gọi là lớp dẫn xuất (lớp con - Subclass). Ngoài ra, lớp dẫn xuất có thể mở rộng các thành phần
(thuộc tính và phương thức) đã kế thừa và bổ sung thêm các thành phần (thuộc tính và phương
thức) mới. Lớp dẫn xuất không thừa kế các HÀM TẠO, HÀM HỦY và HÀM TOÁN TỬ GÁN
của các lớp cơ sở. Tính thừa kế được dùng để biểu diễn mối quan hệ đặc biệt hóa – tổng quát
hóa giữa các lớp.
-Cú pháp khai báo :

- Trong OOP có một số loại kế thừa :


+ Đơn kế thừa (kế thừa dọc từ trên xuống)
+ Đa kế thừa ( kế thừa chéo )
- Ưu điểm :
+ Tăng khả năng tái sử dụng, tổ chức các lớp dựa trên chia sẻ mã chương trình chung, dễ dàng
chỉnh sửa, nâng cấp hệ thống khi cần, giúp giảm chi phí phát triển và bảo trì
+ Các lớp dẫn xuất sẽ tuân thủ theo một giao diện (interface) chuẩn
+ Lập trình viên có điều kiện thuận lợi để tạo các thư viện lớp (class libraries)
- Nhược điểm :
+ Các chức năng được kế thừa hoạt động chậm hơn chức năng bình thường, vì nó được thực
hiện gián tiếp (lấy từ lớp cha) chứ không phải trực tiếp.
+ Thông thường, các dữ liệu thành viên trong lớp cha không được sử dụng. Điều này có thể
dẫn đến lãng phí bộ nhớ.
+ Một thay đổi ở lớp cơ sở sẽ ảnh hưởng đến tất cả lớp dẫn xuất
+ Nếu sử dụng Tính kế thừa không đúng cách có thể dẫn đến các cách giải quyết sai lầm sau
này

Câu 2: Nêu khái niệm về trừu tượng hóa và những ưu nhược điểm của trừu
tượng hóa trong việc lập trình. Cho ví dụ minh họa.

- Trừu tượng hoá là


- Ưu nhược điểm:
+ Ưu điểm:
+ Nhược điểm:
- Ví dụ:

Câu 3: Nêu khái niệm về đa hình và những ưu nhược điểm của đa hình trong
việc lập trình hướng đối tượng. Cho ví dụ minh họa.
Khái niệm: Đa hình trong lập trình hướng đối tượng là một khái niệm quan trọng cho phép một
đối tượng có thể hiển thị nhiều hình dạng khác nhau thông qua việc sử dụng cùng một giao diện
hoặc lớp cơ sở. Điều này có nghĩa là các đối tượng có thể thực hiện cùng một hành động
(phương thức) theo cách riêng biệt dựa trên loại đối tượng cụ thể.

Ưu điểm của đa hình trong lập trình hướng đối tượng:


● Tái sử dụng mã nguồn: Đa
● hình cho phép bạn tái sử dụng mã nguồn thông qua việc thừa kế và ghi đè phương thức.
Bạn có thể xây dựng các lớp con để mở rộng và tùy chỉnh các hành vi của lớp cơ sở.
● Mở rộng tính linh hoạt: Đa hình cho phép bạn mở rộng chức năng của mã nguồn mà
không cần sửa đổi mã nguồn gốc. Bạn có thể thêm các lớp con mới mà không ảnh hưởng
đến lớp cơ sở.
● Tích hợp dễ dàng: Đa hình giúp tạo ra một giao diện thống nhất cho các đối tượng có
tính chất tương tự nhưng hoạt động khác nhau. Điều này làm cho việc tích hợp các phần
mềm dễ dàng hơn.
● Giữ nguyên thiết kế lớp cs
● Giảm kích thước chương trình
● Giúp phần mềm hoạt động linh hoạt
Nhược điểm của đa hình trong lập trình hướng đối tượng:
● Phức tạp hóa: Sử dụng đa hình có thể làm cho cấu trúc mã nguồn trở nên phức tạp hơn
vì các phương thức và lớp con cần được quản lý thêm.
● Hiệu suất: Một số trường hợp sử dụng đa hình có thể ảnh hưởng đến hiệu suất ứng dụng,
đặc biệt trong các ứng dụng yêu cầu xử lý nhanh như game và ứng dụng đồ họa.
● Khả năng hiểu và bảo trì: Khi một chương trình có nhiều lớp con và phương thức ghi
đè, việc hiểu và bảo trì mã nguồn có thể trở nên phức tạp hơn.
VD: Một người cùng một lúc có thể có đặc điểm khác nhau. Giống như một người đàn
học sinh thời là một người con trai, một người bạn, một người anh. Vì vậy, cùng một
người sở hữu những hành vi khác nhau trong các tình huống khác nhau. Điều này
được gọi là đa hình.

Câu 4: Nêu khái niệm về đóng gói và những ưu nhược điểm của đóng gói trong
việc lập trình. Trường hợp nào thì có thể vi phạm tính đóng gói? Cho ví dụ
minh họa.
- Ưu điểm:
+ Phân cấp quyền access vào data
+ Data Security
+ Khả năng bảo trì
+ Đảm bảo tính thiết kế
- Nhược điểm:
+ Khả năng truy cập dữ liệu sẽ phức tạp
+ Hao tốn chi phí. Tuy nhiên không ảnh hưởng đến ưu điểm.

Câu 5:
a. Phân biệt các phạm vi truy cập private, protected và public.

Việc truy nhập đến các thành phần lớp cơ sở phụ thuộc vào 2 yếu tố

+ Các thành phần đó được khai báo là private (mặc định) hay public hay
protected trong lớp cơ sở => Truy xuất theo chiều dọc.

Private Protected Public

§ Chỉ được phép truy § Để trong lớp dẫn Tất cả các thành
nhập bởi hàm thành xuất có thể truy nhập phần public của lớp
phần của lớp/hàm bạn đến các thuộc tính của cơ sở/lớp dẫn xuất
của lớp. lớp cơ sở ta khai báo đều có thể truy nhập
các thuộc tính này là được tại bất kỳ chỗ
§ Lớp dẫn xuất thành phần protected nào trong chương
không được phép truy của lớp cơ sở. trình (thông qua tên
nhập đến các thành lớp hoặc đối tượng
phần này. § Như vậy thành của lớp cơ sở/lớp dẫn
phần protected của lớp xuất).
cơ sở được phép truy
nhập trong các lớp - Thường thì các
dẫn xuất trực tiếp từ phương thức sẽ là
lớp này. thành phần public
của lớp cơ sở.

§ Kiểu dẫn xuất là private (mặc định) hay public hay protected được chỉ định khi
định nghĩa lớp dẫn xuất => Truy xuất theo chiều ngang
· Kiểu dẫn xuất private: các thành phần protected và public của lớp cơ sở sẽ trở
thành các thành phần private của lớp dẫn xuất.
· Kiểu dẫn xuất public: các thành phần protected và public của lớp cơ sở sẽ trở
thành các thành phần protected và public của lớp dẫn xuất.
· Kiểu dẫn xuất protected: các thành phần protected và public của lớp cơ sở sẽ trở
thành các thành phần protected của lớp dẫn xuất.

Chỉ định truy Các kiểu kế thừa


cập thành viên
lớp cơ sở Kế thừa public Kế thừa protected Kế thừa Private

- Trở thành - Trở thành các - Trở thành các


Public các thành phần thành phần thành phần private
public trong lớp protected trong lớp trong lớp dẫn xuất
dẫn xuất dẫn xuất - Có thể truy cập
- Có thể - Có thể truy cập trực tiếp bởi các
truy cập trực trực tiếp bởi các hàm thành viên non-
tiếp bởi các hàm hàm thành viên non- static, hàm bạn
thành viên non- static, hàm bạn
static, hàm bạn
và những hàm
không là hàm
thành viên
- Trở thành - Trở thành các - Trở thành các
Protected các thành phần thành phần thành phần private
protected trong protected trong lớp trong lớp dẫn xuất
lớp dẫn xuất dẫn xuất - Có thể truy cập
- Có thể - Có thể truy cập trực tiếp bởi các hàm
truy cập trực trực tiếp bởi các thành viên non-static,
tiếp bởi các hàm thành viên non- hàm bạn
hàm thành viên static, hàm bạn
non-static, hàm
bạn
- Bị ẩn đi ở - Bị ẩn đi ở lớp - Bị ẩn đi ở lớp
Private lớp dẫn xuất dẫn xuất dẫn xuất
- Có thể - Có thể truy cập - Có thể truy cập
truy cập bởi bởi các hàm thành bởi các hàm thành
các hàm thành viên non-static, hàm viên non-static, hàm
viên non-static, bạn thông qua các bạn thông qua các
hàm bạn thông hàm thành viên hàm thành viên
qua các hàm protected hay public protected hay public
thành viên của lớp cơ sở của lớp cơ sở
protected hay
public của lớp
cơ sở

b. Cho biết ý nghĩa và mục đích của các hàm get/set trong một lớp
Đây là hai phương thức cho phép can thiệp vào quá trình thiết lập giá trị và lấy giá trị
của một thuộc tính nào đó trong 1 class, về cơ bản nó đóng vai trò như cổng ra vào
cho data
Với ví dụ này ta có biến name là kiểu private nên thông qua Get/Set ta có thể
thao tác được với name

Mục đích của Get/Set là để kiểm soát dữ liệu, chúng ta có thể quy định chỉ có thể đọc,
hoặc chỉ có thể ghi dữ liệu từ bên ngoài class, thực hiện một chuỗi các hành động liên
quan đến xử lý khi truy cập vào data đó hoặc thay đổi giá trị của data đó.

Get Set
Ý nghĩa

Mục Đích

Câu 6:
a. Phân biệt khái niệm lớp và đối tượng trong lập trình hướng đối tượng.
- Lớp (class):
- Đối tượng:

Lớp Đối tượng

b. Trình bày khái niệm đa hình trong lập trình hướng đối tượng. Cho ví dụ
minh họa.
- Đa Hình

Câu 7: Phân biệt các kiểu kế thừa private, protected, public


- Private
- Protected
- Public
Câu 8: Trình bày các đặc điểm quan trọng của lập trình hướng đối tượng
Các đặc điểm quan trọng của lập trình hướng đối tượng:
● Tính đóng gói (Encapsulation)
● Tính kế thừa (Inheritance)
● Tính đa hình (Polymorphism)
● Tính trừu tượng (Abstraction)

Câu 9:
Trình bày khái niệm của lớp cơ sở trừu tượng (abstract class). Lớp cơ sở trừu
tượng được cài đặt trong C++ như thế nào?
-
Là lớp cơ sở chứa pt thuần ảo
Chỉ dùng làm lớp cơ sở ko dùng tạo object

Câu 10:
a. Hàm thuần ảo là gì? Lớp trừu tượng là gì? Cho ví dụ minh họa.
- Hàm thuần ảo là hàm chỉ có khai báo kiểu hàm, tên hàm, danh sách các đối số, không cài
đặt mã nguồn và được khai báo là ảo bằng từ khóa virtual.
Ví dụ:
- Lớp trừu tượng là
b. Hãy nêu các đặc điểm quan trọng của lập trình hướng đối tượng. (trùng câu
8)
-
Câu 11:
Phân biệt khái niệm overload (tải chồng) và override (ghi đè) trong lập trình
hướng đối tượng.
Overload Override

-
Câu 12:
Trình bày khái niệm Hàm bạn, lớp bạn. Ưu nhược điểm. Cho ví dụ minh họa.

Câu 13:
Nêu vai trò của hàm tạo (Constructor), hàm hủy (destructor) trong định nghĩa
lớp
Câu 14:
Trình bày phép gán trong lập trình hướng đối tượng. Tại sao phải xây dựng
phép gán cho lớp? Cho ví dụ minh họa.

- Toán tử gán dùng để gán 1 đối tượng này cho 1 đối tượng khác, mặc định sẽ
sao chép đối tượng nguồn vào đối tượng đích theo từng bit 1.

- Tuy nhiên, khi lớp có các thuộc tính kiểu con trỏ hay tham chiếu thì không thể
sử dụng toán tử gán mặc định mà phải xây dựng toán tử gán cho lớp.

Câu 15:
Trình bày kỹ thuật nạp chồng (overloading) trong các tình huống không lập
trình hướng đối tượng, trong lập trình hướng đối tượng và hàm bạn. Cho ví
dụ minh họa?

Câu 16:
Trình bày kỹ thuật đa năng hóa toán tử (nạp chồng toán tử) trong xây dựng một
lớp. So sánh với cách xây dựng hàm tính toán tương ứng với toán tử. Cho ví dụ
minh họa.

· Định Nghĩa:

Toán tử (operator) là các kí hiệu được dùng để thực hiện một phép toán trong ngôn ngữ
lập trình (vd: +, -). Nạp chồng là việc định nghĩa nhiều hàm có cùng tên, nhưng khác
tham số truyền vào. Nạp chồng toán tử là việc cài đặt các toán tử cho các kiểu dữ liệu tự
định nghĩa, việc này cho phép ta viết các biểu thức một cách tự nhiên như trên các kiểu
dữ liệu cơ sở, thay v

ì phải gọi hàm (về bản chất thì vẫn là gọi hàm)

· So sánh nạp chồng toán tử vs xây dựng hàm tính toán tương ứng với toán tử
Giống nhau:

- Bản chất khi sử dụng toán tử đã được nạp chồng thì đều là gọi hàm tính toán được
định nghĩa cho kiểu dữ liệu/ class đó.

- Trình biên dịch sẽ xác định định nghĩa thích hợp nhất để sử dụng, bằng cách so
sánh các kiểu đối số mà người dùng đã sử dụng để gọi hàm hoặc toán tử với các kiểu
tham số được chỉ định trong định nghĩa.

Khác nhau:

- Nạp chồng toán tử cho phép các toán tử có một ý nghĩa mở rộng ngoài ý nghĩa
hoạt động được xác định trước của chúng.

- Nạp chồng toán tử khiến cho chương trình dễ đọc và dễ diễn đạt hơn

- Hàm tính toán có thể tạo mới, nhưng nạp chồng toán tử chỉ có thể thực hiện trên
các toán tử đã được định nghĩa sẵn ở các lớp cơ sở, nói cách khác là không tạo được
toán tử mới.

Câu 17:
Trình bày kỹ thuật liên kết động. Cho ví dụ minh họa

Câu 18:
Trình bày toán tử (). Cho ví dụ minh họa.

Câu 19:
Trình bày con trỏ hàm. Cho ví dụ minh họa.
Con trỏ hàm là một biến lưu trữ địa chỉ của một hàm, thông qua biến
đó, ta có thể gọi hàm mà nó trỏ tới
Câu 20:
So sánh hàm tạo sao chép và phép gán. Cho ví dụ minh hoạ.
Câu 21: Constructor ( phương thức thiết lập hay còn gọi là phương thức khởi
tạo) là gì?

Hãy kể tên các loại phương thức thiết lập và cho ví dụ tương ứng từng loại.

Hãy nêu 3 đặc điểm khác nhau giữa phương thức thiết lập và phương thức huỷ

Câu 22: Phân biệt chuyển kiểu bằng phương thức thiết lập và chuyển kiểu
bằng toán tử chuyển kiểu. Cho ví dụ minh hoạ.
Câu A

You might also like