Nguyễn Công Huy – Khoa CNTT&TT 1
LẬP TRÌNH HƯỚNG ĐỐI
LẬP TRÌNH HƯỚNG ĐỐI
TƯỢNG & C++
TƯỢNG & C++
Các khái niệm, nguyên lý cơ bản của
lập trình hướng đối tượng (OOP).
Minh họa phong cách lập trình hướng
đối tượng bằng ngôn ngữ C++.
Mục tiêu
Sau khi hoàn tất học phần này, sinh viên có khả năng:
Hiểu được thế nào là lập trình hướng đối tượng, trừu tượng hóa, 3 đặc
điểm cơ bản trong LT HĐT là bao gói, thừa kế, và đa hình.
Phân biệt được sự khác nhau giữa lớp và đối tượng, thuộc tính và
phương thức, thông điệp và truyền thông điệp.
Hiểu được khái niệm cơ bản về cách xây dựng mô hình lớp dùng UML.
Thiết kế được các lớp với các thuộc tính từ cơ bản đến phức tạp như
thành viên tĩnh, thành viên hằng, thành viên đối tượng,
Hiểu được khái niệm hàm xây dựng, hàm hủy và quá trình khởi tạo đối
tượng cũng như hủy bỏ đối tượng.
Nắm được khái niệm về phạm vi truy xuất, đối số mặc định, hàm bạn.
Vận dụng được nguyên lý tái định nghĩa để có thể tái định nghĩa các
hàm thành viên, hàm xây dựng, phép gán của một lớp và các toán tử.
Phân biệt được lớp dẫn xuất, lớp cơ sở, hàm ảo và lớp ảo trong thừa
kế. Thiết kế được các lớp có dùng thừa kế.
Phân biệt được sự khác nhau giữa liên kết tĩnh và liên kết động.
Sử dụng được các cú pháp cơ bản của ngôn ngữ lập trình hướng đối
tượng C++ để viết các chương trình theo phong cách hướng đối tượng.
Nguyễn Công Huy – Khoa CNTT&TT 2
Nguyễn Công Huy – Khoa CNTT&TT 3
Nội dung môn học
Nội dung môn học
Các đặc điểm của C++
Lập trình hướng đối tượng
Lớp và đối tượng
Hàm thành viên
Hàm xây dựng, hàm hủy và việc khởi tạo
đối tượng
Hàm bạn
Tái định nghĩa các tác tử
Thừa kế
Nguyễn Công Huy – Khoa CNTT&TT 4
Giáo trình - Tài liệu tham khảo
Giáo trình - Tài liệu tham khảo
Giáo trình:
ThS. Trương Văn Chí Công, Lập trình HĐT C++, ĐHCT, 2005.
TS. Phạm Thị Xuân Lộc, Lập trình HĐT và C++, ĐHCT, 1998.
Tài liệu tham khảo:
Herbert Schildt, C++: A beginner’s guide, 2
nd
edition,
McGrawHill, 2003.
Herbert Schildt, C++: the complete reference, 3
rd
edition,
McGrawHill, 1998.
Ali Bahrami, Object Oriented Systems Development, Irwin
McGrawHill, 1999.
Stanley B. Lippman, Essential C++, Addision Wesley, 2002.
Bjanrne Stroustrup, The C++ Programming Language,
3
rd
edition, Addision Wesley, 1997.
Bất kỳ tài liệu nào về Lập trình hướng đối tượng và C++.
Internet.
Nguyễn Công Huy – Khoa CNTT&TT 5
Phương pháp học tập và đánh giá
Phương pháp học tập và đánh giá
Phương pháp học tập:
Giáo viên giảng trực tiếp trên lớp 30 tiết.
Sinh viên phải đọc tài liệu trước ở nhà.
Phương pháp đánh giá
Thi lý thuyết cuối khóa: 50%
Thi trên hệ thống E-Learning của khoa.
Đề thi dạng
trắc nghiệm
trắc nghiệm,
không
không sử dụng tài liệu.
Thực hành
Thi thực hành: 30%
Nội dung căn bản
Bài thi còn lỗi sẽ nhận điểm 0
Đề tài nhóm: 20%
Từ 3-4 sinh viên / nhóm
Nộp báo cáo, chạy demo, trả lời chất vấn.
Nguyễn Công Huy – Khoa CNTT&TT 6
CÁC ĐẶC ĐIỂM
CÁC ĐẶC ĐIỂM
CỦA C++
CỦA C++
Các khái niệm cơ bản của C++
Lập trình cấu trúc trong C++
Các đặc điểm mới của C++
Chương 1
Chương 1
:
:
Nguyễn Công Huy – Khoa CNTT&TT 7
Nội dung
Nội dung
Các khái niệm cơ bản trong C++
Cấu trúc điều khiển
Hàm và cấu trúc chương trình
Con trỏ và chuỗi ký tự
Tham số mặc nhiên của hàm
Tái định nghĩa hàm
Hàm tại chổ (inline)
Truyền tham số
Tham chiếu
Struct
Nguyễn Công Huy – Khoa CNTT&TT 8
Các khái niệm cơ bản
Từ khóa
Dành riêng cho ngôn ngữ không được đặt tên
trùng với từ khóa.
Là chữ thường
VD : char, int, return, for, else, const, static
Tên
Phân biệt chữ HOA và chữ thường
Gồm chữ, số, ‘_’ và phải bắt đầu bằng chữ cái.
Độ dài tối đa là 32
Nên theo quy cách đặt tên.
VD: x, hoten, a1, num_of_var, Delta, TEN,
Nguyễn Công Huy – Khoa CNTT&TT 9
Các khái niệm cơ bản
Kiểu dữ liệu
Tên kiểu
Tên kiểu
Kích thước
Kích thước
Phạm vi
Phạm vi
char 1 byte -128 127
unsigned char 1 byte
0
255
int 2 bytes -32768 32767
unsigned int 2 bytes 0 65535
short 2 bytes 0 65535
long 4 bytes
-2
31
2
31
- 1
unsigned long 4 bytes
0
2
32
- 1
float 4 bytes
1.2e
-38
3.4e
38
double 8 bytes
2.2e
-308
1.8e
308
Nguyễn Công Huy – Khoa CNTT&TT 10
Các khái niệm cơ bản
Biến
Khai báo : bất kỳ vị trí nào trong chương trình
Khởi tạo : có thể vừa khai báo và khởi tạo
VD: int x=5, y=10;
for( int i=0, tong =0 ; i<10 ; i++)
tong +=i ;
Biến khai báo trong 1 khối lệnh : chỉ có phạm
vi hoạt động trong khối lệnh đó.
VD: if( delta >0 ) {
float x1= (-b + sqrt(delta)) / (2*a);
float x2= (-b - sqrt(delta)) / (2*a);
}
Nguyễn Công Huy – Khoa CNTT&TT 11
Các khái niệm cơ bản
Biến
Biến toàn cục : có tác dụng trong toàn bộ CT.
Biến địa phương (cục bộ): chỉ có tác dụng trong
phạm vi của nó.
VD: int so = 5;
void GanSo(int x) {
so = x;
}
int NuaSo(int x) {
int c=2;
int so =x/c ;
return so;
}
Nguyễn Công Huy – Khoa CNTT&TT 12
Các khái niệm cơ bản
Hằng
Khai báo :
VD: #define MAX 100
const int MAX=100;
Một số hằng quan trọng :
Số nguyên: 10 , -5, 300000, 1000L,
Số thực : 3.1416, .5 , 123E-5,
Ký tự : char ch1 = ‘A’ , ch2=97;
Chuỗi ký tự :
char *str=“Chuoi Ky Tu”;
char chuoi[50]; strcpy(chuoi,“ ”);
if ( strcmp(chuoi,“”)==0)
cout << “Chuoi rong”;
Nguyễn Công Huy – Khoa CNTT&TT 13
Các khái niệm cơ bản
Kiểu
Chuyển đổi kiểu :
Mặc nhiên (tự động) :
float x = 3.1416;
int y = x ; float sole = x - y;
Do người lập trình sử dụng :
Cú pháp:
( Kiểu ) biểu thức
( Kiểu ) biểu thức
hoặc
Kiểu ( biểu thức )
Kiểu ( biểu thức )
Ví dụ:
int a=10, b=3;
float c1 = a / b ;
float c2 = float (a/b);
float c3 = (float) a / b ;
float c4 = float (a)/b;
Nguyễn Công Huy – Khoa CNTT&TT 14
Các khái niệm cơ bản
Các phép toán
Số học: + , - , * , / , %
Luận lý: ==, !=, >, <, >=, <=, &&, ||, !
Gán : =
Lấy kích thước: sizeof (đối tượng dữ liệu )
Điều kiện : e1 ? e2 : e3
Lấy địa chỉ : &(biến)
Tăng giảm :
x++ , x , ++x , x
tong+= i ; tich *= i;
/= , %= , -= , &= , |= , ^=
Nguyễn Công Huy – Khoa CNTT&TT 15
Các khái niệm cơ bản
Mảng
Khai báo :
<Kiểu> <Tên mảng> [<Kích thước>];
<Kiểu> <Tên mảng> [<Kích thước>];
VD : int m[10]; float ds[MAX];
Sử dụng : phép toán lấy giá trị phần tử.
Thứ tự phần tử : từ 0 đến (kích thước -1)
VD: // CT tính tổng của 10 số Fibonacci đầu tiên
long a[10]; a[0]=a[1]=1;
for (int i=2; i<10 ; i++)
a[i] = a[i-1] + a[i-2];
long tong=0;
for(i=0 ; i<10 ; i++)
tong+=a[i];
Nguyễn Công Huy – Khoa CNTT&TT 16
Các khái niệm cơ bản
Chú thích
Trên 1 dòng :
// chú thích trên 1 dòng
Trên nhiều dòng :
/* chú thích trên nhiều dòng */
Các chỉ thị tiền biên dịch :
# define # undefine # include
# if # else # endif
# if # elif # else # endif
# ifdef # else # endif
# ifndef # else # endif
# error
Nguyễn Công Huy – Khoa CNTT&TT 17
Các khái niệm cơ bản
Nhập xuất
Thư viện hàm : # include <iostream.h>
Nhập :
cin >> Biến
cin >> Biến
Xuất :
cout << (Biểu thức)
cout << (Biểu thức)
Các kiểu dữ liệu có thể nhập xuất :
char , int, unsigned, long, unsigned long, …
float, double, char* , char []
(void*): lấy địa chỉ đầu của chuỗi
Có thể nhập xuất liên tục trên một dòng.
VD: cout << “Gia tri x = “ << x << “ , y = “ <<y;
cout << “Nhap n = “; cin >> n;
Nguyễn Công Huy – Khoa CNTT&TT 18
Các khái niệm cơ bản
Nhập xuất
Một số hàm định dạng toàn cục:
cin.width(n)
cout.width(n)
cout.precision(n)
cin.seekg(n)
Ký tự đặc biệt : \n, \t, \0, \b, \r
Định dạng khác: endl, ends, flush, …
Nhập chuỗi :
gets(char* str);
cin.getline(char* str, int n);
Nguyễn Công Huy – Khoa CNTT&TT 19
Các khái niệm cơ bản
Cấu trúc 1 chương trình đơn giản
Nguyễn Công Huy – Khoa CNTT&TT 20
Cấu trúc điều khiển
Tuần tự
Câu lệnh : viết trên một hay nhiều dòng
Khối lệnh :
Là dãy các lệnh viết trong cặp { }
Tương đương với 1 câu lệnh
Giá trị của biểu thức điều kiện
Bằng 0 : <=> SAI
Khác 0 : <=> đúng
VD: int x=0;
if(x=2)
cout<< “ x bang 2 “;
else
cout<< “ x khac 2 “;
Nguyễn Công Huy – Khoa CNTT&TT 21
Cấu trúc điều khiển
Rẽ nhánh
if (biểu thức)
Lệnh 1;
else
Lệnh 2;
switch (biểu thức) {
case ‘giá trị 1’ : Lệnh 1; [ break; ]
case ‘giá trị 2’ : Lệnh 2; [ break; ]
case ‘giá trị n’ : Lệnh n; [ break; ]
default : Lệnh n+1;
}
Nguyễn Công Huy – Khoa CNTT&TT 22
Cấu trúc điều khiển
Lặp
while (biểu thức)
Lệnh ;
do
Lệnh ;
while (biểu thức);
for ( e1 ; e2 ; e3 )
Lệnh;
e1 : biểu thức khởi tạo
e2 : biểu thức điều kiện
e3 : biểu thức lặp
Nguyễn Công Huy – Khoa CNTT&TT 23
Cấu trúc điều khiển
Từ khóa break
Thoát ra khỏi cấu trúc switch
Thoát ra khỏi vòng lặp : while, do while, for
Từ khóa continue: Trở về đầu vòng lặp
Lệnh nhảy goto
Dùng chung với nhãn lệnh
Không nên sử dụng vì sẽ phá vở cấu trúc CT
Ưu điểm : thoát khỏi các vòng lặp lồng sâu
Nguyễn Công Huy – Khoa CNTT&TT 24
Hàm và cấu trúc chương trình
Hàm
Cú pháp :
<Kiểu trả về> <Tên hàm> (Danh sách kiểu và tham số)
{ [ Khai báo dữ liệu cục bộ ]
[ Thân hàm ]
[ Câu lệnh return ]
}
VD: int Max ( int x, int y) {
int somax;
somax = (x>y) ? x : y;
return somax;
}
Nguyễn Công Huy – Khoa CNTT&TT 25
Hàm và cấu trúc chương trình
Hàm
Khai báo prototype :
<Kiểu trả về> <Tên hàm> ( Danh sách kiểu );
VD: int Max ( int , int );
int Min ( int , int );
void main() {
int a =10 , b =5;
cout<<“So max= “<< Max(a,b)<<endl;
cout<<“So min= “<< Min(a,b)<<endl;
}
int Max (int x , int y) { }
int Min (int x , int y) { }