You are on page 1of 74

LẬP TRÌNH

HƯỚNG ĐỐI TƯỢNG


Chương 1

GIỚI THIỆU VỀ LẬP TRÌNH


HƯỚNG ĐỐI TƯỢNG
Phương pháp tiếp cận của lập trình
truyền thống
• Lập trình tuyến tính
– tư duy theo lối tuần tự.
– Đặc trưng
• Đơn giản
• Đơn luồng
– Tính chất
• Ưu điểm: chương trình đơn giản, dễ hiểu
• Nhược điểm: không thể dùng để giải quyết ứng
dụng phức tạp.
Phương pháp tiếp cận của lập trình
truyền thống
• Lập trình cấu trúc
– chương trình được chia nhỏ
– Đặc trưng
• Chương trình = Cấu trúc dữ liệu + Giải thuật
– Tính chất
• Mỗi chương trình con có thể được gọi thực hiện nhiều lần
• Cung cấp một số cấu trúc lệnh điều khiển chương trình.
– Ưu điểm
• Chương trình dễ hiểu, dễ theo dõi.
• Tư duy giải thuật rõ ràng.
– Nhược điểm
• không hỗ trợ việc sử dụng lại mã nguồn
• Không phù hợp với các phần mềm lớn.
Phương pháp tiếp cận hướng đối tượng
• Phương pháp lập trình hướng đối tượng
– Khắc phục những hạn chế của lập trình hướng cấu
trúc
– Đóng gói dữ liệu
– Cho phép sử dụng lại mã nguồn
• Phương pháp phân tích và thiết kế hướng đối
tượng
• Mô tả bài toán
• Đặc tả yêu cầu
• Trích chọn đối tượng
• Mô hình hoá lớp đối tượng
• Thiết kế tổng quan
• Thiết kế chi tiết.
Các khái niệm cơ bản
• Đối tượng
• Lớp đối tượng
• Trừu tượng hóa đối tượng theo chức năng
• Trừu tượng hóa đối tượng theo dữ liệu
• Khái niệm kế thừa
• Khái niệm đóng gói
• Khái niệm đa hình.
Đối tượng
• các thực thể trong hệ thống hoạt động khi
chương trình đang chạy.
• Ví dụ:
– một chiếc xe nhãn hiệu “Ford”, màu trắng, giá
5000$ là một đối tượng.
• xác định bằng ba yếu tố:
– Định danh
– Trạng thái
– Hoạt động của đối tượng
Lớp đối tượng
• lớp là một khái niệm trừu tượng, dùng để chỉ một
tập hợp các đối tượng có mặt trong hệ thống.
• Ví dụ:
– “Xe hơi” là một lớp đối tượng dùng để chỉ tất cả các loại
xe hơi của cửa hàng.
• Đối tượng là một thể hiện cụ thể của lớp, là một
thực thể tồn tại trong hệ thống.
• Thuộc tính của lớp tương ứng với thuộc tính của
các đối tượng.
• Phương thức của lớp tương ứng với các hành
động của đối tượng.
Lớp đối tượng(tiếp)
• Một lớp có thể có một trong các khả năng
sau:
– Hoặc chỉ có thuộc tính, không có phương
thức.
– Hoặc chỉ có phương thức, không có thuộc
tính.
– Hoặc có cả thuộc tính và phương thức,
trường hợp này là phổ biến nhất.
– Đặc biệt là lớp trừu tượng. Các lớp này không
có đối tượng tương ứng.
Lớp đối tượng(tiếp)
• Lớp và đối tượng có mối liên hệ tương ứng lẫn
nhau, nhưng bản chất lại khác nhau:
– Lớp là sự trừu tượng hoá của các đối tượng. Trong
khi đó, đối tượng là một thể hiện của lớp.
– Đối tượng là một thực thể cụ thể, có thực, tồn tại
trong hệ thống. Trong khi đó, lớp là một khái niệm
trừu tượng.
– Tất cả các đối tượng thuộc về cùng một lớp có cùng
các thuộc tính và các phương thức.
– Một lớp là một nguyên mẫu của một đối tượng.
Trừu tượng hoá đối tượng
theo chức năng
• là quá trình mô hình hoá phương thức của lớp
dựa trên các hành động của các đối tượng.
• Các bước tiến hành:
– Tập hợp tất cả các hành động có thể có của các đối
tượng.
– Nhóm các đối tượng có các hoạt động tương tự nhau
– Mỗi nhóm đối tượng đề xuất một lớp tương ứng.
– Các hành động chung của nhóm đối tượng sẽ cấu
thành các phương thức của lớp tương ứng.
Trừu tượng hoá đối tượng
theo chức năng
• Ví dụ, mỗi ô tô là một đối tượng, chung các hành
động:
– Có thể khởi động máy.
– Có thể chạy.
– Có thể dừng lại.
– Có thể tắt máy.
Ngoài ra, một số ít xe có thể thực hiện một số hành
động cá biệt như:
– Có thể giấu đèn pha
– Có thể tự bật đèn pha
– Có thể tự động phát tín hiệu báo động.
Trừu tượng hoá đối tượng theo dữ liệu
• là quá trình mô hình hoá các thuộc tính của lớp
dựa trên các thuộc tính của các đối tượng tương
ứng.
• Ví dụ, mỗi ô tô là một đối tượng có chung các
thuộc tính:
– nhãn hiệu, màu sắc, giá bán, công suất động

Ngoài ra, một số ít xe có thể có thêm các thuộc
tính:
– dàn nghe nhạc, màn hình xem ti vi, kính chống
nắng, chống đạn…
Sự kế thừa
• Cho phép lớp dẫn xuất có thể sử dụng các
thuộc tính và phương thức của lớp cơ sở
• Cho phép việc chỉ cần cài đặt phương
thức ở một lớp cơ sở, mà có thể sử dụng
được ở tất cả các lớp dẫn xuất.
• Cho phép tránh sự cài đặt trùng lặp mã
nguồn của chương trình.
• Cho phép chỉ phải thay đổi một lần khi cần
phải thay đổi dữ liệu của các lớp.
Sự kế thừa (Inheritance)
Sự đóng gói
• Cho phép che dấu sự cài đặt chi tiết bên
trong của phương thức
• Cho phép che dấu dữ liệu bên trong của
đối tượng
• Cho phép hạn chế tối đa việc sửa lại mã
chương trình.
Tính đa hình
• Cho phép các lớp được định nghĩa các phương
thức trùng nhau: cùng tên, cùng số lượng và
kiểu tham số, cùng kiểu trả về.
• Việc định nghĩa phương thức trùng nhau của
các lớp kế thừa nhau còn được gọi là sự nạp
chồng phương thức.
• Khi gọi các phương thức trùng tên, dựa vào đối
tượng đang gọi mà chương trình sẽ thực hiện
phương thức của lớp tương ứng.
Tính đa hình (Polymorphism)
Thành phần private và public
Thành phần private
• là khu vực dành riêng cho lớp, không chia sẻ với
bất kì lớp khác từ bên ngoài.
• Thành phần private chỉ cho phép truy nhập trong
phạm vi nội bộ lớp.
• Thông thường các thành phần sau sẽ được đặt
vào khu vực private của lớp:
– Tất cả các thuộc tính dữ liệu của lớp
– Các phương thức trung gian, được sử dụng như các
bước tính toán đệm cho các phương thức khác.
Thành phần private và public
Thành phần public
• là khu vực mà Lớp có thể chia sẻ với tất cả các
chương trình và đối tượng bên ngoài. Có thể truy
nhập
– Bên trong lớp
– Bên ngoài lớp
• Các thành phần sẽ được đặt vào vùng chia sẻ
public của lớp:
– Các phương thức để nhập/xem (set/get) các thuộc tính
dữ liệu của lớp.
– Các phương thức cung cấp chức năng hoạt động, cách
cư xử của đối tượng đối với môi trường bên ngoài. Các
phương thức này thể hiện chức năng của các đối
tượng lớp.
Chương 2

CÁC MỞ RỘNG CỦA C++


Lịch sử của C++
• 1970, Simula 70 và Algol 68 đã có những
khái niệm về lớp và đơn thể
• Đầu những năm 1980, C++ được biết tên
gọi "C with Classes“.
• 1983-1984, "C with Classes" được thiết kế
mở rộng -> trình biên dịch C++ ra đời.
Các mở rộng của C++
• Các từ khóa mới của C++
class, delete, friend, inline, new, operator,
private, protected, public, this, virtual …
Các mở rộng của C++ (tiếp)
• Cách ghi chú thích
– Hai kiểu chú thích
/* chú thích */

//chú thích trên một dòng
Các mở rộng của C++ (tiếp)
• Dòng nhập/xuất chuẩn
– Sử dụng cin/cout (iostream.h) để nhập/xuất
Các mở rộng của C++ (tiếp)
• Cách chuyển đổi kiểu dữ liệu
– Kiểu(Biểu thức)
Các mở rộng của C++ (tiếp)
• Vị trí khai báo biến
– Cho phép khai báo linh hoạt bất kỳ vị trí nào
trong một phạm vi cho trước
– Xen kẽ khai báo dữ liệu với các câu lệnh thực
hiện.
Các mở rộng của C++ (tiếp)
• Hằng định kiểu
– const Kiểu Tên=Biểu_thức;
– const int MAXSIZE=1000;
• Đối với cấu trúc
typedef struct {
int x,y, color;
}PIXEL;
const PIXEL p={100, 100, 15};
Các mở rộng của C++ (tiếp)
• struct, union
– thực sự là các kiểu class
– tên của struct và union được xem luôn là tên
kiểu giống như khai báo bằng lệnh typedef
struct DIEM { struct DIEM {
int x, y, color; int x, y, color;
}; };
struct DIEM p; DIEM p;
Các mở rộng của C++ (tiếp)
• Toán tử định vị phạm vi
– Dùng để truy xuất một phần tử bị che bởi
phạm vi hiện thời
– Dùng trong định nghĩa hàm của các phương
thức trong các lớp, để khai báo các phương
thức chủ của các phương thức đang định
nghĩa.
– Dùng để phân biệt các thành phần trùng tên
của các lớp cơ sở.
Các mở rộng của C++ (tiếp)
• Toán tử new, delete
– Là phương thức mới để thực hiện việc cấp
phát động bộ nhớ.
– Sử dụng hai toán tử này sẽ linh hoạt hơn rất
nhiều so với các hàm thư viện của C.
Các mở rộng của C++ (tiếp)
• Toán tử new
– Cú pháp
new Tên_kiểu
new (Tên_kiểu)
new Tên_kiểu Giá_trị_khởi_tạo
new (Tên_kiểu) Giá_trị_khởi_tạo
– Nếu toán tử new cấp phát không thành công
thì nó sẽ trả về giá trị NULL.
Các mở rộng của C++ (tiếp)
• Toán tử delete
– Cú pháp
delete Con_trỏ
delete [] Con_trỏ
Các mở rộng của C++ (tiếp)

k=i*n+j
Các mở rộng của C++ (tiếp)
• Hàm inline
inline Kiểu Tên_hàm (các_tham_số)
{
//thân hàm
}
– Hàm inline phải được định nghĩa trước khi sử dụng
– Trình biên dịch chèn trực tiếp đoạn chương trình vào
chỗ hàm được gọi.
– Các hàm đệ quy không được là hàm inline
Các mở rộng của C++ (tiếp)
• Tham số giá trị mặc định
– Chỉ được khai báo trong prototype
– Phải được nhóm lại vào các tham số cuối
– Khi gọi chỉ có thể bỏ bớt từ phải sang trái và
phải liên tiếp nhau.
Các mở rộng của C++ (tiếp)
• Biến tham chiếu
– Biến tham chiếu giống như bí danh của biến
khác
– Khai báo Kiểu &Tên_biến
– Nếu không muốn thay đổi giá trị của tham số
qua biến tham chiếu thì khai báo
const kiểu &tên_biến
– Biến tham chiếu phải được khởi động khi khai
báo
Các mở rộng của C++ (tiếp)
• Chồng hàm
– Cho phép sử dụng một tên cho nhiều hàm khi
các hàm đó khác nhau về kiểu giá trị trả về
hoặc danh sách các tham số
Các giới hạn của chồng hàm
• Bất kỳ hai hàm nào trong tập các hàm đã chồng phải có
các tham số khác nhau
• Các hàm chồng với danh sách các tham số cùng kiểu
chỉ dựa trên kiểu trả về của hàm thì trình biên dịch báo
lỗi
• Các khai báo bằng lệnh typedef không định nghĩa kiểu
mới. Chúng không ảnh hưởng tới cơ chế chồng hàm.
• Đối với kiểu mảng và con trỏ được xem như đồng nhất
đối với sự phân biệt khác nhau giữa các phiên bản hàm
trong việc chồng hàm.
• const và các con trỏ (hay các tham chiếu) có thể dùng
để phân biệt
Các mở rộng của C++ (tiếp)
• Chồng toán tử

Kiểu operator kí_hiệu_toán_tử (Các_tham_số)


{
………………………………
}
Các giới hạn của chồng toán tử
• Không thể định nghĩa các toán tử mới.
• Các toán tử sau không được chồng là :
- toán tử phạm vi (::)
- Truy cập đến con trỏ là trường của struct hay thành viên
của class (.*)
- Truy cập đến trường của struct hay thành viên của class
(.)
- Toán tử điều kiện (?:)
- Toán tử sizeof
• Không thể thay đổi thứ tự ưu tiên của một toán tử hay
không thể thay đổi số các toán hạng của nó.
• Không thể thay đổi ý nghĩa của các toán tử khi áp dụng
cho các kiểu có sẵn.
• Các toán tử không thể có các tham số có giá trị mặc định
Chương 3

LỚP VÀ ĐỐI TƯỢNG


Lớp (Class)
• Lớp là sự mở rộng của các khái niệm cấu
trúc của C và bản ghi của Pascal. Ngoài
các thành phần dữ liệu, lớp còn chứa các
thành phần hàm (phương thức hay hàm
thành viên)
Lớp (tiếp)
class Tên_lớp {
//Khai báo các thành phần dữ liệu (thuộc tính)
//Khai báo các phương thức
};
//Định nghĩa các phương thức
• Thuộc tính của lớp thuộc các kiểu dữ liệu cơ sở, cấu trúc, con trỏ.
• Thuộc tính không có kiểu của chính lớp đó, nhưng có kiểu con trỏ
của chính lớp đó.
• Dùng private và public để quy định phạm vi sử dụng, nếu không quy
định thì mặc định là private.
• Các thành phần private chỉ được sử dụng bên trong lớp (trong thân
các phương thức của lớp).
• Các phương thức có thể xây dựng bên trong hoặc bên ngoài định
nghĩa lớp.
• Giá trị trả về của phương thức có thể có kiểu bất kỳ
Ví dụ
class Complex {
private:
double Real, Imaginary;
public:
Complex(); // Constructor mặc định
Complex(double R,double I);
Complex (const Complex & Z);
// Constructor sao chép
Complex (double R);
// Constructor chuyển đổi
void Print(); // Hiển thị số phức
};
Biến, mảng đối tượng
• Khai báo
Tên_lớp danh_sách_biến; //Ngăn cách bằng dấu phẩy
Tên_lớp danh_sách_mảng; //Ngăn cách bằng dấu phẩy

• Sử dụng các phương thức và các thuộc tính


Tên_biến_đối_tượng. Thuộc_tính
Tên_mảng_đối_tượng[chỉ số]. Thuộc_tính
Tên_biến_đối_tượng. Phương_thức
Tên_mảng_đối_tượng[chỉ số]. Phương_thức
Con trỏ đối tượng
• Khai báo
Tên_lớp danh_sách_con_trỏ;
• Sử dụng các phương thức và các thuộc
tính
Tên_con_trỏ-> Thuộc_tính
Tên_con_trỏ[chỉ số]. Thuộc_tính
Tên_con_trỏ-> Phương_thức
Tên_con_trỏ[chỉ số].Phương_thức
Con trỏ this
• This là con trỏ đặc biệt, đóng vai trò là
tham số thứ nhất của phương thức.
• Tham số truyền cho đối con trỏ this là địa
chỉ của đối tượng đi kèm với phương thức
trong lời gọi phương thức.
• Các tham số khác của phương thức được
khai báo như trong các hàm.
Hàm (function)
• Phạm vi của hàm toàn bộ chương trình,
phương thức có thể sử dụng hàm.
• Tham số của hàm có thể là các đối tượng,
trong thân hàm không được phép truy cập
tới các thuộc tính private.
• Trong thân của hàm có thể gọi tới các
thuộc tính private.
Hàm bạn (friend function)
• Dùng từ khóa friend để khai báo
• Có thể truy nhập tới các thuộc tính của đối
tượng thuộc lớp đó.
• Không phải là phương thức của lớp.
• Lời gọi giống như lời gọi hàm thông
thường.
• Một hàm có thể là bạn của nhiều lớp.
Hàm tạo - Constructor
• Là một phương thức của lớp dùng để tạo dựng
một đối tượng mới
• Tên của hàm phải trùng với tên của lớp
• Không có kiểu, không có giá trị trả về
• Một lớp có thể có nhiều hàm tạo
• Nếu lớp không có hàm tạo thì chương trình sẽ
cung cấp một hàm tạo mặc định không đối
• Nếu trong lớp có ít nhất một hàm tạo thì hàm tạo
mặc định không được sinh ra nữa.
Hàm tạo sao chép – Copy Constructor

• Được xây dựng bằng cách sử dụng một đối kiểu tham
chiếu đối tượng để khởi tạo một đối tượng mới.
Tên_lớp(const Tên_lớp &Đối_tượng) {
//Các câu lệnh gán thuộc tính
}
• Hàm tạo sao chép mặc định thực hiện chức năng sao
chép nội dung từng bít của đối tượng.
• Nếu lớp không có các thuộc tính kiểu con trỏ hay tham
chiếu thì chỉ cần các hàm tạo sao chép mặc định.
Ngược lại, phải xây dựng hàm tạo sao chép
Hàm hủy – Destructor
• Hàm hủy được gọi khi giải phóng một đối tượng.
• Nếu trong lớp không định nghĩa hàm hủy thì một
hàm hủy mặc định được phát sinh
• Nếu các lớp có thành phần dữ liệu động thì cần
phải sử dụng hàm hủy.
~Tên_lớp() {
//các lệnh
}
Định nghĩa các phép toán cho lớp

• Sử dụng các toán tử với các kiểu do người dùng


định nghĩa
• Cho phép chồng các toán tử đã tồn tại để chúng
có ý nghĩa thích hợp với các kiểu mới.
• Viết một định nghĩa hàm với tên hàm là từ khóa
operator theo sau là kí hiệu của toán tử được
chồng.
type operator op_symbol (parameters)
Các giới hạn của chồng toán tử
Các toán tử có thể được chồng
+ - * / % ^ & |

~ ! = < > += -= *=

/= %= ^= &= |= << >> >>=

<<= == != <= >= && || ++

-- ->* , -> [] () new delete


Các giới hạn của chồng toán tử

Các toán tử không thể chồng

. .* :: ?: sizeof
Hàm toán tử
• Nếu hàm toán tử không là thành viên của một
lớp thường là các hàm friend.
• Hàm toán tử như một hàm thành viên
– toán hạng cực trái phải là một đối tượng lớp
• Hàm toán tử như hàm không thành viên
– toán hạng bên trái là đối tượng của lớp khác hoặc
một kiểu có sẵn.
Hàm toán tử (tiếp)
• Hàm chồng toán tử << và >>
– phải có một toán hạng trái của kiểu ostream
&, istream &
– không là hàm thành viên.
• Chồng các toán tử hai ngôi
– là hàm thành viên không tĩnh với một tham số
– hoặc như một hàm không thành viên với hai
tham số.
Hàm toán tử (tiếp)
Toán tử Ví dụ Toán tử Ví dụ Toán tử Ví dụ
+ a+b += a+=b <<= a<<=b
- a-b -= a-=b == a==b
* a*b *= a*=b != a!=b
/ a/b /= a/=b <= a<=b
% a%b %= a%=b >= a>=b
^ a^b ^= a^=b && a&&b
& a&b &= a&=b || a||b
| a|b |= a|=b , a,b
= a=b << a<<b [] a[b]
< a<b >> a>>b ->* a->*b
> a>b >>= a>>=b
Hàm toán tử (tiếp)
• Chồng các toán tử một ngôi
– như một hàm thành viên không tĩnh không có
tham số
– hoặc như một hàm không thành viên với một
tham số.
Hàm toán tử (tiếp)
Toán tử Ví dụ Toán tử Ví dụ

+ +c ~ ~c

- -c ! !a

* *c ++ ++c, c++

& &c -- --c, c--

-> c->
Chồng một số toán tử đặc biệt
• Toán tử []
– Dùng để truy cập đến một phần tử của mảng.
– Là toán tử hai ngôi, có dạng a[b]
– Khi chồng toán tử này thì hàm toán tử tương ứng
phải là thành viên của một lớp.
• Toán tử ()
– Dùng để gọi hàm
– Gồm hai toán hạng: toán hạng đầu tiên là tên hàm,
toán hạng thứ hai là danh sách các tham số của hàm.
– Khi chồng toán tử này thì hàm toán tử tương ứng
phải là thành viên của một lớp.
Chương 4

Sự kế thừa và tính đa hình


Sự kế thừa
• Cho phép tạo một lớp mới từ một lớp đã
có.
• Lớp mới được tạo ra gọi là lớp dẫn xuất.
• Lớp dùng để xây dựng lớp dẫn xuất gọi là
lớp cơ sở.
• Lớp dẫn xuất ngoài các thành phần riêng
còn được thừa kế tất cả các thành phần
của các lớp cơ sở có liên quan.
Cách xây dựng lớp dẫn xuất
• class tên_lớp_dẫn_xuất:public tên_lớp_cơ sở {
….
};
• public có thể được thay thế bằng private hoặc
protected
• protected tương tự private, sự khác biệt xảy ra khi kế
thừa, các thành viên protected của lớp cơ sở có thể
được dùng bởi các thành viên khác của lớp được thừa
kế, còn các thành viên khác thì không.
Các kiểu dẫn xuất
• Dẫn xuất public:
– Các thành phần, các hàm bạn và các đối tượng của lớp dẫn
xuất không thể truy nhập đến các thành phần private của
lớp cơ sở.
– Các thành phần protected trong lớp cơ sở trở thành các
thành phần private trong lớp dẫn xuất.
• Dẫn xuất private:
– Public trong lớp cơ sở không thể truy nhập được từ các đối
tượng của lớp dẫn xuất.
– Các thành phần protected trong lớp cơ sở có thể truy nhập
được từ các hàm thành phần và các hàm bạn của lớp dẫn
xuất.
• Dẫn xuất protected:
– Các thành phần public và protected trong lớp cơ sở thành
các thành phần protected trong lớp dẫn xuất.
Hàm tạo trong lớp dẫn xuất
• Trong định nghĩa hàm tạo trong lớp dẫn
xuất, mô tả lời gọi tới một trong các hàm
tạo của lớp cơ sở.
Tên_lớp_dẫn_xuất (các tham số): tên_lớp_cơ_sở (các tham số) {}
Đa kế thừa
• Tạo một lớp dẫn xuất từ nhiều hơn một
lớp cơ sở
Hàm ảo
• Con trỏ tới lớp cơ sở
– Một con trỏ trỏ tới một đối tượng của lớp dẫn
xuất có kiểu tương thích với con trỏ trỏ tới
một đối tượng của lớp cơ sở của nó.
Hàm ảo (tiếp)
– Dùng để khai báo một hàm trong lớp cơ sở
mà hàm đó được định nghĩa lại trong lớp dẫn
xuất để việc sử dụng con trỏ tới các đối tượng
thuộc lớp này là thích hợp.
Hàm ảo (tiếp)
• Trừu tượng hóa lớp cơ sở
– Hàm ảo thuần túy là hàm không có phần định nghĩa
– Cách viết:
class A {
public:
virtual F()=0; //hàm ảo thuần túy
…………
}
– Lớp có ít nhất một hàm thành phần ảo thuần túy – lớp trừu
tượng.
• Không sử dụng lớp trừu tượng khi khai báo biến
• Được phép khai báo con trỏ có kiểu là một lớp trừu tượng
• Một hàm ảo thuần túy trong một lớp trừu tượng cơ sở phải được
định nghĩa lại trong một lớp dẫn xuất hoặc tiếp tục khai báo ảo trong
lớp dẫn xuất.
Tính đa hình (Polymorphism)
• Các lớp trừu tượng và các hàm ảo cung cấp cho
C++ tính đa hình.
• Tính đa hình (polymorphism) là khả năng thiết
kế và cài đặt các hệ thống mà có thể mở rộng
dễ dàng hơn.
• Các chương trình có thể được viết để xử lý tổng
quát – như các đối tượng lớp cơ sở – các đối
tượng của tất cả các lớp tồn tại trong một phân
cấp.
Áp dụng tính đa hình
• Xây dựng lớp cơ sở trừu tượng bao gồm những
thuộc tính chung nhất của các thực thể cần
quản lý.
• Xây dựng các lớp dẫn xuất bắt đầu từ lớp cơ sở
trừu tượng.
• Xây dựng các phương thức ảo trong các lớp
dẫn xuất.
• Xây dựng lớp quản lý các đối tượng.
Chương 5

Các dòng nhập xuất và file

You might also like