Технология разработки программного обеспечения с использованием RAD Delphi7


СОДЕРЖАНИЕ

ВВЕДЕНИЕ ………………………………………………………………. … 3

1. ПОСТАНОВКА ЗАДАЧИ ……………………………………………….  5

2. СРАВНИТЕЛЬНЫЙ  АНАЛИЗ  ЯЗЫКОВ  ПРОГРАММИРОВАНИЯ...7

2.1 Анализ языка программирования  Delphi ……………………………….7

2.2 Анализ языка программирования Visual Basic…………………...……10

2.3 Анализ языка программирования Python ……………………………...11

2.4 Анализ языка программирования Java…... ……………………………13

2.5 Анализ языка программирования C++…... ……………………………16

3. ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА РАЗРАБОТКУ АУДИО И ВИДЕО 

 КОНВЕРТЕРА .....…………………………………………………………. 20

4. ПРОЕКТИРОВАНИЕ ПРОГРАММЫ  ………………………………….23

4.1 Модель пользовательского  интерфейса ……………………………….23

4.2 Модель работы программы  …………………………………………….24

5. ВНЕДРЕНИЕ ПРОГРАММНОГО  ПРОДУКТА ……………………….26

5.1 Руководство по работе  с программным продуктом ………………….26

6. ОЦЕНКА КАЧЕСТВА ПРОГРАММНОГО  ПРОДУКТА …………….34

6.1 Стандартизация характеристик  качеств ………………………………34

6.2 Выбор показателей качества  …………………………………………...35

6.3 Оценка качества …………………………………………………………35

ЗАКЛЮЧЕНИЕ ……………………………………………………………..37

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ………………………...39

ПРИЛОЖЕНИЯ……………………………………………………………...41     

 

 

 

 

 

ВВЕДЕНИЕ

Одним из возможных подходов к разработке ПО в рамках спиральной модели ЖЦ является получившая в последнее время широкое распространение методология быстрой разработки приложений RAD (Rapid Application Development). Под этим термином обычно понимается процесс разработки ПО, содержащий 3 элемента:

  • небольшую команду программистов (от 2 до 10 человек);
  • короткий, но тщательно проработанный производственный график (от 2 до 6 мес.);
  • повторяющийся цикл, при котором разработчики, по мере того, как приложение начинает обретать форму, запрашивают и реализуют в продукте требования, полученные через взаимодействие с заказчиком.

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

Жизненный цикл ПО по методологии RAD состоит из четырех фаз:

  • фаза анализа и планирования требований;
  • фаза проектирования;
  • фаза построения;
  • фаза внедрения.

На фазе анализа и планирования требований пользователи системы определяют функции, которые она должна выполнять, выделяют наиболее приоритетные из них, требующие проработки в первую очередь, описывают информационные потребности.

На фазе проектирования часть пользователей  принимает участие в техническом  проектировании системы под руководством специалистов-разработчиков.

На фазе построения выполняется  непосредственно сама быстрая разработка приложения.

На фазе внедрения производится обучение пользователей, организационные  изменения и параллельно с  внедрением новой системы осуществляется работа с существующей системой (до полного внедрения новой).

Данный курсовой проект должен охватить и описать  все этапы создания приложения по методологии RAD и будет иметь следующую структуру:

В первом разделе будут проанализированы основные языки и системы RAD программирования;

Во втором разделе пояснительной записки будет проведен анализ области для которой планируется создание программы;

В третьем  разделе будут заданы технические  условия для будущей программы.

В четвертом  разделе будет описана инструкция по работе с прогарммой;

В пятом разделе  будет дана оценка созданой программе с точки зрения разработчика и заказчика.

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Постановка задачи.

В данной курсовой работе требуется  создать в одной из среде быстрой разработки приложений RAD. В качестве RAD приложения была выбрана среда разработки Delphi 7, в которой используется язык программирования Object Pascal которая обеспечивающий формирование, обработку на ЭВМ и вывод информации.

Приложение создаваемое для данной работы должно выполнять функции конвертера видео файлов, а также извлечение звуковой дорожки из видео. Создаваемая программа конвертер должна использоваться в образовательном учреждении  МОБУ Лицей №7 г. Минусинска для изучения раздела «Технология мультимедиа», базового курса информатики за 8 класс. В связи с тем , что программа должна использоваться в образовательном учреждении предъявляются определенные требования к интерфейсу программы, он должен быть максимально простым и понятным, должны быть исключены все лишние функции.

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

Для работы программы требуется  свободная библиотека ffmpeg, которая портирована на все современные платформы начиная со всей линейки Windows и заканчивая всеми Unix подобными операционными системами. Первоначальная версия программы будет работать под операционной системой Windows, в дальнейшем планируется портировать программу на ос Linux.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. СРАВНИТЕЛЬНЫЙ АНАЛИЗ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

Рождение новых подходов к программированию обуславливается прежде всего стремлением к повышению производительности труда программиста. Разработчики нововведений стремятся облегчить разработку крупномасштабных программных проектов, в которых задействовано большое число программистов, прежде всего за счет более удобных средств расчленения задачи на отдельные составляющие, а также за счет более продуктивных методов защиты от ошибок в программах - их верификации, ужесточения синтаксических требований и т. д. Наиболее важными нововведениями последних лет стали объектное и событийное программирование, а также развивающийся в последнее время визуальный подход к программированию.

В данной главе предпринимается попытка  провести сравнительный анализ конкретных реализаций этих новых подходов к  программированию.

 

2.1 Анализ языка программирования  Delphi

Последняя на сегодняшний день версия - 2009. Delphi является мощным и универсальным средством разработки приложений, RAD-оболочкой. Ее вместе с библиотекой VCL, на которой оболочка основана и написана, можно назвать действительно революционной. Сравнение с C++ Builder 4 показывает, что производительность Pascal-кода, сгенерированного Delphi, всего на 4-5% меньше, чем кода C++.

Возможности языка практически  не ограничены. Конечно, Object Pascal накладывает определенные ограничения, но для тех вещей, для которых ее писали, Delphi подходит практически оптимально. Из понравившихся (но, разумеется, нестандартных) "улучшений", внесенных Borland в Object Pascal, хотелось бы выделить свойства (properties) и перегружаемость процедур и функций (overloading). Определенные неудобства при работе с низкоуровневыми функциями API может вызвать то, что стандартным языком для API все же является С, и именно на нем пишутся все новые Software Development Kit (SDK) и заголовочные файлы к ним. Это ни в коем случае не означает, что вы не сможете работать с новыми SDK, просто вам придется написать несложный (но, возможно, объемный) код на Pascal, в котором определить интерфейсы данного SDK. Не поленитесь, однако, поискать на серверах, посвященных Delphi. Очень может быть, что эту работу кто-то уже сделал.

 

2.1.1 Достоинства языка программирования

Простота, скорость и эффективность  Delphi объясняют ее популярность. Delphi имеет один из самых быстрых компиляторов, порождающий, тем не менее, весьма и весьма неплохой объектный код. Есть и другие достоинства: простота изучения Object Pascal; облегчающие жизнь нововведения - вроде свойств (properties); программы, написанные на Delphi, не требуется снабжать дополнительными библиотеками (в отличие от связки C++/MFC). В самом деле, VCL предоставляет удобный, легко расширяемый объектно-ориентированный интерфейс к Windows, что ни в коей мере не мешает программисту опускаться в самые глубины Windows API. Создателям оригинальных компонентов это приходится делать довольно часто, в отличие от "просто программистов". Как было сказано выше, модель программирования в Delphi - компонентная, что позволяет пользоваться компонентами, написанными другими разработчиками, даже не имея их исходного кода и уж подавно не изучая его. В Интернете есть огромное количество компонентов, значительная часть которых распространяется бесплатно. Применение компонентной модели приводит к тому, что довольно многое в поведении объектов программировать не нужно вообще, и многое, на что в других средах ушли бы недели, можно сделать за часы или даже минуты. Оно и понятно - это ведь RAD-среда.

К достоинствам можно отнести очень  быстрый браузер классов и  мгновенный вывод подсказки автозавершения кода (code completion). Если кратко - может все. Конечно, Object Pascal накладывает определенные ограничения, но для тех вещей, для которых ее писали, Delphi подходит практически оптимально. Из понравившихся (но, разумеется, нестандартных) "улучшений", внесенных Borland в Object Pascal, хотелось бы выделить свойства (properties) и перегружаемость процедур и функций (overloading).  Определенные неудобства при работе с низкоуровневыми функциями API может вызвать то, что стандартным языком для API все же является С, и именно на нем пишутся все новые Software Development Kit (SDK) и заголовочные файлы к ним. Это ни в коем случае не означает, что вы не сможете работать с новыми SDK, просто вам придется написать несложный (но, возможно, объемный) код на Pascal, в котором определить интерфейсы данного SDK. Не поленитесь, однако, поискать на серверах, посвященных Delphi. Очень может быть, что эту работу кто-то уже сделал.

 

2.1.2 Недостатки языка программирования

Их мало, но они есть. Главный, на мой взгляд, недостаток (и одновременно достоинство) - статическое присоединение (linking) библиотеки VCL и компонентов к исполняемому файлу. Справедливости ради надо сказать, что VCL можно линковать и динамически, но тогда с каждым своим приложением вам придется распространять еще и VCL, а это более 3 Мбайт. Однако если не увлекаться интерфейсными "наворотами" и использовать в программе минимально необходимое число компонентов, то исполняемый файл будет невелик.

Другой недостаток (и опять же достоинство) состоит в том, что  в используемой в Delphi парадигме форм (Forms) вся информация о форме, включая свойства, настройки компонентов, значения по умолчанию, хранится в exe-файле, причем не оптимальным образом. Анализ исходного кода VCL показывает, что при создании формы фактически происходит чуть ли не синтаксический разбор данных инициализации, что не может ее не замедлять. Третий недостаток, который кто-нибудь тоже может назвать достоинством, - это Object Pascal. Несмотря на простоту, эффективность и легкость в изучении, ему не хватает очень многих мощных средств C++.

 

2.2 Анализ языка программирования  Visual Basic

В 1991 г. фирмой Microsoft был разработан и выпущен Visual Basic. Microsoft Visual Basic — средство разработки программного обеспечения, разрабатываемое корпорацией Microsoft и включающее язык программирования и среду разработки. Язык Visual Basic унаследовал дух, стиль и отчасти синтаксис своего предка — языка Бэйсик, у которого есть немало диалектов. В то же время Visual Basic сочетает в себе процедуры и элементы объектно-ориентированных и компонентно-ориентированных языков программирования. Среда разработки VB включает инструменты для визуального конструирования пользовательского интерфейса.

Visual Basic считается хорошим средством быстрой разработки прототипов программы, для разработки приложений баз данных и вообще для компонентного способа создания программ, работающих под управлением операционных систем семейства Microsoft Windows.

Первое признание серьёзными разработчиками Visual Basic получил после выхода версии 3 — VB3. Окончательное признание как полноценного средства программирования для Windows — при выходе версии 5 — VB5. Версию VB6, входящую в состав Microsoft Visual Studio 6. 0, стала по-настоящему зрелым и функционально богатым продуктом.

 

2.2.1 Достоинства языка программирования

Высокая скорость создания приложений с графическим интерфейсом для MS Windows. Простой синтаксис, позволяющий очень быстро освоить язык. Возможность как компиляции в машинный код, так и интерпретации во время отладки.

 

2.2.2 Недостатки языка программирования

Поддержка операционных систем только семейства Windows (Исключение — VB1 for DOS). Отсутствие механизма наследования объектов.  Существующие в языке наследование, позволяет наследовать только интерфейсы объектов, а не их самих. Таким образом, в унаследованом классе должны быть явно переписаны все функции базового класса. Также в унаследованном классе невозможно добавление каких-либо методов, присущих только даннному классу, то есть если абстрактный базовый класс содержит только два метода, то и производный класс содержит только два метода, не более и не менее того. Требует установленных DLL для работы программы.

Часто критике подвергаются такие аспекты  Visual Basic, как возможность отключить средства слежения за объявленными переменными, возможность неявного преобразования переменных, наличие типа данных «Variant». По мнению критиков, это даёт возможность писать крайне плохой код. С другой стороны, это можно рассматривать как плюс, так как VB не навязывает «хороший стиль», а даёт больше свободы программисту.

Отсутствие указателей, низкоуровневого  доступа к памяти, ASM-вставок. Несморя на то, что парадигма Visual Basic позволяет среднему VB-программисту обходиться без всего этого, перечисленные вещи также нередко становятся объектами критики. И хотя, используя недокументированные возможности и определённые ухищрения, всё это можно реализовать и на VB; пользоваться этими трюками гораздо сложнее, чем, например, на Delphi.

 

2.3 Анализ языка программирования  Python

В связи с наблюдаемым в настоящее  время стремительным развитием  персональной вычислительной техники, происходит постепенное изменение  требований, предъявляемых к языкам программирования. Все большую роль начинают играть интерпретируемые языки, поскольку возрастающая мощь персональных компьютеров начинает обеспечивать достаточную скорость выполнения интерпретируемых программ. А единственным существенным преимуществом компилируемых языков программирования является создаваемый  ими высокоскоростной код. Когда  скорость выполнения программы не является критичной величиной, наиболее правильным выбором будет интерпретируемый язык, как более простой и гибкий инструмент программирования.

В связи с этим, определенный интерес  представляет рассмотрение сравнительно нового языка программирования Python (пайтон), который был создан его автором Гвидо ван Россумом (Guido van Rossum) в начале 90-х годов.

Python является интерпретируемым, изначально объектно-ориентированным языком программирования. Он чрезвычайно прост и содержит небольшое число ключевых слов, вместе с тем очень гибок и выразителен. Это язык более высокого уровня нежели Pascal, C++ и, естественно C, что достигается, в основном, за счет встроенных высокоуровневых структур данных (списки, словари, тьюплы).

 

2.3.1 Достоинства языка  программирования Python

Несомненным достоинством является то, что интерпретатор Python реализован практически на всех платформах и операционных системах. Первым таким языком был C, однако его типы данных на разных машинах могли занимать разное количество памяти и это служило некоторым препятствием при написании действительно переносимой программы. Python же таким недостатком не обладает.

Следующая немаловажная черта - расширяемость  языка, этому придается большое  значение и, как пишет сам автор, язык был задуман именно как расширяемый. Это означает, что имеется возможность  совершенствования языка всеми  всеми заинтересованными программистами. Интерпретатор написан на С и исходный код доступен для любых манипуляций. В случае необходимости, можно вставить его в свою программу и использовать как встроенную оболочку. Или же, написав на C свои дополнения к Python и скомпилировав программу, получить "расширенный" интерпретатор с новыми возможностями.

Следующее достоинство - наличие большого числа подключаемых к программе  модулей, обеспечивающих различные  дополнительные возможности. Такие  модули пишутся на С и на самом Python и могут быть разработаны всеми достаточно квалифицированными программистами. В качестве примера можно привести следующие модули:

  • Numerical Python - расширенные математические возможности, такие как манипуляции с целыми векторами и матрицами;
  • Tkinter - построение приложений с использованием графического пользовательского интерфейса (GUI) на основе широко распространенного на X-Windows Tk-интерфейса;
  • OpenGL - использование обширной библиотеки графического моделирования двух- и трехмерных объектов Open Graphics Library фирмы Silicon Graphics Inc. Данный стандарт поддерживается, в том числе, в таких распространенных операционных системах как Microsoft Windows 95 OSR 2, 98 и Windows NT 4.0.

 

2.3.2 Недостатки языка  программирования Python

Единственным недостатком, является сравнительно невысокая скорость выполнения Python-программы, что обусловлено ее интерпретируемостью. Однако, это с лихвой окупается достоинствами языка при написании программ не очень критичных к скорости выполнения.

 

2.4 Анализ языка программирования  Java

Язык программирования Java был создан в рамках проекта корпорации Sun Microsystems по созданию компьютерных программно-аппаратных комплексов нового поколения. Первая версия языка была официально опубликована в 1995 году. С тех пор язык Java стал стандартом де-факто, вытеснив за десять лет языки C и C++ из многих областей программирования. В 1995 году они были абсолютными лидерами, но к 2006 году число программистов, использующих Java, стало заметно превышать число программистов, использующих C и C++, и составляет более четырех с половиной миллионов человек. А число устройств, в которых используется Java, превышает полтора миллиарда.

В 1995 году появились сразу два  языка программирования, имеющие  в настоящее время огромное значение –Java, разработанный в корпорации Sun, и JavaScript, разработанный в небольшой фирме Netscape Communication, получившей к тому времени известность благодаря разработке браузера Netscape Navigator.

Java создавался как универсальный язык, предназначенный для прикладного программирования в неоднородных компьютерных сетях как со стороны клиентского компьютера, так и со стороны сервера. В том числе – для использования на тонких аппаратных клиентах (устройствах малой вычислительной мощности с крайне ограниченными ресурсами). При этом скомпилированные программы Java работают только под управлением виртуальной Java-машины, поэтому они называются приложениями Java.  Синтаксис операторов Java практически полностью совпадает с синтаксисом языка C, но, в отличие от C++, Java не является расширением C – это совершенно независимый язык, со своими собственными синтаксическими правилами. Он является гораздо более сильно типизированным по сравнению с C и C++, то есть вносит гораздо больше ограничений на действия с переменными и величинами разных типов. Например, в C/C++ нет разницы между целочисленными числовыми, булевскими и символьными величинами, а также адресами в памяти. То есть, например, можно умножить символ на булевское значение, из которого вычтено целое число, и разделить результат на адрес! В Java введен вполне разумный запрет на почти все действия такого рода.

 

2.4.1 Достоинства языка программирования  Java

Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор. Трансляция в байтовый код увеличивает скорость выполнения и уменьшает размер Java программ.

Достоинство подобного способа  выполнения программ — в полной независимости байт-кода от операционной системы и оборудования, что позволяет  выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.

 

2.4.2 Недостатки языка программирования  Java

Часто к недостаткам концепции  виртуальной машины относят то, что  исполнение байт-кода виртуальной машиной  может снижать производительность программ и алгоритмов, реализованных  на языке Java. Данное утверждение было справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований:

  • применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде;
  • широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках;
  • аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

По данным сайта shootout.alioth.debian.org, для  семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10-30 раз больше, чем программой на C/C++.

 

2.5 Анализ языка программирования С ++

C++ — компилируемый статически  типизированный язык программирования  общего назначения. Поддерживая  разные парадигмы программирования, сочетает свойства как высокоуровневых,  так и низкоуровневых языков. В сравнении с его предшественником  — языком C, наибольшее внимание  уделено поддержке объектно-ориентированного  и обобщённого программирования. Название «C++» происходит от  языка C, в котором унарный оператор ++ обозначает инкремент переменной.

Язык возник в начале 1980-х годов, когда сотрудник фирмы Bell Laboratories Бьёрн Страуструп придумал ряд усовершенствований к языку C под собственные нужды. До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. В 1998 году был ратифицирован международный стандарт языка C++.

Являясь одним из самых популярных языков программирования, C++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных  прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а  также развлекательных приложений (например, видеоигры). А Microsoft Visual C++ — интегрированная среда разработки приложений на языке C++, разработанная фирмой Microsoft и поставляемая либо как часть комплекта Microsoft Visual Studio, либо отдельно в виде бесплатного функционально ограниченного комплекта Visual C++ Express Edition делает его одним из самых популярных языков для создания RAD приложений.

 

2.5.1 Достоинства языка программирования С ++

C++ — чрезвычайно мощный язык, содержащий средства создания  эффективных программ практически  любого назначения, от низкоуровневых  утилит и драйверов до сложных  программных комплексов самого  различного назначения. В частности поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщённое программирование, метапрограммирование (шаблоны, макросы).

Предсказуемое выполнение программ является важным достоинством для построения систем реального времени. Весь код, неявно генерируемый компилятором для  реализации языковых возможностей (например, при преобразовании переменной к  другому типу), определён в стандарте. Также строго определены места программы, в которых этот код выполняется. Это даёт возможность замерять или  рассчитывать время реакции программы  на внешнее событие.

Автоматический вызов деструкторов объектов при их уничтожении, причём в порядке, обратном вызову конструкторов. Это упрощает (достаточно объявить переменную) и делает более надёжным освобождение ресурсов (память, файлы, семафоры и т. п.), а также позволяет  гарантированно выполнять переходы состояний программы, не обязательно  связанные с освобождением ресурсов (например, запись в журнал).

Пользовательские  функции-операторы позволяют кратко и ёмко записывать выражения над  пользовательскими типами в естественной алгебраической форме.

Язык поддерживает понятия физической (const) и логической (mutable) константности. Это делает программу надёжнее, так как позволяет компилятору, например, диагностировать ошибочные попытки изменения значения переменной. Объявление константности даёт программисту, читающему текст программы дополнительное представление о правильном использовании классов и функций, а также может являться подсказкой для оптимизации. Перегрузка функций-членов по признаку константности позволяет определять изнутри объекта цели вызова метода (константный для чтения, неконстантный для изменения). Объявление mutable позволяет сохранять логическую константность при использовании кэшей и ленивых вычислений.

Используя шаблоны, возможно создавать обобщённые контейнеры и алгоритмы для разных типов данных, а также специализировать и вычислять на этапе компиляции.

Возможность имитации расширения языка  для поддержки парадигм, которые  не поддерживаются компиляторами напрямую. Например, библиотека Boost.Bind позволяет связывать аргументы функций.

Возможность создания встроенных предметно-ориентированных  языков программирования. Такой подход использует, например библиотека Boost.Spirit, позволяющая задавать EBNF-грамматику парсеров прямо в коде C++.

Используя шаблоны и множественное  наследование можно имитировать  классы-примеси и комбинаторную  параметризацию библиотек. Такой подход применён в библиотеке Loki, класс SmartPtr которой позволяет, управляя всего несколькими параметрами времени компиляции, сгенерировать около 300 видов «умных указателей» для управления ресурсами.