Danh mục

Hướng tư duy lập trình đối tượng phần 3

Số trang: 7      Loại file: pdf      Dung lượng: 110.35 KB      Lượt xem: 12      Lượt tải: 0    
Hoai.2512

Hỗ trợ phí lưu trữ khi tải xuống: 2,000 VND Tải xuống file đầy đủ (7 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Vấn ₫ề?Khi số lượng các khối lớn lên thì quản lý thế nào? Khi quan hệ giữa các khối phức tạp hơn (nhiều vào, nhiều ra) thì tổ chức quan hệ giữa các ₫ối tượng như thế nào? Làm thế nào ₫ể tạo và quản lý các ₫ối tượng một cách ₫ộng (trong lúc chương trình ₫ang chạy)? L
Nội dung trích xuất từ tài liệu:
Hướng tư duy lập trình đối tượng phần 3Vấn ₫ề? Khi số lượng các khối lớn lên thì quản lý thế nào? Khi quan hệ giữa các khối phức tạp hơn (nhiều vào, nhiều ra) thì tổ chức quan hệ giữa các ₫ối tượng như thế nào? Làm thế nào ₫ể tạo và quản lý các ₫ối tượng một cách ₫ộng (trong lúc chương trình ₫ang chạy)? Lập trình dựa ₫ối tượng mới mang lại ưu ₫iểm về mặt an toàn, tin cậy, nhưng chưa mang lại ưu ₫iểm về tính linh hoạt cần thiết của phần mềm => giá trị sử dụng lại chưa cao. 15Chương 8: Tiến tới tư duy hướng đối tượng8.6 Tư duy hướng ₫ối tượng class FB { public: virtual void execute() = 0; private: virtual double* getOutputPort(int i=0) = 0; virtual void setInputPort(double* pFromOutputPort, int i=0)= 0; friend class FBD; }; Chiều dữ liệu px0 y0 px0 px1 y0 px1=&y0 y1 px2 Chiều liên kết 16Chương 8: Tiến tới tư duy hướng đối tượngclass Sum : public FB {public: Sum(bool plus_sign1 = true, bool plus_sign2 = false); void execute();private: bool sign[2]; double *px[2]; double y; double* getOutputPort(int i=0); void setInputPort(double* pFromOutputPort, int i=0);};Sum::Sum(bool plus_sign1, bool plus_sign2): y(0) { px[0] = px[1] = 0; sign[0] = plus_sign1; sign[1] = plus_sign2;}void Sum::execute() { if (px[0] != 0) y = sign[0] ? *(px[0]) : - *(px[0]); if (px[1] != 0) y += sign[1] ? *(px[1]) : - *(px[1]);}double* Sum::getOutputPort(int) { return &y;}void Sum::setInputPort(double* pFromOutputPort, int i) { if(i < 2) px[i] = pFromOutputPort; 17} Chương 8: Tiến tới tư duy hướng đối tượngclass Limiter: public FB {public: Limiter(double h=10.0, double l = -10.0); void execute();private: double Hi, Lo; double *px; double y; double* getOutputPort(int i=0); void setInputPort(double* pFromOutputPort, int i=0);};Limiter::Limiter(double h, double l) : Hi(h), Lo(l), y(0), px(0) {if (Hi < Lo) Hi = Lo; }void Limiter::execute() { if (px != 0) { y = *px; if (y > Hi) y = Hi; if (y < Lo) y = Lo; }}double* Limiter::getOutputPort(int) { return &y;}void Limiter::setInputPort(double* pFromOutputPort, int i) { px = pFromOutputPort;}Chương 8: Tiến tới tư duy hướng đối tượng 18#include #include class FBD : public std::vector { double Ts; bool stopped;public: FBD(double ts = 0.5): Ts (ts > 0? ts : 1), stopped(true) {} void addFB(FB* p) { push_back(p); } void connect(int i1, int i2, int oport=0, int iport = 0) { FB *fb1= at(i1), *fb2= at(i2); fb2->setInputPort(fb1->getOutputPort(oport),iport); } void start(); ~FBD();};FBD::~FBD() { for (int i=0; i < size(); ++i) delete at(i);}void FBD::start() { while(!kbhit()) { for (int i=0; i < size(); ++i) at(i)->execute(); Sleep(long(Ts*1000)); }} 19Chương 8: Tiến tới tư duy hướng đối tượng#include #include SimFB.hvoid main() { double Ts=0.5; FBD fbd(0.5); fbd.addFB(new Step(1.0)); // 0 fbd.addFB(new Sum); // 1 fbd.addFB(new Gain(5.0)); // 2 fbd.addFB(new Limiter(10,-10)); // 3 fbd.addFB(new Integrator(5,Ts)); // 4 fbd.addFB(new Delay(0.0, Ts)); // 5 fbd.addFB(new Scope(std::cout)); // 6 for(int i=0; i < fbd.size()-1; ++i) fbd.connect(i,i+1); fbd.connect(5,1,0,1); fbd.connect(3,6,0,1); std::cout Bài tập về nhà Luyện tập lại trên máy tính các ví dụ từ phần 8.3 — 8.5 Dựa trên các ví dụ lớp ₫ã xây dựng ở phần 8.6 (Limiter, Sum), bổ sung các lớp còn lại (Step, Scope, Gain, Integrator, Delay) Chạy thử lại chương trình ở phần 8.6 sau khi ₫ã hoàn thiện các lớp cần thiết. Bổ sung lớp Pulse ₫ể mô phỏng tác ₫ộng của nhiễu quá trình (dạng xung vuông biên ₫ộ nhỏ, chu kỳ ₫ặt ₫ược). Mở rộng chương trình mô phỏng như minh họa trên hình vẽ. PulseStep Sum Gain Limiter Sum Integrator Delay Scope 21Chương 8: Tiến tới tư duy hướng đối tượng ...

Tài liệu được xem nhiều: