Повторное использование кода (англ. code reuse) — методология проектирования компьютерных и других систем, заключающаяся в том, что система (компьютерная программа, программный модуль) частично либо полностью должна составляться из частей, написанных ранее компонентов и/или частей другой системы, и эти компоненты должны применяться более одного раза (если не в рамках одного проекта, то хотя бы разных). Повторное использование — основная методология, которая применяется для сокращения трудозатрат при разработке сложных систем.
Самый распространённый случай повторного использования кода — библиотеки программ. Библиотеки предоставляют общую достаточно универсальную функциональность, покрывающую избранную предметную область. Примеры: библиотека функций для работы с комплексными числами, библиотека функций для работы с 3D-графикой, библиотека для использования протокола TCP/IP, библиотека для работы с базами данных. Разработчики новой программы могут использовать существующие библиотеки для решения своих задач и не «изобретать велосипеды».
Модульность систем Программисты стремятся так проектировать свои системы, чтобы они были максимально модульны. В качестве абстракций, на основе которых можно построить модульность системы могут выступать функции, сопрограмма, класс, протокол. Библиотека функций хороший пример абстракции, удобной для реализации модульности программ и следования методологии повторного использования. Важным шагом на пути достижения максимальной модульности стал принцип иерархичного построения пространства имён.
Примером удачной реализации модульности и принципа повторного использования могут служить инструменты командной оболочки Unix-систем и стандартные классы Java, помещенные в иерархию пространства имён.
Шаблоны (см. стандартная библиотека шаблонов STL в языке Си++) функций и классов стали важным этапом продвижения методологии повторного использования в индустрию объектно-ориентированного программирования.
Иерархическая модульность системы позволяет реализовать эффективные методы управления разработкой, основанные на построении иерархий управления соответствующей иерархии модулей самой системы.
Повторное использование в малом Иногда повторное использование кода представляет собой простое копирование некоторой части кода из существующей программы в другую (англ. copy-paste). Это один из самых низкоуровневых подходов к повторному использованию. Но и он имеет место, особенно когда речь идет о повторном использовании кода «в малом» («reuse в малом»).
Подобный подход обычно не рекомендуется к использованию, вместо этого повторяющийся фрагмент программы оформляется в виде подпрограммы или макроса с набором параметров. Основным аргументом в пользу использования подпрограмм вместо копирования кода является то, что в случае наличия ошибки она должна быть исправлена однократно в теле подпрограммы, в противном же случае исправлению необходимо подвергнуть в общем случае несколько идентичных фрагментов кода, расположенных в разных местах программы. Кроме того, при копировании кода обычно возникает необходимость в изменении имен переменных, что также часто приводит к механическим ошибкам. В случае использования подпрограмм подобных переименований можно избежать путем использования локальных переменных.
Повторное использование кода и метасистемный переход в программировании Метод повторного использования кода является важным компонентом реализации принципа метасистемного перехода в развитии индустрии программного обеспечения. Воплощение этого принципа в жизнь позволяет разработчикам оперировать высокоуровневыми понятиями (отобразить картинку, удалить таблицу из базы данных, найти все корни уравнения, сконвертировать файл и т. д.), а не низкоуровневыми (покрасить пиксел в красный цвет, обнулить регистр, сложить два числа, прочитать символ из файла и т. д.).
Достоинства и недостатки метода повторного использования Рассмотрим достоинства и недостатки на примере библиотек функций.
Использование готовых библиотек имеет ряд преимуществ. Во-первых, разработчик новой системы снимает с себя заботу о реализации функциональности, заложенной в этой библиотеке. Весь цикл разработки библиотеки осуществляется разработчиком данной библиотеки. Он, обычно, берёт на себя ответственность за поддержку библиотеки: устранение ошибок, развитие и улучшение работы, тестирование. Метод повторного использования кода является тем механизмом, который позволяет разработчикам «встать на плечи гигантов» и быстро строить новые сложные системы из уже отлаженных компонентов. Второе преимущество исходит из самого повторения использования кода, что приводит к существенному уменьшению размера итоговой программы, а при недостаточной производительности носителя и к быстродействию.
Кроме немногочисленных, но очень важных достоинств метод повторного использования кода имеет ряд недостатков. Подключение к проекту сторонних библиотек автоматически приводит к необходимости контроля совместимости версий компонент создаваемой системы и версий используемых библиотек. Самым характерным примером такой ошибки считается авария ракеты-носителя «Ариан-5», вызванная использованием программного модуля, разработанного для ракеты «Ариан-4»
Важно также отметить, что многие библиотеки коммерческие и требуют денежных затрат (с развитием движения свободного ПО это постепенно теряет актуальность). Кроме того, часто библиотеки недостаточно универсальны и не реализуют той функциональности, которая требуется создаваемой системе, либо, наоборот, слишком универсальны и в результате неэффективны, неудобны или содержат много избыточной (для данного проекта) функциональности. Можно, если позволяет лицензия распространяемой библиотеки, использовать её исходные коды и модифицировать их в соответствии с необходимостью. Но после этого ответственность за поддержку функциональности библиотеки перекладывается на плечи разработчика новой системы. Также использование излишней модульности может привести к уменьшению скорости выполнения программы, когда скорость выполнения, заложенная в модуль, не может перекрыть издержки на обращение к этому модулю.
Самый распространённый случай повторного использования кода — библиотеки программ. Библиотеки предоставляют общую достаточно универсальную функциональность, покрывающую избранную предметную область. Примеры: библиотека функций для работы с комплексными числами, библиотека функций для работы с 3D-графикой, библиотека для использования протокола TCP/IP, библиотека для работы с базами данных. Разработчики новой программы могут использовать существующие библиотеки для решения своих задач и не «изобретать велосипеды».
Программисты стремятся так проектировать свои системы, чтобы они были максимально модульны. В качестве абстракций, на основе которых можно построить модульность системы могут выступать функции, сопрограмма, класс, протокол. Библиотека функций хороший пример абстракции, удобной для реализации модульности программ и следования методологии повторного использования. Важным шагом на пути достижения максимальной модульности стал принцип иерархичного построения пространства имён.
Примером удачной реализации модульности и принципа повторного использования могут служить инструменты командной оболочки Unix-систем и стандартные классы Java, помещенные в иерархию пространства имён.
Шаблоны (см. стандартная библиотека шаблонов STL в языке Си++) функций и классов стали важным этапом продвижения методологии повторного использования в индустрию объектно-ориентированного программирования.
Иерархическая модульность системы позволяет реализовать эффективные методы управления разработкой, основанные на построении иерархий управления соответствующей иерархии модулей самой системы.
Иногда повторное использование кода представляет собой простое копирование некоторой части кода из существующей программы в другую (англ. copy-paste). Это один из самых низкоуровневых подходов к повторному использованию. Но и он имеет место, особенно когда речь идет о повторном использовании кода «в малом» («reuse в малом»).
Подобный подход обычно не рекомендуется к использованию, вместо этого повторяющийся фрагмент программы оформляется в виде подпрограммы или макроса с набором параметров. Основным аргументом в пользу использования подпрограмм вместо копирования кода является то, что в случае наличия ошибки она должна быть исправлена однократно в теле подпрограммы, в противном же случае исправлению необходимо подвергнуть в общем случае несколько идентичных фрагментов кода, расположенных в разных местах программы. Кроме того, при копировании кода обычно возникает необходимость в изменении имен переменных, что также часто приводит к механическим ошибкам. В случае использования подпрограмм подобных переименований можно избежать путем использования локальных переменных.
Метод повторного использования кода является важным компонентом реализации принципа метасистемного перехода в развитии индустрии программного обеспечения. Воплощение этого принципа в жизнь позволяет разработчикам оперировать высокоуровневыми понятиями (отобразить картинку, удалить таблицу из базы данных, найти все корни уравнения, сконвертировать файл и т. д.), а не низкоуровневыми (покрасить пиксел в красный цвет, обнулить регистр, сложить два числа, прочитать символ из файла и т. д.).
Рассмотрим достоинства и недостатки на примере библиотек функций.
Использование готовых библиотек имеет ряд преимуществ. Во-первых, разработчик новой системы снимает с себя заботу о реализации функциональности, заложенной в этой библиотеке. Весь цикл разработки библиотеки осуществляется разработчиком данной библиотеки. Он, обычно, берёт на себя ответственность за поддержку библиотеки: устранение ошибок, развитие и улучшение работы, тестирование. Метод повторного использования кода является тем механизмом, который позволяет разработчикам «встать на плечи гигантов» и быстро строить новые сложные системы из уже отлаженных компонентов. Второе преимущество исходит из самого повторения использования кода, что приводит к существенному уменьшению размера итоговой программы, а при недостаточной производительности носителя и к быстродействию.
Кроме немногочисленных, но очень важных достоинств метод повторного использования кода имеет ряд недостатков. Подключение к проекту сторонних библиотек автоматически приводит к необходимости контроля совместимости версий компонент создаваемой системы и версий используемых библиотек. Самым характерным примером такой ошибки считается авария ракеты-носителя «Ариан-5», вызванная использованием программного модуля, разработанного для ракеты «Ариан-4»
Важно также отметить, что многие библиотеки коммерческие и требуют денежных затрат (с развитием движения свободного ПО это постепенно теряет актуальность). Кроме того, часто библиотеки недостаточно универсальны и не реализуют той функциональности, которая требуется создаваемой системе, либо, наоборот, слишком универсальны и в результате неэффективны, неудобны или содержат много избыточной (для данного проекта) функциональности. Можно, если позволяет лицензия распространяемой библиотеки, использовать её исходные коды и модифицировать их в соответствии с необходимостью. Но после этого ответственность за поддержку функциональности библиотеки перекладывается на плечи разработчика новой системы. Также использование излишней модульности может привести к уменьшению скорости выполнения программы, когда скорость выполнения, заложенная в модуль, не может перекрыть издержки на обращение к этому модулю.