Đây là bài giảng môn Lập trình hướng đối tượng. Bài giảng gồm các vấn đề tính đóng gói, thừa kế, đa hình, trừu tượng...Bài giảng có nhiều ví dụ minh họa cho phần lí thuyết. Học sinh sinh viên hoặc người đam mê lập trình có thể code lại để nâng cao kĩ năng lập trình. Dưới đây là nội dung bài giảng:BÀI 1. UML VÀ NHỮNG MỞ RỘNG CỦA C++91.Tổng quan về UML92.Những mở rộng của C++17BÀI 2. ĐỐI TƯỢNG VÀ LỚP (Object Class)311.Đối tượng (Object)312.Lớp (Class)323.Struct và class394.Hàm thiết lập (Constructor)475.Hàm hủy bỏ (destructor)526.Hàm thiết lập sao chép (Copy Constructor)567.Thành phần tĩnh (Static)588.Đối tượng hằng – Hàm hằng (Constant)609.Hàm bạn lớp bạn (friend)62BÀI 3. ĐỊNH NGHĨA TOÁN TỬ TRÊN LỚP (CLASS OPERATORS)711.Định nghĩa toán tử trên lớp712.Chuyển đổi kiểu86BÀI 4. KỸ THUẬT THỪA KẾ (Inheritance)951.Giới thiệu chung962.Đơn thừa kế, hàm thiết lập, hàm sao chép963.Tính đa hình (polymorphism)1024.Hàm hủy bỏ ảo1065.Đa thừa kế1106.Lớp cơ sở ảo1137.Tính trừu tượng (Abstraction) (Lớp trừu tượngHàm ảo thuần túy)121BÀI 5. KHUÔN HÌNH (TEMPLATE) – XỬ LÝ LỖI (Exception Handling)1261.Khuôn Hình (Template)1262.Khuôn hình hàm1263.Khuôn hình lớp1284.Xử Lý Lỗi (Exception Handling)129
Trang 1BỘ NÔNG NGHIỆP VÀ PHÁT TRIỂN NÔNG THÔN
TRƯỜNG CAO ĐẲNG NGHỀ CÔNG NGHỆ VÀ NÔNG LÂM NAM BỘ
KHOA CÔNG NGHỆ THÔNG TIN
Địa chỉ: QL 1K, Phường Bình An, TX Dĩ An, Tỉnh Bình
Dương Email: it.svoctaf@gmail.com
[Lưu hành nội bộ]
Trang 2MỤC LỤC
BÀI 1 UML VÀ NHỮNG MỞ RỘNG CỦA C++ 9
1 Tổng quan về UML 9
2 Những mở rộng của C++ 17
BÀI 2 ĐỐI TƯỢNG VÀ LỚP (Object & Class) 31
1 Đối tượng (Object) 31
2 Lớp (Class) 32
3 Struct và class 39
4 Hàm thiết lập (Constructor) 47
5 Hàm hủy bỏ (destructor) 52
6 Hàm thiết lập sao chép (Copy Constructor) 56
7 Thành phần tĩnh (Static) 58
8 Đối tượng hằng – Hàm hằng (Constant) 60
9 Hàm bạn - lớp bạn (friend) 62
BÀI 3 ĐỊNH NGHĨA TOÁN TỬ TRÊN LỚP (CLASS OPERATORS) 71
1 Định nghĩa toán tử trên lớp 71
2 Chuyển đổi kiểu 86
BÀI 4 KỸ THUẬT THỪA KẾ (Inheritance) 95
1 Giới thiệu chung 96
Trang 35 Đa thừa kế 110
6 Lớp cơ sở ảo 113
7 Tính trừu tượng (Abstraction) (Lớp trừu tượng-Hàm ảo thuần túy) 121
BÀI 5 KHUÔN HÌNH (TEMPLATE) – XỬ LÝ LỖI (Exception Handling) 126
1 Khuôn Hình (Template) 126
2 Khuôn hình hàm 126
3 Khuôn hình lớp 128
4 Xử Lý Lỗi (Exception Handling) 129
TÀI LIỆU THAM KHẢO 133
Trang 4• Được duy trì và phát triển bởi OMG (Object Management Group), do
Jacobson, Booch, Rumbaugh sáng lập Ngoài ra còn có hàng trăm các tập
đoàn lớn khác bảo trợ phát triển
• UML 2.0 có 13 loại biểu đồ để thể hiện các khung nhìn khác nhau (View) về hệ
thống
• Các biểu đồ UML cho ta cái nhìn rõ hơn về hệ thống (cả cái nhìn tĩnh và động)
• Hiện nay UML được sử dụng rất phổ biến trong các dự án phần mềm.
• UML thể hiện phương pháp phân tích hướng đối tượng nên không lệ thuộc
ngôn ngữ LT.
• Có rất nhiều công cụ phần mềm hỗ trợ phân tích thiết kế dùng UML.
• Nhiều công cụ có thể sinh ra mã từ UML và ngược lại (từ mã thành
UML-Reverse Eng)
• UML không phải là ngôn ngữ lập trình
Trang 5• Xây dựng (Constructing)
• Viết tài liệu (Documenting)
Một số Case tool (Công cụ) hỗ trợ UML
• Rational Rose (của hãng Rational)
Biểu đồ ca sử dụng (Use Case Diagram)
• Mô tả các chức năng của hệ thống dựa trên quan điểm người sử dụng
• Mô tả sự tương tác giữa người dùng và hệ thống
• Cho biết hệ thống được sử dụng như thế nào ?
Trang 6Biểu đồ Lớp (Class Diagram)
• Là biểu đồ quan trọng nhất
• Mô tả các đối tượng và mối quan hệ của chúng trong hệ thống
• Mô tả các thuộc tính và các hành vi (Behavior) của đối tượng
• Có biểu đồ lớp mức phân tích và mức cài đặt
Biểu đồ lớp mức phân tích và mức thiết kế:
Trang 7Quan hệ phụ thuộc (Dependence) <Include>
Use case A được gọi là Include B nếu trong xử lý của A có gọi đến B ít nhất 1 lần.
Trang 8Quan hệ phụ thuộc (Dependence) < Extend >
Use case B được gọi là Exntend A nếu use case B được gọi bởi A nếu thỏa mãn điều kiện nào đó.
Quan hệ tổng quát hóa (thừa kế)
Use case A được gọi là Generalization B nếu B là một trường hợp riêng của A (B kế
thừa A) Còn gọi là quan hệ Là một (Is a)
Trang 9Thể hiện rằng ứng với mỗi lớp A thì có (chứa, dạy, có, mua, đặt, ) bao nhiêu phần tử lớp B?
Quan hệ Aggregation
Quan hệ Aggregation : Thể hiện rằng một lớp A nào đó bao gồm lớp B Lớp B này có
thể tồn tại độc lập mà không cần lớp A
Trang 10Quan hệ Composition
Quan hệ Composition: thể hiện rằng một lớp A bao hàm lớp B Nhưng lớp B không
thể tồn tại độc lập (Tức không thuộc lớp nào)
Biểu đồ Tuần tự (Sequence Diagram )
• Mô tả sự tương tác của các đối tượng theo trình tự về thời gian
• Có sự liên kết chặt chẽ với biểu đồ lớp
• Mỗi biểu đồ tuần tự mô tả một tình huống xử lý
Trang 11Ánh xạ biểu đồ tuần tự sang Code
Biểu đồ hoạt động (Activity Diagram)
• Mô tả các luồng công việc, qui trình nghiệp vụ
Class B
{ public int Login(string UID, Pass);
}MainApp { Nhập User name, password
B objB = new B ();
bool Result = objB.Login(UID, Password)
if (Result == true)
}
Trang 12• Tương tự như sơ đồ khối (Flowchart).
• Hỗ trợ việc mô tả các xử lý song song
Một số biểu đồ khác
• Biểu đồ truyền thông: Communication diagram
• Biểu đồ tương tác: Interaction Diagram
• Biểu đồ thời gian – Timming diagram
• Biểu đồ trạng thái – State Diagram
• Biểu đồ đối tượng – Object Diagram
• Bểu đồ gói - Package Diagram
• Biểu đồ cấu trúc kết hợp – Composite Structured
• Biểu đồ thành phần – Component Diagram
• Biểu đồ triển khai – Deployment Diagram
2 Những mở rộng của C++
Trang 15TT BƯỚC CÔNG VIỆC THỰC HIỆN PHƯƠNG TIỆN
1 Dùng lệnh xuất Câu lệnh xuất
2 Xuất chuỗi, dữ liệu Câu lệnh xuất
3 Xuất chuỗi, dữ liệu với
một câu lệnh Câu lệnh xuất.
4 Xuất dữ liệu với chức
1 Khai báo ở đầu thân
phương thức Lệnh khai báo, kiểu dữ liệu
Trang 162 Khai báo ở giữa thân
phương thức
Lệnh khai báo, kiểu dữ liệu
Trang 17Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
1 Khai báo inline Từ khóa
Trang 19số phương thức.
Tham số ngầm định trong lời gọi hàm
Trang 20Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
1 Khai báo, gọi
phương thức có
tham số ngầm
định
Hàm, lời gọi hàm, giá trị ngầm định, kiểu dữ liệu
2 Hàm chứa tham
số ngầm định Phương thức, đối số phương
thức
Trình tự thực hiện
Trang 212 Hàm chứa
tham số
ngầm định
Phương thức, đối số phương thức
2 Xây dựng
phương thức
lỗi
Không gán trị cho đối
số ở đây nếu
đã khởi trị
Trang 22trên lệnh khai báo trong hàm main.
Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
1 Lời gọi hàm lỗi Lời gọi hàm
Trang 242 Viết hàm nhập Phương thức,
con trỏ, mảnghai chiều, vòng lặp
Trang 253 Viết hàm in Phương thức,
con trỏ, mảnghai chiều, vòng lặp
Trang 26Bài 2.
ĐỐI TƯỢNG VÀ LỚP
(Object & Class)
1 Đối tượng (Object)
Khái niệm: Đối tượng là một khái niệm trong lập trình hướng đối tượng biểu thị sự
liên kết giữa dữ liệu và các thủ tục thao tác trên dữ liệu.
Đối tượng = Dữ liệu + Phương thức
Trang 27- Thành phần private: dùng riêng cho lớp
- Thành phần protected: dùng riêng cho lớp và lớp con của lớp đó.
- Thành phần public: dùng cho lớp, lớp con một lớp và đối tượng của lớp
Trang 28Ví dụ lớp – đối tượng
Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
1 Tạo lớp point Từ khóa
class
2 Thành phần dữ
Trang 294 Thực hiện các
phương thức
Các phương thức, đối số, câu lệnh thực thi
Tạo đối tượng
Cú pháp:
Vài ví dụ tạo đối tượng
<Tên lớp> <Tên đối tượng> ;
Truy xuất của đối tượng:
Đối tượng chỉ truy xuất được các
dữ liệu và phương thức public
Cú pháp:
<Đối tượng>.<Dữ liệu>
<Đối tượng>.<Phương
thức>
Trang 30Trình tự thực hiện
TT BƯỚC CÔNG
VIỆC THỰC HIỆN
PHƯƠNGTIỆN
1 Tạo lớp point Từ khóa
class
Trang 314 Định nghĩa
phương thức
move, display
Các phương thức, đối số, câu lệnh thực thi
Ví dụ khác
Trang 32Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
1 Các thành phần
lớp point được
khai báo trước
tại file point.h
Từ khóa class
Trang 33Trình tự thực hiện
Từ khóa xác định thuộc tính truy xuất
Trang 34TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
Trang 352 Thành phần
public trong 1
lớp
Có từ khóa public
Định nghĩa chồng các hàm thành phần
- Các hàm thành phần có thể trùng tên nhưng phải khác nhau về kiểu dữ liệu của tham số hàm.
Trang 373 Sử dụng lớp Đối tượng.
Giá trị ngầm định của tham số
Trang 393 Sử dụng lớp Đối tượng.
Truy cập thành phần dữ liệu
Trang 40Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
1 Khởi tạo lớp Từ khóa
Trang 411 Khởi tạo lớp Từ khóa
Con trỏ this
Trình tự thực hiện
Trang 42Phép gán các đối tượng
4 Hàm thiết lập (Constructor)
Trang 43Trình tự thực hiện
TT BƯỚC CÔNG
VIỆC THỰC HIỆN
PHƯƠNGTIỆN
1 Khởi tạo lớp Từ khóa
class
2 Hàm thiết lập
point Từ khóa public, các
đối số
Trang 45Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
1 Khởi tạo lớp Từ khóa
Trang 46Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
1 Khởi tạo lớp Từ khóa
Con trỏ đối tượng
Trang 47Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
1 Khởi tạo lớp Từ khóa
class
2 Sử dụng con trỏ
đối tượng Đối tượng, con trỏ
5 Hàm hủy bỏ (destructor)
Trang 48Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
Hàm hủy (HH) có tên trùng tên lớp
Trước hàm hủy có dấu ~
HH không có tham số, kiểu trả về
HH có thuộc tính public
HH chỉ có duy nhât một cho mỗi lớp
HH có thể ngầm định nhưng lớp có dữ liệu động cần thiết phải có HH
Trang 493 Định nghĩa hàm
hủy
Phương thức,
~, các lệnh thực thi
Trang 516 Hàm thiết lập sao chép (Copy Constructor)
Trang 52Dạng hàm sao chép tổng quát:
-HTLSC được chạy tự động khi sao chép đối tượng.
- HTLSC có tên là tên lớp.
- Point q(p); : q được chép từ p.
Trang 53Trình tự thực hiện
TT BƯỚC CÔNG
VIỆC THỰC HIỆN
PHƯƠNGTIỆN
1 Khởi tạo lớp Từ khóa
class
2 Định nghĩa hàm
sao chép
Phương thức, toán tử &, kiểu dữ liệu, các lệnh thực thi
3 Sử dụng hàm
sao chép
Đối tương để sao chép, đối tượng sao chép
Trang 547 Thành phần tĩnh (Static)
Trang 57Trình tự thực hiện
TT BƯỚC CÔNGVIỆC THỰC HIỆN PHƯƠNGTIỆN
1 Khởi tạo lớp Từ khóa
Trang 58Trình tự thực hiện
TT BƯỚC CÔNG
VIỆC THỰC HIỆN
PHƯƠNGTIỆN
1 Khởi tạo lớp Từ khóa
Trang 59Hàm bạn của một lớp là hàm thành phần của lớp khác:
Trình tự thực hiện
Trang 602 Hàm bạn
của lớp
point2
Các thànhphần lớp,
từ khóa friend
Hàm bạn của nhiều lớp:
Trang 63từ khóa friend.
Lớp bạn của một lớp:
Tất cả các hàm thành phần của lớp đó đều truy xuất được đến dữ liệu riêng tư của lớp kia
Trang 67Bài 3.
ĐỊNH NGHĨA TOÁN TỬ TRÊN LỚP
(CLASS OPERATORS)
1 Định nghĩa toán tử trên lớp
Ta có các phép toán trên các dữ liệu số Kiểu lớp có các phép toán như vậy không?
Việc định nghĩa lại các phép toán như vậy cho lớp được gọi là định nghĩa chồng cáctoán tử
Hàm toán tử là hàm thành phần
Trang 682 Khai báo Từ khóa
Trang 69Hàm toán tử là hàm bạn
Trang 70Lưu ý
Trang 72toán tử phần dữ
liệu, các tham số
Trang 73Chồng toán tử gán
Trang 78Định nghĩa chồng phép []
Trang 80bộ, mảng,các lệnh thực thi.
Định nghĩa chồng <<, >>
Trang 81bộ, các lệnh thực thi.
Chồng toán tử new, delete
Trang 82bộ, mảng,các lệnh thực thi.
bộ, các lệnh thực thi
Trang 832 Chuyển đổi kiểu
Hàm toán tử chuyển kiểu ép buộc
Trang 843 Sử dụng Các lệnh
thực thi
Hàm toán tử chuyển kiểu trong lời gọi hàm
Trang 853 Hàm
ứng
dụng
Các lệnh thực thi
Trang 864 Sử dụng Các lệnh
thực thi
Hàm toán tử chuyển đổi kiểu cơ sở sang kiểu lớp
Trang 894 Sử dụng Các lệnh
thực thi
Chuyển kiểu từ lớp này sang lớp khác
Toán tử chuyển kiểu bắt buộc
Trang 902 Khai
báo hàm
bạn
Từ khóa friend, operator
Trang 914 Sử dụng Các lệnh
thực thi
Chuyển kiểu từ lớp này sang lớp khác
Hàm thiết lập dùng làm hàm toán tử
Trang 924 Sử dụng Các lệnh
thực thi
Trang 93Bài 4.
KỸ THUẬT THỪA KẾ
(Inheritance)
Ví dụ thừa kế
Trang 941 Giới thiệu chung
- Một lớp có thể được kế thừa bởi nhiều lớp khác Lớp này gọi là lớp cơ sở (lớp
cha) Lớp kế thừa được gọi là lớp dẫn xuất (lớp con)
- Lớp dẫn xuất kế thừa mọi thành phần của lớp cơ sở
- Lớp cơ sở có thể có nhiều lớp dẫn xuất Trên các lớp dẫn xuất thể hiện các đặc
điểm riêng so với lớp cơ sở hoặc có thể lặp lại
các thành ph ần của lớp cơ sở.
- Có thể có kế thừa qua nhiều mức.
- Đối tượng của lớp dẫn xuất có đầy đủ các
thành phần lớp cơ sở và các thành phần riêng
của nó.
- Các thành phần trùng lấp các thành phần của
lớp cơ sở tại lớp dẫn xuất sẽ được phân biệt
thông qua tên lớp cơ sở.
Các tính chất lập trình hướng đối tượng
- Tính đóng gói (encapsulation) và che giấu thông tin (information hiding)
- Tính kế thừa (inheritance)
- Tính đa hình (polymorphism)
- Tính trừu tượng (abstraction)
2 Đơn thừa kế, hàm thiết lập, hàm sao chép
Trang 95- Dùng : để khai báo sự kế thừa Đây là đơn thừa kế.
- Phải gọi lại hàm thiết lập, hàm sao chép lớp cơ sở khi xây dựng hàm thiết lập,
hàm sao chép lớp dẫn xuất Gọi chúng thông qua dấu “:”
- cpoint(cpoint &b):point(b) : cách viết khác của hàm sao chép cho lớp dẫn xuất.
- Có thể xây dựng lại hàm thành phần của lớp cơ sở tại lớp dẫn xuất Dùng :: để
phân biệt giữa chúng.
2 Khai
báo
thừa kế
Từ khóa class, toán
tử :
Trang 966 Sử dụng Các lệnh
thực thi
Các kiểu dẫn xuất: private, protected, public
Sự tương thích giữa đối tượng lớp dẫn xuất và đối tượng lớp cơ sở
Trang 97Trình tự thực hiện
T BƯỚC THỰC HIỆN PHƯƠN
Trang 1003 Sự
tương
thích
Đối tượng, cáclệnh thực thi
3 Tính đa hình ( polymorphism)
Đa hình với trường hợp con trỏ lớp cơ sở trỏ đến đối tượng lớp dẫn xuất
Trang 102Đa hình với trường hợp gọi hàm thành phần lớp cơ sở có chứa lời gọi hàm giống nhau giữa lớp dẫn xuất và lớp cơ sở
Trang 103- Hàm giống nhau tại lớp cơ sở sẽ là hàm ảo.
- Hàm polymorp_display() được gọi sẽ phải truy xuất đến hàm display() Hàm
display() là hàm ảo nên đối tượng của lớp dẫn xuất có thể gọi được hàm display() tại lớp dẫn xuất.
- Nếu hàm display () tại lớp cơ sở không là hàm ảo thì không gọi được hàm
display() tại lớp dẫn xuất
Trang 1042 Lớp
cpoint
Từ khóa class, các thành phần lớp, các hàm khởi dựng, phương thức
4 Hàm hủy bỏ ảo
Trang 1072 Lớp
cpoint
Từ khóa class, các thành phần lớp, các hàm khởi dựng, phương thức
Trang 1083 Lớp
ccpoint
Từ khóa class, các thành phần lớp, các hàm khởi dựng, phương thức
tượng, từ khóa delete
5 Đa thừa kế
Trang 1123 Lớp
kế
thừa
Từ khóa class, các thành phần lớp, cáchàm khởi dựng, phươngthức
4 Sử
dụng Các đốitượng,
lệnh thực thi
6 Lớp cơ sở ảo
Trang 115tượng, Lời gọi hàm.
Trang 118- Mặc dù lớp A có thêm lớp cha là O nhưng khai báo hàm thiết lập của lớp D
vẫn không có goi lại hàm thiết lập của lớp O
- Lớp D có 2 hàm display(), một của lớp A và một của lớp O Lời gọi hàm display
không kèm theo tên lớp chính là hàm A::display()( hoặc B::display(), hoặc C::display()) và không phải là hàm O::display().
tử :, các thành phần lớp, các hàm khởi dựng, các phương thức
Trang 119tượng, Lời gọi hàm.
Trang 1207 Tính trừu tượng (Abstraction) (Lớp trừu tượng-Hàm ảo thuần túy)
Trang 121tử :, các thành phần lớp, các hàm khởi dựng, các phương thức.
tượng, Lời gọi hàm
Ví dụ về tính trừu tượng
Trang 1232 Hàm
thuần
ảo
Từ khóa class, virtual
- Ta xây dựng một danh sách chứa các đối tượng khác nhau( không có cùng kiểu lớp)
- Xây dựng lớp point , lớp complex và một lớp trừu tượng mere nhằm đại diện 2 lớp
này.
Trang 1244 Lớp
danh
sách
Các thànhphần lớp, câu lệnh thực thi
tượng, các lời gọi hàm
Trang 126<>, các lệnh thực thi.
tượng, các lệnh thực thi
Khuôn hình cho kiểu dữ liệu là lớp:
Trang 127<>, các lệnh thực thi.
tượng, các lệnh thực thi
3 Khuôn hình lớp
Trình tự thực hiện
Trang 128tượng, các lệnh thực thi.
4 Xử Lý Lỗi (Exception Handling)
Trang 1292 Hàm tìm
Timphan
so
Phương thức, cáclệnh thực thi
3 Xử lý lỗi Lệnh try
{} catch() {}, các lệnh thực thi
Trang 130- Sử dụng các thuộc tính của lớp Loi_chia_0 để thông báo lỗi.
- Truyền đối số cho throw() và catch().
Trang 1312 Hàm tìm
Timphans
o
Phương thức, các lệnh thựcthi
3 Xử lý lỗi Lệnh try
{}
catch() {}, các lệnh thựcthi
Trang 132TÀI LIỆU THAM KHẢO
[1] “Lập trình hướng đối tượng với C ++ ”, Phạm Văn Ất, Nhà xuất bản Giao Thông Vận
Tải, 2005
[2] “Lập trình hướng đối tượng”, Trần Đan Thư - Đinh Bá Tiến - Nguyễn Tấn Trần
Minh Khang, Nhà xuất bản Khoa Học & Kỹ Thuật, 2010
[3] “Phát triển hệ thống hướng đối tượng với UML 2.0 và C + ” +, Nguyễn Văn Ba, Nhàxuất bản Đại Học Quốc Gia Hà Nội, 2005
[4] “Thinking in C ++ ”, Bruce Eckel, Prentice Hall Inc, 2000.
[5] “Beginning Visual C ++ 2005”, Ivor Horton, Wiley Publising Inc, 2006.