Ngôn ngữ C++
Trang 1A 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à tất cả các hoạt động này được sử dụng bởi mức điều khiển cao hơn , hoặc các hoạt động mà chúng sử dụng tập hợp các hoạt động của mức thấp hơn Ø Trừu tượng ngẫu nhiên : một đối tượng mà nó đóng gói một tập hợp các hoạt
động mà chúng không có quan hệ lẫn nhau
Chúng ta gọi toàn bộ tập hợp của các hoạt động mà một client có thể thi hành cho một đối tượng , cùng với những câu lệnh hợp lệ mà chúng có thể được
Trang 2gọi là protocol Một protocol biểu thị những cách thức mà một đối tượng có thể hành động và phản ứng , và do vậy cấu thành tổng thể bề ngoài tĩnh và động của trừu tượng
2 Sự đóng kín (Encapsulation) :
Tính đóng kín là quá trình phân chia các phần tử của một trừu tượng để cấu thành nên cấu trúc và hành vi của chính nó , đóng kín cho phép hoạt động giao tiếp của một trừu tượng và hiện thực của nó
Sự đóng kín là cơ chế liên kết mã và dữ liệu mà nó thao tác , và giữ cho cả hai được an toàn khỏi sự có thể thiệp từ bên ngoài và do sự sử dụng sai Trong ngôn ngữ hướng đối tượng , mã và dữ liệu liên kết với nhau để tạo thành một "hộp đen " độc lập Trong hộp này là tất cả mã và dữ liệu cần thiết Khi mã và dữ liệu liên kết với nhau như thế một đối tượng sẽ được tạo ra Nói cách khác, đối tượng là một dụng cụ hỗ trợ cho sự đóng kín
Trong một đối tượng: mã , dữ liệu hoặc cả hai có thể là private ( riêng ) của đối tượng đó hay public ( chung ) Mã hoặc dữ liệu riêng là thuộc về đối tượng đó và chỉ được truy cập với bộ phận của đối tượng Nghĩa là mã hoặc dữ liệu riêng không thể được truy cập bởi các phần khác của chương trình tồn tại ngoài đối tượng Khi dữ liệu là chung , các bộ phận khác của chương trình có thể truy cập nó mặc dù nó được định nghĩa trong một đối tượng Các phần chung của một đối tượng dùng để cung cập một giao diện có điều khiển cho các phần riêng của đối tượng
Nói chung , một đối tượng là một biến thuộc kiểu do người sử dụng định nghĩa Mỗi lần ta định nghĩa một đối tượng mới , ta tạo ra một loại dữ liệu mới Tính trừu tượng và đóng kín là hai khái niệm bổ sung nhau : trừu tượng 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) :
Trang 3Hệ 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 cấu trúc lập lại , trong khi đó nonvirtural base class có có kết quả là trùng bản sao ở lớp con
4 Bản chất của lớp :
Ø Class ( lớp ) : là tập hợp của các đối tượng cùng có một cấu trúc chung hay hành vi chung Một đối tượng đơn giản chỉ là một instance của lớp
Ø Interface của một lớp cho thấy bên ngoài của đối tượng và do đó nhấn mạnh đến tính trừu tượng trong khi che dấu cấu trúc và hành vi bên trong
Ø Implementation: của một lớp là cái nhìn bên trong của nó Implementation của một lớp cơ bản bao gồm tất cả các operation được định nghĩa trong interface Chúng ta chia interface của lớp thành 3 phần :
Ø Public : là khai báo được truy xuất tới mọi client
Ø Protected :là khai báo được truy xuất chỉ chính lớp đó , lớp con của nó , và lớp friend
Ø Private : là khai báo được truy xuất chỉ chính lớp đó và lớp friend 5 Mối quan hệ giữa các lớp :
Phần lớn ngôn ngữ hướng đối tượng hỗ trợ trực tiếp một vài kết hợp của những quan hệ sau đây :
Ø Association : gồm có quan hệ một - một , một -nhiều , nhiều -nhiều
Ø Inheritance ( thừa kế ) : là một lớp chia sẽ cấu trúc và hay hành vi được định nghĩa bởi một lớp ( đơn thừa kế ) hoặc nhiều lớp ( đa thừa kế )
Trang 4Ø Aggregation ( kết tập ) :quan hệ kết tập giữa các lớp giống như quan hệ kết tập giữa các đối tượng tương ứng với những lớp đó Đa thừa kế thường bị lẫn lộn với kết tập Trong C++ thừa kế protected hay private dẽ dàng được thay thế bởi kết tập protected hay private của instance của lớp cha , mà không mất tính ngữ nghĩa của nó