Полиморфизм в Си-шарп. Что это такое?

C++, Виртуальная функция, Наблюдатель, ООП, Паттерны, Полиморфизм, Примеры, Стратегия

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

Здесь мы рассмотрим пример использования полиморфизма в C++, основанный на объектно-ориентированном программировании и применении виртуальных функций. Виртуальными называют такие функции-члены, которые могут быть переопределены в классах-наследниках.

Допустим, мы разрабатываем мультимедийную библиотеку для работы с веб-камерами.

Для этого мы создаем класс :

Воспользоваться этим классом можно следующим образом:

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

Обратите внимание, что для трансляции видео-потока используется паттерн Наблюдатель.

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

Сразу возникает желание создать абстрактный класс на подобии . Но не стоит спешить. Устройств ввода потоков кадров очень много. И не все они являются камерами. Например, может потребоваться добавить поддержку электронного микроскопа. Или возникнет необходимость получать кадры с сетевой веб-камеры из интернета. Чтобы воспользоваться преимуществами повторного использования, лучше заранее предусмотреть и эти случаи, выбрав в качестве имени для базового класса :

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

Сделаем наследником :

В пользовательском коде предпочтительно везде использовать указатели на , а не на конкретные подклассы:

В тоже должен использоваться указатель на :

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

Представленный пример использует вариацию паттерна Стратегия. Более конкретный пример этого паттерна мы рассматривали, когда говорили о потоках в Qt.

Понравилась статья?
Не забудь поделиться ей с друзьями!

Похожие публикации

Виды полиморфизма

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

Полиморфизм бывает:

— генный;
— хромосомный;
— переходный;
— сбалансированный.

Генетический полиморфизм наблюдается, когда ген представлен более чем одним аллелем. Пример – системы групп крови.

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

Хромосомный полиморфизм – между особями имеются различия по отдельным хромосомам.

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

Переходный полиморфизм – замещение в популяции одного старого аллеля новым, который более полезен в данных условиях. У человека есть ген гаптоглобина — Нр1f, Hp 2fs. Старый аллель — Нр1f, новый — Нр2fs. Нр образует комплекс с гемоглобином и обусловливает слипание эритроцитов в острую фазу заболеваний.

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

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

Корень «морфизм» предполагает рассмотрение строения.

Сейчас под термином «полиморфизм» понимают любой признак, который детерминирован генетически и не являющийся следствием фенокопии. Очень часто имеются 2 альтернативных признака, тогда говорят о диморфизме. Например, половой диморфизм.

До середины 60-х годов ХХ века (точнее 1966) для изучения полиморфизма использовали мутации с морфологическим признаком. Они случаются с небольшой частотой, приводят к серьезным изменениям, а потому, очень заметны.

Тимофеев – Рисовский « о цветочных морфах берлинской популяции божьей коровки…». 8 типов окраски. 3 более часто встречаются (черные пятна на красном фоне) – красные морфы, если наоборот – черные морфы. Определил, что красные – доминантные, а черные – рецессивные. Красных больше зимой, черных – летом. Наличие полиморфизма в популяции носит приспособительный характер.

Изучают окраску садовой улитки в Европе.

В 1960г Хабби и Левонтин предложили использовать метод электрофореза для определения морф белков человека и животных. Происходит распределение белков по слоям благодаря заряду. Метод очень точен. Пример – изоферменты. У организмов одного и того же вида есть несколько форм ферментов, катализирующих одну химическую реакцию, но различающихся по строению. Активность их также варьирует. Отличны и их физико-химические свойства.16% локусов структурных генов – полиморфны. У глюкозы-6-фосфатазы 30 форм. Часто есть сцепление с полом. В клинике давно различают лактатдегидрогеназы (ЛДГ), которых существует 5 форм. Этот фермент осуществляет превращение глюкозы в пируват, концентрация того или иного изофермента в разных органах различает, на чем основана лабораторная диагностика заболеваний.

Беспозвоночные животные полиморфнее, чем позвоночные. Чем полиморфнее популяция, тем более она эволюционно пластична. В популяции большие запасы аллелей не обладают максимальной приспособленностью в данном месте в данное время. Эти запасы встречаются в небольшом количестве и гетерозиготном состоянии. После изменений условий существования они могут стать полезными и начать накапливаться – переходный полиморфизм. Большие генетические запасы помогают популяции реагировать на окружающую среду. Одним из механизмов, поддерживающих разнообразие – превосходство гетерозигот. При полном доминировании – нет проявления, при неполном доминировании наблюдается гетерозис. В популяции отбор поддерживает генетически неустойчивую гетерозиготную структуру, и такая популяция содержит 3 типа особей (АА, Аа, аа). В результате действия естественного отбора происходит генетическая гибель, снижающая репродуктивный отенциал популяции. Численность популяции падает. Поэтому генетическая гибель – бремя для популяции. Ее также называют генетическим грузом.



Полиморфизм

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

В большинстве случаев методы базового класса у классов-наследников приходится переопределять — объект класса «кошка» выполняет метод «идти» совсем не так как объект класса «амеба». Все переопределяемые методы по написанию (названию) будут совпадать с методами базового объекта, однако компилятор по типу объекта (его классу) распознает, какой конкретно метод надо использовать, и не вызовет для объекта класса «кошка» метод «идти» класса «животное». Такое свойство объектов переопределять методы наследуемого класса и корректно их использовать называется полиморфизмом.

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

Полиморфизм (от греч. «многоликость») — механизм, допускаю­щий возможность использования одинаковых имен для разных ме­тодов обработки данных различных типов. Основная идея этого ме­ханизма состоит в том, что он позволяет создавать стандартные интерфейсы для схожих методов обработки разных объектов. Благодаря полиморфизму в ООП обработка объектов уп­рощается, так как одинаковым действиям объектов соответствуют одноименные методы.

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

Для изменения метода необходимо «перекрыть» его в потомке, т.е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте — родителе, объекте — потомке будут действовать два одноименных метода, имеющие разную алгоритмическую основу и, следовательно, придающие объектам разные свойства. Это и называется полиморфизмом объектов.

Идеи ООП проникли во многие процедурные языки. Например, в состав интегрированной системы программирования Паскаль (кор­порации Borland International), начиная с версии 5.5, входит специ­альная библиотека ООП Turbo Vision.

С середины 90-х гг. многие объектно-ориентированные языки реализуются как системы визуального программирования. Такие систе­мы имеют интерфейс, позволяющий при составлении текста про­граммы видеть те графические объекты, для которых она пишется. Отличительной особенностью этих систем является наличие в них среды разработки программ из готовых «строительных блоков», по­зволяющих создавать интерфейсную часть программного продукта в диалоговом режиме, практически без написания программных опе­раций. Система берет на себя значительную часть работы по управ­лению компьютером, что делает возможным в простых случаях об­ходиться без особых знаний о деталях ее работы. Она сама пишет значительную часть текста программы: описания объектов, заголов­ки процедур и многое другое. Программисту остается только вписать необходимые строчки, определяющие индивидуальное поведение программы, которые система не в состоянии предвидеть. Но даже в этих случаях система сама указывает место для размещения таких строк. К объектно-ориентированным системам визуального проек­тирования относятся: Visual Basic, Delphi, C++ Builder, Visual C++. Это системы программирования самого высокого уровня.

VBA (Visual Basic for Application) является общей языковой плат­формой для приложений Microsoft Office (Excel, Word, Power Point и др.). VBA соблюдает основной синтаксис и правила программирова­ния языков Бейсик-диалектов.

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

 

Контрольные вопросы

1. Что такое машинный код?

2. Охарактеризуйте язык Ассемблер.

3. Дайте определения понятиям «алфавит», «словарный запас», «грамматика», «синтаксис», «семантика».

4. Чем отличаются языки низкого уровня от языков высокого уровня?

5. Назовите принципы структурированного программирования и охарактеризуйте их.

6. Перечислите свойства языков программирования.

7. Дайте классификацию языков программирования.

8. Охарактеризуйте основные конструкции программирования.

9. Перечислите инструкции в Visual Basic.

10. Назовите типы переменных в Visual Basic.

11. Как происходит объявления переменных в Visual Basic?

12. Опишите константы в Visual Basic.

13. Какие парадигмы программирования Вы знаете?

14. Дать характеристику императивным языкам.

15. Опишите языки функционального программирования.

16. Охарактеризуйте декларативные языки программирования.

17. Что лежит в основе объектно-ориентированного программирования?

18. Дать понятия «объект», «свойства», «методы» и «события».

19. На каких принципах базируется объектно-ориентированное программирование? Дать им характеристику и привести примеры.

20. Что за системы визуального программирования?

 

Предыдущая41424344454647484950515253545556Следующая


Дата добавления: 2015-09-18; просмотров: 246;


ПОСМОТРЕТЬ ЕЩЕ:

Полиморфизм

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

В большинстве случаев методы базового класса у классов-наследников приходится переопределять — объект класса «кошка» выполняет метод «идти» совсем не так как объект класса «амеба». Все переопределяемые методы по написанию (названию) будут совпадать с методами базового объекта, однако компилятор по типу объекта (его классу) распознает, какой конкретно метод надо использовать, и не вызовет для объекта класса «кошка» метод «идти» класса «животное». Такое свойство объектов переопределять методы наследуемого класса и корректно их использовать называется полиморфизмом.

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

Полиморфизм (от греч. «многоликость») — механизм, допускаю­щий возможность использования одинаковых имен для разных ме­тодов обработки данных различных типов. Основная идея этого ме­ханизма состоит в том, что он позволяет создавать стандартные интерфейсы для схожих методов обработки разных объектов. Благодаря полиморфизму в ООП обработка объектов уп­рощается, так как одинаковым действиям объектов соответствуют одноименные методы.

В рамках Deiphi свойство класса определяется набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках класса, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо «перекрыть» его в потомке, т.е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте — родителе, объекте — потомке будут действовать два одноименных метода, имеющие разную алгоритмическую основу и, следовательно, придающие объектам разные свойства. Это и называется полиморфизмом объектов.

Идеи ООП проникли во многие процедурные языки. Например, в состав интегрированной системы программирования Паскаль (кор­порации Borland International), начиная с версии 5.5, входит специ­альная библиотека ООП Turbo Vision.

С середины 90-х гг. многие объектно-ориентированные языки реализуются как системы визуального программирования.

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

Она сама пишет значительную часть текста программы: описания объектов, заголов­ки процедур и многое другое. Программисту остается только вписать необходимые строчки, определяющие индивидуальное поведение программы, которые система не в состоянии предвидеть. Но даже в этих случаях система сама указывает место для размещения таких строк. К объектно-ориентированным системам визуального проек­тирования относятся: Visual Basic, Delphi, C++ Builder, Visual C++. Это системы программирования самого высокого уровня.

VBA (Visual Basic for Application) является общей языковой плат­формой для приложений Microsoft Office (Excel, Word, Power Point и др.). VBA соблюдает основной синтаксис и правила программирова­ния языков Бейсик-диалектов. VBA помогает довольно сильно рас­ширить возможности приложений за счет написания макросов — программ, предназначенных для автоматизации выполнения многих операций. VBA позволяет создавать объекты управления графичес­кого интерфейса пользователя, задавать и изменять свойства объек­тов, подключать к ним необходимый для конкретного случая про­граммный код. С помощью VBA можно производить интеграцию между различными программными продуктами. Программы на язы­ке VBA для приложений создаются двумя способами: в автоматическом режиме как результат построения клавишной макрокоманды или путем написания программного кода.

 

Контрольные вопросы

1. Что такое машинный код?

2. Охарактеризуйте язык Ассемблер.

3. Дайте определения понятиям «алфавит», «словарный запас», «грамматика», «синтаксис», «семантика».

4. Чем отличаются языки низкого уровня от языков высокого уровня?

5. Назовите принципы структурированного программирования и охарактеризуйте их.

6. Перечислите свойства языков программирования.

7. Дайте классификацию языков программирования.

8. Охарактеризуйте основные конструкции программирования.

9. Перечислите инструкции в Visual Basic.

10. Назовите типы переменных в Visual Basic.

11. Как происходит объявления переменных в Visual Basic?

12. Опишите константы в Visual Basic.

13. Какие парадигмы программирования Вы знаете?

14. Дать характеристику императивным языкам.

15. Опишите языки функционального программирования.

16. Охарактеризуйте декларативные языки программирования.

17. Что лежит в основе объектно-ориентированного программирования?

18. Дать понятия «объект», «свойства», «методы» и «события».

19. На каких принципах базируется объектно-ориентированное программирование? Дать им характеристику и привести примеры.

20. Что за системы визуального программирования?

 

Предыдущая41424344454647484950515253545556Следующая


Дата добавления: 2015-09-18; просмотров: 245;


ПОСМОТРЕТЬ ЕЩЕ:

Добавить комментарий

Закрыть меню