| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Объясните доходчив пожалуйста про полиформизм |
| Автор: gogzor 12.2.2008, 17:57 |
| Привет всем. В процессе изучения принципов ООП , понял всё , кроме полиформизма... Прочитал кучу описаний , но там всё написано слишком замороченым языком. Объясните мне пожалуйста попроще : что такое полиформизм , с каким-нибудь простеньким примером. Я просто хочу чётко понять ЧТО ЭТО , ДЛЯ ЧЕГО он используется и КОГДА. Заранее благодарен. |
| Автор: Able 12.2.2008, 21:41 |
| Если кратко , то это то, что позволяет по разному использовать один и тот же метод в "новых" унаследованных классах (производных классах) т.е. "для переопределения поведения производных классов" [Троелсен Э. C# и .NET, 168-170]. |
| Автор: gogzor 12.2.2008, 21:54 |
| Как это использовать один метод по разному? У него же функция одна. Override тут я так понимаю не причем? |
| Автор: Able 12.2.2008, 22:12 |
| Еще как причем но это классический полиморфизм. Так же существует понятие абстрактного класса и метода. А тебе что конкретно не понятно с полиморфизмом? давай твой пример где ты чего то не понял? |
| Автор: Raid 13.2.2008, 01:02 |
| Залил лекцию и практическое занятие по теме полиморфизм. Если вдумчиво прочитаешь, то наверняка разберешься http://dump.ru/files/o/o380359150/ |
| Автор: Legolas 13.2.2008, 01:08 |
| gogzor, существует несколько методов использования полиморфизма: я использую полиморфизм методом переопределения и методом перегрузки. я тебе могу скинуть лекцию из инста про полиморфизм - там очень доходчиво это всё расписывается, куча примеров с подробнейшими комментами. лекция - http://slil.ru/25466740 если не поймешь пиши здесь - попробую объяснить. Добавлено через 4 минуты и 20 секунд класс!!! одно и тоже скинули |
| Автор: gogzor 13.2.2008, 03:39 |
| Спасибо за отличную лекцию! Начинаю понимать. Если что , отпишусь. |
| Автор: gogzor 16.2.2008, 14:58 |
| Люди. Вот скажите : Я создал интерфейс. Прописал там нужный метод . Потом в каждом классе , где я реализую этот интерфейс , этот метод переопределяется по своему , это же тоже принцип полиморфизма - многоформенности? |
| Автор: FractalizeR 16.2.2008, 23:05 |
| Полиморфизм в том, что при вызове этого метода, в зависимости от типа экземпляра будут вызваны разные реализации этого метода. Так что, в принципе, вы правы. |
| Автор: source777 19.2.2008, 00:05 |
| gogzor, самое понятное определение полиморфизма: "Полиморфизмом называется свойство некоторых веществ существовать в нескольких кристаллических фазах, отличающихся по симметрии структуры и по свойствам. Каждая из этих фаз, стабильная в определенной области температур и давлений, называется полиморфной модификацией." (с) Шаскольская М.П. Применительно к программированию это переводится как: "Полиморфизмом называется свойство некоторых объектов в зависимости от внешних условий вызывать различные полиморфные модификации определенного метода" |
| Автор: Able 20.2.2008, 15:12 |
| на пример ВОДА... лед, жидкость, пар а вещество одно и тоже... gogzor, да так... |
| Автор: source777 20.2.2008, 22:44 | ||
Впрочем классический пример полиморфизма - это белое и серое олово, причем такой полиморфизм называют ещё аллотропией, т.к. один химический элемент в соединении. Аллотропия - частный случай полиморфизма, если аллотропные модификации имеют одинаковую хим.формулу (эквивалент для программирования - сигнатура метода)... Так что наличие методов с разной сигнатурой, но одним именем (проще говоря, перегруженных), правильнее называть аллотропией, а не статическим полиморфизмом, как это принято |
| Автор: Exception 25.2.2008, 01:31 | ||||
| Вы чего-то всё усложняете. Полиморфизм -- это когда мы общаемся с некоторым базовым методом, не волнуясь о том, переопределён ли он в дочерних классах и что на самом деле делает. Пример: все животные (класс Animal) умеют издавать звуки (метод MakeSound), но при этом разные животные -- по-разному (переопределённые версии MakeSound в дочерних классах). В данном случае мы объявим MakeSound как абстрактный метод (то есть у него вообще нет реализации), и реализуем его в дочерних классах:
Вся фишка полиморфизма заключается в том, что теперь нам необязательно знать, какой именно класс используется, чтобы вызвать базовый метод, потому что вызвана будет именно переопределённая версия:
|
| Автор: SKrivosein 25.2.2008, 02:57 | ||
А ещё так с интерфейсами...
полиморфизм через интерфейсы подержуют и независимые от себя классы. Авторские права на зверьё у Exception |
| Автор: SKrivosein 25.2.2008, 03:31 |
| А это мы имеем на диаграмме Visual Studia http://ipicture.ru/Gallery/Viewfull/689090.html |
| Автор: Exception 25.2.2008, 14:31 |
| Я бы всё-таки переименовал IHabits в IHasHabits, а MethodHabits -- в GetHabits (или, что ещё лучше, сделал бы read-only свойство Habits вместо метода). |
| Автор: SKrivosein 26.2.2008, 02:47 |
| Извиняюсь,эт я сначала хотел метод написать,а потом в 3 часа ночи переписывать лень было. ИСПРАВИЛ! |
| Автор: Able 26.2.2008, 19:20 |
| source777, не о том ты, чудо.... |
| Автор: source777 26.2.2008, 23:03 |
| Почему же не о том, полиморфизм он везде полиморфизм, а что может быть проще, чем понять изначальный смысл слова, тогда уже не составляет труда понять его применение к любой области... так что не мысли так узко... к тому же любой частный пример не в силах всесторонне описать явление... Добавлено через 3 минуты и 10 секунд SKrivosein, в Main можно всё до строки \"//или так...\" включительно удалить, как не имеющее никакого отношения к полиморфизму P.S. Тема полиморфизма жены не раскрыта! |
| Автор: Able 29.2.2008, 03:32 | ||
| то как мыслим не тема поста... Тут конкретный вопрос, что есть это... а на такой вопрос можно ответить лишь двумя группами способов, других просто нет Первая это Интенциональная группа - самый простой способ, просто показать пальцем вот смотри. (пример с водой) и вторая это Дескриптивный или дефинитивный, т.е. описать максимально, что есть это для выделения его из мира вещей... как сделал Exeption? вы же описываете своими словами (хочешь объяснить говори на детском языке), не говорите на одном языке с человеком задавшим вопрос! Вообще на месте задающего вопрос я бы обратился к этимологии слова ПОЛИМОРФ что это и как это... почему ИЗМ... Полиморфизм — от греч. poly — много и morphe — форма Полиморфизм в биологии, наличие в пределах одного вида резко отличных по облику особей, не имеющих переходных форм. Классический пример - оборотень... сущность одна, а форма разная, как у воды! (сущность т.е. существенное, физика с химией тут не причем) В программировании же общая идея такова "один интерфейс, множество методов".
Думаю, что после поста Exeption, вообще не должно возникнуть вопросов, проще некуда... разве, что пример добавить более развернутый, насытить вариантами использования… но не мне гуру дополнять ))) |
| Автор: Able 14.3.2008, 03:58 |
| Все это Троелсен и Страструп |
| Автор: CareyDom 1.7.2022, 11:25 |
Модератор: Сообщение скрыто. |
| Автор: TaskGangster 23.7.2022, 20:19 |
Модератор: Сообщение скрыто. |