intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Ngôn ngữ lập trình C - Chương 6

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:0

104
lượt xem
14
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu tham khảo bài giảng về Ngôn ngữ lập trình C++ gồm 7 chương - Chương 6 Lớp và phương pháp lập trình hướng đồi tượng

Chủ đề:
Lưu

Nội dung Text: Ngôn ngữ lập trình C - Chương 6

  1. Ch−¬ng 6 Ch Líp vμ ph−¬ng ph¸p lËp tr×nh h−íng ®èi t−îng ng
  2. 6.1 C++ vµ ph−¬ng ph¸p lËp tr×nh h−íng ®èi t−îng 6.1.1 Tổng quan về lập trình hướng đối tượng – Lịch sử phát triển các phương pháp lập trình • Lập trình tuyến tính: – Lập trình máy tính thời kì đầu. – Chương trình nhỏ (ít dòng lệnh), đơn giản. • Lập trình thủ tục: – Phân chia chương trình thành các môđun. – Giải quyết bài toán theo hướng phân tích trên – xuống (top – down). – Nảy sinh khó khăn do phụ thuộc vào cấu trúc dữ liệu. • Lập trình hướng đối tượng: – Thiết kế xoay quanh dữ liệu, gắn kết dữ liệu và hàm xử lý chúng. – Thiết kế chương trình theo cách tiếp cận dưới – lên (bottom – up). – Cách tiếp cận bài toán gần với thực tế hơn. 2 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  3. 6.1 C++ vµ ph−¬ng ph¸p lËp tr×nh h−íng ®èi t−îng 6.1.1 Tổng quan về lập trình hướng đối tượng – Lập trình hướng đối tượng • Các khái niệm cơ sở: – Đối tượng = dữ liệu + phương thức. – Lớp : tập hợp các đối tượng cùng loại. – Chương trình là tập hợp các đối tượng, các đối tượng trao đổi thông tin qua phương thức. • Đặc điểm: Dễ dàng bổ sung dữ liệu, phương thức, sử dụng lại đối tượng. – Đóng gói dữ liệu : che giấu thông tin an toàn mã. – Thừa kế : dễ dàng sử dụng lại các môđun chương trình. – Đa hình: các đối tượng có thể phản ứng khác nhau tùy vào từng tình – huống cụ thể. – Thể hiện trong nhiều ngôn ngữ khác nhau : SIMULA, SmallTalk, C++, Java,… hay ADA, EIFFEL, … 3 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  4. 6.1 C++ vµ ph−¬ng ph¸p lËp tr×nh h−íng ®èi t−îng 6.1.1 Tổng quan về lập trình hướng đối tượng – Lập trình hướng đối tượng (tiếp) • Ưu nhược điểm – Loại bỏ mã lặp lại, nâng cao tính sử dụng lại. – An toàn mã, dễ dàng thiết kế, … – Thích hợp cho xây dựng các hệ thống lớn : làm việc theo quy trình, dễ dàng nâng cấp, thuận lợi trong quản lý đọ phức tạp, … – Nhược điểm: đòi hỏi thời gian thực hiện lớn, tốn bộ nhớ. • Ứng dụng – Thiết kế giao diện người sử dụng (GUI). – Xây dựng các hệ thống thông tin phức tạp và hiệu quả : các hệ thống mô hình hóa & mô phỏng, các hệ thống thời gian thực, các hệ thống song song và mạng nơron, các hệ CAD/CAM, các hệ CSDL HĐT, các hệ TTNT, HCG, HTGQĐ, … 4 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  5. 6.1 C++ vµ ph−¬ng ph¸p lËp tr×nh h−íng ®èi t−îng 6.1.2 Lập trình hướng đối tượng trong C++ – C++: thêm khả năng lập trình HĐT vào C • C++: thừa hưởng tất cả điểm mạnh của C – Là ngôn ngữ bao trùm lên C thừa hưởng đầy đủ sức mạnh của C (ví dụ tính khả chuyển, tính mềm dẻo, ...). – C trong C++ có một số điểm khác so với ANSI C: thay đổi, thêm mới, cải tiến phù hợp hơn tăng cường sức mạnh cho C. • C++: cài đặt khả năng lập trình HĐT dựa trên khái niệm lớp – Lớp bao gồm các dữ liệu thành phần (thuộc tính) và các hàm thành phần (phương thức) đóng gói dữ liệu. – Thực chất lớp là 1 kiểu dữ liệu do người dùng tự định nghĩa. – Cho phép kế thừa các lớp đã xây dựng đặc điểm quan trọng của lập trình HĐT. – Cho phép thể hiện tính đa hình trong thừa kế, đây cũng là một đặc điểm quan trọng của lập trình HĐT. 5 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  6. 6.1 C++ vµ ph−¬ng ph¸p lËp tr×nh h−íng ®èi t−îng 6.1.2 Lập trình hướng đối tượng trong C++ – Lập trình HĐT trong C++: một số đặc điểm cần chú ý • C++ là ngôn ngữ lai (không phải là ngôn ngữ HĐT thuần khiết) SmallTalk, Java, … – So với lập trình HĐT thuần túy, cài đặt cụ thể của đối tượng trong C++ linh động hơn. – C++ không bắt buộc đóng gói dữ liệu nhược điểm chính của C++. • C++ phù hợp cho người mới học lập trình: có thể sử dụng cả tính cấu trúc và đối tượng trong chương trình. 6 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  7. 6.2 Líp vµ ®èi t−îng 6.2 6.2.1 Khai báo và định nghĩa lớp – Cú pháp khai báo class tên_lớp { private: //khai báo các thành phần riêng của lớp [dữ liệu thành phần] [định nghĩa hàm thành phần hoặc nguyên mẫu hàm] public: //khai báo các thành phần công cộng của lớp [dữ liệu thành phần] [định nghĩa hàm thành phần hoặc nguyên mẫu hàm] }; /*Định nghĩa các hàm thành phần chưa được định nghĩa bên trong khai báo lớp */ [Hàm thành phần định nghĩa ngoài lớp] • Thực tế cho thấy, có nhiều kiểu khai báo và các kiểu đó đều có thể chuẩn hóa về dạng trên. 7 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  8. 6.2 Líp vµ ®èi t−îng 6.2 6.2.1 Khai báo và định nghĩa lớp – Cú pháp khai báo (tiếp) • Khai báo đối tượng – Cú pháp: tên_lớp tên_đtượng; – Có thể xem lớp là một kiểu dữ liệu: • Tạo đối tượng ~ khai báo biến. • Mỗi đối tượng là một thể hiện của lớp. – Đối tượng bao gồm tập các biến tương ứng với tên và kiểu của các DLTP. – Các đối tượng chung nhau định nghĩa hàm thành phần. – Có thể khai báo mảng các đối tượng như mảng thông thường. – Có thể dùng các phép toán new và delete để cấp phát và giải phóng bộ nhớ cho đối tượng. • Phép toán new sẽ trả về một con trỏ đối tượng. 8 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  9. 6.2 Líp vµ ®èi t−îng 6.2 6.2.1 Khai báo và định nghĩa lớp – Cú pháp khai báo (tiếp) • Con trỏ đối tượng – Cú pháp khai báo : tên_lớp *tên_con_trỏ_đtượng; – Con trỏ đối tượng có thể nhận giá trị là địa chỉ của đối tượng cùng kiểu lớp có thể gọi các thành phần (dữ liệu, hàm) của lớp thông qua con trỏ bằng cách sử dụng phép toán “->”. • Tham chiếu đối tượng – Cú pháp khai báo : tên_lớp &tên_thchiếu_đtượng = tên_đtượng_đã_có; – Một tham chiếu đối tượng chỉ có ý nghĩa khi nó tham chiếu tới một đối tượng nào đó đã được khai báo trước đó. • Chú ý: con trỏ hoặc tham chiếu không phải là một thể hiện (instance) của lớp. 9 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  10. 6.2 Líp vµ ®èi t−îng 6.2 6.2.1 Khai báo và định nghĩa lớp – Các chi tiết trong khai báo lớp • Dữ liệu thành phần (thuộc tính) – DLTP là dữ liệu gắn với lớp (đối tượng). • Dữ liệu thành phần (DLTP) là thuật ngữ của C++, còn thuộc tính là thuật ngữ trong lập trình HĐT nói chung. – DLTP có thể là biến kiểu sơ sở, kiểu phức hợp hoặc đối tượng thuộc lớp nào đó. – DLTP không thể là đối tượng thuộc bản thân lớp đang được định nghĩa nhưng có thể là con trỏ hoặc tham chiếu tới đối tượng của lớp đó. – Có thể sử dụng từ khoá static cho DLTP. – Không được sử dụng các từ khoá auto, register, extern cho DLTP. – Không thể khởi đầu giá trị cho DLTP. 10 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  11. 6.2 Líp vµ ®èi t−îng 6.2 6.2.1 Khai báo và định nghĩa lớp – Các chi tiết trong khai báo lớp (tiếp) • Hàm thành phần (phương thức) – HTP là hàm gắn với lớp (đối tượng). • Hàm thành phần (HTP) là thuật ngữ của C++, còn phương thức là thuật ngữ trong lập trình HĐT nói chung. – Có thể định nghĩa HTP trong hay ngoài lớp. Nếu định nghĩa ngoài lớp, trong khai báo lớp phải có nguyên mẫu của chúng. – Có thể đặt định nghĩa HTP trong cùng tập tin khai báo lớp hoặc trong một tập tin khác. – Cú pháp khai báo và định nghĩa HTP ngoài lớp : kiểu_trả_về tên_lớp::tên_hàm(dsách_thsố){ //nội dung hàm } • Cách khai báo này cho phép phân biệt HTP với hàm tự do, đồng thời cho phép 2 lớp khác nhau có cùng tên HTP. 11 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  12. 6.2 Líp vµ ®èi t−îng 6.2 6.2.1 Khai báo và định nghĩa lớp – Các chi tiết trong khai báo lớp (tiếp) • Chú ý khi định nghĩa hàm thành phần: – Nếu định nghĩa HTP trong lớp, trình dịch sẽ ngầm hiểu chúng là hàm không được định nghĩa quá phức tạp. inline – Nên định nghĩa HTP ngoài lớp: làm tăng tính dễ đọc, dễ hiểu, tính mỹ quan của chương trình nguồn. – HTP được truy nhập tới thành phần của đối tượng thuộc cùng lớp nếu chúng được khai báo bên trong định nghĩa hàm như một đối tượng cục bộ hay một tham số hình thức của hàm. – Có thể gọi HTP từ một HTP khác trong cùng khai báo lớp. – Để gọi hàm trùng tên và danh sách tham số nhưng gắn với lớp khác, phải thông qua đối tượng. – Để gọi một hàm tự do trùng tên và danh sách tham số phải sử dụng phép toán phạm vi “::”. 12 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  13. 6.2 Líp vµ ®èi t−îng 6.2 6.2.1 Khai báo và định nghĩa lớp – Các chi tiết trong khai báo lớp (tiếp) • Phạm vi lớp – Mục đích của phạm vi là để kiểm soát việc truy xuất đến các biến/hằng/hàm… – Trong phần lập trình thủ tục với C++, ta đã biết có bốn kiểu phạm vi liên quan đến cách thức và vị trí khai báo biến: trong hàm nguyên mẫu, trong khối, trong hàm và trong tệp. – Trong lập trình HĐT, C++ có thêm phạm vi lớp. – Tất cả thành phần của lớp phạm vi lớp. • C++ coi tất cả thành phần của lớp là có liên hệ với nhau. • Trong định nghĩa hàm thành phần có thể tham chiếu đến bất kỳ một thành phần nào khác cùng lớp. – Có thể mở rộng phạm vi lớp đến lớp dẫn xuất, lớp bạn, … 13 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  14. 6.2 Líp vµ ®èi t−îng 6.2 6.2.1 Khai báo và định nghĩa lớp – Các chi tiết trong khai báo lớp (tiếp) • Thuộc tính truy xuất của các thành phần – Thuộc tính private : thuộc tính này thể hiện một trong các đặc trưng của lập trình HĐT là che giấu thông tin. Thành phần private chỉ được truy xuất bên trong phạm vi lớp. – Thuộc tính public: thành phần public có thể truy xuất trong bất kỳ hàm nào. Thông qua HTP public ta có thể truy nhập vào các thành phần private (~ hàm giao diện của lớp ). – Trong định nghĩa một lớp, số lượng và thứ tự các từ khóa private và public là tuỳ ý khi khai báo lớp có thể sắp xếp lại để các thành phần private ở trên còn các thành phần public ở dưới. – Thuộc tính private là ngầm định, nên nếu từ khóa private xuất hiện trước tiên trong khai báo thành phần, có thể lược bỏ. 14 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  15. 6.2 Líp vµ ®èi t−îng 6.2 6.2.1 Khai báo và định nghĩa lớp – Các chi tiết trong khai báo lớp (tiếp) • Thuộc tính truy xuất của các thành phần (tiếp) – Ngoài public và private, còn có từ khoá protected dùng để chỉ định trạng thái của các thành phần trong một lớp. – Từ khoá protected sẽ được đề cập kỹ hơn trong chương 7 (Thừa kế và đa hình). – Trong phạm vi của lớp hiện tại một thành phần protected có tính chất giống như thành phần private. • Lớp và cấu trúc trong C++ – Cấu trúc trong C++ chỉ có một điểm khác duy nhất với lớp: thuộc tính truy xuất ngầm định là public thay vì private. – Tất cả các tính chất, khả năng… còn lại của lớp đều có thể áp dụng cho cấu trúc. 15 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  16. 6.2 Líp vµ ®èi t−îng 6.2 6.2.2 Thao tác với đối tượng – Truy nhập vào thành phần của đối tượng • Truy nhập dữ liệu thành phần – Chỉ có thể truy nhập đến DLTP public. Lúc này có thể thực hiện mọi thao tác xử lý trên DLTP đó. – Cú pháp truy nhập: tên_đt.tên_dltp; • Gọi hàm thành phần – Cũng như DLTP, chỉ có thể gọi được HTP public. Gọi HTP của lớp từ một đối tượng ~ truyền thông điệp cho HTP đó. – Cú pháp gọi hàm: tên_đt.tên_htp(ds_tham_số); 16 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  17. 6.2 Líp vµ ®èi t−îng 6.2 6.2.2 Thao tác với đối tượng – Truy nhập vào thành phần của đối tượng (tiếp) • Tham số ngầm định trong lời gọi hàm thành phần – Lời gọi HTP luôn có một và chỉ một tham số ngầm định là đối tượng thực hiện lời gọi hàm lời gọi đó có thể thao tác ngầm định trên các DLTP của đối tượng đó. • Phân biệt khái niệm này với khái niệm lời gọi hàm sử dụng tham số có giá trị ngầm định. – Không thể thực hiện lời gọi tới HTP gắn với một đối tượng mà không chỉ rõ đối tượng được tham chiếu. • Con trỏ this – Từ khoá this : xác định địa chỉ của đối tượng dùng làm tham số ngầm định cho HTP. – Con trỏ this tham chiếu đến đối tượng đang gọi HTP có thể truy nhập gián tiếp đến các thành phần (dữ liệu, hàm) của đối tượng gọi HTP đó thông qua con trỏ this. 17 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  18. 6.2 Líp vµ ®èi t−îng 6.2 6.2.2 Thao tác với đối tượng – Phép gán đối tượng • Cơ chế gán đối tượng – Có thể thực hiện phép gán giữa hai đối tượng cùng kiểu. – Phép gán thực chất là việc sao chép giá trị các DLTP từ đối tượng nguồn sang đối tượng đích một cách tương ứng (không kể đó là các thành phần public hay private). • Chú ý trong phép gán các đối tượng chứa DLTP động: – Việc sao chép DLTP không liên quan đến các vùng dữ liệu được cấp phát động (“sao chép bề mặt”) ảnh hưởng đến việc quản lý cấp phát động. – Vùng nhớ động của đối tượng đích bây giờ sẽ được truy nhập bởi các HTP của cả đối tượng nguồn và đích tính “riêng tư” dữ liệu của đối tượng bị vi phạm. – Vùng nhớ động trước đây trong đối tượng nguồn (nếu có) bây giờ không thể kiểm soát được nữa. 18 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  19. 6.2 Líp vµ ®èi t−îng 6.2 6.2.3 Các vấn đề khác về hàm thành phần – Nói thêm về hàm thành phần • Định nghĩa chồng các hàm thành phần – Định nghĩa chồng hàm đã được đề cập trong chương 4. – Định nghĩa chồng hàm cũng áp dụng được cho các HTP. Khi đó HTP được phép gọi tới các HTP khác, thậm chí trùng tên. • Tham số với giá trị ngầm định – Lời gọi hàm với tham số có giá trị ngầm định đã được đề cập trong chương 4. – Lời gọi HTP có thể sử dụng giá trị ngầm định cho các tham số. Giá trị ngầm định này sẽ được khai báo trong định nghĩa HTP hay trong khai báo nguyên mẫu của nó (nếu định nghĩa hàm ngoài lớp). 19 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
  20. 6.2 Líp vµ ®èi t−îng 6.2 6.2.3 Các vấn đề khác về hàm thành phần – Sử dụng đối tượng như tham số của HTP • Truy nhập đến thành phần private trong đối tượng: – HTP có quyền truy nhập đến thành phần private của đối tượng gọi nó (tức là đối tượng thuộc lớp chứa hàm). • Truy nhập đến các thành phần private trong các tham số là đối tượng truyền cho HTTP: – HTP có quyền truy nhập đến tất cả thành phần private của đối tượng, tham chiếu đối tượng hay con trỏ đối tượng cùng kiểu lớp khi được dùng là tham số hình thức của nó. • Dùng đối tượng như giá trị trả về của HTP cùng lớp: – HTP có thể truy nhập đến các thành phần private của các đối tượng, tham chiếu đối tượng hay con trỏ đối tượng khai báo bên trong nó (và có thể trả về đối tượng này). 20 Bài giảng C++. 7/11/2008 V.S.Nam. B/m KTHT, khoa CNTT, ĐHXD
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2