KỹKỹ
thuậtthuật
lậplập
trìnhtrình
nângnâng
caocao
GV. GV. NguyễnNguyễn Minh Minh HuyHuy
KỹKỹ
thuậtthuật
lậplập
trìnhtrình
nângnâng
caocao
1Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
ChuẩnChuẩn vàvà quyquy ướcước lậplập trìnhtrình
NạpNạp chồngchồng hàmhàm
Con Con trỏtrỏ hàmhàm
Function Template.Function Template.
2Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
ChuẩnChuẩn vàvà quyquy ướcước lậplập trìnhtrình
NạpNạp chồngchồng hàmhàm
Con Con trỏtrỏ hàmhàm
Function Template.Function Template.
3Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Chuẩn và quy ước lập trìnhChuẩn và quy ước lập trình
Vì sao phải có chuẩn và quy ước?Vì sao phải có chuẩn và quy ước?
Làm việc một mình:Làm việc một mình:
Tự làm tự hiểu.Tự làm tự hiểu.
Mình luôn hiểu mình?Mình luôn hiểu mình?
Làm việc nhóm:Làm việc nhóm:
4Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Làm việc nhóm:Làm việc nhóm:
Mỗi người một việc.Mỗi người một việc.
Ráp nối công việc.Ráp nối công việc.
Mọi người luôn hiểu nhau?Mọi người luôn hiểu nhau?
Phối hợp công việc hiệu quả
Áp đặt kỷ luật!!
Chuẩn và quy ước lập trìnhChuẩn và quy ước lập trình
KhôngKhông cócó chuẩnchuẩn chungchung toàntoàn thếthế giớigiới!!!!
QuyQuy ướcước đặtđặt têntên (Naming Convention):(Naming Convention):
QuyQuy tắctắc vàngvàng: : têntên phảiphải thểthể hiệnhiện ý ý nghĩanghĩa
x, y, f, x, y, f, g g khôngkhông rõrõ nghĩanghĩa
total, rate, create, total, rate, create, run run rõrõ nghĩanghĩa
5Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
QuyQuy tắctắc đặtđặt têntên theotheo kiểukiểu ““lạclạc đàđà” (Camel Case)” (Camel Case)
DùngDùng đểđể viếtviết cáccác từtừ dínhdính liềnliền nhaunhau
ViếtViết hoahoa chữchữ cáicái đầuđầu mỗimỗi từtừ
UUpperpperCCamelamelCCasease
llowerowerCCamelamelCCasease
Chuẩn và quy ước lập trìnhChuẩn và quy ước lập trình
QuyQuy ướcước viếtviết câucâu lệnhlệnh::
QuyQuy tắctắc vàngvàng: : viếtviết câucâu lệnhlệnh rộngrộng rãirãi, , rõrõ ràngràng
x=x=a+ba+b c*d; for(c*d; for(intint ii=0;i<=0;i<n;in;i++); ++); khôngkhông rõrõ ràngràng
x = a + b x = a + b –– c * d;c * d;
for (for (intint ii = 0; = 0; ii < n; < n; ii++); ++); rõrõ ràngràng
ViếtViết
mỗimỗi
câucâu
lệnhlệnh
mộtmột
dòngdòng
6Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
ViếtViết
mỗimỗi
câucâu
lệnhlệnh
mộtmột
dòngdòng
ViếtViết cáchcách khoảngkhoảng giữagiữa haihai đoạnđoạn lệnhlệnh
QuyQuy ướcước viếtviết chúchú thíchthích::
QuyQuy tắctắc vàngvàng: : viếtviết chúchú thíchthích đầyđầy đủđủ, , dễdễ hiểuhiểu
ViếtViết chúchú thíchthích chocho từngtừng hàmhàm
DùngDùng dấudấu // // thaythay chocho /* */./* */.
NộiNội dungdung
ChuẩnChuẩn vàvà quyquy ướcước lậplập trìnhtrình
NạpNạp chồngchồng hàmhàm
Con Con trỏtrỏ hàmhàm
Function Template.Function Template.
7Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Nạp chồng hàmNạp chồng hàm
ChữChữ kýký hàmhàm (Function Signature):(Function Signature):
PhânPhân biệtbiệt giữagiữa cáccác hàmhàm
ĐặcĐặc trưngtrưng củacủa mộtmột hàmhàm::
TênTên hàmhàm
DanhDanh sáchsách thamtham sốsố
doubledouble
sapXepsapXep
((
intint
aMangaMang
[], [],
intint
kichThuockichThuoc
););
8Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
doubledouble
sapXepsapXep
((
intint
aMangaMang
[], [],
intint
kichThuockichThuoc
););
PhanSoPhanSo PhanSoPhanSo::cong::cong((PhanSoPhanSo pp););
GiáGiá trịtrị trảtrả vềvề khôngkhông thuộcthuộc chữchữ kýký hàmhàm!!!!
Chương trình có thể có
nhiều hàm cùng tên!!
Nạp chồng hàmNạp chồng hàm
NhữngNhững trườngtrường hợphợp nạpnạp chồngchồng hàmhàm nàonào
khôngkhông hợphợp lệlệ??
1. 1. intint tinhToantinhToan((intint a, a, intint b);b);
2. 2. intint tinhToantinhToan((intint x, x, intint y);y);
9Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
3. 3. intint tinhToantinhToan((intint a, float b);a, float b);
4. float 4. float tinhToantinhToan((intint u, u, intint v);v);
5. 5. intint tinhToantinhToan((intint a, long b);a, long b);
NộiNội dungdung
ChuẩnChuẩn vàvà quyquy ướcước lậplập trìnhtrình
NạpNạp chồngchồng hàmhàm
Con Con trỏtrỏ hàmhàm
Function Template.Function Template.
10Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Con Con trỏtrỏ hàmhàm
XétXét hàmhàm xửxử lýlý trêntrên mảngmảng sốsố nguyênnguyên
TínhTính tổngtổng cáccác phầnphần tửtử
TổngTổng quátquát 1: 1: tínhtính tổngtổng, , hiệuhiệu cáccác phầnphần tửtử
ThamTham sốsố hóahóa phépphép tínhtính
TổngTổng quátquát 2: 2: tínhtính toántoán bấtbất kỳkỳ trêntrên cáccác phầnphần tửtử
ThamTham sốsố hóahóa xửxử lýlý tínhtính toántoán
Con Con trỏtrỏ hàmhàm
11Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Con Con trỏtrỏ hàmhàm
CáchCách sửsử dụngdụng con con trỏtrỏ hàmhàm::
TạoTạo kiểukiểu chocho hàmhàm: : từtừ khóakhóa typedeftypedef
typedeftypedef intint (*(*PhepTinhPhepTinh)()(intint, , intint););
KhaiKhai báobáo thamtham sốsố vớivới kiểukiểu hàmhàm
intint xuLyMangxuLyMang((intint m[ ], m[ ], intint kichThuockichThuoc, , PhepTinhPhepTinh pp))
{{
{{
intint ketQuaketQua = = mangmang[0];[0];
for (for (intint ii = 1; = 1; ii < < kichThuockichThuoc; ; ii++)++)
ketQuaketQua = = p(p(ketQuaketQua, , mangmang[[ii]);]);
return return ketQuaketQua;;
}}
12Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Con Con trỏtrỏ hàmhàm
CáchCách sửsử dụngdụng con con trỏtrỏ hàmhàm::
TạoTạo hàmhàm cócó cùngcùng chữchữ kýký vớivới kiểukiểu hàmhàm
intint congcong((intint a, a, intint b)b)
{{
return a + b;return a + b;
}}
TruyềnTruyền
têntên
hàmhàm
dướidưới
dạngdạng
thamtham
sốsố
TruyềnTruyền
têntên
hàmhàm
dướidưới
dạngdạng
thamtham
sốsố
void void mainmain()()
{{
intint m[5] = {1, 2, 3, 4, 5};m[5] = {1, 2, 3, 4, 5};
intint ketQuaketQua = = xuLyMangxuLyMang(m, 5, (m, 5, congcong););
}}
13Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Con Con trỏtrỏ hàmhàm
ĐặcĐặc điểmđiểm củacủa con con trỏtrỏ hàmhàm::
ThamTham sốsố hóahóa xửxử lýlý
HàmHàm cócó thểthể làmlàm đốiđối sốsố củacủa hàmhàm kháckhác
HàmHàm cócó xửxử lýlý tổngtổng quátquát tùytùy xửxử lýlý truyềntruyền vàovào
XửXử lýlý cụcụ thểthể đượcđược quyếtquyết địnhđịnh khikhi gọigọi hàmhàm
14Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
GhiGhi chúchú::
KhôngKhông nhấtnhất thiếtthiết dùngdùng typedeftypedef tạotạo kiểukiểu dữdữ liệuliệu hàmhàm
intint xuLyMangxuLyMang((intint m[ ], m[ ], intint kichThuockichThuoc, , intint p(p(intint, , intint) ) ))
{{
// // CàiCài đặtđặt
}}
NộiNội dungdung
ChuẩnChuẩn vàvà quyquy ướcước lậplập trìnhtrình
NạpNạp chồngchồng hàmhàm
Con Con trỏtrỏ hàmhàm
Function Template.Function Template.
15Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Function TemplateFunction Template
XétXét hàmhàm tìmtìm min min giữagiữa 2 2 sốsố::
TìmTìm min min giữagiữa 2 2 sốsố 3 3 vàvà 5.5.
TổngTổng quátquát 1: 1: tìmtìm min min giữagiữa 2 2 sốsố nguyênnguyên bấtbất kỳkỳ
ThamTham sốsố hóahóa giágiá trịtrị truyềntruyền vàovào
TổngTổng quátquát 2: 2: tìmtìm min min giữagiữa 2 2 sốsố kiểukiểu bấtbất kỳkỳ
16Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
ThamTham sốsố hóahóa kiểukiểu dữdữ liệuliệu truyềntruyền vàovào
Function Template.Function Template.
Function TemplateFunction Template
CáchCách sửsử dụngdụng Function Template:Function Template:
template template <class T><class T>
TT timMintimMin((TT aa, , TT bb))
{{
return (a < b) ? a : b;return (a < b) ? a : b;
}}
void main()void main()
{{
intint x = x = timMintimMin(3, 5);(3, 5);
intint a = a = 4, 4, b = b = 6;6;
intint
c = c =
timMintimMin
(a, b);(a, b);
17Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
intint
c = c =
timMintimMin
(a, b);(a, b);
float float k k = = timMintimMin(1.5, 2.3);(1.5, 2.3);
PhanSoPhanSo p1;p1;
PhanSoPhanSo p2;p2;
PhanSoPhanSo p3 = p3 = timMintimMin(p1, p2);(p1, p2);
}}
Function TemplateFunction Template
ĐặcĐặc điểmđiểm củacủa Function Template:Function Template:
ThamTham sốsố hóahóa kiểukiểu dữdữ liệuliệu
HàmHàm tổngtổng quátquát chocho nhiềunhiều kiểukiểu dữdữ liệuliệu kháckhác nhaunhau
KiểuKiểu cụcụ thểthể đượcđược quyếtquyết địnhđịnh khikhi gọigọi hàmhàm
GhiGhi
chúchú
::
18Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
GhiGhi
chúchú
::
TừTừ khóakhóa “class”“class” cócó thểthể thaythay bằngbằng ““typenametypename””
PhầnPhần khaikhai báobáo vàvà càicài đặtđặt đềuđều phảiphải khaikhai báobáo template.template.
PhầnPhần càicài đặtđặt hàmhàm phảiphải nằmnằm cùngcùng file:file:
PhầnPhần khaikhai báobáo hàmhàm
PhầnPhần gọigọi sửsử dụngdụng hàmhàm
TómTóm tắttắt
ChuẩnChuẩn vàvà quyquy ướcước lậplập trìnhtrình::
ThốngThống nhấtnhất cáchcách thứcthức làmlàm việcviệc chocho hiệuhiệu quảquả
ÁpÁp đặtđặt kỷkỷ luậtluật lênlên việcviệc lậplập trìnhtrình
QuyQuy tắctắc đặtđặt têntên: : têntên thểthể hiệnhiện ý ý nghĩanghĩa
QuyQuy tắctắc viếtviết câucâu lệnhlệnh: : rộngrộng rãirãi, , rõrõ ràngràng
QuyQuy tắctắc viếtviết chúchú thíchthích: : đầyđầy đủđủ, , dễdễ hiểuhiểu
NạpNạp chồngchồng hàmhàm::
NhiềuNhiều hàmhàm cùngcùng têntên, , kháckhác thamtham sốsố
19Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TómTóm tắttắt
Con Con trỏtrỏ hàmhàm::
ThamTham sốsố hóahóa xửxử lýlý
HàmHàm cócó cáchcách xửxử lýlý tổngtổng quátquát
Function Template:Function Template:
ThamTham
sốsố
hóahóa
kiểukiểu
dữdữ
liệuliệu
ThamTham
sốsố
hóahóa
kiểukiểu
dữdữ
liệuliệu
HàmHàm xửxử lýlý tổngtổng quátquát trêntrên nhiềunhiều kiểukiểu kháckhác nhaunhau
20Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
BàiBài tậptập 1.1:1.1:
ViếtViết chươngchương trìnhtrình chocho phépphép thựcthực hiệnhiện cáccác thaothao táctác trêntrên kiểukiểu phânphân sốsố::
NhậpNhập, , xuấtxuất phânphân sốsố
RútRút gọngọn phânphân sốsố
CộngCộng, , trừtrừ, , nhânnhân, , chiachia, so , so sánhsánh haihai phânphân sốsố
21Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
BàiBài tậptập 1.2:1.2:
ViếtViết chươngchương trìnhtrình chocho phépphép sắpsắp xếpxếp tăngtăng//giảmgiảm mảngmảng phânphân sốsố
22Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
BàiBài tậptập 1.3:1.3:
MởMở rôngrông bàibài 1.2, 1.2, chocho phépphép sắpsắp xếpxếp mảngmảng phânphân sốsố//sốsố nguyênnguyên
23Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy