HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Определение</a></li>
1 <ul><li><a>Определение</a></li>
2 <li><a>Для чего необходим</a></li>
2 <li><a>Для чего необходим</a></li>
3 <li><a>Как принцип ООП</a></li>
3 <li><a>Как принцип ООП</a></li>
4 <li><a>Полиморфный метод - это…</a></li>
4 <li><a>Полиморфный метод - это…</a></li>
5 <li><a>Преимущества и недостатки</a></li>
5 <li><a>Преимущества и недостатки</a></li>
6 <li><a>Формы и виды</a></li>
6 <li><a>Формы и виды</a></li>
7 </ul><p>Полиморфизм - это понятие, которое встречается в объектно-ориентированном программировании (ООП). Оно дает возможность разнообразным сущностям выполнять одинаковые действия (операции). Устройство этих самых сущностей изнутри для реализации различных манипуляций не имеет никакого значения, как и их различия.</p>
7 </ul><p>Полиморфизм - это понятие, которое встречается в объектно-ориентированном программировании (ООП). Оно дает возможность разнообразным сущностям выполнять одинаковые действия (операции). Устройство этих самых сущностей изнутри для реализации различных манипуляций не имеет никакого значения, как и их различия.</p>
8 <p>Далее предстоит изучить полиморфизм с точки зрения разработки программного обеспечения более детально. Необходимо рассмотреть его в качестве принципа объектно-ориентированного программирования, изучить его формы, преимущества и недостатки. А еще - выяснить, для каких конкретно целей необходим полиморфизм. Предложенная ниже информация пригодится как IT-специалистам, так и обычным пользователям.</p>
8 <p>Далее предстоит изучить полиморфизм с точки зрения разработки программного обеспечения более детально. Необходимо рассмотреть его в качестве принципа объектно-ориентированного программирования, изучить его формы, преимущества и недостатки. А еще - выяснить, для каких конкретно целей необходим полиморфизм. Предложенная ниже информация пригодится как IT-специалистам, так и обычным пользователям.</p>
9 <h2>Определение</h2>
9 <h2>Определение</h2>
10 <p>Полиморфизм - это способность функции обрабатывать данные разных типов. С его помощью можно задействовать одни и те же методы для объектов различных классов. Внутреннее их устройство не имеет никакого значения.</p>
10 <p>Полиморфизм - это способность функции обрабатывать данные разных типов. С его помощью можно задействовать одни и те же методы для объектов различных классов. Внутреннее их устройство не имеет никакого значения.</p>
11 <p>С греческого языка polymorphism переводится как "многообразие". Этот термин используется не только в программировании, но и в других областях. В качестве примера можно взять биологию. В ней подобным термином описывается способность какого-либо вида существовать в разных видах. В программировании смысл полиморфизма заключается в том, что один и тот же метод способен реализовываться по-разному.</p>
11 <p>С греческого языка polymorphism переводится как "многообразие". Этот термин используется не только в программировании, но и в других областях. В качестве примера можно взять биологию. В ней подобным термином описывается способность какого-либо вида существовать в разных видах. В программировании смысл полиморфизма заключается в том, что один и тот же метод способен реализовываться по-разному.</p>
12 <h2>Для чего необходим</h2>
12 <h2>Для чего необходим</h2>
13 <p>Рассматриваемый прием широко используется в разработке программного обеспечения. Далее термин "polymorphism" будет изучаться с точки зрения программирования. Он необходим в следующих целях:</p>
13 <p>Рассматриваемый прием широко используется в разработке программного обеспечения. Далее термин "polymorphism" будет изучаться с точки зрения программирования. Он необходим в следующих целях:</p>
14 <ol><li>Облегчение написания исходных кодов программ. Придумывать для классов несколько разных методов с ним не придется. Достаточно грамотно написать всего один, применяемый к различным сущностям.</li>
14 <ol><li>Облегчение написания исходных кодов программ. Придумывать для классов несколько разных методов с ним не придется. Достаточно грамотно написать всего один, применяемый к различным сущностям.</li>
15 <li>Масштабируемость решений. Если необходимо отправить не только один видеофайл или графический документ, но и текст, получится сделать это при помощи одной и той же команды.</li>
15 <li>Масштабируемость решений. Если необходимо отправить не только один видеофайл или графический документ, но и текст, получится сделать это при помощи одной и той же команды.</li>
16 <li>Формирование более читаемого кода. Программисту не придется разбираться на протяжении длительного времени в схожих между собой методах и классах со схожими названиями. Вместо них будет всего один метод, по имени которого будет понятен алгоритм его выполнения.</li>
16 <li>Формирование более читаемого кода. Программисту не придется разбираться на протяжении длительного времени в схожих между собой методах и классах со схожими названиями. Вместо них будет всего один метод, по имени которого будет понятен алгоритм его выполнения.</li>
17 <li>Повышение уровня понимания принципов работы разных методов. Исходный код приложения за счет рассматриваемой концепции становится не только более понятным, но и предсказуемым.</li>
17 <li>Повышение уровня понимания принципов работы разных методов. Исходный код приложения за счет рассматриваемой концепции становится не только более понятным, но и предсказуемым.</li>
18 </ol><p>Определение полиморфизма и его ключевые особенности должны быть известны каждому, кто планирует программировать. Множество современных языков разработки пользуются соответствующей концепцией при работе с классами и объектами: Python, C++, Java, C и другие.</p>
18 </ol><p>Определение полиморфизма и его ключевые особенности должны быть известны каждому, кто планирует программировать. Множество современных языков разработки пользуются соответствующей концепцией при работе с классами и объектами: Python, C++, Java, C и другие.</p>
19 <h2>Как принцип ООП</h2>
19 <h2>Как принцип ООП</h2>
20 <p>Объектно-ориентированное программирование включает в себя несколько ключевых принципов:</p>
20 <p>Объектно-ориентированное программирование включает в себя несколько ключевых принципов:</p>
21 <ol><li>Инкапсуляцию. Так называется создание сущностей как "вещей в себе". Классы с помощью инкапсуляции будут работать независимо друг от друга: если та или иная сущность будет удалена, на остальных соответствующая операция никак не отразится.</li>
21 <ol><li>Инкапсуляцию. Так называется создание сущностей как "вещей в себе". Классы с помощью инкапсуляции будут работать независимо друг от друга: если та или иная сущность будет удалена, на остальных соответствующая операция никак не отразится.</li>
22 <li>Абстракцию - принцип, при котором какие-то общие характеристики сводятся до набора абстрактных признаков. Можно иметь не абсолютно разные классы вроде "изображения", "видео", "текст", а абстрактный класс "контент".</li>
22 <li>Абстракцию - принцип, при котором какие-то общие характеристики сводятся до набора абстрактных признаков. Можно иметь не абсолютно разные классы вроде "изображения", "видео", "текст", а абстрактный класс "контент".</li>
23 <li>Наследование. Так называется возможность на основе одних классов создавать другие. Обычно в виде "родителя" используются абстрактные сущности, от которых будут наследоваться более конкретные. Если "родителем" выступает класс "контент", его "дети" - это "изображения", "видео", "текст".</li>
23 <li>Наследование. Так называется возможность на основе одних классов создавать другие. Обычно в виде "родителя" используются абстрактные сущности, от которых будут наследоваться более конкретные. Если "родителем" выступает класс "контент", его "дети" - это "изображения", "видео", "текст".</li>
24 <li>Полиморфизм. Его определение уже было приведено. Так называется возможность разных классов использовать одни и те же методы в процессе работы.</li>
24 <li>Полиморфизм. Его определение уже было приведено. Так называется возможность разных классов использовать одни и те же методы в процессе работы.</li>
25 </ol><p>Для реализации полиморфизма в ООП требуется абстракция и наследование. С их помощью удается сформировать абстрактный класс, а в нем - общий абстрактный метод. После - унаследовать разнообразные реализации этого метода.</p>
25 </ol><p>Для реализации полиморфизма в ООП требуется абстракция и наследование. С их помощью удается сформировать абстрактный класс, а в нем - общий абстрактный метод. После - унаследовать разнообразные реализации этого метода.</p>
26 <h2>Полиморфный метод - это…</h2>
26 <h2>Полиморфный метод - это…</h2>
27 <p>Полиморфный - это значит "многообразный": формы отличаются, а действие будет одинаковым. Работает соответствующий метод по следующему алгоритму:</p>
27 <p>Полиморфный - это значит "многообразный": формы отличаются, а действие будет одинаковым. Работает соответствующий метод по следующему алгоритму:</p>
28 <ol><li>Разработчик пишет общий класс. В качестве примера выступит класс "контент". Он описывает вещи, общие для всего контента: свойства и методы. Свойствами называются признаки того, что есть у рассматриваемого объекта: возможность комментирования, количество отметок "Мне понравилось" и так далее. Методы - это действия. Команды, которые можно совершить относительно контента: сделать репост, поставить "лайк", открыть на отдельной вкладке, добавить в закладки или отправить в личных сообщениях другому пользователю.</li>
28 <ol><li>Разработчик пишет общий класс. В качестве примера выступит класс "контент". Он описывает вещи, общие для всего контента: свойства и методы. Свойствами называются признаки того, что есть у рассматриваемого объекта: возможность комментирования, количество отметок "Мне понравилось" и так далее. Методы - это действия. Команды, которые можно совершить относительно контента: сделать репост, поставить "лайк", открыть на отдельной вкладке, добавить в закладки или отправить в личных сообщениях другому пользователю.</li>
29 <li>Создается общий класс с абстрактными, общими методами. Контент можно отправлять другим пользователям, но пока неясно, как именно. Разработчик должен описать то, как будет выглядеть соответствующая команда: ее название, что требуется передать в нее, какое сообщение вывести на экран после этого. Это - своеобразный "каркас" будущей конкретной операции.</li>
29 <li>Создается общий класс с абстрактными, общими методами. Контент можно отправлять другим пользователям, но пока неясно, как именно. Разработчик должен описать то, как будет выглядеть соответствующая команда: ее название, что требуется передать в нее, какое сообщение вывести на экран после этого. Это - своеобразный "каркас" будущей конкретной операции.</li>
30 <li>Создаются производные классы. Это - наследники общего класса. Они являются более конкретными, могут предусматривать ряд дополнительных методов и свойств. Пример - видео можно поставить на паузу, а изображение - нет. В производных сущностях сохраняются абстрактные методы и свойства "родителя": они определяются для более точного функционирования.</li>
30 <li>Создаются производные классы. Это - наследники общего класса. Они являются более конкретными, могут предусматривать ряд дополнительных методов и свойств. Пример - видео можно поставить на паузу, а изображение - нет. В производных сущностях сохраняются абстрактные методы и свойства "родителя": они определяются для более точного функционирования.</li>
31 <li>Для каждого производного класса прописываются собственные общие методы реализации. В сущности "контент" поддерживает метод "отправить". Он также имеется в производных классах. В классе "изображение" может содержаться отдельный код для отправки, в "видео" - тоже. Соответствующие операции бывают похожи или различаются, но названия у них будут одинаковыми. То же самое относится к непосредственно выполняемой команде.</li>
31 <li>Для каждого производного класса прописываются собственные общие методы реализации. В сущности "контент" поддерживает метод "отправить". Он также имеется в производных классах. В классе "изображение" может содержаться отдельный код для отправки, в "видео" - тоже. Соответствующие операции бывают похожи или различаются, но названия у них будут одинаковыми. То же самое относится к непосредственно выполняемой команде.</li>
32 - </ol><p>Также в процессе разработки можно создавать объекты производных классов и пользоваться их методами. Абстрактные сущности существуют словно в вакууме: объект, который будет принадлежать к соответствующему классу, создать нельзя. Среди реальных элементов не может быть "просо контента", который не относится ни к тексту, ни к изображению, ни к видео, ни к чему-либо еще. Абстрактные методы никто не будет вызывать. Предопределенные методы из производных являются вполне реальными. Ими разработчики имеют право пользоваться в самых разных ситуациях.</p>
32 + </ol><p>Также в процессе разработки можно создавать объекты производных классов и пользоваться их методами. Абстрактные сущности существуют словно в вакууме: объект, который будет принадлежать к соответствующему классу, создать нельзя. Среди реальных элементов не может быть "просто контента", который не относится ни к тексту, ни к изображению, ни к видео, ни к чему-либо еще. Абстрактные методы никто не будет вызывать. Предопределенные методы из производных являются вполне реальными. Ими разработчики имеют право пользоваться в самых разных ситуациях.</p>
33 <h2>Преимущества и недостатки</h2>
33 <h2>Преимущества и недостатки</h2>
34 <p>Примеры полиморфизма уже были изучены. Данная концепция имеет как преимущества, так и недостатки. К "сильным" сторонам рассматриваемой операции можно отнести следующие моменты:</p>
34 <p>Примеры полиморфизма уже были изучены. Данная концепция имеет как преимущества, так и недостатки. К "сильным" сторонам рассматриваемой операции можно отнести следующие моменты:</p>
35 <ol><li>Возможность написать более аккуратный и понятный код. Сущности в нем множить не приходится, как и создавать огромное количество команд с одинаковыми функциональными возможностями. Бессвязный и неструктурированный код тоже отсутствует.</li>
35 <ol><li>Возможность написать более аккуратный и понятный код. Сущности в нем множить не приходится, как и создавать огромное количество команд с одинаковыми функциональными возможностями. Бессвязный и неструктурированный код тоже отсутствует.</li>
36 <li>Более удобная работа с кодом. Разработчику не нужно каждый раз думать, что делает та или иная команда для конкретного вида объекта. Допустимо просто написать ее и получить желаемый результат.</li>
36 <li>Более удобная работа с кодом. Разработчику не нужно каждый раз думать, что делает та или иная команда для конкретного вида объекта. Допустимо просто написать ее и получить желаемый результат.</li>
37 <li>Возможность одинаково работать с разными сущностями. Каждый раз выяснять, о каком именно производном классе идет речь в исходном коде на этот раз, нет никакой необходимости. Общее полиморфное действие поддерживается для всего.</li>
37 <li>Возможность одинаково работать с разными сущностями. Каждый раз выяснять, о каком именно производном классе идет речь в исходном коде на этот раз, нет никакой необходимости. Общее полиморфное действие поддерживается для всего.</li>
38 <li>Повышение расширяемости. Исходный код при помощи рассматриваемой концепции проще расширять, а также использовать повторно и модифицировать.</li>
38 <li>Повышение расширяемости. Исходный код при помощи рассматриваемой концепции проще расширять, а также использовать повторно и модифицировать.</li>
39 </ol><p>Недостатки у рассматриваемой концепции тоже есть. К ним относят:</p>
39 </ol><p>Недостатки у рассматриваемой концепции тоже есть. К ним относят:</p>
40 <ol><li>Связь полиморфизма с наследованием может стать слабым местом приложения.</li>
40 <ol><li>Связь полиморфизма с наследованием может стать слабым местом приложения.</li>
41 <li>Не всегда изучаемый прием удается грамотно реализовать на практике. Иногда для этого придется постараться, чтобы исключить необъяснимые ошибки и неполадки.</li>
41 <li>Не всегда изучаемый прием удается грамотно реализовать на практике. Иногда для этого придется постараться, чтобы исключить необъяснимые ошибки и неполадки.</li>
42 <li>Новичкам проблематично понять принцип концепции. Отдельно от ООП полиморфизм рассмотреть и объяснить не получится.</li>
42 <li>Новичкам проблематично понять принцип концепции. Отдельно от ООП полиморфизм рассмотреть и объяснить не получится.</li>
43 </ol><p>Несмотря на это, изучаемая концепция все равно остается достаточно удобным и функциональным элементом разработки программного обеспечения.</p>
43 </ol><p>Несмотря на это, изучаемая концепция все равно остается достаточно удобным и функциональным элементом разработки программного обеспечения.</p>
44 <h2>Формы и виды</h2>
44 <h2>Формы и виды</h2>
45 <p>Существуют разные виды полиморфизма:</p>
45 <p>Существуют разные виды полиморфизма:</p>
46 <ol><li>Подтипов. Это - полиморфность "по умолчанию". Определение соответствующей концепции было представлено ранее. Именно оно подразумевается в объектно-ориентированной разработке. Это возможность использовать одни и те же команды/интерфейсы для разных сущностей.</li>
46 <ol><li>Подтипов. Это - полиморфность "по умолчанию". Определение соответствующей концепции было представлено ранее. Именно оно подразумевается в объектно-ориентированной разработке. Это возможность использовать одни и те же команды/интерфейсы для разных сущностей.</li>
47 <li>Параметрический (или обобщенный). В нем для команды нет разницы, какую сущность прислал разработчик: для всех возможных классов будет применяться один и тот же код. Его сложнее реализовать, но он делает исходное приложение более универсальным.</li>
47 <li>Параметрический (или обобщенный). В нем для команды нет разницы, какую сущность прислал разработчик: для всех возможных классов будет применяться один и тот же код. Его сложнее реализовать, но он делает исходное приложение более универсальным.</li>
48 <li>Ad hoc (или специализированный). Иногда он противопоставляется параметрическому. Идея ad hoc - использование одинаковых названий, но разного кода. Данная концепция часто реализовывается при помощи перегрузки методов: одна операция прописывается несколько раз с одним и тем же названием, но с разным кодом.</li>
48 <li>Ad hoc (или специализированный). Иногда он противопоставляется параметрическому. Идея ad hoc - использование одинаковых названий, но разного кода. Данная концепция часто реализовывается при помощи перегрузки методов: одна операция прописывается несколько раз с одним и тем же названием, но с разным кодом.</li>
49 </ol><p>Полиморфизм также бывает статическим и динамическим. В первом случае методы предопределяются при компиляции, во втором - в процессе работы приложения.</p>
49 </ol><p>Полиморфизм также бывает статическим и динамическим. В первом случае методы предопределяются при компиляции, во втором - в процессе работы приложения.</p>
50 <p>Лучше понять, что собой представляет полиморфизм, а также научиться применять его на практике, помогут дистанционные компьютерные курсы. На них с нуля обучат программировать и разбираться в исходных кодах различных приложений.</p>
50 <p>Лучше понять, что собой представляет полиморфизм, а также научиться применять его на практике, помогут дистанционные компьютерные курсы. На них с нуля обучат программировать и разбираться в исходных кодах различных приложений.</p>
51 <p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em> </p>
51 <p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em> </p>
52  
52