Повторне використання коду

Повторне використання коду (англ. code reuse) — методологія проєктування комп'ютерних та інших систем, що полягає в тому, що система (комп'ютерна програма, програмний модуль) частково або повністю повинна складатися з частин, написаних раніше компонентів і/або частин іншої системи, і ці компоненти повинні застосовуватися більше одного разу (якщо не в рамках одного проєкту, то хоча б різних). Повторне використання — основна методологія, яка застосовується для скорочення трудовитрат при розробці складних систем.

Найпоширеніший випадок повторного використання коду — бібліотеки програм. Бібліотеки надають загальну достатньо універсальну функціональність, яка покриває обрану предметну область. Приклади: бібліотека функцій для роботи з комплексними числами, бібліотека функцій для роботи з 3D-графікою, бібліотека для використання протоколу TCP/IP, бібліотека для роботи з базами даних. Розробники нової програми можуть використовувати існуючі бібліотеки для вирішення своїх завдань і не «винаходити велосипеди».

Модульність систем ред.

Програмісти прагнуть так проєктувати свої системи, щоб вони були максимально модульні. Як абстракції, на основі яких можна побудувати модульність системи, можуть виступати функції, співпрограми, клас, протокол. Бібліотека функцій гарний приклад абстракції, зручною для реалізації модульності програм та слідування методології повторного використання. Важливим кроком на шляху досягнення максимальної модульності став принцип ієрархічної побудови простору назв.

Прикладом вдалої реалізації модульності та принципу повторного використання можуть служити інструменти командної оболонки Unix-систем та стандартні класи Java, поміщені в ієрархію простору імен.

Шаблони (см. стандартна бібліотека шаблонів STL в мові Сі++) функцій та класів стали важливим етапом просування методології повторного використання в індустрію об'єктно-орієнтованого програмування.

Ієрархічна модульність системи дозволяє реалізувати ефективні методи управління розробкою, засновані на побудові ієрархій управління відповідної ієрархії модулів самої системи.

Повторне використання в малому ред.

Іноді повторне використання коду являє собою просте копіювання деякої частини коду з існуючої програми в іншу (англ. copy-paste). Це один з найбільш низькорівневих підходів до повторного використання. Але і він має місце, особливо коли мова йде про повторне використанні коду «в малому» («reuse в малому»).

Подібний підхід зазвичай не рекомендується до використання, натомість повторюваний фрагмент програми оформляється у вигляді підпрограми або макроса з набором параметрів. Основним аргументом на користь використання підпрограм замість копіювання коду є те, що у разі наявності помилки вона повинна бути виправлена одноразово в тілі підпрограми, в іншому ж випадку виправлення необхідно піддати в загальному випадку кілька ідентичних фрагментів коду, розташованих в різних місцях програми. Крім того, при копіюванні коду зазвичай виникає необхідність у зміні імен змінних, що також часто призводить до механічних помилок. У разі використання підпрограм подібних перейменувань можна уникнути шляхом використання локальних змінних.

Повторне використання коду та метасистемний перехід в програмуванні ред.

Метод повторного використання коду є важливим компонентом реалізації принципу метасістемного переходу у розвитку індустрії програмного забезпечення. Втілення цього принципу в життя дозволяє розробникам оперувати високорівневими поняттями (відобразити картинку, видалити таблицю з бази даних, знайти всі корені рівняння, сконвертировать файл, тощо.), а не низькорівневими (пофарбувати піксель в червоний колір, обнулити регістр, скласти два числа, прочитати символ з файлу, тощо.).

Переваги та недоліки методу повторного використання ред.

Розглянемо переваги та недоліки на прикладі бібліотек функцій.

Використання готових бібліотек має ряд переваг. По-перше, розробник нової системи знімає з себе турботу про реалізацію функціональності, закладеної в цій бібліотеці. Весь цикл розробки бібліотеки здійснюється розробником цієї бібліотеки. Він, звичайно, бере на себе відповідальність за підтримку бібліотеки: усунення помилок, розвиток та поліпшення роботи, тестування. Метод повторного використання коду є тим механізмом, який дозволяє розробникам «стати на плечі гігантів»[1] та швидко будувати нові складні системи з вже налагоджених компонентів. Друга перевага виходить з самого повторення використання коду, що призводить до суттєвого зменшення розміру підсумкової програми, а при недостатній продуктивності носія і до швидкодії.

Крім нечисленних, але дуже важливих переваг метод повторного використання коду має ряд недоліків. Підключення до проєкту сторонніх бібліотек автоматично призводить до необхідності контролю сумісності версій компонент створюваної системи та версій використовуваних бібліотек. Найхарактернішим прикладом такої помилки вважається Аварія ракети-носія Аріан 5 (4 червня 1996), викликана використанням програмного модуля, розробленого для ракети Аріан-4[ru]. Важливо також відзначити, що багато бібліотек комерційні та вимагають грошових витрат (з розвитком руху вільного ПЗ це поступово втрачає актуальність). Крім того, часто бібліотеки недостатньо універсальні і не реалізують тієї функціональності, яка потрібна створюваній системі, або, навпаки, занадто універсальні і внаслідок неефективні, незручні або містять багато надлишкової (для цього проєкту) функціональності. Можна, якщо дозволяє ліцензія поширюваної бібліотеки, використовувати її вихідні коди і модифікувати їх відповідно до необхідністю. Але після цього відповідальність за підтримку функціональності бібліотеки перекладається на плечі розробника нової системи. Також використання зайвої модульності може призвести до зменшення швидкості виконання програми, коли, швидкість виконання, закладена в модуль не може перекрити витрати на звернення до цього модулю.

Див. також ред.

Примітки ред.

Посилання ред.

  • OnceAndOnlyOnce — «один та лише один раз», принцип повторного використання, доведений до крайності.
  • Orthogonality and the DRY Principle — формулювання принципу повторного в контексті принципу ортогональности в проєктуванні з книги Енді Ханта та Дейва Томаса «The Pragmatic Programmer».