A. GIỚI THIỆU C++
C++ là một ngôn ngữ lập trình hướng đối tượng (Object Oriented
Programming), trong đó chương trình được tổ chức như tập hợp của những đối
tượng hợp tác với nhau , mỗi đối tượng đại diện cho một instance của lớp và
những lớp mà chúng là thành viên của một lớp phân cấp thông qua quan hệ thừa
kế .
Phương pháp thiết kế hướng đối tượng vừa mới phát triển nhằm giúp nhà
phát triển khai thác được sức mạnh của đối tượng, dùng các lớp và đối tượng
như là những khối xây dựng cơ sở.
Ta có thể nói một ngôn ngữ là hướng đối tượng nếu và chỉ nếu nó thỏa
mãn những yêu cầu sau :
Ø Nó có thể tạo những đối tượng là dữ liệu trừu tượng với một giao tiếp của
những operation(tác vụ) đã đònh và một trạng thái ẩn bên trong .
Ø Lớp có thể thừa kế thuộc tính từ lớp cha .
Một mô hình mà thiếu một trong những đặc tính trên thì không phải là hướng
đối tượng.
1. Tính trừu tượng (Abstraction) :
Sự trừu tượng thể hiện những đặc tính cốt yếu của một đối tượng mà
những đặc tính này dùng để phân biệt đối tượng này với tất cả các loại đối
tượng khác và do vậy cung cấp một cách rõ ràng giới hạn ý niệm được đònh
nghóa, liên quan tới viễn tượng của người nhìn.
Trừu tượng tập trung vào cái nhìn bề ngoài của đối tượng và do đó thoả
mãn được các hành vi chủ yếu của đối tượng riêng biệt từ hiện thực của nó .
Ta có thể có các loại trừu tượng sau :
Ø Thực thể trừu tượng : một đối tượng mà nó đại diện cho một mô hình hữu
dụng của một miền vấn đề hay thực thể miền giải quyết .
Ø Operation abstraction ( hoạt động trừu tượng ) : một đối tượng mà nó cung
cấp một tập tổng quát của các operation , tất cả các operation thực thi cùng
một loại chức năng
Ø Máy ảo trừu tượng : một đối tượng mà nó nhóm các hoạt động với nhau , và
thì tập trung vào những hành vi có thể quan sát được của đối tượng , còn tính
đóng kín tập trung vào hiện thực cho hành vi đó . Tính đóng kín thường đạt được
thông qua che dấu thông tin , tức là quá trình che dấu mọi bí mật của đối tượng
mà không đóng góp vào đặc tính thiết yếu của đối tượng đó ; thông thường cấu
trúc của đối tượng được che dấu cũng như hiện thực của những method của đối
tượng .
Đặc biệt các thành viên có thể được đặt vào public , private , hay
protected của lớp . Thành viên được khai báo là public thì thấy được đối với mọi
client , những thành viên khai báo là private thì hoàn toàn đóng kín , và những
thành viên khai báo là protected thì chỉ thấy với chính lớp của nó và những lớp
con của nó . C++ cũng còn cho phép ký hiệu friend : là lớp cùng hợp tác được
phép thấy những phần private của nhau .
3. Hệ thống phân cấp (Hierachy) :
Hệ thống phân cấp là một sự sắp xếp theo thứ bậc hay sắp đặt các trừu
tượng . Có hai phân cấp quan trọng nhất trong một hệ thống phức tạp là :
chuyên biệt ( phân cấp " is a" ) , và kết hợp ( phân cấp " part of " ).
Thừa kế đơn giản : thừa kế là mối quan hệ " is a " . Thừa kế đònh nghóa
một mối quan hệ giữa các lớp , trong đó một lớp chia sẻ cấu trúc và hành vi đã
được đònh nghóa trong một lớp hay nhiều lớp ( tương ứng với thừa kế đơn giản
và đa thừa kế ) . Do đó thừa kế như là sự phân cấp của các trừu tượng , trong đó
một lớp con thừa kế một hay nhiều lớp cha .
Đa thừa kế đưa đến một số vấn đề phức tạp cho ngôn ngữ lập trình .
Những ngôn ngữ phải đưa ra hai vấn đề : xung đột giữa tên của các lớp cha
khác nhau , và thừa kế được lập lại nhiều lần . Sự xung đột xảy ra khi hai hay
nhiều lớp cha cung cấp một trường hay toán tử với cùng một tên . Sự thừa kế lập
lại xảy ra khi hai hay nhiều lớp cha cùng cấp cùng chia sẻ một lớp cha chung .
Và trong trường hợp như vậy , lớp lá có một bản sao hay nhiều bản sao cấu trúc
của lớp cha được dùng chung đó . Một số ngôn ngữ thì không cho phép thừa kế
lập lại , một số khác thì chọn hướng khác . C++ cho phép người lập trình quyết
đònh : virtual base class ( lớp cơ sở ảo ) được dùng để chỉ ra sự dùng chung của