1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Kỹ thuật lập trình - Chương 5: Lớp và đối tượng ppt

19 490 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 298,25 KB

Nội dung

© 2004, HOÀNG MINH SƠN Chương Kỹ thuật lập trình Phần III: Lập trình hướng ₫ối tượng Chương 5: Lớp ₫ối tượng 0101010101010101100001 0101010101010101100001 StateController 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 start() 1100101100100010000010 1100101100100010000010 stop() 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 1010011000110010010010+ B*u; 1010011000110010010010 y = A*x 1100101100100010000010+ d*u; 1100101100100010000010 x = C*x LQGController 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 start() 1010011000110010010010 stop() 1010011000110010010010 1100101100100010000010 1100101100100010000010 9/15/2006 Nội dung chương © 2004, HỒNG MINH SƠN 5.1 5.2 5.3 5.4 5.5 Khái niệm Từ cấu trúc sang lớp Biến thành viên Hàm thành viên Kiểm soát truy nhập Chương 5: Lớp đối tượng © 2005 - HMS 5.1 Khái niệm Đối tượng gì? Thực thể phần mềm Mơ hình/₫ại diện ₫ối tượng vật lý: — — — — Tank, Heater, Furnace Motor, Pump, Valve Sensor, Thermometer, Flowmeter Control Loop, Control System © 2004, HỒNG MINH SƠN Hoặc ₫ối tượng logic ("conceptual object): — Trend, Report, Button, Window — Matrix, Vector, Polynomial Chương 5: Lớp đối tượng © 2005 - HMS Một ₫ối tượng có Hành vi sủa, cắn, chạy chạy gặp nguy hiểm Các thuộc tính (attributes) Trạng thái (state) • Dữ liệu • Quan hệ © 2004, HỒNG MINH SƠN Hành vi (behavior) • Các phép tốn • Đặc tính phản ứng Căn cước (identity) Ngữ nghĩa/trách nhiệm (semantic/responsibilities) Chương 5: Lớp đối tượng Trạng thái tư sức khỏe Thuộc tính Căn cước Tên: Rex ID: 007 màu lông: vàng giống: Berge Ngữ nghĩa Chó giữ nhà © 2005 - HMS Lớp gì? Một lớp thực thi ₫ối tượng có chung — — — — Ngữ nghĩa Thuộc tính Quan hệ Hành vi Lớp = Đóng gói [Cấu trúc liệu + hàm thao tác] © 2004, HOÀNG MINH SƠN — Lớp vector, lớp ma trận (dữ liệu phần tử + phép truy nhập phép tốn bản) — Lớp hình chữ nhật (các liệu tọa ₫ộ + phép vẽ, xóa, ) — Lớp mơ hình hàm truyền (các hệ số ₫a thức tử/mẫu, phép toán xác ₫ịnh tính ổn ₫ịnh, xác ₫ịnh ₫iểm cực, ) Các liệu lớp => biến thành viên Các hàm lớp => hàm thành viên Các biến lớp => ₫ối tượng, thể nghiệm Chương 5: Lớp đối tượ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 liệu/che dấu thơng tin (data encapsulation/ information hiding): nâng cao giá trị sử dụng lại ₫ộ tin cậy 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 thiết kế © 2004, HỒNG MINH SƠN Đa hình/₫a xạ (polymorphism): giúp phản ánh trung thực giới thực nâng cao tính linh hoạt phần mềm Phương pháp luận hướng ₫ối tượng cho phép tư mức trừu tượng cao gần với giới thực! Chương 5: Lớp đối tượng © 2005 - HMS 5.2 Từ cấu trúc sang lớp © 2004, HỒNG MINH SƠN 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; } } Chương 5: Lớp đối tượng 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); } © 2005 - HMS Một số vấn ₫ề cấu trúc Truy nhập liệu trực tiếp, khơng có kiểm sốt dẫn ₫ến khơng an tồn Time t1 = {1, 61, -3}; Time t2; int h = t2.hour; int m = 50; t2.min = m + 15; // ??! // Uncertain values // ??! // ??! Không phân biệt “chi tiết bên trong” “giao diện bên ngoài”, thay ₫ổi nhỏ chi tiết bên bắt người sử dụng phải thay ₫ổi mã sử dụng theo! © 2004, HỒNG MINH SƠN Ví dụ: cấu trúc Time ₫ược sửa lại tên biến thành viên: struct Time { int h, m, s; }; Đoạn mã cũ không biên dịch ₫ược: Time t; t.hour = 5; Chương 5: Lớp đối tượng © 2005 - HMS Đóng gói hay "lớp hóa" class Time { int hour; // gio int min; // phut int sec; // giay public: Time() {hour=min=sec=0;} Biến thành viên (member variable) Hàm tạo (constructor) © 2004, HỒNG MINH SƠN void setTime(int h, int m, int s) { hour = h; = sec = 0; addSec(s); addMin(m); } int getHour() { return hour; } int getMin() { return min; } int getSec() { return sec; } Hàm thành viên (member functions) void addHour(int h) { hour += h; } Chương 5: Lớp đối tượng © 2005 - HMS © 2004, HOÀNG MINH SƠN void addMin(int m) { += m; if (min > 59) { hour += min/60; %= 60; } else if (min < 0) { hour += (min/60 - 1); = (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(); } }; Chương 5: Lớp đối tượng © 2005 - HMS 10 5.3 Biến thành viên Khai báo biến thành viên lớp tương tự cấu trúc class Time { int hour, min, sec; }; Mặc ₫ịnh, biến thành viên lớp không truy nhập ₫ược từ bên ngồi (biến riêng), ₫ương nhiên khơng khởi tạo ₫ược theo cách cổ ₫iển: © 2004, HỒNG MINH SƠN Time t = {1, 0, 0}; t.hour = 2; // error! // error! Có thể làm cho biến thành viên truy nhập ₫ược từ bên ngồi (biến cơng cộng), nhiên có lý cần làm thế: class Point { public: int x,y; }; Chương 5: Lớp đối tượng © 2005 - HMS 11 Kiểm sốt việc truy nhập biến riêng thông qua hàm thành viên Cách ₫ể khởi tạo giá trị cho biến thành viên 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, HỒNG MINH SƠN Một số biến thành viên có vai trò lưu trữ trạng thái bên ₫ối tượng, khơng nên cho truy nhập từ bên ngồi (ngay gián tiếp qua hàm) class PID { double Kp, Ti, Td; double I; // controller parameters // internal state }; Chương 5: Lớp đối tượng © 2005 - 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; 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 ĐT Time t; addHour(t,5); Time t; t.addHour(5); © 2004, HỒNG MINH SƠN Định nghĩa cấu trúc & hàm Ở ₫ây có khác cách viết, chưa có khác Chương 5: Lớp đối tượng © 2005 - HMS 13 Khai báo ₫ịnh nghĩa hàm thành viên Thông thường, lớp hàm thành viên ₫ược khai báo tệp tin ₫ầu (*.h) Ví dụ 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, HỒNG MINH SƠN Các hàm thường ₫ược ₫ịnh nghĩa tệp tin nguồn (*.cpp): #include “mytime.h” void Time::addHour(int h) { hour += h; } Chương 5: Lớp đối tượng © 2005 - HMS 14 Có thể ₫ịnh nghĩa hàm thành viên tệp tin ₫ầu dạng hàm inline (chỉ nên áp dụng với hàm ₫ơn giản), ví dụ: inline void Time::addHour(int h) { hour += h;} Một hàm thành viên ₫ược ₫ịnh nghĩa 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, HỒNG MINH SƠN Khi ₫ịnh nghĩa hàm thành viên, sử dụng biến thành viên 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); } Chương 5: Lớp đối tượng © 2005 - HMS 15 Bản chất 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;// trỏ this ₫ịa } // ₫ối tượng gọi hàm thành viên }; © 2004, HỒNG MINH SƠN void main() { Time t1,t2; t1.addHour(5); t2 = t1; t2.addHour(5); } Chương 5: Lớp đối tượng // // // // Tự ₫ộng gọi hàm tạo Time() cho t1 t2 Có thể hiểu addHour(&t1,5); OK Có thể hiểu addHour(&t2,5); © 2005 - HMS 16 5.5 Kiểm sốt truy nhập public: Các thành viên cơng cộng, sử dụng ₫ược từ bên ngồi private: Các thành viên riêng, truy nhập ₫ược từ bên ngoài, 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, ₫ã khai báo class thành viên private protected: Các thành viên ₫ược bảo vệ, truy nhập ₫ược từ bên ngoài, truy nhập ₫ược lớp dẫn xuất (sẽ ₫ề cập sau) Chương 5: Lớp đối tượng © 2005 - 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]; // for (int i=0; i < 5; pt[i].addSec(10); delete [] pt; } Chương 5: Lớp đối tượng call constructor Time() pt is identical to this pointer call constructor Time() call constructor times ++ i) © 2005 - HMS 18 Bài tập nhà Dựa cấu trúc Vector hàm liên quan ₫ã thực chương 4, xây dựng lớp ₫ối tượng Vector với hàm thành viên cần thiết Khai báo lớp thực lưu trữ thông tin lớp sinh viên gồm thành phần thuộc tính sau: — Số hiệu sinh viên : Kiểu số nguyên — Họ tên: Chuỗi ký tự — Năm sinh: Kiểu số ngun © 2004, HỒNG MINH SƠN Khai báo ₫ịnh nghĩa mở rộng lớp quản lý sinh viên hàm thành viên thực chức sau: — — — — Nhập họ tên sinh viên Nhập số hiệu sinh viên Nhập năm sinh Tìm hiển thị thơng tin sinh viên biết mã số Chương 5: Lớp đối tượng © 2005 - HMS 19 ... nghiệm Chương 5: Lớp đối tượ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 liệu/ che... (semantic/responsibilities) Chương 5: Lớp đối tượng Trạng thái tư sức khỏe Thuộc tính Căn cước Tên: Rex ID: 007 màu lông: vàng giống: Berge Ngữ nghĩa Chó giữ nhà © 2005 - HMS Lớp gì? Một lớp thực thi ₫ối tượng có... dung chương © 2004, HỒNG MINH SƠN 5.1 5.2 5.3 5.4 5.5 Khái niệm Từ cấu trúc sang lớp Biến thành viên Hàm thành viên Kiểm soát truy nhập Chương 5: Lớp đối tượng © 2005 - HMS 5.1 Khái niệm Đối tượng

Ngày đăng: 19/01/2014, 13:20

TỪ KHÓA LIÊN QUAN