Khác biệt giữa bản sửa đổi của “Chương trình con”

Bách khoa toàn thư mở Wikipedia
Nội dung được xóa Nội dung được thêm vào
Không có tóm lược sửa đổi
nKhông có tóm lược sửa đổi
Dòng 1: Dòng 1:
Trong [[khoa học máy tính]], một '''chương trình con''' (subprogram) hay '''subroutine''' là một đoạn [[chương trình máy tính|chương trình]] được đóng gói thành một đơn vị trình, nó thực hiện một số tác vụ cụ thể mà [[chương trình máy tính|chương trình]] cần thực hiện nhiều lần từ nhiều nơi trong thời gian chạy của nó. Khi [[chương trình máy tính|chương trình]] cần đến tác vụ cụ thể đó thì bố trí chỉ thị ''gọi'' (call) đến chương trình con này và nhận kết quả nếu có sau khi nó thực thi xong <ref>{{cite web |author= U.S. Election Assistance Commission |title= Definitions of Words with Special Meanings |work= [[Voluntary Voting System Guidelines]] |year= 2007 |url= http://www.eac.gov/vvsg/glossary.aspx |accessdate= 2013-01-14 |authorlink= Election Assistance Commission}}</ref>.
Trong [[khoa học máy tính]], một '''chương trình con''' - bao gồm cả '''hàm''' (''function''), '''phương thức''' (''method'') và '''thủ tục''' (''procedure'') - là một phần [[mã máy tính|mã]] trong một [[phần mềm|chương trình]] lớn hơn, phần mã này thực hiện một [[tác vụ (máy tính)|tác vụ]] cụ thể và tương đối độc lập với phần mã còn lại.


Kỹ thuật lập trình dẫn đến việc tổ chức chương trình kiểu cấu trúc modul hóa, tức là chia chương trình thành nhiều ''modul'' hay ''đơn vị'' mà kỹ thuật điện toán gọi là subroutine, và trong trình chính thì thực hiện gọi chúng <ref>{{Cite conference | last1 = Wheeler | first1 = D. J.| authorlink1 = David Wheeler (computer scientist) | chapter = The use of sub-routines in programmes | doi = 10.1145/609784.609816 | title = Proceedings of the 1952 ACM national meeting (Pittsburgh) on - ACM '52 | pages = 235 | year = 1952 | pmid = | pmc = | url = http://www.laputan.org/pub/papers/wheeler}}</ref><ref>{{cite book |last1= Wilkes |first1= M. V. |last2= Wheeler |first2= D. J. |last3= Gill |first3=S. |title= Preparation of Programs for an Electronic Digital Computer |publisher= Addison-Wesley |year= 1951}}</ref>. Nó đem lại cho [[người lập trình]] các lợi ích:
Một số [[ngôn ngữ lập trình]], chẳng hạn [[Pascal (ngôn ngữ lập trình)|Pascal]] và [[Fortran|FORTRAN]], phân biệt giữa '''hàm''' (một chương trình con có trả về giá trị) và '''thủ tục''' (không trả về giá trị). Các ngôn ngữ khác, ví dụ [[C (ngôn ngữ lập trình)|C]] và [[LISP]], coi hai thuật ngữ này như nhau. Cái tên '''[[phương thức (khoa học máy tính)|phương thức]]''' thường được dùng trong [[lập trình hướng đối tượng]] để gọi các chương trình con là một phần của các [[đối tượng (khoa học máy tính)|đối tượng]].
# Thay các đoạn trình giống nhau bằng một subroutine, làm chương trình ngắn hơn, sáng sủa và dễ bảo dưỡng.
# Đưa các subroutine đã kiểm tra vào [[thư viện (điện toán)|thư viện]] (library) ở dạng văn bản trình hoặc dạng mã <ref>{{cite web|last=Dainith|first=John|title="open subroutine." A Dictionary of Computing. 2004..|url=http://www.encyclopedia.com/doc/1O11-opensubroutine.html|work=Encyclopedia.com|accessdate=January 14, 2013}}</ref>, để khi lập trình mới thì chỉ cần liên kết tới thư viện đó.
# Những chương trình lớn được thiết kế dạng cấu trúc tốt có thể trao cho các nhóm và [[người lập trình]] khác nhau lập trình, thậm chí thuê người làm thêm viết các subroutine không quá phức tạp.


Do tầm quan trọng của việc tổ chức trình kiểu cấu trúc mà ngay từ khi công nghiệp máy tính ra đời, còn phải lập trình ở dạng [[mã máy]], giới chế tạo máy đã chăm chút nhiều đến lệnh ''call'' và tổ chức của chương trình con. Nếu giải mã ngược (unassemble) mã trình thì thấy dày đặc lệnh ''call''.
==Tham khảo==

{{tham khảo}}
Ngày nay trong ngôn ngữ bậc cao ''chương trình con'' được diễn đạt tùy theo ngôn ngữ là các '''hàm''' (''function''), '''thủ tục''' (''procedure'') và '''phương thức''' (''method''),... Một số [[ngôn ngữ lập trình]], chẳng hạn [[Pascal (ngôn ngữ lập trình)|Pascal]] và [[FORTRAN]], phân biệt giữa '''hàm''' (một chương trình con có trả về giá trị) và '''thủ tục''' (không trả về giá trị). Các ngôn ngữ khác, ví dụ [[C (ngôn ngữ lập trình)|C]] và [[LISP]], coi hai thuật ngữ này như nhau. Cái tên '''[[phương thức (khoa học máy tính)|phương thức]]''' thường được dùng trong [[lập trình hướng đối tượng]] để gọi các chương trình con là một phần của các [[đối tượng (khoa học máy tính)|đối tượng]].

Trong chương trình, một chương trình con được phép gọi chương trình con khác, hoặc có thể gọi chính nó. Tuy nhiên nếu bố trí gọi lẫn nhau, ví dụ ''subroutine A'' gọi ''subroutine B'' nhưng trong thân của ''subroutine B'' lại có gọi ''subroutine A'', sẽ dẫn đến lỗi bất định khi thực hiện. Một số ngôn ngữ có hỗ trợ phát hiện lỗi này trong môi trường soạn thảo trình và khi dịch. Dẫu vậy để tránh lỗi thì khi lập trình phải tuân thủ bố trí gọi theo "''mô hình cành và lá''", trong đó "cành" là subroutine có gọi subroutine khác, còn "lá" là subroutine không có lệnh gọi.

== Chỉ dẫn ==
{{tham khảo| group= note}}

== Tham khảo ==
{{tham khảo| colwidth= 25em}}

== Xem thêm ==

{{Commonscat|Subroutines}}
== Liên kết ngoài ==
{{sơ khai}}
{{sơ khai}}



Phiên bản lúc 03:44, ngày 24 tháng 12 năm 2016

Trong khoa học máy tính, một chương trình con (subprogram) hay subroutine là một đoạn chương trình được đóng gói thành một đơn vị trình, nó thực hiện một số tác vụ cụ thể mà chương trình cần thực hiện nhiều lần từ nhiều nơi trong thời gian chạy của nó. Khi chương trình cần đến tác vụ cụ thể đó thì bố trí chỉ thị gọi (call) đến chương trình con này và nhận kết quả nếu có sau khi nó thực thi xong [1].

Kỹ thuật lập trình dẫn đến việc tổ chức chương trình kiểu cấu trúc modul hóa, tức là chia chương trình thành nhiều modul hay đơn vị mà kỹ thuật điện toán gọi là subroutine, và trong trình chính thì thực hiện gọi chúng [2][3]. Nó đem lại cho người lập trình các lợi ích:

  1. Thay các đoạn trình giống nhau bằng một subroutine, làm chương trình ngắn hơn, sáng sủa và dễ bảo dưỡng.
  2. Đưa các subroutine đã kiểm tra vào thư viện (library) ở dạng văn bản trình hoặc dạng mã [4], để khi lập trình mới thì chỉ cần liên kết tới thư viện đó.
  3. Những chương trình lớn được thiết kế dạng cấu trúc tốt có thể trao cho các nhóm và người lập trình khác nhau lập trình, thậm chí thuê người làm thêm viết các subroutine không quá phức tạp.

Do tầm quan trọng của việc tổ chức trình kiểu cấu trúc mà ngay từ khi công nghiệp máy tính ra đời, còn phải lập trình ở dạng mã máy, giới chế tạo máy đã chăm chút nhiều đến lệnh call và tổ chức của chương trình con. Nếu giải mã ngược (unassemble) mã trình thì thấy dày đặc lệnh call.

Ngày nay trong ngôn ngữ bậc cao chương trình con được diễn đạt tùy theo ngôn ngữ là các hàm (function), thủ tục (procedure) và phương thức (method),... Một số ngôn ngữ lập trình, chẳng hạn PascalFORTRAN, phân biệt giữa hàm (một chương trình con có trả về giá trị) và thủ tục (không trả về giá trị). Các ngôn ngữ khác, ví dụ CLISP, coi hai thuật ngữ này như nhau. Cái tên phương thức thường được dùng trong lập trình hướng đối tượng để gọi các chương trình con là một phần của các đối tượng.

Trong chương trình, một chương trình con được phép gọi chương trình con khác, hoặc có thể gọi chính nó. Tuy nhiên nếu bố trí gọi lẫn nhau, ví dụ subroutine A gọi subroutine B nhưng trong thân của subroutine B lại có gọi subroutine A, sẽ dẫn đến lỗi bất định khi thực hiện. Một số ngôn ngữ có hỗ trợ phát hiện lỗi này trong môi trường soạn thảo trình và khi dịch. Dẫu vậy để tránh lỗi thì khi lập trình phải tuân thủ bố trí gọi theo "mô hình cành và lá", trong đó "cành" là subroutine có gọi subroutine khác, còn "lá" là subroutine không có lệnh gọi.

Chỉ dẫn

Tham khảo

  1. ^ U.S. Election Assistance Commission (2007). “Definitions of Words with Special Meanings”. Voluntary Voting System Guidelines. Truy cập ngày 14 tháng 1 năm 2013.
  2. ^ Wheeler, D. J. (1952). “The use of sub-routines in programmes”. Proceedings of the 1952 ACM national meeting (Pittsburgh) on - ACM '52. tr. 235. doi:10.1145/609784.609816.
  3. ^ Wilkes, M. V.; Wheeler, D. J.; Gill, S. (1951). Preparation of Programs for an Electronic Digital Computer. Addison-Wesley.
  4. ^ Dainith, John. "open subroutine." A Dictionary of Computing. 2004.”. Encyclopedia.com. Truy cập ngày 14 tháng 1 năm 2013.

Xem thêm

Liên kết ngoài