Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Lập trình hướng đối tượng
Nội dung xem thử
Mô tả chi tiết
TRƢỜNG CAO ĐẲNG CÔNG NHỆ THỦ ĐỨC
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN PHẦN MỀM
Tài liệu giảng dạy
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
Chủ nhiệm đề tài: Nguyễn Thị Vân
Thủ đức, tháng 1 năm 2013
Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 1
TRƢỜNG CAO ĐẲNG CÔNG NHỆ THỦ ĐỨC
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN PHẦN MỀM
Tài liệu giảng dạy
LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
Chủ nhiệm đề tài: Nguyễn Thị Vân
Thủ đức, tháng 1 năm 2013
Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 2
Lời nói đầu
Lập trình hƣớng đối tƣợng khởi thủy từ những năm 1960 và trở nên cực thịnh vào
đầu thập niên 1990. Cho đến nay, có rất nhiều ngôn ngữ lập trình cấp cao hỗ trợ các
kỹ thuật hƣớng đối tƣợng. Phƣơng pháp lập trình hƣớng đối tƣợng đƣợc xem là một
trong những phƣơng pháp lập trình phổ biến nhất để xây dựng và phát triển các sản
phẩm phần mềm. Phƣơng pháp lập trình hƣớng đối tƣợng giúp các lập trình viên vận
dụng tƣ duy hƣớng đối tƣợng để xây dựng sản phẩm phần mềm có tính tiến hóa, dễ
mở rộng, dễ bảo trì và mã nguồn có khả năng tái sử dụng cao.
Từ những kinh nghiệm có đƣợc trong quá trình giảng dạy cũng nhƣ đọc sách tham
khảo, tôi mong muốn biên soạn một tài liệu để truyền tải đến ngƣời đọc các kiến
thức cơ sở về phong cách lập trình mới – lập trình hƣớng đối tƣợng. Tôi cũng chọn 1
ngôn ngữ lập trình hƣớng đối tƣợng thông dụng, đó là C++, để phân tích, thảo luận
nhằm thể hiện rõ hơn các kỹ thuật lập trình hƣớng đối tƣợng.
Tôi xin trân trọng gửi lời cảm ơn đến Ban giám hiệu trƣờng Cao Đẳng Công Nghệ
Thủ Đức, các đồng nghiệp đang công tác tại Khoa Công nghệ thông tin đã đóng góp
ý kiến và giúp đỡ tôi tận tình trong quá trình biên soạn và hoàn tất tài liệu này.
Mặc dù tôi đã tìm hiểu, nghiên cứu và nỗ lực rất nhiều trong quá trình biên soạn, tài
liệu này không tránh khỏi những thiếu sót nhất định. Tôi rất mong nhận đƣợc những
góp ý xây dựng từ ngƣời đọc để ngày càng nâng cao chất lƣợng tài liệu trong những
lần tái bản sau này.
Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 3
Mục lục
Lời nói đầu ...............................................................................................................2
Mục lục ........................................................................................................................3
CHƢƠNG 1. DẪN NHẬP......................................................................................8
1. Phƣơng pháp lập trình Hƣớng đối tƣợng..........................................................8
1.1. Phƣơng pháp lập trình hƣớng thủ tục .........................................................8
1.2. Lập trình hƣơng đối tƣợng và các khái niệm căn bản ................................9
1.2.1. Sự trừu tƣợng hóa dữ liệu (data abstraction) ..................................11
1.2.2. Tính đóng gói..................................................................................12
1.2.3. Tính kế thừa ....................................................................................13
1.2.4. Tính đa hình ....................................................................................14
1.2.5. Ƣu điểm của lập trình hƣớng đối tƣợng .........................................15
2. Ngôn ngữ C++................................................................................................16
2.1. Lịch sử của ngôn ngữ lập trình C++.........................................................16
2.2. Cú pháp của C++ (Mở rộng của C++ so với C).......................................17
2.2.1. Nhập, xuất dữ liệu...........................................................................17
2.2.2. Vị trí khai báo biến và khai báo hằng .............................................18
2.2.3. Cách ghi chú thích ..........................................................................18
2.2.4. Kiểu dữ liệu.....................................................................................19
2.2.5. Con trỏ và cấp phát vùng nhớ động................................................20
2.2.6. Hàm và hiện tƣợng chồng hàm (function overloading)..................23
TỔNG KẾT CHƢƠNG ..............................................................................27
CÂU HỎI VÀ BÀI TẬP.............................................................................27
CHƢƠNG 2. ĐỐI TƢỢNG VÀ LỚP ..................................................................29
1. KHÁI NIỆM...................................................................................................29
1.1. Đối tƣợng và dấu hiệu nhận diện..............................................................29
1.2. Lớp............................................................................................................29
1.2.1. Các thành phần................................................................................29
1.2.2. Lớp - Kiểu dữ liệu trừu tƣợng.........................................................30
1.3. Vì sao là hƣớng đối tƣợng? ......................................................................31
Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 4
2. THIẾT KẾ VÀ CÀI ĐẶT LỚP......................................................................31
2.1. Khai báo và cài đặt lớp .............................................................................32
2.1.1. Cài đặt dữ liệu thành phần. .............................................................32
2.1.2. Cài đặt hàm thành phần (phƣơng thức của lớp)..............................33
2.1.3. Thuộc tính truy xuất........................................................................35
2.1.4. Vấn đề che dấu thông tin ................................................................37
2.2. Giao diện và chi tiết cài đặt ......................................................................37
2.3. Sử dụng đối tƣợng ....................................................................................48
2.3.1. Chu trình sống của đối tƣợng..........................................................48
2.3.2. Thiết lập và hủy đối tƣợng..............................................................49
2.4. Con trỏ this ...............................................................................................54
2.5. Con trỏ đối tƣợng......................................................................................55
2.6. Đối tƣợng thành phần ...............................................................................55
2.7. Thành phần static......................................................................................56
2.7.1. Ý nghĩa............................................................................................56
2.7.2. Dữ liệu static. ..................................................................................56
2.7.3. Hàm static. ......................................................................................57
3. HÀM FRIEND, LỚP FRIEND ......................................................................58
3.1. Hàm friend ................................................................................................58
3.2. Lớp friend .................................................................................................59
4. ĐỊNH NGHĨA PHÉP TOÁN .........................................................................60
4.1. Ý nghĩa......................................................................................................60
4.2. Nguyên tắc định nghĩa phép toán. ............................................................60
4.2.1. Toán tử nhập xuất dữ liệu >> và << ...............................................62
4.2.2. Phép toán số học .............................................................................63
4.2.3. Toán tử quan hệ (>,<, >=, <=, ==)..................................................64
4.2.4. Phép gán..........................................................................................65
4.2.5. Phép toán tăng, giảm.......................................................................65
4.2.6. Phép toán chuyển kiểu. ...................................................................66
TỔNG KẾT CHƢƠNG ..............................................................................69
Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 5
CÂU HỎI VÀ BÀI TẬP.............................................................................70
CHƢƠNG 3. KẾ THỪA.......................................................................................73
1. KHÁI NIỆM...................................................................................................73
1.1. Quan hệ kế thừa ........................................................................................74
1.1.1. Nhận diện mối quan hệ kế thừa. .....................................................74
1.1.2. Tính chất của mối quan hệ kế thừa .................................................74
1.1.3. Lớp cơ sở, lớp dẫn xuất ..................................................................75
1.2. Phân loại quan hệ kế thừa.........................................................................75
2. THIẾT KẾ VÀ CÀI ĐẶT LỚP TRONG MỐI QUAN HỆ KẾ THỪA ........75
2.1. Cơ chế tự động thừa hƣởng đặc tính ở lớp cơ sở......................................75
2.1.1. Kế thừa thành phần dữ liệu.............................................................75
2.1.2. Kế thừa thành phần phƣơng thức....................................................76
2.2. Truy xuất thành phần của lớp cơ sở..........................................................76
2.2.1. Thuộc tính protected .......................................................................76
2.2.2. Vấn đề truy xuất thành phần của lớp cơ sở.....................................77
2.3. Định nghĩa lại hành vi ở lớp dẫn xuất. .....................................................77
2.4. Tầm vực trong kế thừa..............................................................................78
2.5. Vấn đề thiết lập và hủy đối tƣợng.............................................................79
2.6. Chuyển đổi ngầm định đối tƣợng lớp dẫn xuất sang lớp cơ sở ................80
2.7. Đa kế thừa.................................................................................................80
2.8. Lớp cơ sở ảo (virtual base class) ..............................................................82
Lƣu ý khi thiết kế quan hệ kế thừa: ............................................................82
TỔNG KẾT CHƢƠNG ..............................................................................82
CÂU HỎI VÀ BÀI TẬP.............................................................................83
CHƢƠNG 4. XỬ LÝ ĐA HÌNH..........................................................................85
1. BÀI TOÁN XỬ LÝ ĐA HÌNH. .....................................................................85
2. CƠ CHẾ XỬ LÝ ĐA HÌNH. .........................................................................87
2.1. Phƣơng thức ảo .........................................................................................87
2.2. Các lƣu ý khi sử dụng phƣơng thức ảo.....................................................89
2.3. Các thành viên ảo của một lớp .................................................................89
Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 6
3. PHƢƠNG THỨC THUẦN ẢO VÀ LỚP TRỪU TƢỢNG...........................92
TỔNG KẾT CHƢƠNG ..............................................................................94
CÂU HỎI VÀ BÀI TẬP.............................................................................94
CHƢƠNG 5. QUAN HỆ GIỮA CÁC LỚP .........................................................97
1. QUAN HỆ ......................................................................................................97
1.1. Giới thiệu ..................................................................................................97
1.2. Phân loại ...................................................................................................97
1.3. Quan hệ bao hàm/phụ thuộc (HAS-A, PART_OF)..................................97
1.4. Quan hệ tổng quát hóa/ đặc biệt hóa (IS-A).............................................98
1.5. Quan hệ bạn bè (friend)............................................................................99
2. CÀI ĐẶT QUAN HỆ ...................................................................................100
2.1. Quan hệ HAS-A......................................................................................100
2.2. Quan hệ IS-A ..........................................................................................101
2.3. Quan hệ bạn ............................................................................................102
TỔNG KẾT CHƢƠNG ............................................................................103
CÂU HỎI VÀ BÀI TẬP...........................................................................104
CHƢƠNG 6. TEMPLATE .................................................................................105
1. Ý nghĩa. ........................................................................................................105
2. Function template (khuôn mẫu hàm)............................................................105
3. Class template (khuôn mẫu hình lớp)...........................................................107
TỔNG KẾT CHƢƠNG ............................................................................108
CÂU HỎI VÀ BÀI TẬP...........................................................................109
Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 7
Danh mục hình ảnh
Hình 1-1. Cấu trúc chƣơng trình của phƣơng pháp lập trình hƣớng thủ tục ...............8
Hình 1-2. Các đối tƣợng trong thực tế.......................................................................10
Hình 1-3. Sơ đồ lớp và thể hiện.................................................................................11
Hình 1-4. Quá trình trừu tƣợng hóa dữ liệu...............................................................12
Hình 1-5. Minh họa tính đóng gói dữ liệu .................................................................13
Hình 1-6. Minh họa tính đa hình ...............................................................................15
Hình 1-7. Diễn đạt mối quan hệ phân cấp trong tự nhiên..........................................16
Hình 1-8. Minh họa hàm nhập xuất dữ liệu trong C++ .............................................17
Hình 1-9. Minh họa phép tham chiếu trong C++ ......................................................25
Hình 2-1. Minh họa lớp đối tƣợng.............................................................................30
Hình 2-3. Mở Microsoft visual C++..........................................................................37
Hình 2-4. Tạo mới một project ..................................................................................38
Hình 2-5. Cửa sổ đặt tên project................................................................................38
Hình 2-6. Cửa sổ chọn Empty project .......................................................................40
Hình 2-7.Thêm file source vào project......................................................................41
Hình 2-8. Giao diện soạn thảo ...................................................................................42
Hình 2-9. Cửa sổ tạo tên lớp......................................................................................44
Hình 2-10. Thêm thuộc tính vào lớp..........................................................................45
Hình 2-11. Cửa sổ khai báo thuộc tính ......................................................................46
Hình 2-12. Thêm phƣơng thức vào lớp .....................................................................46
Hình 2-13. Khai báo phƣơng thức .............................................................................46
Hình 2-14. Minh họa file .h .......................................................................................47
Hình 2-15. Minh họa file .cpp ...................................................................................48
Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 8
CHƢƠNG 1. DẪN NHẬP
MỤC TIÊU
Sau khi học xong sinh viên có khả năng:
Trình bày tổng quan về phƣơng pháp luận hƣớng đối tƣợng:
- So sánh đƣợc giữa phƣơng pháp lập trình hƣớng đối tƣợng và phƣơng
pháp lập trình hƣớng thủ tục.
- Trình bày đƣợc ba đặc điểm quan trọng của lập trình hƣớng đối tƣợng
Trình bày tổng quan về ngôn ngữ lập trình hƣớng đối tƣợng (Ngôn ngữ
lập trình C++)
1. Phƣơng pháp lập trình Hƣớng đối tƣợng
1.1. Phƣơng pháp lập trình hƣớng thủ tục
Về bản chất trong phƣơng pháp lập trình hƣớng thủ tục, mỗi chƣơng trình đƣợc
tổ chức thành các chƣơng trình con riêng lẽ (còn gọi là các module hay hàm). Mỗi
chƣơng trình con đảm nhận xử lý một công việc nhỏ hay nhóm công việc trong toàn
bộ hệ thống và mỗi chƣơng trình con này lại có thể đƣợc chia thành các chƣơng
trình con nhỏ hơn.
Hình 1-1. Cấu trúc chƣơng trình của phƣơng pháp lập trình hƣớng thủ
tục
Đứng trƣớc một bài toán để lập trình theo phƣơng pháp hƣớng thủ tục thì trƣớc
hết phải xác định thành phần dữ liệu (cấu trúc dữ liệu cho bài toán) sau đó xác định
các thao tác cần xử lý (tức các hàm) của bài toán. Thông tin đƣợc chuyển giao giữa
các hàm thông qua bộ tham số truyền vào.
Nhƣ vậy Chƣơng trình = cấu trúc dữ liệu + giải thuật
Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 9
- Ƣu điểm của phƣơng pháp lập trình hƣớng thủ tục:
Triển khai các phần mềm dễ dàng hơn đối với lập trình viên.
Chính vì đƣợc tổ chức dƣới dạng module hóa nên chƣơng trình dễ hiểu và dễ
bảo trì hơn.
- Nhƣợc điểm của phƣơng pháp lập trình hƣớng thủ tục:
Do các kiểu dữ liệu đƣợc xử lý trong nhiều hàm khác nhau bên trong một
chƣơng trình nên khi có sự thay đổi trong dữ liệu này thì buộc phải thực hiện cả các
thay đổi ở mọi nơi (mọi hàm) có thao tác tác động trên dữ liệu đó. Đây có thể là một
công việc tốn hời gian và kém hiệu quả đối với các chƣơng trình có hàng ngàn dòng
lệnh và hàng trăm hàm trở lên.
Một yếu điểm nữa của việc lập trình có cấu trúc là khi có nhiều lập trình viên
làm việc theo nhóm cùng một ứng dụng nào đó. Trong một chƣơng trình có cấu trúc,
các lập trình viên đƣợc phân công viết một tập hợp các hàm và các kiểu dữ liệu. Vì
có nhiều lập trình viên khác nhau quản lý các hàm riêng, có liên quan đến các kiểu
dữ liệu dùng chung nên các thay đổi mà lập trình viên tạo ra trên một phần tử dữ liệu
sẽ làm ảnh hƣởng đến công việc của tất cả các ngƣời còn lại trong nhóm. Mặc dù
trong bối cảnh làm việc theo nhóm, việc viết các chƣơng trình có cấu trúc thì dễ
dàng hơn nhƣng sai sót trong việc trao đổi thông tin giữa các thành viên trong nhóm
có thể dẫn tới hậu quả là mất rất nhiều thời gian để sửa chữa chƣơng trình.
Khó mô tả những quan hệ phức tạp của tự nhiên, vì vậy cần một phƣơng pháp
lập trình khác giải quyết những nhƣợc điểm này đó là lập trình hƣớng đối tƣợng
(OOP).
1.2. Lập trình hƣơng đối tƣợng và các khái niệm căn bản
Lập trình hƣớng đối tƣợng (Object Oriented Promgramming – OOP) là một
cách nhìn mới, định hƣớng tƣ duy mới, phong cách mới trong lập trình h ng
tr nh s ho t đ ng của các đ i t ng t ng t nh ho t đ ng của th gi i th c.
Là phƣơng pháp lập trình lấy đối tƣợng làm nền tảng để xây dựng giải thuật,
xây dựng chƣơng trình dựa trên cấu trúc lớp (class).
Đối với phƣơng pháp lập trình hƣớng thủ tục, khi gặp một hệ thống chúng ta
thƣờng suy nghĩ theo hƣớng “ m th n o để giải quy t công việc”- nguyên lý lập
trình từ trên xuống (top-down). Còn đối với phƣơng pháp lập trình hƣớng đối tƣợng
thì chúng ta định hƣớng tƣ duy theo phong cách “v i m t s đ i t ng đã có, phải
m g để giải quy t đ c công việc đặt ra” hoặc phong phú hơn “ m cái g v i m t
s đ i t ng đã có đó”, từ đó cũng có thể giải quyết đƣợc những công việc cụ thể.
Với phƣơng pháp phân tích trong đó đối tƣợng đóng vai trò trung tâm của việc lập
trình nhƣ vậy, ngƣời ta gọi là nguyên lý lập trình từ dƣới lên (bottom-up).
Một số khái niệm
Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 10
Đối tƣợng (object):
Mỗi phần tử trong thế giới thực xung quanh chúng ta là một đối tƣợng, nó
đƣợc hiểu nhƣ là những thực thể ví dụ nhƣ: ngƣời, giáo viên, học sinh, máy tính, xe,
phân số, hỗn số, chuỗi, hình vuông, chữ nhật, điểm trong mặt phẳng 2 chiều,…
Hình 1-2. Các đối tƣợng trong thực tế
Đối tƣợng là sự gắn kết giữa thành phần thông tin mô tả đối tƣợng (dữ liệu của
đối tƣợng còn gọi là thu c tính của đ i t ng) và các hành vi của đối tƣợng (còn gọi
là ph ng thức) thao tác trên các dữ liệu này.
Tòm lại: Đối tƣợng = Dữ liệu + Phƣơng thức
Ví dụ:
Đối tƣợng Sinh viên có các thuộc tính nhƣ mã sinh viên, học tên, quê quán,
điểm trung bình,.. và các phƣơng thức nhƣ ăn, học, tính điểm trung bình,...
Đối tƣợng Phân Số có 2 thuộc tính là tử s v mẫu s , có cách phƣơng thức
nhƣ rút gọn phân s , c ng phân s ,
Lớp đối tƣợng (gọi tắt là lớp - class)
Trên thực tế chúng ta thƣờng thấy có rất nhiều đối tƣợng cùng loại hay có cùng
đặc tính nhƣ nhau. Ví dụ đối tƣợng học sinh Nguyễn Thị Mỹ Loan, đối tƣợng học
sinh Trần Văn Tuấn,… đều có cùng đặc tính chung là học sinh; một ví dụ khác nhƣ
đối tƣợng 3/5, 1/3, 9/4, … đều có cùng đặc tính chung của một phân số; …
học sinh, phân số chính là các lớp đối tƣợng (lớp học sinh, lớp phân số…). Nhƣ
vậy tập h p các đ i t ng cùng o i t o th nh lớp đối tượng.
Nhƣ chúng ta đã biết, một đối tƣợng bất kỳ đƣợc đặc trƣng bởi hai thành phần
đó là thành phần thuộc tính và thành phần phƣơng thức, chính vì thế một lớp đối
tƣợng cũng đƣợc đặc trƣng bởi thành phần thuộc tính (là những thuộc tính chung
của các đối tƣợng cùng loại) và thành phần phƣơng thức (là những phƣơng thức
chung của các đối tƣợng cùng loại).