Процедури і функції - методи класу
Процедури і функції - функціональні модулі
Першими формами модульности, що з'явилися в мовах програмування, були процедури і функції. Вони дозволяли ставити певну функціональність і багаторазово виконувати один і той же параметризрвані програмний код при різних значеннях параметрів. Оскільки функції в математиці використовувалися здавна, то поява їх в мовах програмування було цілком природним. Вже з перших кроків процедури і функції дозволяли вирішувати одну з найважливіших завдань, що стоять перед програмістами, - завдання повторного використання програмного коду. Вбудовані в мову функції давали можливість істотно розширити можливості мови програмування. Важливим кроком в автоматизації програмування була поява бібліотек процедур і функцій, доступних з використовуваної мови.
Довгий час процедури і функції грали не тільки функціональну, але і архітектурну роль. Вельми популярним при побудові програмних систем був метод функціональної декомпозиції "зверху вниз", і сьогодні ще грає важливу роль. Але з появою ООП архітектурна роль функціональних модулів відійшла на другий план. Для ГО-мов, до яких відноситься і мова C #, в ролі архітектурного модуля виступає клас. Програмна система будується з модулів, роль яких грають класи, але кожен з цих модулів мають змістовну начинку, задаючи деяку абстракцію даних.
Процедури і функції зв'язуються тепер з класом, вони забезпечують функціональність даних класу і називаються методами класу. Головну роль в програмній системі відіграють дані, а функції лише служать даними. Нагадаю тут, що в C # процедури і функції існують тільки як методи деякого класу, вони не існують поза класом.
В даному контексті поняття клас поширюється і на всі його окремі випадки - структури, інтерфейси, делегати.
Колишню роль бібліотек процедур і функцій тепер грають бібліотеки класів. Бібліотека класів FCL (статична компонента Framework .Net.), Доступна в мові C #, істотно розширює можливості мови. Знання класів цієї бібліотеки і методів цих класів абсолютно необхідно для практичного програмування на C # з використанням всієї його потужності.
Функція відрізняється від процедури двома особливостями:
· Завжди обчислює деяке значення, що повертається в якості результату функції;
· Викликається в виразах.
Процедура C # має свої особливості:
· Повертає формальний результат void. вказує на відсутність результату;
· Виклик процедури є оператором мови;
· Має вхідні і вихідні аргументи, причому вихідних аргументів - її результатів - може бути досить багато.
Добре відомо, що одночасне існування в мові процедур і функцій в якомусь сенсі великій кількості. Додавши ще один вихідний аргумент, будь-яку функцію можна записати у вигляді процедури. Справедливо і зворотне. Якщо допускати функції з побічним ефектом, то будь-яку процедуру можна записати у вигляді функції. У мові С - дідусеві C # - так і зробили, залишивши тільки функції. Однак значно зручніше мати обидві форми реалізації методу: і процедури, і функції. Зазвичай метод вважають за краще реалізувати у вигляді функції тоді, коли він має один вихідний аргумент, що розглядається як результат обчислення значення функції. Можливість виклику функцій у виразах також впливає на вибір на користь реалізації методу у вигляді функції. В інших випадках метод реалізують в вигляді процедури.