Bài giảng Lập trình hướng đối tượng: Phần 1 - ĐH Sư phạm kỹ thuật Nam Định

87 11 0
Bài giảng Lập trình hướng đối tượng: Phần 1 - ĐH Sư phạm kỹ thuật Nam Định

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Lập trình hướng đối tượng: Phần 1 cung cấp cho người học những kiến thức như: Lập trình hướng đối tượng và C++; Lớp và đối tượng; Một số khái niệm trong lập trình hướng đối tượng; Một số mở rộng đơn giản trong C++ so với C; Hàm trong C++;...Mời các bạn cùng tham khảo!

Lập trình h-ớng đối t-ợng MC LC Mc lc Chương 1: Lập trình hướng đối tượng C++ 1.1 Lập trình hướng đối tượng 1.2 Các ngôn ngữ vài ứng dụng hướng đối tượng 1.3 Một số khái niệm lập trình hướng đối tượng 1.3.1 Sự đóng gói 1.3.2 Lớp thực thể 1.3.3 Tính thừa kế 1.3.4 Tính đa hình 1.3.5 Phương thức ảo 1.4 Một số mở rộng đơn giản C++ so với C 1.4.1 Môi trường C++ 1.4.2 Lập trình cấu trúc lập trình hướng đối tượng 1.4.3 Cách viết dòng ghi 11 1.4.4 Khai báo linh hoạt có kiểu 12 1.4.5 Các kiểu char int 13 1.4.6 Lấy địa phần tử mảng thực hai chiều 13 1.4.7.Vào C++ 14 1.4.8 Cấu trúc C++ 15 1.4.9 Cấp phát nhớ C++ 15 1.5 Hàm C++ 19 1.5.1 Biến tham chiếu 19 1.5.2 Truyền giá trị cho hàm theo biến tham chiếu 20 1.5.3 Hàm trả tham chiếu 20 1.5.4 Đối có giá trị mặc định 21 1.5.5 Các hàm trực tuyến (inline) 21 1.5.6 Định nghĩa chồng hàm 22 1.5.7 Định nghĩa chồng toán tử 22 Câu hỏi Bài tập 31 Chương 2: Lớp đối tượng 39 2.1 Định nghĩa lớp 39 2.2 Phạm vi truy xuất 40 2.3 Đối tượng 41 2.3.1 Biến, mảng đối tượng 41 2.3.2 Con trỏ đối tượng 42 Trang - - LËp trình h-ớng đối t-ợng 2.3.3 i ca phng thc, trỏ this 42 2.4 Hàm phương thức lớp 43 2.4.1 Hàm hàm bạn 43 2.4.2 Phương thức toán tử 49 2.4.3 Hàm tạo 54 2.4.4 Lớp khơng có hàm tạo hàm tạo mặc định 55 2.4.5 Hàm tạo chép 58 2.4.6 Hàm huỷ 61 2.4.7 Toán tử gán 63 2.4.8 Phân loại phương thức 64 2.4.9 Hàm tạo đối tượng thành phần 65 2.5 Các thành phần tĩnh 70 2.5.1 Thành phần liệu tĩnh 70 2.5.2 Phương thức tĩnh 73 2.6 Khởi gán mảng đối tượng 75 2.7 Cấp phát nhớ cho đối tượng 76 2.8 Đối tượng hằng, phương thức 76 2.9 Hàm bạn, lớp bạn 81 Câu hỏi tập 82 Chương 3: Dẫn xuất thừa kế 88 3.1 Sự dẫn xuất tính thừa kế 88 3.1.1 Lớp sở lớp dẫn xuất 88 3.1.2 Cách xây dựng lớp dẫn xuất 88 3.1.3 Các kiểu thừa kế 89 3.1.4 Thừa kế thành phần liệu 90 3.1.5 Thừa kế phương thức 91 3.2 Hàm tạo hàm huỷ tính thừa kế 95 3.2.1 Xây dựng hàm tạo lớp dẫn xuất 95 3.2.2 Hàm huỷ lớp dẫn xuất 98 3.3 Phạm vi truy xuất đến thành phần lớp sở 100 3.4 Thừa kế nhiều mức trùng tên 104 3.4.1 Sơ đồ xây dựng lớp dẫn xuất theo nhiều mức 104 3.4.2 Sự thừa kế nhiều mức 105 3.4.3 Sự trùng tên 105 3.4.4 Sử dụng thành phần lớp dẫn xuất 106 3.5 Lớp sở ảo 107 3.5.1 Một số lớp sở xuất nhiều lần lớp dẫn xuất 107 Trang - - LËp trình h-ớng đối t-ợng 3.5.2 Cỏc lp c s o 107 3.6 Toán tử gán lớp dẫn xuất 108 3.6.1 Khi cần xây dựng toán tử gán 108 3.6.2 Cách xây dựng toán tử gán cho lớp dẫn xuất 108 3.7 Hàm tạo chép lớp dẫn xuất 108 3.7.1 Khi cần xây dựng hàm tạo chép 108 3.7.2 Cách xây dựng hàm tạo chép cho lớp dẫn xuất 109 3.8 Phương thức tĩnh 110 3.9 Sự hạn chế phương thức tĩnh 112 3.10 Phương thức ảo tương ứng bội 112 3.10.1 Cách định nghĩa phương thức ảo 112 3.10.2 Quy tắc gọi phương thức ảo 113 3.10.3 Tương ứng bội 116 3.10.4 Liên kết động 119 3.10.5 Quy tắc gán địa đối tượng cho trỏ lớp sở 130 3.11 Lớp sở trừu tượng 130 Câu hỏi tập 135 Chương 4: Khn hình 141 4.1 Khn hình hàm 141 4.1.1 Khái niệm khuôn hình hàm 141 4.1.2 Tạo khn hình hàm 141 4.1.3 Sử dụng khn hình hàm 142 4.1.4 Các tham số kiểu khuôn hình hàm 145 4.1.5 Giải thuật sản sinh hàm thể 146 4.1.6 Khởi tạo biến có kiểu liệu chuẩn 147 4.1.7 Các hạn chế khuôn hình hàm 148 4.1.8 Các tham số biểu thức khuôn hình hàm 149 4.1.9 Định nghĩa chồng khn hình hàm 150 4.2 Khn hình lớp 152 4.2.1 Khái niệm khn hình lớp 152 4.2.2 Tạo khn hình lớp 153 4.2.3 Sử dụng khn hình lớp 158 4.2.4 Các tham số khn hình lớp 158 4.2.5 Các tham số biểu thức khuôn hình lớp 160 4.2.6 Tổng qt khn hình lớp 162 4.2.7 Cụ thể hố khn hình lớp 162 4.2.8 Sự giống lớp thể 165 Trang - - Lập trình h-ớng đối t-ợng 4.2.9 Cỏc lp thể lớp bạn bè 166 Câu hỏi tập 173 Chương 5: Các dòng xuất nhập 174 5.1 Các lớp stream 174 5.2 Dòng cin toán tử nhập 175 5.3 Dịng cout tốn tử xuất 176 5.4 Các phương thức định dạng 178 5.4.1 Nội dung định dạng giá trị xuất 178 5.4.2 Các phương thức định dạng 180 5.5 Cờ định dạng 182 5.5.1 Khái niệm chung cờ 182 5.5.2 Công dụng cờ 182 5.5.3 Các phương thức bật tắt cờ 186 5.6 Các dòng tin chuẩn 187 5.7 Ghi liệu lên tệp 187 5.8 Đọc liệu từ tệp 193 5.9 Đọc ghi liệu đồng thời tệp 197 Câu hỏi tập 244 Một số thông báo lỗi thường gặp 248 Tài liệu tham khảo 253 Trang - - Lập trình h-ớng đối t-ợng Chng 1: Lập trình hướng đối tượng C++ Nội dung chương tập trung trình bày vấn đề sau:  Lập trình hướng đối tượng gì?  Một số khái niệm lập trình hướng đối tượng  Giới thiệu C++ số mở rộng C++ so với C  Hàm C++ 1.1 Lập trình hướng đối tượng Vào ngày đầu phát triển máy tính, phần mềm cịn đơn giản cỡ vài chục dịng lệnh, chương trình viết với câu lệnh thực từ đầu đến cuối Cách lập trình gọi phương pháp lập trình tuyến tính Khoa học máy tính ngày phát triển, phần mềm đòi hỏi ngày phức tạp lớn nhiều Vì vậy, xuất phương pháp lập trình gọi lập trình cấu trúc Theo phương pháp này, chương trình tổ chức thành chương trình Mỗi chương trình đảm nhận xử lý cơng việc nhỏ tồn hệ thống Mỗi chương trình lại chia nhỏ thành chương trình nhỏ Quá trình phân chia tiếp diễn chương trình nhận đủ đơn giản để giải Người ta gọi q trình “làm mịn dần” Theo quan điểm phương pháp này: Chương trình = Cấu trúc liệu + Giải thuật Vì vậy, để lập chương trình địi hỏi người lập trình phải có kiến thức vững vàng Cấu trúc liệu Một khó khăn gặp phải chương trình phụ thuộc chặt chẽ vào cấu trúc liệu Do vậy, cần thay đổi nhỏ cấu trúc liệu phải viết lại chương trình, điều khơng thích hợp xây dựng dự án phần mềm lớn Một phương pháp lập trình sử dụng phổ biến khắc phục nhược điểm phương pháp lập trình cấu trúc lập trình hướng đối tượng Lập trình hướng đối tượng đặt trọng tâm vào đối tượng (dữ liệu hệ thống), không cho phép liệu biến động tự hệ thống Lập trình hướng đối tượng có đặc điểm chủ yếu sau: - Tập trung vào liệu thay cho hàm - Chương trình chia thành đối tượng - Cấu trúc liệu thiết kế cho đặc tả đối tượng - Các hàm thao tác vùng liệu đối tượng gắn với cấu trúc liệu Trang - - LËp trình h-ớng đối t-ợng - D liu c úng gúi lại, che dấu không cho phép hàm ngoại lai truy nhập tự - Các đối tượng tác động trao đổi thông tin với qua hàm - Có thể dễ dàng bổ sung liệu hàm vào đối tượng cần thiết 1.2 Các ngôn ngữ vài ứng dụng hướng đối tượng Lập trình hướng đối tượng đặc quyền ngôn ngữ lập trình đặc biệt Cũng giống kỹ thuật lập trình có cấu trúc, khái niệm lập trình hướng đối tượng thể nhiều ngôn ngữ lập trình khác Những ngơn ngữ cung cấp khả lập trình hướng đối tượng (tạo lớp, đối tượng, thừa kế,…) gọi ngôn ngữ lập trình hướng đối tượng Một số ngơn ngữ lập trình hướng đối tượng dùng phổ biến như: C++, Java, C#, Visual Basic.Net, Lập trình thuật ngữ nhắc đến nhiều cơng nghệ phần mềm ứng dụng để phát triển phần mềm nhiều lĩnh vực khác Trong số đó, ứng dụng quan trọng tiếng thiết kế giao diện với người sử dụng, kiểu Windows Các lĩnh vực ứng dụng phù hợp với kỹ thuật lập trình hướng đối tượng liệt kê đây:  Các hệ thống làm việc theo thời gian thực;  Các hệ mơ hình hố mơ q trình;  Các hệ sở liệu hướng đối tượng;  Các hệ siêu văn (hypertext), đa phương tiện (multimedia);  Các hệ thống trí tuệ nhân tạo hệ chuyên gia;  Các hệ thống song song mạng nơ-ron;  Các hệ tự động hoá văn phòng trợ giúp định;  Các hệ CAD/CAM  … 1.3 Một số khái niệm lập trình hướng đối tượng 1.3.1 Sự đóng gói Trong phương pháp lập trình cấu trúc hàm hay thủ tục có phạm vi hoạt động tồn chương trình, sử dụng thông qua lời gọi mà không cn Trang - - Lập trình h-ớng đối t-ợng biết đến nội dung cụ thể Người sử dụng cần biết chức hàm tham số cần truyền vào để gọi hàm chạy mà không cần quan tâm đến lệnh cụ thể bên Người ta gọi đóng gói chức Trong phương pháp lập trình hướng đối tượng, khơng chức đóng gói mà liệu Với đối tượng người ta truy nhập trực tiếp vào thành phần liệu mà phải thơng qua thành phần chức (các phương thức) để làm việc 1.3.2 Lớp thực thể Đối tượng (hay thực thể) kết hợp liệu thủ tục (hay gọi phương thức - method) thao tác liệu Có thể đưa công thức phản ánh chất kỹ thuật lập trình hướng đối tượng sau: Đối tượng = Dữ liệu + Phương thức Lớp tập đối tượng có cấu trúc liệu phương thức giống (hay nói cách khác tập đối tượng loại) Như vậy, có lớp biết mơ tả cấu trúc liệu phương thức đối tượng thuộc lớp Mỗi đối tượng thể cụ thể (instance) lớp Trong lập trình, coi lớp kiểu liệu, cịn đối tượng biến có kiểu lớp 1.3.3 Tính thừa kế Tính thừa kế khả cho phép định nghĩa lớp sở lớp tồn tại, tất nhiên có bổ sung phương thức hay thành phần liệu Khả thừa kế cho phép dễ dàng chỉnh sửa phát triển chương trình Rõ ràng điểm mạnh lập trình hướng đối tượng so với lập trình cấu trúc 1.3.4 Tính đa hình Đó khả cho phép thơng điệp (lời gọi phương thức) thay đổi cách thực theo lớp cụ thể đối tượng nhận lời gọi phương thức Khi lớp dẫn xuất tạo ra, thay đổi cách thực phương thức mà thừa hưởng từ lớp sở Một lời gọi phương thức từ đối tượng lớp sở, thực phương thức lớp sở Nếu lớp dẫn xuất định nghĩa lại phương thức thừa hưởng từ lớp sở lời gọi phương thức tên với phương thức này, gửi tới đối tượng lớp dẫn xuất gọi phương thức định nghĩa cho lớp dẫn xuất Trang - - Lập trình h-ớng đối t-ợng 1.3.5 Phương thức ảo C++ cho phép chế tương ứng bội cách định nghĩa phương thức phương thức ảo sơ đồ thừa kế Khi đó, trỏ lớp sở trỏ đến địa đối tượng lớp dẫn xuất, phương thức thực tuỳ thuộc vào kiểu đối tượng mà trỏ trỏ tới 1.4 Một số mở rộng đơn giản C++ so với C 1.4.1 Môi trường C++ C ngôn ngữ lập trình mạnh linh hoạt sử dụng rộng rãi để giải toán khoa học kỹ thuật, ghép nối máy tính, đồ hoạ, Để thừa kế điểm mạnh vốn có C vào năm 1983, giáo sư Bjarne Stroustrap bắt đầu nghiên cứu phát triển việc cài đặt khả lập trình hướng đối tượng vào ngôn ngữ C tạo ngôn ngữ gọi C++ Hai dấu + tên gọi C++ thể hai đặc điểm C++ so với C Đặc điểm thứ số khả mở rộng so với C tham chiếu, chồng hàm, tham số mặc định Đặc điểm thứ hai khả lập trình hướng đối tượng Hiện C++ chưa phải ngơn ngữ hồn tồn ổn định Kể từ phiên đời vào năm 1986 có nhiều thay đổi phiên C++ khác nhau: 1.1 đời vào năm 1986, 2.0 vào năm 1989 3.0 vào năm 1991 Phiên 3.0 sử dụng để làm sở cho việc định nghĩa ngôn ngữ C++ chuẩn (kiểu ANSI C) Trên thực tế tất chương trình dịch C++ tương thích với phiên 3.0 Vì C++ khơng gây khó khăn chuyển đổi từ môi trường sang môi trường khác C++ chứa đựng khái niệm lớp Một lớp bao gồm thành phần liệu bao gồm thuộc tính phương thức( hàm thành phần) Từ lớp tạo đối tượng cách khai báo thơng thường biến có kiểu lớp cách cấp phát nhớ động nhờ sử dụng toán tử new C++ cho phép đóng gói liệu khơng bắt buộc thực điều Đây nhược điểm C++ Tuy nhiên cần thấy thân C++ mở rộng C nên khơng thể ngơn ngữ lập trình hướng đối tượng khiết C++ cho phép định nghĩa hàm tạo (constructor) cho lớp Hàm tạo phương thức đặc biệt gọi đến thời điểm đối tượng lớp tạo Trang - - Lập trình h-ớng đối t-ợng Hm to có nhiệm vụ khởi tạo đối tượng: cấp phát nhớ, gán giá trị cho thành phần liệu việc chuẩn bị chỗ cho đối tượng Một lớp có hay nhiều hàm tạo Để xác định hàm tạo cần gọi đến, chương trình biên dịch so sánh đối số với tham số truyền vào Tương tự hàm tạo, lớp có hàm huỷ (destructor), phương thức đặc biệt gọi đến đối tượng giải phóng khỏi nhớ Lớp C++ thực chất kiểu liệu người sử dụng định nghĩa Khái niệm định nghĩa chồng toán tử cho phép định nghĩa phép toán lớp giống kiểu liệu chuẩn C Ví dụ định nghĩa lớp số phức với phép toán cộng, trừ, nhân, chia Cũng giống C, C++ có khả chuyển đổi kiểu Khơng thế, C++ cịn cho phép mở rộng chuyển đổi sang kiểu người sử dụng tự định nghĩa (các lớp) Ví dụ, chuyển đổi từ kiểu chuẩn int C sang kiểu số phức mà ta định nghĩa chẳng hạn C++ cho phép thực thừa kế lớp xây dựng Từ phiên 2.0 trở đi, C++ cho phép lớp thừa kế lúc từ nhiều lớp khác (gọi đa thừa kế) Cuối C++ cung cấp thao tác vào dựa sở khái niệm luồng liệu (flow) Sự ưu việt thao tác chỗ: * Sử dụng đơn giản * Kích thước nhớ rút gọn * Khả áp dụng kiểu người sử dụng định nghĩa cách sử dụng chế định nghĩa chồng toán tử 1.4.2 Lập trình cấu trúc lập trình hướng đối tượng Đặc trưng lập trình hướng cấu trúc Trong lập trình hướng cấu trúc, chương trình 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 xác định chương trình Các ngơn ngữ lập trình cấu trúc phổ biến Pascal, C C++ Riêng C++ việc có đặc trưng lập trình cấu trúc Trang - - Lập trình h-ớng đối t-ợng tha k từ C, cịn có đặc trưng lập trình hướng đối tượng Cho nên C++ cịn gọi ngơn ngữ lập trình nửa cấu trúc, nửa hướng đối tượ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 Cấu trúc liệu cách tổ chức liệu cho việc xử lý hay nhiều chương 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 với cấu trúc liệu định Tính chất Mỗi chương trình gọi thực nhiều lần chương trình Các chương trình gọi đến để thực theo thứ tự bất kì, tuỳ 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  Lập trình cấu trúc khơng hỗ trợ mạnh việc 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 Do đó, thay đổi cấu trúc liệu, phải thay đổi giải thuật, nghĩa phải viết lại chương trình  Khơng phù hợp với phần mềm lớn: tư cấu trúc với giải thuật phù hợp với toán nhỏ, nằm phạm vi module chương trình Với dự án phần mềm lớn, lập trình cấu trúc tỏ khơng hiệu việc giải mối quan hệ vĩ mô module phần mềm Đặc trưng lập trình hướng đối tượng Trong lập trình hướng đối tượng: Ta coi thực thể chương trình đối tượng sau trừu tượng hố đối tượng thành lớp đối tượng Trang - 10 - LËp tr×nh h-íng ®èi t-ỵng } counter:: ~counter () { cout

Ngày đăng: 08/06/2021, 14:19