Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 191 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
191
Dung lượng
1,53 MB
Nội dung
HỌC VIỆN CƠNG NGHỆ BƢU CHÍNH VIỄN THƠNG KHOA THIẾT KẾ VÀ SÁNG TẠO ĐA PHƢƠNG TIỆN ***** GIÁO TRÌNH BÀI GIẢNG (Phƣơng pháp đào tạo theo tín chỉ) TÊN HỌC PHẦN: IT LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG PT VỚI C++ (03 tín chỉ) Biên soạn ThS Trần Thị Hạnh LƢU HÀNH NỘI BỘ Hà Nội, 11/2014 LỜI NÓI ĐẦU PT IT Hiện nay, ngơn ngữ lập trình hƣớng đối tƣợng đƣợc sử dụng phổ biến để viết ứng dụng nhƣ C++, Java, C# Trong C++ ngôn ngữ đƣợc mở rộng từ ngôn ngữ C, C++ kế thừa đƣợc điểm mạnh C nhƣ khả tƣơng thích với thiết bị phần cứng Bài giảng nhằm giới thiệu cho sinh viên hiểu biết lập trình hƣớng đối tƣợng ngơn ngữ lập trình hƣớng đối tƣợng C++ Nội dung giảng bao gồm chƣơng: - Chƣơng 1: Tổng quan lập trình hƣớng đối tƣợng Giới thiệu phƣơng pháp lập trình, khái niệm lập trình hƣớng đối tƣợng số ngơn ngữ lập trình hƣớng đối tƣợng phổ biến - Chƣơng 2: Giới thiệu ngơn ngữ C++ Giới thiệu lập trình với C++ - Chƣơng 3: Lớp đối tƣợng Trình bày cách khai báo, sử dụng lớp, hàm thành phần lớp - Chƣơng 4: Kế thừa đa hình Trình bày đơn kế thừa, đa kế thừa đa hình C++ - Chƣơng 5: Khn hình hàm khn hình lớp Trình bày cách tạo sử dụng khn hình hàm, khn hình lớp C++ - Chƣơng 6: Thƣ viện chuẩn STL C++ Trình bày số lớp thƣ viện chuẩn C++ Mặc dù tác giả có nhiều cố gắng trình biên soạn giảng này, song khơng thể tránh khỏi thiếu sót Rất mong nhận đƣợc đóng góp ý kiến sinh viên bạn đồng nghiệp MỤC LỤC LỜI NÓI ĐẦU MỤC LỤC CHƢƠNG 1: TỔNG QUAN VỀ LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG 1.1 Tổng quan tiếp cận hƣớng đối tƣợng 1.1.1 Phƣơng pháp tiếp cận lập trình truyền thống 1.1.2 Phƣơng pháp tiếp cận hƣớng đối tƣợng 1.2 Các khái niệm lập trình hƣớng đối tƣợng 11 1.2.1 Đối tƣợng 11 1.2.2 Lớp đối tƣợng 11 1.2.3 Phƣơng thức 12 IT 1.2.4 Thuộc tính 12 1.2.5 Thông điệp truyền thông điệp 12 1.2.6 Trừu tƣợng hoá đối tƣợng 12 1.2.7 Tính đóng gói 13 PT 1.2.8 Tính kế thừa 13 1.2.9 Tính đa hình 14 1.3 Các ngôn ngữ lập trình hƣớng đối tƣợng 14 1.3.1 C++ 14 1.3.2 Net 14 1.3.3 Java 15 1.4 Case study 15 TỔNG KẾT CHƢƠNG 15 CÂU HỎI VÀ BÀI TẬP CHƢƠNG 16 CHƢƠNG 2: GIỚI THIỆU NGÔN NGỮ C++ 17 2.1 Cấu trúc chƣơng trình C++ 17 2.2 Từ khóa 18 2.3 Kiểu liệu 18 2.4 Khai báo biến, 19 2.4.1 Khai báo biến 19 2.4.2 Khai báo 19 2.5 Các lệnh vào lệnh điều khiển 20 2.5.1 Các lệnh vào 20 2.5.2 Các lệnh điều khiển 23 2.6 Kiểu liệu cấu trúc 30 2.6.1 Khái niệm kiểu cấu trúc 30 2.6.2 Cách sử dụng kiểu cấu trúc 33 2.6.3 Con trỏ cấu trúc mảng cấu trúc 36 2.7 Cấp phát giải phóng nhớ 42 2.7.1 Cấp phát nhớ với toán tử new 42 2.7.2 Giải phóng nhớ với toán tử delete 44 2.8 Làm việc với tệp tin 44 2.8.1 Mở tệp tin 44 2.8.2 Thao tác tệp tin 45 2.8.3 Truy nhập tệp với trỏ 51 IT 2.9 Case study: Xây dựng chƣơng trình đơn giản với C++ 54 TỔNG KẾT CHƢƠNG 55 CÂU HỎI VÀ BÀI TẬP CHƢƠNG 56 LỚP VÀ ĐỐI TƢỢNG 57 PT CHƢƠNG 3: 3.1 Lớp đối tƣợng 57 3.1.1 Khai báo lớp 57 3.1.2 Tạo sử dụng lớp đối tƣợng 59 3.2 Con trỏ đối tƣợng 62 3.3 Mảng đối tƣợng 65 3.4 Hàm bạn, lớp bạn 68 3.4.1 Hàm bạn 68 3.4.2 Lớp bạn 73 3.5 Hàm thiết lập, huỷ bỏ 74 3.5.1 Hàm thiết lập 74 3.5.2 Hàm huỷ bỏ 76 3.6 Toán tử lớp 78 3.6.1 Hàm toán tử hàm thành phần 78 3.6.2 Hàm toán tử hàm bạn 80 3.6.3 Khả giới hạn định nghĩa chồng toán tử 83 3.7 Case study: Xây dựng ứng dụng đơn giản sử dụng lớp đối tƣợng 83 TỔNG KẾT CHƢƠNG 86 CÂU HỎI VÀ BÀI TẬP CHƢƠNG 87 CHƢƠNG 4: KẾ THỪA VÀ ĐA HÌNH 88 4.1 Kế thừa 89 4.1.1 Lớp sở lớp dẫn xuất 89 4.1.2 Các kiểu kế thừa 89 4.1.3 Đơn kế thừa 90 4.1.4 Đa kế thừa 101 4.2 Đa hình 107 4.2.1 Phƣơng thức ảo 107 4.2.2 Lớp trừu tƣợng, hàm ảo túy 110 4.3 Case study: Xây dựng ứng dụng đơn giản sử dụng tính kế thừa đa hình 110 TỔNG KẾT CHƢƠNG 113 CHƢƠNG 5: IT CÂU HỎI VÀ BÀI TẬP CHƢƠNG 114 KHN HÌNH HÀM VÀ KHN HÌNH LỚP 116 5.1 Khn hình hàm 116 PT 5.1.1 Khái niệm khn hình hàm 116 5.1.2 Tạo khn hình hàm 116 5.1.3 Sử dụng khn hình hàm 117 5.1.4 Tham số khn hình hàm 119 5.1.5 Chồng khuôn hình hàm 121 5.2 Khn hình lớp 123 5.2.1 Khái niệm khn hình lớp 123 5.2.2 Tạo khn hình lớp 123 5.2.3 Sử dụng khn hình lớp 125 5.2.4 Tham số khuôn hình lớp 126 TỔNG KẾT CHƢƠNG 128 CÂU HỎI VÀ BÀI TẬP CHƢƠNG 128 CHƢƠNG 6: THƢ VIỆN CHUẨN STL CỦA C++ 129 6.1 Lớp chứa 129 6.1.1 Lớp chứa 130 6.1.2 Lớp chứa liên kết 138 6.2 Lớp Iterator 147 6.2.1 Các loại iterator 147 6.2.2 Các hàm iterator bổ trợ 150 6.2.3 Các iterator chuyển tiếp 153 6.3 Lớp đối tƣợng hàm 161 6.3.1 Các đối tƣợng hàm tiêu chuẩn xếp lớp chứa 161 6.3.2 Các đối tƣợng hàm sử dụng hàm giải thuật 162 6.3.3 Đối tƣợng hàm tự định nghĩa 163 6.4 Lớp giải thuật 165 6.4.1 Một số hàm bổ trợ 165 6.4.2 Hàm giải thuật for_each() 166 6.4.3 Các hàm giải thuật không thay đổi phần tử 167 6.4.4 Các giải thuật thay đổi phần tử 175 6.4.5 Các giải thuật xóa phần tử 181 IT 6.4.6 Các giải thuật biến đổi 183 6.4.7 Các giải thuật xếp 187 TỔNG KẾT CHƢƠNG 189 PT TÀI LIỆU THAM KHẢO 190 CHƢƠNG 1: TỔNG QUAN VỀ LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG Nội dung chƣơng giới thiệu tổng quan lập trình hƣớng đối tƣợng Bao gồm nội dung sau: - Giới thiệu cách tiếp cận lập trình truyền thống - Giới thiệu cách tiếp cận lập trình hƣớng đối tƣợng - Các khái niệm lập trình hƣớng đối tƣợng - Giới thiệu ngơn ngữ lập trình hƣớng đối tƣợng phổ biến Tổng quan tiếp cận hƣớng đối tƣợng 1.1 1.1.1 Phƣơng pháp tiếp cận lập trình truyền thống 1.1.1.1 Lập trình tuyến tính IT Lập trình tuyến tính phƣơng pháp lập trình khơng có cấu trúc, tƣ theo lối Chƣơng trình đƣợc thực từ đầu đến cuối, lệnh lệnh kết thúc Đặc trưng Đơn giản: chƣơng trình đƣợc tiến hành đơn giản theo lối tuần tự, không phức tạp - Đơn luồng: có luồng cơng việc nhất, công viêc đƣợc thực luồng Tính chất PT - - Ƣu điểm: đơn giản, dễ hiểu - Nhƣợc điểm: Khơng thể dùng lập trình tuyến tính để xây dựng ứng dụng đơn giản Ngày nay, lập trình tuyến tính tồn module nhỏ phƣơng pháp lập trình khác 1.1.1.2 Lập trình cấu trúc Với lập trình hƣớng cấu trúc, chƣơng trình đƣợc chia nhỏ thành chƣơng trình chƣơng trình thực cơng việc xác định Chƣơng trình gọi đến chƣơng trình theo giải thuật, cấu trúc đƣợc xác định chƣơng trình Một số ngơn ngữ lập trình hƣớng cấu trúc phổ biến là: Pascal, C, C++ Riêng C++ ngồi việc có đặc trƣng lập trình cấu trúc kế thừa từ C, cịn có đặc trƣng lập trình hƣớng đối tƣợng Vì thế, C++ cịn đƣợc gọi ngơn ngữ nửa hƣớng cấu trúc, nửa hƣớng đối tƣợng Đặc trưng Đặc trƣng lập trình cấu trúc thể mối quan hệ: Chƣơng trình = Cấu trúc liệu + giải thuật Trong đó: - Cấu trúc liệu: cách tổ chức liệu, cách mơ tả tốn dƣới dạng ngơn ngữ lập trình - Giải thuật: quy trình để thực cơng việc xác định Trong chƣơng trình, giải thuật có quan hệ phụ thuộc vào cấu trúc liệu: - Một cấu trúc liệu phù hợp với số hạn chế giải thuật - Nếu thay đổi cấu trúc liệu phải thay đổi giải thuật cho phù hợp - Một giải thuật thƣờng phải kèm cấu trúc liệu định Tính chất Mỗi chƣơng trình đƣợc gọi thực nhiều lần chƣơng trình - Các chƣơng trình đƣợc gọi đến để thực theo thứ tự bất kì, tùy thuộc vào giải thuật chƣơng trình mà khơng phụ thuộc vào thứ tự khai báo chƣơng trình - Các ngơn ngữ lập trình cấu trúc cung cấp số cấu trúc lệnh điều khiển chƣơng trình - Ƣu điểm: Chƣơng trình sáng sủa, dễ hiểu, dễ theo dõi, tƣ giải thuật rõ ràng - Nhƣợc điểm: Không hỗ trợ sử dụng lại mã nguồn Giải thuật phụ thuộc chặt chẽ vào cấu trúc liệu, thay đổi cấu trúc liệu phải thay đổi giải thuật, viết lại chƣơng trình Lập trình cấu trúc không phù hợp với phần mềm lớn PT IT - 1.1.2 Phƣơng pháp tiếp cận hƣớng đối tƣợng 1.1.2.1 Lập trình hƣớng đối tƣợng Trong lập trình hƣớng đối tƣợng: - Ngƣời ta coi thực thể chƣơng trình đối tƣợng sau trừu tƣợng hóa đối tƣợng thành lớp đối tƣợng - Dữ liệu đƣợc tổ chức thành thuộc tính lớp Ngƣời ta ngăn chặn việc thay đổi tùy tiện liệu chƣơng trình cách giới hạn truy nhập nhƣ cho phép truy nhập liệu thông qua đối tƣợng, thông qua phƣơng thức mà đối tƣợng đƣợc cung cấp - Quan hệ đối tƣợng quan hệ ngang hang quan hệ kế thừa: lớp B kế thừa từ lớp A đƣợc gọi lớp sở B gọi lớp dẫn xuất Một số ngơn ngữ lập trình hƣớng đối tƣợng phổ biến: C++, java, C#, objective C… Đặc trưng - Đóng gói liệu: liệu đƣợc tổ chức thành thuộc tính lớp đối tƣợng Việc truy nhập đến liệu phải thông qua phƣơng thức đối tƣợng lớp - Sử dụng lại mã nguồn: việc sử dụng lại mã nguồn đƣợc thể thông qua chế kế thừa Cơ chế cho phép lớp đối tƣợng kế thừa từ lớp đối tƣợng khác Khi lớp dẫn xuất sử dụng phƣơng thức lớp sở mà không cần phải định nghĩa lại Ưu điểm - Khơng có nguy liệu bị thay đổi tự chƣơng trình liệu đƣợc đóng gói vào đối tƣợng Nếu muốn truy nhập liệu phải thông qua phƣơng thức đƣợc cho phép đối tƣợng - Khi thay đổi cấu trúc liệu đối tƣợng, không cần phải thay đổi mã nguồn đối tƣợng khác mà cần thay đổi số thành phần lớp dẫn xuất - Có thể sử dụng lại mã nguồn, tiết kiệm tài ngun, chi phí thời gian Vì ngun tắc kế thừa cho phép lớp dẫn xuất sử dụng phƣơng thức từ lớp sở nhƣ phƣơng thức nó, mà khơng cần phải định nghĩa lại - Phù hợp với dự án phần mềm lớn, phức tạp IT 1.1.2.2 Phƣơng pháp phân tích thiết kế hƣớng đối tƣợng Vấn đề đặt cho phƣơng pháp lập trình hƣớng đối tƣợng từ toán ban đầu, để thu đƣợc tập đối tƣợng, với chức đƣợc phối hợp với nhau, đáp ứng đƣợc yêu cầu tốn đặt PT Phƣơng pháp phân tích thiết kế hƣớng đối tƣợng đời nhằm trả lời cho câu hỏi Mục đích xây dựng tập lớp đối tƣợng tƣơng ứng với tốn Phƣơng pháp gồm pha chính: - Pha phân tích: Chuyển đổi u cầu tốn từ ngơn ngữ tự nhiên sang ngơn ngữ mơ hình - Pha thiết kế: Chuyển đổi tốn từ ngơn ngữ mơ hình sagn mơ hình cụ thể cài đặt đƣợc Hai pha gồm bƣớc sau: - Mơ tả tốn - Đặc tả u cầu - Trích chọn đối tƣợng - Mơ hình hóa lớp đối tƣợng - Thiết kế tổng thể - Thiết kế chi tiết Bước 1: Mơ tả tốn Bài tốn ban đầu đƣợc phát triển dƣới dạng ngôn ngữ tự nhiên, bao gồm: - Mục đích, chức chung - Các yêu cầu thông tin liệu - Các yêu cầu chức thực Bước 2: Đặc tả u cầu Các u cầu đƣợc hình thức hóa lên mức cao cách sử dụng ngôn ngữ kịch để mô tả Trong kịch bản, chức năng, hoạt động đƣợc mô tả kịch bản, bao gồm: - Các tác nhân tham gia vào kịch - Vai trò tác nhân kịch - Thứ tự hành động mà tác nhân thực hiện: thực hiện, tác động vào tác nhân nào, thông tin đƣợc trao đổi Quá trình đƣợc tiến hành với tất chức yêu cầu hệ thống Bước 3: Trích chọn đối tƣợng Tiến hành đề xuất đối tƣợng có mặt hệ thống: Dựa vào kịch đƣợc mô tả bƣớc hai, chọn tác nhân có xuất để đề xuất thành đối tƣợng - Lựa chọn đối tƣợng cách loại bỏ tác nhân bên hệ thống, tác nhân trùng lặp - Cuối cùng, ta thu đƣợc đối tƣợng hệ thống PT IT - Bước 4: Mơ hình hóa lớp đối tƣợng Tiến hành trừu tƣợng hóa đối tƣợng thành lớp: - Thu thập tất thuộc tính đối tƣợng vừa thu thập đƣợc, dựa vào yêu cầu thông tin yêu cầu hệ thống từ bƣớc - Thu thập hành động mà đối tƣợng cần thực hiện, dựa vào kịch mà đối tƣợng tƣơng ứng có tham gia bƣớc - Nhóm đối tƣợng tƣơng tự nhau, có nhiều thuộc tính gần giống - Loại bỏ số thuộc tính cá biệt, riêng tƣ số đối tƣợng nhóm - Mơ hình nhóm đối tƣợng cịn lại thành lớp: Các thuộc tính chung đối tƣợng thành thuộc tính lớp, hành động đối tƣợng thành phƣơng thức lớp Kết thu đƣợc bƣớc tập lớp đối tƣợng ban đầu hệ thống Bước 5: Thiết kế tổng thể Tiến hành thiết kế mối quan hệ lớp đối tƣợng hệ thống - Xác định sơ đồ thiết kế có lớp: Nếu hai lớp có số thuộc tính chung, tách thuộc tính chung làm thành lớp sở, hai lớp ban đầu đề dẫn xuất 10 using namespace std; int main() { vector coll1 = { "Hello", "this", "is", "an", "example" }; list coll2; copy (coll1.cbegin(), coll1.cend(), back_inserter(coll2)); move (coll2.cbegin(), coll2.cend(), ostream_iterator(cout," ")); cout