Bài giảng Lập trình hướng tới đối tượng

1. LẬP TRÌNH TUYẾN TÍNH

- Ưu điểm

- Nhược điểm

2. lập trình hướng chức năng

- biến toàn cục (khai báo bên ngoài và toàn bộ chương trình đều dùng được)

- Tham số

3. lập trình hướng đối tượng

- bản thân toàn bộ chương trình là xoay quanh các đối tượng hưóng tới sự bao đóng thông tin. Sự

trừu tượng hoá thế giới thực xoay quanh thông tin.

II/ CÁC ĐẶC DIỂM CỦA LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

1. đối tượng

Là khái niệm hay một vật thể đã được trừu tượng hoá

Ví dụ: 43, 4/5

- thông tin được tổ chức thông qua các thuộc tính và giá trị của các thuộc tính.

- các hành vi (các phưưong thức) (các câu lệnh)

2. lớp; là tập các đối tượng cùng kiểu(cùng thuộc tính) các hành vi của đối tượng đó phải được

Định nghĩa: lớp là khuôn đúc ra đối tưọng (lớp có trước).

Định nghĩa lớp:

- các thuộc tính:

Ví dụ: phân số có các thuộc tính kiểu nguyên(2,3)

- các hàm thành viên (các câu lệnh thể hiện sự thay đổi của đối tượng0

3. bao đóng thông tin:

 Thông tin của đối tượng sẽ được bao kín (sự kiểm soát truy cập của thông tin).

 

 Vùng riêng (chỉ lớp cha mới có quyền truy cập)

 Chỉ có con mới có quyền truy cập

 

 Ai cũng có thể đuợc xem

 

Thông tin được chia thành nhiều vùng việc truy cập thông tin có thể được kiểm soát.

4. Kế thừa

 Xây dựng một lớp mới trên cơ sở 1 lớp đã tồn tại , lớp tồn tại được gọi là lớp cha (lớp cơ sỏ), lớp mới được gọi là lớp con(lớp dẫn xuất).

 

 

 

doc25 trang | Chia sẻ: lethuong715 | Lượt xem: 632 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng Lập trình hướng tới đối tượng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
 ĐỂ TẠO RA ĐÓI TƯỢNG TRONG C++
1. Cú pháp
 Class tenlop
 { các phạm vi 1: (phạm vi 1 có thể có hoặc không)
 Các hàm thành viên
 [ phạm vi]: các thuộc tính ( phạm vi 2 có thể có hoặc không)
 Các hàm thành viên.
 - có 3 từ khoá để xác định phạm vi
 - private
 - puclic
 - protected
- Các phạm vi này lặp đi lặp lại trong một lớp nếu các thành phần của lớp (gồm các thuộc tính và hàm thành viên) nằm ở phạm vi nào sẽ chịu tác động của phạm vi đó, giới hạn của một phạm vi bắt đầu từ từ khoá xác định phạm vi cho tới khi gặp từ khoá xác định phạm vi khác hoặc dấu ngoặc } kết thúc lớp
- nếu các thành phần của lớp không nằm trong phạm vi nàothì ngầm định đó là phạm vi private các thành phần của lớp nằm trong phạm vi private thì bên ngoài không được phép truy cập chỉ được phép try cập bên trong phạm vi của lớp.
- các thành phần của lớp nằm trong phạm vi public thì bên ngoài hay bên trong lớp cũng đều được phép truy cập
- phạm vi protected dùng trong kế thừa nếu không có kế thừa thì dùng giống như phạm vi private.
2. Các hàm thành viên của lớp
 Có hai cách để xây dựng hàm thành viên
C1: định nghĩa ngay trong lớp
C2: Khai báo trong lớp và định nghĩa bên ngoài lớp
 Ví dụ: 
 Class ps
 { public 
 Void hienthi();
 int get.t(); (hàm này lấy tử số ra cho người ta nhìn)
 { returnt; }
 int get.m(); (hàm này lấy mẫu số ra cho người ta nhìn)
 void set.t(mt)
 void set.m(mt)
 prevate:
 int t, m;
 }
 - thuộc tính được cấp phát bộ nhớ để lưu trữ giá trị;
 - hàm là chứa các câu lệnh (tập các câu lệnh)
 Ví dụ: main();
 { ps a,b;
 // a.t = 3; //t = 3;
 a.set.t(3); (hàm thay đổi tử số, hàm truy cập);
 a.set.m(-6); (hàm thay đổi mẫu số)
 a.hienthi();
 b.set.t(5);
 b.set.m(0);
 b.hienthi( );
 }
 Định nghĩa hàm ngoài lớp 
 //Cú pháp định nghĩa hàm
 // bên ngoài lớp
 // kiểu trả về tenlớp: tenham(tham số)
 {thân hàm}
 Ví dụ: void ps:: set.t(int a);
 { t = a; rutgon(); }
 Void ps:: set.m(int a);
 { if (a = = 0) return;
 m = a; rutgon(); }
 int ps:: hienthi();
 { cout<< t << “/” <<m << endl; }
Hàm rút gọn;
 Void ps:: rutgon();
 { int a = t; b = m;
 While((a % b) ‘ = 0’)
 { int tg = a % b;
 a = b;
 b = tg;
 }
 t = t/b; m = m/b;
 if (m<0);
 { t = - t; m = - m;
 }
Chú ý: - hàm set là hàm truy cập lấythông tin
 - hàm get là hàm sửa thông tin 
IV. CON TRỎ THIS 
Con trỏ This là một con trỏ của trình biên dịch tự động trỏ tới các đối tượng khi các đối tượng này thực thi câu lệnh;
- Con trỏ this là con trỏ ẩn;
 Ví dụ: void ps:: set.m(int a);
 { 
 m = a; // this m = a; (nơi con trỏ chỉ tới thuộc tính m = a)
 t = a; // this t = a; (nơi con trỏ chỉ tới thuộc tính t = a)
V/ HÀM TẠO (CONTRUCTION) VÀ HÀM HUỶ (DESTRUCTER)
1. Hàm tạo (contruction)
Hàm tạo là một hàm thành viên đặc biệt của lớp vì nó tự động gọi tới khi mỗi đối tượng được tạo ra(xuất hiện – khai báo)
Hàm tạo thường tạ ra các giá trị ban đầu cho các thuộc tính của đối tượng
 Hàm tạo có thể làm chồng hoặc có thể sử dụng các tham số mặc định nhưng cần chú ý tránh nhập nhằng.
- trong c++ hàm tạo là các hàm cùng tên với lớp và không có kiểu trả về
- hàm tạo phaỉ nằm trong phạm vi public vì nó được tạo ở bên ngoài khi một đối tương tạo ra.
- khi một lớp không xây dựng hàm tạo thì khi một dối tượng xuất hiện nó sẽ gọi hàm tạo ngầm định của trình biên dịch đây là hàm không đối và hàm này không thực hiện điều gì hết;
Ghi chú: ếu lớp đã có hàm tạo riêngcủa lớp thì hàm tạo của trình biên dịch sẽ không được phép sử dụng;
ví dụ:
 class ps (lớp phân số)
 { int t, m
 void rutgon();
 public;
 ps(int t1, int m1);
 ps();
 void hienthi();
void set.m(mt);
int get.t();
 }
main();
 { ps a; e(5);
 ps b(4, -2); c(13,0);
 a.hienthi();
 a.set_m(5);
 a.hienthi();
 };
 ps :: ps (int a, int b) (xây dựng hàm tạo toán tử định phạm vi của lớp phân số)
 { if (b = = 0)
 { t = 0,m = 1; return; }
 t = a; m = b;
 rutgon();
 }
 ps :: ps(); (hàm toán tử định phạm vi của lớp phân số)
 { t = 0, m = 1;}
 ps:: ps(int a);
 { t = a; m = 1}
2. Hàm huỷ (destruction)
- hàm huỷ là hàm tự động gọi tới khi một biến bị thu hồi
Hàm huỷ trong C++ thì trùng tên với lớp nhưng trước hàm có dấ ngã õ và không có giá trị trả về
Hàm huỷ là hàm không đối và nằm trong vùng public 
 ps:: ~ ps(); 
 { cout<< “Im aie, bye, bye”<<endl;
VI/HÀM CONST VÀ THNÀH PHẦN CONST 
1. đối tượng khia báo là Const
 Khai báo: cost tên đối tượng;
 Cost ps a(2,4);
Khi một đối tượng được khai báo bằng const thì ta không được thay đổi các thuộc tính của nó
2. Hàm const
Là những hàm mà không thay đổi giá trị của các thuộc tính và cho phép các đối tượng là các hằng đối tượng được phép gọi tới hàm này.
Trong khai báo lớp và định nghĩa hàm đều phải có từ khoá constsa tên hàm
Ví dụ: void get.t() const
3. Thuộc tính Const
Thuộc tính const là thuộc tính không được phép thay đổi các thuộc tĩnh này khi một đối tượng đã được tạo ra.
VII/ HÀM BẠN(FRIENT)
1. hàm bạn
Là các hàm không thuộc lớp nhưng được khai báo là bạn của lớp
- hàm bạn sẽ đyựơc phép truy cập vào các thành phần nằm ở vùng private
Chú ý:
 Hàm bạn không thuộc lớp nên định nghĩa bên ngoài lớp nó không có toán tử định phạm vi không có con trỏ this
Hàm bạn đựoc sử dụng độc lập không thông qua tên đối tượng hàm bạn không phải là hàm thnàh viên của lớp
Ví dụ: # include “iostream”
Using name space stt;
 Class A
 { int x, y;
 Public:
 A(int x1 = 0, int y = 10) { x = x1, y = y1}
 Friend int tong(A);
 Void hienthi() { cout << “x=” << x<< “y =” << y<< endl; }
}
 Int tong(A,a); return() a.x+ a.y;}
 Main()
 { A a;
 a.hienthi();
 cout << “tong x, y của A là: “<< tong ca) <<endl;
2. các thành phần static của lớp:
- khai báo trong lớp theo cú pháp:
 Static kieu ten;
Thuộc tính thông thường gắn với đối tượng
Thuộc tính static khong gắn với đối tượng mà gắn với lớp tất cả các thuộc tính đều được sử dựng chungthuộc tĩnh này cnó chỉ được cấp phát một lần và khởi tạo bên ngoài lớp
Thuộc tính static có thể truy xuất thông qua tên lóp hoặc bất kỳ đối tượng noà của lớp 
 Tenlop :: tenthuoctinh static
 VD: ps:: d
 a.d = 1;
 VD: int ps:: d = 0; (khởi tạo thuộc tính d ở bên ngoài lớp)
- không khởi tạo thuộc tính static ở hàm khởi tạo;
 ps :: ps(): t(0), m(1); (không được phép khởi tạo d = 0)
 { d +;
 }
Ps:: ps (mt a, mt b);
 { t = a, m= b; d++;
 Rutgon();
 }
Main()
 { ps a(5,7);
Cout << “so dt ps hien tai la” << a.d<<endl;
 { ps b, *p; (*p nơi p trỏ tới)
 P = new ps (cấp phát bộ nhớ cho p)
 Cout << “so ps hien tai la”<< ps d << endl;
 Delete p (thu hồi bộ nhớ cấp phát cho p)
 Cout << “so ps hien tai la” << ps::d << endl;
 }
 Cout << “so ps hien tai la” << ps::d << endl;
 a.d = 15;
 }
b. Hàm:
 - là hàm được khai báo từ khoá Static phía trước nó chỉ làm việc với từ khoá Staticđể truy suất đến hàm có thể hông qua đối tượng hoặc tên lớp.
 Class ps
 { private
 int t, m;
static int d;
rutgon();
public
 ps (int = 0, int = 1); (hàm khởi tạo)
 ~ps(); (hàm huỷ)
 { d......}
Void hienthi();
 Set(int, int);
Static int dem();
{ return d; }
int ps :: d = 0;
main();
{ ps a(5,7);
Cout << “ so dt ps hien thi la”<<a.dem()<<endl;
{ ps b, *p;
P = new ps; (cấp phát bộ nhớ)
Cout << “so ps hien tai la”<< ps dem() << endl;
Delete p; (thu hồi iến nhớ)
Cout << “so ps hien tai la”<< ps :: d, dem();
 }
Cout << “so ps hien tai la”<< ps :: dem();
VIII/ LỚP CÓ CẤP PHÁT BỘ NHỚ
 Ví dụ:
 Class congdan
{ class scm[30];
 char *p; (*p: nơi con trỏ chỉ tới);
char ns[8];
public: 
 congdan(); (hàm tạo không đối);
congdan(char *cmt, char *ten, char *NS = “”1/1/2010”);
void hienthi();
~ congdan(); (hàm huỷ)
}
- hàm tạo (không đối): 
 Congdan :: congdan();
 { strcopy (scm, “000000”);
 Strcopy (ns, :01012010”); 
 P = new char[10] ( cấ phát bộ nhớ cho p);
 Strcopy (p, “khong co”);
 }
- Hàm tạo có đối:
Congdan :: congdan(char *cmt, char *ten, char *ns );
 { strcopy (scm, cmt);
 Strcopy (NS, ns); 
 P = new char[str len(ten)+ 1] 
 Strcopy (p, ten);
 }
- Hàm huỷ
Congdan:: ~ congdan();
{ delete[] p; (Thu hồi bộ nhớ nơi p trỏ tới)
Delete scm;
Delete ns;
}
CHƯƠNG TRÌNH CHÍNH
Main();
{ congdan a, b(“1784578”, “le mai”, “ ....”);
a.hienthi();
b.hienthị();
}.
CHƯƠNG 4
ĐA NĂNG HOÁ TOÁN TỬ
I, Mở đầu
II/ Đa năng hoá toán tử 2 ngôi
 - Kiểu trả về: date
 - Lớp: date
 - tên hàm toán tử: operato
I/ MỞ ĐẦU:
- Mở rộng khả năng của phép toán
+ Các phép toán: +; -; - -; + +, *; /; =; =; 
+ Các phép so sánh: ; =; =; >>; <<, []; ();
Cú pháp:
- Kiểu trả về: operato (từ khoá) (danh sách tham số)
Ví dụ: ps operato ~ (ps, ps);
+ Hàm toán tử
+ Toán tử được làm chồng có thể là 1 toán tử thuộc lớp hoặc không thuộc lớp với các toán tử thuộc lớp thì số tham số của nó sẽ được bớt đi 1, vì ngôi đầu tiên của phép toán sẽ là đối tượng gọi đến phép toán đó.
+ các toán tử bắt buộc thuộc lớp là toán tử gán, toán tử lấy chỉ số, toán tử (), ..
+ các toán tử không thuộc lớp thường đựơc khai báo là bạn của lớp để được truy cập tới các thành phần nằm trong vùng private.
II/ ĐA NĂNG HOÁ TOÁN TỬ HAI NGÔI
- Toán tử hai ngôi không là thành viên của không phải là thành viên của lớp sẽ có hai ham số.
Ví dụ:
 Class ps
 { 
 private b	
 int t, m;
 void rutgon ();
 public 
 ps (int = 1, int = 0);
 void hienthi();
 void set ps(int, int);
 ps operator + (ps);
 Frient ps operator - (ps, ps); 
 };
 ps ps :: operator + (ps a) // *this + a 
 { ps tam;
 tam.t = this t*a.m + this m + a.t;
 tam.m - this m*a.m;
 tam. Rutgon();
 return tam;
 }
* Phép trừ
 Ps operator - (ps a, ps b); // toán tử a – toán tử b)
 { ps tam;
 tam.t = a.t * b.m – bt * a.m;
 tam m = a.m *b.m;
 tam rutgon();
 return tam;
 };
Main();
 { ps a(5,2), b(3,7);
 c = a + b; // a.operator +(b);
 c.hienthị(); //41/14
 c = a - b; // operator - (a, b);
 c.hienthị(); //29/14
 c= a + 

File đính kèm:

  • docbai giang lap trih huong doi tuong.doc