Kỹ thuật lập trình C phần 5 docx

19 239 0
Kỹ thuật lập trình C phần 5 docx

Đ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

© 2004, HOÀNG MINH SƠN Chương 1 Kỹ thuật lập trình Phần III: Lập trình hướng ₫ối tượng 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 y = A*x + B*u; x = C*x + d*u; StateController start() stop() LQGController start() stop() Chương 5: Lớpvà₫ốitượng 9/15/2006 2 © 2004, HOÀNG MINH SƠN Chương 5: Lớpvàđốitượng © 2005 - HMS Nộidung chương 5 5.1 Khái niệm 5.2 Từ cấutrúcsang lớp 5.3 Biếnthànhviên 5.4 Hàm thành viên 5.5 Kiểmsoáttruynhập 3 © 2004, HOÀNG MINH SƠN Chương 5: Lớpvàđốitượng © 2005 - HMS 5.1 Khái niệm Đối tượng là gì?  Thực thể phần mềm  Mô hình/₫ại diện của một ₫ốitượng vật lý: — Tank, Heater, Furnace — Motor, Pump, Valve — Sensor, Thermometer, Flowmeter — Control Loop, Control System  Hoặc một ₫ốitượng logic ("conceptual object): — Trend, Report, Button, Window — Matrix, Vector, Polynomial 4 © 2004, HOÀNG MINH SƠN Chương 5: Lớpvàđốitượng © 2005 - HMS Một ₫ối tượng có  Các thuộc tính (attributes)  Trạng thái (state) •Dữ liệu • Quan hệ  Hành vi (behavior) • Các phép toán • Đặc tính phản ứng  Căn cước (identity)  Ngữ nghĩa/trách nhiệm (semantic/responsibilities) Hành vi sủa, cắn, chạy chạy khi gặp nguy hiểm Trạng thái tư thế sức khỏe Căn cước Tên: Rex ID: 007 Ngữ nghĩa Chó giữ nhà Thuộc tính màu lông: vàng giống: Berge 5 © 2004, HOÀNG MINH SƠN Chương 5: Lớpvàđốitượng © 2005 - HMS Lớplàgì?  Mộtlớplàthựcthicủacác₫ốitượng có chung —Ngữ nghĩa —Thuộctính —Quanhệ —Hànhvi  Lớp= Đóng gói [Cấutrúcdữ liệu + hàm thao tác] —Lớp các vector, lớp các ma trận(dữ liệuphầntử + các phép truy nhậpvàphéptoáncơ bản) —Lớp các hình chữ nhật(cácdữ liệutọa ₫ộ + phép vẽ, xóa, ) —Lớp các mô hình hàm truyền(cáchệ số₫athứctử/mẫu, các phép toán xác ₫ịnh tính ổn ₫ịnh, xác ₫ịnh các ₫iểmcực, )  Các dữ liệucủamộtlớp=> biến thành viên  Các hàm củamộtlớp => hàm thành viên  Các biếncủamộtlớp=> một ₫ốitượng, mộtthể nghiệm 6 © 2004, HOÀNG MINH SƠN Chương 5: Lớpvàđốitượng © 2005 - HMS Lập trình hướng ₫ối tượng (object-oriented programming, OOP)  Trừu tượng hóa ( abstraction ): giúp ₫ơn giản hóa vấn ₫ề, dễ sử dụng lại  Đóng gói dữ liệu/che dấu thông tin ( data encapsulation/ information hiding ): nâng cao giá trị sử dụng lại và ₫ộ tin cậy của phần mềm  Dẫn xuất/thừa kế ( subtyping/inheritance ): giúp dễ sử dụng lại mã phần mềm và thiết kế  Đa hình/₫a xạ ( polymorphism ): giúp phản ánh trung thực thế giới thực và nâng cao tính linh hoạt của phần mềm Phương pháp luậnhướng ₫ốitượng cho phép tư duy ở mức trừutượng cao nhưng gầnvớithế giớithực! 7 © 2004, HOÀNG MINH SƠN Chương 5: Lớpvàđốitượng © 2005 - HMS 5.2 Từ cấutrúcsang lớp struct Time { int hour; // gio int min; // phut int sec; // giay }; void addHour(Time& t, int h) { t.hour += h; } void addMin(Time& t, int m) { t.min += m; if (t.min > 59) { t.hour += t.min/60; t.min %= 60; } else if (t.min < 0) { t.hour += (t.min/60 - 1); t.min = (t.min % 60) + 60; } } void addSec(Time& t, int s) { t.sec += s; if (t.sec > 59) { addMin(t, t.sec/60); t.sec %= 60; } else if (t.sec < 0) { addMin(t, t.sec/60 - 1); t.sec = (t.sec % 60) + 60; } } void main() { Time t = {1, 0, 0}; addMin(t,60); addMin(t,-5); addSec(t,25); } 8 © 2004, HOÀNG MINH SƠN Chương 5: Lớpvàđốitượng © 2005 - HMS Mộtsố vấn ₫ề củacấutrúc  Truy nhậpdữ liệutrựctiếp, không có kiểmsoátcóthể dẫn ₫ến không an toàn Time t1 = {1, 61, -3}; // ??! Time t2; // Uncertain values int h = t2.hour; // ??! int m = 50; t2.min = m + 15; // ??!  Không phân biệtgiữa“chi tiết bên trong” và “giao diệnbên ngoài”, mộtthay₫ổinhỏởchi tiếtbêntrongcũng bắtngườisử dụng phảithay₫ổimãsử dụng theo! Ví dụ : cấutrúcTime ₫ượcsửalạitênbiếnthànhviên: struct Time { int h, m, s; }; Đoạnmãcũ sẽ không biên dịch ₫ược: Time t; t.hour = 5; 9 © 2004, HOÀNG MINH SƠN Chương 5: Lớpvàđốitượng © 2005 - HMS Đóng gói hay "lớphóa" class Time { int hour; // gio int min; // phut int sec; // giay public: Time() {hour=min=sec=0;} void setTime(int h, int m, int s) { hour = h; min = sec = 0; addSec(s); addMin(m); } int getHour() { return hour; } int getMin() { return min; } int getSec() { return sec; } void addHour(int h) { hour += h; } Biến thành viên (member variable) Hàm tạo (constructor) Hàm thành viên (member functions) 10 © 2004, HOÀNG MINH SƠN Chương 5: Lớpvàđốitượng © 2005 - HMS void addMin(int m) { min += m; if (min > 59) { hour += min/60; min %= 60; } else if (min < 0) { hour += (min/60 - 1); min = (min % 60) + 60; } } void addSec(int s) { sec += s; if (sec > 59) { addMin(sec/60); sec %= 60; } else if (sec < 0) { addMin(sec/60 - 1); sec = (sec % 60) + 60; } } }; void main() { Time t; t.addHour(1); t.addMin(60); t.addMin(-5); t.addSec(25); t.hour = 1; // error t.min = 65; // error t.sec = -3; // error t.setTime(1, 65, -3); int h = t.getHour(); int m = t.getMin(); int s = t.getSec(); } [...]... i < 5; pt[i].addSec(10); delete [] pt; } Chương 5: Lớp và đối tượng call constructor Time() pt is identical to this pointer call constructor Time() call constructor 5 times ++ i) © 20 05 - HMS 18 Bài tập về nhà Dựa trên c u tr c Vector và c c hàm liên quan ₫ã th c hiện trong chương 4, hãy xây dựng lớp ₫ối tượng Vector với c c hàm thành viên c n thiết Khai báo một lớp th c hiện lưu trữ thông tin c a... Time() cho t1 và t2 C thể hiểu như là addHour(&t1 ,5) ; OK C thể hiểu như là addHour(&t2 ,5) ; © 20 05 - HMS 16 5. 5 Kiểm soát truy nhập public: C c thành viên c ng c ng, c thể sử dụng ₫ư c từ bên ngoài private: C c thành viên riêng, không thể truy nhập ₫ư c từ bên ngoài, ngay c trong lớp dẫn xuất (sẽ ₫ề c p sau) class Time { private: int hour,min,sec; }; © 2004, HOÀNG MINH SƠN M c ₫ịnh, khi ₫ã khai báo class... ₫ư c từ bên ngoài (biến c ng c ng), tuy nhiên ít khi c lý do c n làm như thế: class Point { public: int x,y; }; Chương 5: Lớp và đối tượng © 20 05 - HMS 11 Kiểm soát vi c truy nhập c c biến riêng thông qua c c hàm thành viên C ch duy nhất ₫ể khởi tạo giá trị cho c c biến thành viên là sử dụng hàm tạo: class Time { public: Time() {hour=min=sec=0;} }; Time t; // t.hour = t.min = t.sec = 0; © 2004, HOÀNG... hour,min,sec; public: void addHour(int h) { hour += h; } }; Gọi hàm với biến c u tr c Gọi hàm thành viên c a ĐT Time t; addHour(t ,5) ; Time t; t.addHour (5) ; © 2004, HOÀNG MINH SƠN Định nghĩa c u tr c & hàm Ở ₫ây c sự kh c nhau về c ch viết, nhưng chưa c sự kh c nhau c bản Chương 5: Lớp và đối tượng © 20 05 - HMS 13 Khai báo và ₫ịnh nghĩa hàm thành viên Thông thường, lớp c ng c c hàm thành viên ₫ư c khai báo... thì c c thành viên là private protected: C c thành viên ₫ư c bảo vệ, không thể truy nhập ₫ư c từ bên ngoài, nhưng truy nhập ₫ư c c c lớp dẫn xuất (sẽ ₫ề c p sau) Chương 5: Lớp và đối tượng © 20 05 - HMS 17 5. 6 Con trỏ ₫ối tượng © 2004, HOÀNG MINH SƠN #include "mytime.h" void main() { Time t; // t.addHour (5) ; Time *pt = &t; // pt->addSec(70); pt = new Time; // pt->addMin( 25) ; delete pt; pt = new Time [5] ;.. .5. 3 Biến thành viên Khai báo biến thành viên c a một lớp tương tự như c u tr c class Time { int hour, min, sec; }; M c ₫ịnh, c c biến thành viên c a một lớp không truy nhập ₫ư c từ bên ngoài (biến riêng), ₫ương nhiên c ng không khởi tạo ₫ư c theo c ch c ₫iển: © 2004, HOÀNG MINH SƠN Time t = {1, 0, 0}; t.hour = 2; // error! // error! C thể làm cho một biến thành viên truy nhập ₫ư c từ bên... Time::addSec(int s) { addMin(sec/60); } Chương 5: Lớp và đối tượng © 20 05 - HMS 15 Bản chất c a hàm thành viên? class Time { int hour,min,sec; public: Time() { hour=min=sec=0; } void addHour(int h) { this->hour += h;// con trỏ this chính là ₫ịa chỉ c a } // ₫ối tượng gọi hàm thành viên }; © 2004, HOÀNG MINH SƠN void main() { Time t1,t2; t1.addHour (5) ; t2 = t1; t2.addHour (5) ; } Chương 5: Lớp và đối tượng // //... viên c ng c thể ₫ư c ₫ịnh nghĩa trong phần khai báo lớp => m c ₫ịnh trở thành hàm inline, ví dụ class Time { int hour,min,sec; public: void addHour(int h) { hour += h; } }; © 2004, HOÀNG MINH SƠN Khi ₫ịnh nghĩa hàm thành viên, c thể sử dụng c c biến thành viên và gọi hàm thành viên kh c mà không c n (thậm chí không thể ₫ư c) ₫ưa tên biến ₫ối tượng, ví dụ: void Time::addSec(int s) { addMin(sec/60);... c vai trò lưu trữ trạng thái bên trong c a ₫ối tượng, không nên cho truy nhập từ bên ngoài (ngay c gián tiếp qua c c hàm) class PID { double Kp, Ti, Td; double I; // controller parameters // internal state }; Chương 5: Lớp và đối tượng © 20 05 - HMS 12 5. 4 Hàm thành viên Định nghĩa lớp struct Time { int hour, min, sec }; void addHour(Time& t, int h) { t.hour += h; } class Time { int hour,min,sec;... tệp c tên “mytime.h”: class Time { int hour,min,sec; public: void addHour(int h); void addMin(int m); void addSec(int s); }; © 2004, HOÀNG MINH SƠN C c hàm thường ₫ư c ₫ịnh nghĩa trong tệp tin nguồn (*.cpp): #include “mytime.h” void Time::addHour(int h) { hour += h; } Chương 5: Lớp và đối tượng © 20 05 - HMS 14 C thể ₫ịnh nghĩa một hàm thành viên trong tệp tin ₫ầu dưới dạng một hàm inline (chỉ nên . truyền (c chệ số₫athứctử/mẫu, c c phép toán x c ₫ịnh tính ổn ₫ịnh, x c ₫ịnh c c ₫iểmc c, )  C c dữ liệucủamộtlớp=> biến thành viên  C c hàm c amộtlớp => hàm thành viên  C c biếncủamộtlớp=>. gói [C utrúcdữ liệu + hàm thao t c] —Lớp c c vector, lớp c c ma trận(dữ liệuphầntử + c c phép truy nhậpvàphéptoáncơ bản) —Lớp c c hình chữ nhật (c cdữ liệutọa ₫ộ + phép vẽ, xóa, ) —Lớp c c mô. (behavior) • C c phép toán • Đ c tính phản ứng  C n c c (identity)  Ngữ nghĩa/trách nhiệm (semantic/responsibilities) Hành vi sủa, c n, chạy chạy khi gặp nguy hiểm Trạng thái tư thế s c khỏe C n c c Tên:

Ngày đăng: 12/08/2014, 19:21

Từ khóa liên quan

Mục lục

  • Kỹ thuật lập trìnhPhần III: Lập trình hướng đối tượng

  • Nội dung chương 5

  • 5.1 Khái niệm

  • Một đối tượng có...

  • Lớp là gì?

  • Lập trình hướng đối tượng(object-oriented programming, OOP)

  • 5.2 Từ cấu trúc sang lớp

  • Một số vấn đề của cấu trúc

  • Đóng gói hay "lớp hóa"

  • 5.3 Biến thành viên

  • 5.4 Hàm thành viên

  • Khai báo và định nghĩa hàm thành viên

  • Bản chất của hàm thành viên?

  • 5.5 Kiểm soát truy nhập

  • 5.6 Con trỏ đối tượng

  • Bài tập về nhà

Tài liệu cùng người dùng

Tài liệu liên quan