Siêu thị PDFTải ngay đi em, trời tối mất

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
PREMIUM
Số trang
111
Kích thước
2.1 MB
Định dạng
PDF
Lượt xem
1468

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).

Tải ngay đi em, còn do dự, trời tối mất!