Trong
khoa h?c may tinh
,
ch??ng trinh con
(subprogram) hay
subroutine
la m?t đo?n
ch??ng trinh
đ??c đong goi thanh m?t đ?n v? trinh, no th?c hi?n m?t s? tac v? c? th? ma
ch??ng trinh
c?n th?c hi?n nhi?u l?n t? nhi?u n?i trong th?i gian ch?y c?a no. Khi
ch??ng trinh
c?n đ?n tac v? c? th? đo thi b? tri ch? th?
g?i
(call) đ?n ch??ng trinh con nay va nh?n k?t qu? n?u co sau khi no th?c thi xong
[1]
.
Ngay t? luc
may tinh
ra đ?i thi k? thu?t l?p trinh ki?u c?u truc modul hoa v?i cac ch??ng trinh con đa đ??c thi?t l?p, va đ??c c?ng c? trong cac ph?n m?m l?p trinh
h?p ng?
. Ngay nay trong ngon ng? b?c cao
ch??ng trinh con
đ??c di?n đ?t tuy theo ngon ng? la cac
ham
(
function
),
th? t?c
(
procedure
) va
ph??ng th?c
(
method
),... M?t s?
ngon ng? l?p trinh
, ch?ng h?n
Pascal
va
FORTRAN
, phan bi?t gi?a
ham
(m?t ch??ng trinh con co tr? v? gia tr?) va
th? t?c
(khong tr? v? gia tr?). Cac ngon ng? khac, vi d?
C
va
LISP
, coi hai thu?t ng? nay nh? nhau. Cai ten
ph??ng th?c
th??ng đ??c dung trong
l?p trinh h??ng đ?i t??ng
đ? g?i cac ch??ng trinh con la m?t ph?n c?a cac
đ?i t??ng
.
Trong ch??ng trinh, m?t ch??ng trinh con đ??c phep g?i ch??ng trinh con khac, ho?c co th? g?i chinh no. Tuy nhien n?u b? tri g?i l?n nhau, vi d?
subroutine A
g?i
subroutine B
nh?ng trong than c?a
subroutine B
l?i co g?i
subroutine A
, s? d?n đ?n l?i b?t đ?nh khi th?c hi?n. M?t s? ngon ng? co h? tr? phat hi?n l?i nay trong moi tr??ng so?n th?o trinh va khi d?ch. D?u v?y đ? tranh l?i thi khi l?p trinh ph?i tuan th? b? tri g?i theo "
mo hinh canh va la
", trong đo "canh" la subroutine co g?i subroutine khac, con "la" la subroutine khong co l?nh g?i.
K? thu?t l?p trinh d?n đ?n vi?c t? ch?c ch??ng trinh ki?u c?u truc modul hoa, t?c la chia ch??ng trinh thanh nhi?u
modul
hay
đ?n v?
ma k? thu?t đi?n toan g?i la subroutine, va trong trinh chinh thi th?c hi?n g?i chung
[2]
[3]
. No đem l?i cho
ng??i l?p trinh
cac l?i ich:
- Thay cac đo?n trinh gi?ng nhau b?ng m?t subroutine, lam cho ma ch??ng trinh ng?n h?n, sang s?a va d? b?o d??ng.
- đ?a cac subroutine đa ki?m tra vao
th? vi?n
(library) ? d?ng v?n b?n trinh ho?c d?ng ma
[4]
, đ? khi l?p trinh m?i thi ch? c?n lien k?t t?i th? vi?n đo.
- Nh?ng ch??ng trinh l?n đ??c thi?t k? d?ng c?u truc t?t co th? trao cho cac nhom va
ng??i l?p trinh
khac nhau l?p trinh, đoi khi co th? thue ng??i lam them vi?t cac subroutine khong qua ph?c t?p.
Do t?m quan tr?ng c?a vi?c t? ch?c trinh ki?u c?u truc ma ngay t? khi cong nghi?p may tinh ra đ?i, con ph?i l?p trinh ? d?ng
ma may
, gi?i ch? t?o may đa ch?m chut nhi?u đ?n l?nh
call
va t? ch?c c?a ch??ng trinh con. N?u gi?i ma ng??c (unassemble) ma trinh thi th?y day đ?c l?nh
call
.
Ben c?nh cac subroutine th?c s? thi m?t s?
ngon ng? l?p trinh
, k? c? l?p trinh
h?p ng?
, h? tr? d?ng ch??ng trinh con (trong v?n b?n trinh) ma khi d?ch thi thay th? b?ng đo?n ma ch??ng trinh, khong t?o ra subroutine d?ng ma th?t s?.
- Macro
: D?ch n?i dung co trong macro co ten ch? đ?nh va đ?t vao v? tri t??ng ?ng.
- Inline
: Chuy?n n?i dung ma đ??c vi?t ? d?ng hex trong procedure co ten ch? đ?nh va đ?t vao v? tri t??ng ?ng.
Nh??c đi?m chinh c?a v?n d?ng ch??ng trinh con lien quan đ?n b? tri cac ma ch? th? "d?n nha" (housekeeping code) ? ch??ng trinh con, lam cho th?i gian thi hanh tac v? keo dai h?n so v?i khi đo?n ma đo đ??c đ?t th?ng trong ch??ng trinh chinh.
Khi chuy?n đi?u khi?n sang ch??ng trinh con, t?i cac đi?m vao (entry) ch??ng trinh con ph?i b? tri sao l?u gia tr? cac con tr? (pointer) c?a
b? x? ly
. Khi k?t thuc (exit) gia tr? cac con tr? đ??c khoi ph?c l?i t? tr? sao l?u r?i m?i thoat. Nh?ng đo?n ma sao l?u va khoi ph?c nay gi?ng nhau ? cac ch??ng trinh con, t?c la n?u subroutine "khong lam gi" thi khi d?ch ra ma v?n co đ? c?p đo?n ma nay.
Vi th? l?p trinh cho cac
vi đi?u khi?n
co t?c đ? th?p va b? nh? h?n ch? thi ph?i can đ?i gi?a vi?c l?p hay khong l?p ch??ng trinh con. Cac
CPU
đi?n toan hi?n nay co t?c đ? r?t cao nen t?n th?t th?i gian nay hi?n ra khong đang k?, nh?ng ng??i l?p trinh ?ng d?ng khong c?n quan tam.
![](//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png) |
Wikimedia Commons co them hinh ?nh va ph??ng ti?n truy?n t?i v?
Ch??ng trinh con
.
|