Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

70 Глава 2. Ориентированный на объект дизайн

2.1.3 Шаблоны

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

Вычислительные исследователи и практики развили множество organiza-tional понятия и методологии для проектирования качества ориентированное на объект программное обеспечение, которое кратко, правильно, и повторно используемо. Из специального отношения к этой книге довод «против» - cept шаблона, который описывает решение «типичной» проблемы проектирования программного обеспечения. Образец обеспечивает общий шаблон для решения, которое может быть применено во многих различных ситуациях. Это описывает главные элементы решения абстрактным способом, который может быть специализирован для определенной проблемы под рукой. Это состоит из имени, которое определяет образец, контекст, который описывает сценарии, для которых этот образец может быть применен, шаблон, который описывает, как образец применен, и результат, который описывает и анализирует то, что производит образец.

Мы представляем несколько шаблонов в этой книге, и мы показываем, как они могут последовательно применяться к внедрениям структур данных и алгоритмов. Эти шаблоны попадают в две группы - образцы для решения алгоритма проектируют prob-lems и образцы для решения проблем программирования. Некоторые algo-rithm шаблоны, которые мы обсуждаем, включают следующее:

Рекурсия (Раздел 3.5)

Амортизация (Раздел 6.1.3) делить-и-побеждать (Раздел 11.1.1) слива-и-поиск, также известная как уменьшать-и-побеждать (Раздел 11.5.1) грубая сила (Раздел 12.3.1) жадный метод (Раздел 12.4.2) динамическое программирование (Раздел 12.2)

Аналогично, некоторые шаблоны программирования, которые мы обсуждаем, включают:

Положение (Раздел 6.2.1)

Адаптер (Раздел 5.3.4) Iterator (Раздел 6.2.1) метод шаблона (Разделы 7.3.7, 11.4, и 13.3.3) состав (Раздел 8.1.2) компаратор (Раздел 8.1.2) декоратор (Раздел 13.3.1)

Вместо того, чтобы объяснять каждое из этих понятий здесь, однако, мы представляем их

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

2.2. Наследование и полиморфизм 71

2.2 Наследование и Полиморфизм

Чтобы использовать в своих интересах иерархические отношения, которые распространены в проектах программного обеспечения, ориентированный на объект подход дизайна обеспечивает способы снова использовать кодекс.

2.2.1 Наследование в C ++

Ориентированная на объект парадигма обеспечивает модульную и иерархическую организацию struc-ture для многократного использования кодекса через технику, названную наследованием. Эта техника позволяет дизайн универсальных классов, которые могут быть специализированы к большему количеству особых классов со специализированными классами, снова использующими кодекс от универсального класса. Например, глоток - поза, что мы проектируем ряд классов, чтобы представлять людей в университете. У нас мог бы быть универсальный Человек класса, который определяет элементы, характерные для всех людей. Мы могли тогда определить специализированные классы, такие как Студент, Администратор, и В - structor, каждый из которых предоставляет определенную информацию об особом типе человека.

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

Давайте полагать, что пример иллюстрирует эти понятия. Предположим, что мы пишем программу, чтобы иметь дело с людьми в университете. Ниже мы показываем частичное внедрение универсального класса для человека. Мы используем «//...», чтобы указать на кодекс, который не важен примеру и опущенный - также.

Человек класса //Человек (базовый класс)

частный:

последовательность имя; //называют последовательность я dN гм; //университетский идентификационный номер

общественность:

//... недействительная печать (); //печатают информацию

натяните getName (); //восстанавливают имя

;

Предположим, что мы затем хотим определить студенческий объект. Мы можем получить наш класс Сту -

72

вмятина от Человека класса как показано ниже.

Студент класса: общественный Человек

частный:

последовательность главный; интервал gradYear;

общественность:

//... недействительная печать ();