
Kỹ thuật lập trình - Chương 7: Quan hệ lớp
lượt xem 4
download

Tham khảo tài liệu 'chương 1 kỹ thuật lập trình chương 7: quan hệ lớp 0101010101010101100001', công nghệ thông tin phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Kỹ thuật lập trình - Chương 7: Quan hệ lớp
- Chương 1 Kỹ thuật lập trình Chương 7: Quan hệ lớp 0101010101010101100001 0101010101010101100001 StateController 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 start() 1100101100100010000010 1100101100100010000010 stop() 0101010101010101100001 0101010101010101100001 0101010100101010100101 © 2004, HOÀNG MINH SƠN 0101010100101010100101 1010011000110010010010+ B*u; y = A*x 1010011000110010010010 1100101100100010000010+ d*u; 1100101100100010000010 x = C*x LQGController 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 start() 1010011000110010010010 1010011000110010010010 stop() 1100101100100010000010 1100101100100010000010 12/3/2007
- Nội dung chương 7 7.1 Quan hệ lớp 7.2 Dẫn xuất và thừa kế 7.3 Hàm ảo và nguyên lý ₫a hình/₫a xạ 7.4 Ví dụ thư viện khối chức năng © 2004, HOÀNG MINH SƠN 2 Chương 7: Quan hệ lớp © 2007 AC - HUT
- 7.1 Phân loại quan hệ lớp Ví dụ minh họa: Các lớp biểu diễn các hình vẽ trong một chương trình ₫ồ họa — Rectangle Textbox — Square — Ellipse — Circle — Line — Polygon — Polyline — Textbox © 2004, HOÀNG MINH SƠN — Group 3 Chương 7: Quan hệ lớp © 2007 AC - HUT
- Biểu ₫ồ lớp (Unified Modeling Language) Quan hệ dẫn xuất © 2004, HOÀNG MINH SƠN Quan hệ chứa 4 Chương 7: Quan hệ lớp © 2007 AC - HUT
- Các dạng quan hệ lớp (meta model) C lass rela t io n sh ip A sso ciat io n G e n e r a liz a t io n D e pe nde n c y Ag g r eg at io n © 2004, HOÀNG MINH SƠN C o m p o s it io n 5 Chương 7: Quan hệ lớp © 2007 AC - HUT
- 7.2 Dẫn xuất và thừa kế Ví dụ xây dựng các lớp: Rectangle, Square và Textbox (sử dụng lớp Point) Lớp cơ sở Lớp dẫn xuất © 2004, HOÀNG MINH SƠN 6 Chương 7: Quan hệ lớp © 2007 AC - HUT
- Thực hiện trong C++: Lớp Point class Point { int X,Y; public: Point() : X(0), Y(0) {} Point(int x, int y): X(x), Y(y) {} int x() const { return X; } int y() const { return Y; } void move(int dx, int dy) { X += dx; Y += dy; } void operator*=(int r) { X *= r; Y *= r; © 2004, HOÀNG MINH SƠN } }; Point operator-(const Point& P1, const Point& P2) { return Point(P2.x()-P1.x(),P2.y()-P1.y()); } 7 Chương 7: Quan hệ lớp © 2007 AC - HUT
- Thực hiện trong C++: Lớp Rectangle #include #include #include "Point.h" typedef int Color; class Rectangle { Point TL, BR; Color LineColor, FillColor; int LineSize; public: Point getTL() const { return TL; } Point getBR() const { return BR; } void setTL(const Point& tl) { TL = tl; } © 2004, HOÀNG MINH SƠN void setBR(const Point& br) { BR = br; } Color getLineColor() const { return LineColor; } void setLineColor(Color c) { LineColor = c; } int getLineSize() const { return LineSize; } void setLineSize(int s) { LineSize = s; } 8 Chương 7: Quan hệ lớp © 2007 AC - HUT
- Rectangle(int x1=0, int y1=0, int x2=10, int y2=10) : TL(x1,y1), BR(x2,y2), LineColor(256),FillColor(0) {} Rectangle(const Point& tl, const Point& br, Color lc, Color fc) : TL(tl), BR(br), LineColor(lc), FillColor(fc) {} void draw() { std::cout
- Thực hiện trong C++: Lớp Square #include "Rectangle.h" class Square : public Rectangle { public: Square(int x1=1, int y1=0, int a=10) : Rectangle(x1,y1,x1+a,y1+a) {} void resize(int r) { Rectangle::resize(r,r); } }; © 2004, HOÀNG MINH SƠN 10 Chương 7: Quan hệ lớp © 2007 AC - HUT
- Thực hiện trong C++: Lớp Textbox #include "Rectangle.h" enum AlignType { Left, Right, Center}; class TextBox : public Rectangle { std::string Text; AlignType Align; public: TextBox(const string& text = "Text") : Text(text), Align (Left) {} TextBox(const Point& tl, const Point& br, Color lc, Color fc, const string& text): Rectangle(tl,br,lc,fc), Text(text), Align(Left) {} void draw() { © 2004, HOÀNG MINH SƠN Rectangle::draw(); std::cout
- Chương trình minh họa #include "Rectangle.h" #include "Square.h" #include "TextBox.h" #include void main() { Rectangle rect(0,50,0,100); Square square(0,0,50); TextBox text("Hello"); rect.draw(); std::cout
- getch(); std::cout
- Truy nhập thành viên Các hàm thành viên của lớp dẫn xuất có thể truy nhập thành viên "protected" ₫ịnh nghĩa ở lớp cơ sở, nhưng cũng không thể truy nhập các thành viên "private" ₫ịnh nghĩa ở lớp cơ sở Phản ví dụ: Rectangle rect(0,0,50,100); Square square(0,0,50); square.TL = 10; Lớp dẫn xuất ₫ược "thừa kế" cấu trúc dữ liệu và các phép toán ₫ã ₫ược ₫ịnh nghĩa trong lớp cơ sở, nhưng không nhất thiết có quyền sử dụng trực tiếp, mà phải qua các phép toán (các hàm công cộng hoặc hàm public) © 2004, HOÀNG MINH SƠN Quyền truy nhập của các thành viên "public" và "protected" ở lớp dẫn xuất ₫ược giữ nguyên trong lớp cơ sở 14 Chương 7: Quan hệ lớp © 2007 AC - HUT
- Thuộc tính truy nhập kế thừa Thuộc tính kế thừa của lớp dẫn xuất Y Thuộc tính truy nhập của class Y: private X class Y: public X các thành viên lớp cơ sở X private Được kế thừa nhưng các thành viên của X không thể truy nhập trong Y Các thành viên của X Các thành viên của X sẽ trở thành các sẽ trở thành các thành protected thành viên private viên protected của Y của Y và có thể ₫ược và có thể truy nhập truy nhập trong Y trong Y © 2004, HOÀNG MINH SƠN Thành viên của X sẽ Thành viên của X sẽ trở thành thành viên trở thành thành viên public private của Y và có public của Y và có thể thể truy nhập trong Y truy nhập trong Y 15 Chương 7: Quan hệ lớp © 2007 AC - HUT
- Ví dụ void func2(int a, int b) {...} int xy; class X { private: int x1; protected: int x2; public: int x3; int xy; X(int a, int b, int c) { x1 = a; x2 = b; x3 = xy = c; } © 2004, HOÀNG MINH SƠN void func1(int, int); void func2(int, int); }; void X::func1(int i, int j) {...} void X::func2(int k, int l) {...} 16 Chương 7: Quan hệ lớp © 2007 AC - HUT
- class Y:public X { private: int y1; public: int y2; int xy; Y(int d, int e, int f, int g, int h):X(d, e, f) { y1 = g; y2 = xy = h; } void func2(int, int); }; void Y::func2(int m, int n) { int a, b; x1 = m; //Error, x1 is private in the basic class X x2 = m; © 2004, HOÀNG MINH SƠN x3 = m; xy = m; X::xy = m; ::xy = m; y1 = n; y2 = n; 17 Chương 7: Quan hệ lớp © 2007 AC - HUT
- func1(a,b); OK, X::func1(...) X::func2(a,b); OK, X::func2(...) ::func2(a,b) } void f() { const int a = 12; Y objY(3, 4, 5, 6, 7); objY.x1 = a; //Error, x1 is private objY.x2 = a; //Error, x2 is protected objY.x3 = a; objY.xy = a; objY.y1 = a; //Error, y1 is private objY.y2 = a; objY.X::xy = a; objY.func1(a, a); objY.func2(a, a); © 2004, HOÀNG MINH SƠN } 18 Chương 7: Quan hệ lớp © 2007 AC - HUT
- Chuyển ₫ổi kiểu ₫ối tượng Một ₫ối tượng hay con trỏ, hoặc tham chiếu ₫ối tượng kiểu lớp dẫn xuất sẽ có thể ₫ược chuyển ₫ổi kiểu tự ₫ộng về kiểu lớp cơ sở (nếu ₫ược kế thừa public) nhưng không ₫ảm bảo theo chiều ngược. Ví dụ: class X { ... X(...){...} ... }; class Y:public X { ... Y(...):X(...){...} ... }; X objX(...); Y objY(...); X* xp = &objX; //OK X* xp = &objY; //OK Y* yp = &objX; //Error Y* yp = (Y*)&objX; //OK, but not guaranteed! © 2004, HOÀNG MINH SƠN Chuyển ₫ổi kiểu tự ₫ộng cho ₫ối tượng có kiểu lớp cơ sở sang kiểu lớp dẫn xuất sẽ không thể thực hiện vì không ₫ảm bảo ₫ược quyền truy nhập của các thành viên của lớp cơ sở, chắc chắn không ₫ược nếu kế thừa private. 19 Chương 7: Quan hệ lớp © 2007 AC - HUT
- Chuyển ₫ổi kiểu ₫ối tượng Ví dụ: class X { public: int x; }; class Y:private X { }; void f() { Y objY; X *xp; © 2004, HOÀNG MINH SƠN xp = &objY; //Error xp = (X*) &objY; xp->x = 5; } 20 Chương 7: Quan hệ lớp © 2007 AC - HUT

CÓ THỂ BẠN MUỐN DOWNLOAD
-
Kỹ thuật lập trình
114 p |
800 |
323
-
Đề thi học kỳ I môn Kỹ thuật lập trình cơ bản
14 p |
512 |
47
-
Đề thi học kỳ 1 môn Kỹ thuật lập trình cơ bản
14 p |
212 |
18
-
Tài liệu ôn thi tốt nghiệp môn cơ sở: Phần Kỹ thuật lập trình C - ThS. Trần Ngọc Bảo
4 p |
176 |
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 |
183 |
8
-
Bài giảng Kỹ thuật lập trình: Tập tin - Trịnh Tấn Đạt (2024)
53 p |
9 |
3
-
Bài giảng Kỹ thuật lập trình: Hàm - ThS. Trần Ngọc Bảo Duy
112 p |
5 |
2
-
Bài giảng Kỹ thuật lập trình: Kiểu dữ liệu do người dùng tự định nghĩa - ThS. Trần Ngọc Bảo Duy
16 p |
5 |
2
-
Bài giảng Kỹ thuật lập trình: Các kỹ thuật lập trình nâng cao - Trịnh Tấn Đạt (2024)
86 p |
5 |
2
-
Bài giảng Kỹ thuật lập trình: Chuỗi ký tự - Trịnh Tấn Đạt (2024)
63 p |
6 |
2
-
Bài giảng Kỹ thuật lập trình: Con trỏ - Trịnh Tấn Đạt (2024)
101 p |
8 |
2
-
Bài giảng Kỹ thuật lập trình: Lập trình hướng đối tượng - ThS. Trần Ngọc Bảo Duy
88 p |
6 |
2
-
Bài giảng Kỹ thuật lập trình: Các phương pháp giải quyết bài toán trên máy tính - Trịnh Tấn Đạt (2024)
22 p |
7 |
1
-
Đề thi kết thúc học phần học kì 3 môn Kỹ thuật lập trình năm 2021-2022
2 p |
1 |
1
-
Bài giảng Kỹ thuật lập trình: Đệ quy - Trịnh Tấn Đạt (2024)
63 p |
3 |
1
-
Bài giảng Kỹ thuật lập trình: Mảng - ThS. Trần Ngọc Bảo Duy
39 p |
8 |
1
-
Bài giảng Kỹ thuật lập trình: Chuỗi - ThS. Trần Ngọc Bảo Duy
34 p |
4 |
1
-
Bài giảng Kỹ thuật lập trình: Con trỏ - ThS. Trần Ngọc Bảo Duy
147 p |
3 |
1


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
