Bài giảng Kỹ thuật lập trình C/C++: Chương 10 (1) - Lê Thành Sách
lượt xem 8
download
Bài giảng "Kỹ thuật lập trình C/C++ - Chương 10: Lập trình hướng đối tượng" phần cơ bản giúp người học nắm bắt các khái niệm cơ bản, các thuật ngữ, tính khả kiến, thiết kế lớp, hàm khởi tạo và hàm hủy, định nghĩa lại toán tử,... Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Kỹ thuật lập trình C/C++: Chương 10 (1) - Lê Thành Sách
- Chương 10 Lập trình hướng đối tượng --Cơ bản-- Lê Thành Sách Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 1 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Nội dung n Kiểu dữ liệu trong C - Ôn lại n Các khái niệm cơ bản n Con trỏ this n Tổng hợp các thuật ngữ (I) n Tính khả kiến n Thiết kế lớp n Hàm khởi tạo và hàm huỷ n Định nghĩa lại toán tử n Thành viên có tính “static” n Thành viên có tính “const” n Tổng hợp các thuật ngữ (II) n Quan hệ bạn bè (friendship) n Tổ chức mã nguồn cho lớp n Biễu diễn lớp bằng sơ đồ n Tổng kết Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Kiểu dữ liệu trong C n Xét đoạn chương trình typedef struct{ int day, month, year; Bộ biên dịch cấp phát 3 vùng nhớ có } Date; tên: a, d, và c trên STACK: int main(int argc, char** argv) { a: 4 bytes à dùng sizeof(.) cho cụ thể. int a; d: 8 bytes double d; c: 12 bytes Date c = {20, 5, 2017}; Cả 3 vùng nhớ này đều THỤ ĐỘNG, return 0; CHỈ CÓ CÔNG NĂNG LÀ CHỨA các giá } trị của kiểu được mô tả. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Kiểu dữ liệu trong C typedef struct{ int day, month, year; } Date; void print(Date& d){ cout
- Kiểu dữ liệu trong C typedef struct{ int day, month, year; } Date; void print(Date& d){ cout
- Kiểu dữ liệu trong C n Nhược điểm là gì? n Khó biết được dữ liệu có thể được xử lý bởi hàm nào. n Khó đảm bảo ràng buộc trên dữ liệu, ví dụ: n Ngày: 1 à 31 (tuỳ tháng, tối đa) n Tháng: 1 à 12 Chỉ cần tính chất về “đóng gói” (enscapsulation) của lập trình hướng đối tượng (OOP) đã giải quyết những vấn đề trên. Hơn nữa, ngoài tính “đóng gói”, OOP còn cung cấp những tính năng hay khác nữa mà ngôn ngữ C không có. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Khái niệm cơ bản n (Q.1) Lớp (class): n Là một kiểu dữ liệu do người lập trình tạo ra. n Quan niệm: Lớp như cái khuôn để từ đó tạo ra các đối tượng như nói sau. n (Q.2) Đối tượng (object, instance): n Là một biến tạo ra từ kiểu lớp. n Ví dụ: n Giả sử đã có lớp MyClass n Dòng: MyClass c; n Sẽ tạo ra một đối tượng, đặt tên là “c”, nghĩa là một vùng nhớ có tên là “c”. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 7 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Khái niệm cơ bản n (Q.3) Mô tả lớp có gì khác mô tả một cấu trúc trong C (struct) n Khi mô tả kiểu này, cần mô tả n Các dữ liệu mà một đối tượng của lớp có. n Các hàm (phương thức) có thể thực thi với đối tượng của lớp. n Những hành động mà một đối tượng của lớp đó có thể thực hiện à tính chủ động của đối tượng (không chỉ là vùng nhớ thụ động) Với kiểu struct (của C): Mô tả kiểu này không có mô tả hàm/phương thức như kiểu lớp! Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Khái niệm cơ bản n (Q.4) Tạo đối tượng như thế nào? n Giống như struct. Giả sử có lớp MyClass n (1) Tạo tĩnh trên STACK: MyClass obj; MyClass obj(…); //có thể truyền tham số - xem Phần Constructor n (2) Tạo động trên HEAP: MyClass *ptr = new MyClass(); MyClass *ptr = new MyClass(…); //có thể truyền tham số - xem Phần Constructor //dùng ptr tại đây delete ptr; Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 9 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Khái niệm cơ bản n (Q.4) Tạo đối tượng như thế nào? n Giống như struct. Giả sử có lớp MyClass n (1) Tạo tĩnh trên STACK, mảng tĩnh MyClass obj[SIZE]; n (2) Tạo động trên HEAP: MyClass *ptr = new MyClass[SIZE]; //.. sử dụng ptr delete []ptr; Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Khái niệm cơ bản n (Q.5) Truy xuất dữ liệu và gọi phương thức ntn? n Giống như struct. Giả sử có lớp MyClass n (1) đối tượng trên STACK: MyClass obj; ... obj.[tên-thành-viên]; //xem ví dụ. n (2) đối tượng trên HEAP: MyClass *ptr = new MyClass(); ... Obj->[tên-thành-viên]; //xem ví dụ. Lưu ý: Toán tử chấm “.” và toán tử mũi tên “->” Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Khái niệm cơ bản: Minh hoạ (I) n Tạo ra một kiểu “Date”, theo yêu cầu: n Một đối tượng của “Date” có phải chứa được dữ liệu về ngày, tháng, và năm. n Một đối tượng của “Date” có thể đón nhận lời yêu cầu “print”. Một khi nó (đối tượng) nhận được yêu cầu này, nó in ra màn hình ngày, tháng, và năm mà nó đang giữ. n Đối tượng có tính CHỦ ĐỘNG hơn so với các biến kiểu cấu trúc (của C) Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Khái niệm cơ bản: Minh hoạ (I) class Date{ Một lớp (class) “Date” public: int day, month, year; void print(){ cout
- Khái niệm cơ bản: Minh hoạ (I) class Date{ public: int day, month, year; void print(){ cout
- Khái niệm cơ bản: Minh hoạ (I) Dùng lớp “Date” như thế nào? Xem hàm main() sau: int main(int argc, char** argv) { Date d1 = {20, 5, 2017}; Date d2 = {21, 5, 2017}; Date d3 = {22, 5, 2017}; d1.print(); d2.print(); d3.print(); return 0; } Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- day: 20 Khái niệm cơ bản: Minh hoạ (I) month: 5 d1 int main(int argc, char** argv) { year: 2017 Date d1 = {20, 5, 2017}; Tạo ra 3 đối tượng Date d2 = {21, 5, 2017}; có tên là d1, d2, print Date d3 = {22, 5, 2017}; và d3, day: 21 d1.print(); và khởi gán giá trị d2.print(); ban đầu. month: 5 d3.print(); d2 year: 2017 return 0; } print day: 22 Lưu ý: month: 5 d3 Đối tượng = dữ liệu + hàm year: 2017 Trường Đại Học Bách Khoa Tp.HCM print Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Lưu ý Trong trường hợp như lớp “Date”, phương thức “print” không phải liên kết động (vì: non-virtual) nên con trỏ hàm không cần đi kèm trong bộ nhớ cấp cho đối tượng, xem hình. Tuy nhiên, slide này trình bày mô hình như vậy để giúp sinh viên dễ dàng nắm bắt khái niệm gói cả dữ liệu và hàm. Có thể xem đây là mô hình đơn giản và ở mức cao (luận lý). Người học nên xem thêm các tài liệu khác để nắm rõ hơn về mô hình đối tượng (Object Model): [1] Stanley B. Lippman, “Inside the C++ Object Model,” Addison Wesley, 1996. [2] http://spockwangs.github.io/2011/01/31/cpp-object-model.html Tuy vậy, chỉ nên đọc sau khi nắm bắt chắc các khái niệm và cách dùng OOP trong slide này. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
- Khái niệm cơ bản: Minh hoạ (I) int main(int argc, char** argv) { Date d1 = {20, 5, 2017}; Date d2 = {21, 5, 2017}; Date d3 = {22, 5, 2017}; class Date{ d1.print(); public: d2.print(); int day, month, year; d3.print(); void print(){ return 0; cout
- Khái niệm cơ bản: Minh hoạ (I) int main(int argc, char** argv) { Date d1 = {20, 5, 2017}; Date d2 = {21, 5, 2017}; Date d3 = {22, 5, 2017}; class Date{ d1.print(); public: d2.print(); int day, month, year; d3.print(); void print(){ return 0; cout
- Khái niệm cơ bản: Minh hoạ (I) int main(int argc, char** argv) { Date d1 = {20, 5, 2017}; Date d2 = {21, 5, 2017}; Date d3 = {22, 5, 2017}; class Date{ d1.print(); public: d2.print(); int day, month, year; d3.print(); void print(){ return 0; cout
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Kỹ thuật lập trình - Phạm Thế Bảo
0 p | 220 | 32
-
Bài giảng Kỹ thuật lập trình: Chương I - Lưu Hồng Việt
48 p | 194 | 23
-
Bài giảng Kỹ thuật lập trình: Chương IV - Lưu Hồng Việt
32 p | 151 | 17
-
Bài giảng Kỹ thuật lập trình: Chương III - Lưu Hồng Việt
51 p | 147 | 15
-
Bài giảng Kỹ thuật lập trình: Chương V - Lưu Hồng Việt
19 p | 127 | 15
-
Bài giảng Kỹ thuật lập trình: Phần 1 - ĐH CNTT&TT
37 p | 114 | 10
-
Bài giảng Kỹ thuật lập trình - Bài 1: Tổng quan về kỹ thuật lập trình
65 p | 164 | 8
-
Bài giảng Kỹ thuật lập trình: Bài 1 - Phạm Đình Sắc
9 p | 127 | 7
-
Bài giảng Kỹ thuật lập trình nâng cao: Chương 4 - ThS. Dương Thành Phết
26 p | 92 | 7
-
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 p | 15 | 4
-
Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Quang
39 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 2 - Trần Quang
25 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 3 - Trần Quang
52 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 4 - Trần Quang
32 p | 7 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang
37 p | 11 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 p | 6 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
34 p | 7 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 9 - Trần Quang
33 p | 3 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn