|
Модераторы: Partizan, gambit |
|
gogzor |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 134 Регистрация: 21.9.2006 Репутация: нет Всего: нет |
Привет всем.
В процессе изучения принципов ООП , понял всё , кроме полиформизма... Прочитал кучу описаний , но там всё написано слишком замороченым языком. Объясните мне пожалуйста попроще : что такое полиформизм , с каким-нибудь простеньким примером. Я просто хочу чётко понять ЧТО ЭТО , ДЛЯ ЧЕГО он используется и КОГДА. Заранее благодарен. |
|||
|
||||
Able |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 82 Регистрация: 13.6.2006 Где: Тюмень Репутация: нет Всего: 2 |
Если кратко , то это то, что позволяет по разному использовать один и тот же метод в "новых" унаследованных классах (производных классах) т.е. "для переопределения поведения производных классов" [Троелсен Э. C# и .NET, 168-170].
Это сообщение отредактировал(а) Able - 12.2.2008, 21:48 |
|||
|
||||
gogzor |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 134 Регистрация: 21.9.2006 Репутация: нет Всего: нет |
Как это использовать один метод по разному? У него же функция одна.
Override тут я так понимаю не причем? |
|||
|
||||
Able |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 82 Регистрация: 13.6.2006 Где: Тюмень Репутация: нет Всего: 2 |
Еще как причем но это классический полиморфизм.
Так же существует понятие абстрактного класса и метода. А тебе что конкретно не понятно с полиморфизмом? давай твой пример где ты чего то не понял? Это сообщение отредактировал(а) Able - 12.2.2008, 22:14 |
|||
|
||||
Raid |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 10.6.2007 Где: Москва Репутация: нет Всего: нет |
Залил лекцию и практическое занятие по теме полиморфизм. Если вдумчиво прочитаешь, то наверняка разберешься Посмотри
|
|||
|
||||
Legolas |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 3 Всего: 5 |
gogzor, существует несколько методов использования полиморфизма: я использую полиморфизм методом переопределения и методом перегрузки. я тебе могу скинуть лекцию из инста про полиморфизм - там очень доходчиво это всё расписывается, куча примеров с подробнейшими комментами.
лекция - http://slil.ru/25466740 если не поймешь пиши здесь - попробую объяснить. Добавлено через 4 минуты и 20 секунд класс!!! одно и тоже скинули |
|||
|
||||
gogzor |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 134 Регистрация: 21.9.2006 Репутация: нет Всего: нет |
Спасибо за отличную лекцию!
Начинаю понимать. Если что , отпишусь. |
|||
|
||||
gogzor |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 134 Регистрация: 21.9.2006 Репутация: нет Всего: нет |
Люди.
Вот скажите : Я создал интерфейс. Прописал там нужный метод . Потом в каждом классе , где я реализую этот интерфейс , этот метод переопределяется по своему , это же тоже принцип полиморфизма - многоформенности? |
|||
|
||||
FractalizeR |
|
|||
Опытный Профиль Группа: Участник Сообщений: 273 Регистрация: 27.12.2007 Где: Россия/Москва Репутация: нет Всего: 4 |
Полиморфизм в том, что при вызове этого метода, в зависимости от типа экземпляра будут вызваны разные реализации этого метода. Так что, в принципе, вы правы.
Это сообщение отредактировал(а) FractalizeR - 16.2.2008, 23:05 -------------------- Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя. |
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
gogzor, самое понятное определение полиморфизма:
"Полиморфизмом называется свойство некоторых веществ существовать в нескольких кристаллических фазах, отличающихся по симметрии структуры и по свойствам. Каждая из этих фаз, стабильная в определенной области температур и давлений, называется полиморфной модификацией." (с) Шаскольская М.П. Применительно к программированию это переводится как: "Полиморфизмом называется свойство некоторых объектов в зависимости от внешних условий вызывать различные полиморфные модификации определенного метода" -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
Able |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 82 Регистрация: 13.6.2006 Где: Тюмень Репутация: нет Всего: 2 |
на пример ВОДА... лед, жидкость, пар а вещество одно и тоже...
gogzor, да так... |
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Впрочем классический пример полиморфизма - это белое и серое олово, причем такой полиморфизм называют ещё аллотропией, т.к. один химический элемент в соединении. Аллотропия - частный случай полиморфизма, если аллотропные модификации имеют одинаковую хим.формулу (эквивалент для программирования - сигнатура метода)... Так что наличие методов с разной сигнатурой, но одним именем (проще говоря, перегруженных), правильнее называть аллотропией, а не статическим полиморфизмом, как это принято Это сообщение отредактировал(а) source777 - 20.2.2008, 22:45 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
Exception |
|
||||
Эксперт Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 1 Всего: 186 |
Вы чего-то всё усложняете. Полиморфизм -- это когда мы общаемся с некоторым базовым методом, не волнуясь о том, переопределён ли он в дочерних классах и что на самом деле делает.
Пример: все животные (класс Animal) умеют издавать звуки (метод MakeSound), но при этом разные животные -- по-разному (переопределённые версии MakeSound в дочерних классах). В данном случае мы объявим MakeSound как абстрактный метод (то есть у него вообще нет реализации), и реализуем его в дочерних классах:
Вся фишка полиморфизма заключается в том, что теперь нам необязательно знать, какой именно класс используется, чтобы вызвать базовый метод, потому что вызвана будет именно переопределённая версия:
Это сообщение отредактировал(а) Exception - 25.2.2008, 01:34 |
||||
|
|||||
SKrivosein |
|
|||
Идущий в даль Профиль Группа: Участник Сообщений: 271 Регистрация: 9.6.2007 Где: Praha - Прага Репутация: 4 Всего: 8 |
А ещё так с интерфейсами...
полиморфизм через интерфейсы подержуют и независимые от себя классы. Авторские права на зверьё у Exception Это сообщение отредактировал(а) SKrivosein - 27.2.2008, 03:09 |
|||
|
||||
SKrivosein |
|
|||
Идущий в даль Профиль Группа: Участник Сообщений: 271 Регистрация: 9.6.2007 Где: Praha - Прага Репутация: 4 Всего: 8 |
||||
|
||||
Exception |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 1 Всего: 186 |
Я бы всё-таки переименовал IHabits в IHasHabits, а MethodHabits -- в GetHabits (или, что ещё лучше, сделал бы read-only свойство Habits вместо метода).
|
|||
|
||||
SKrivosein |
|
|||
Идущий в даль Профиль Группа: Участник Сообщений: 271 Регистрация: 9.6.2007 Где: Praha - Прага Репутация: 4 Всего: 8 |
Извиняюсь,эт я сначала хотел метод написать,а потом в 3 часа ночи переписывать лень было.
ИСПРАВИЛ! Это сообщение отредактировал(а) SKrivosein - 26.2.2008, 03:03 |
|||
|
||||
Able |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 82 Регистрация: 13.6.2006 Где: Тюмень Репутация: нет Всего: 2 |
source777, не о том ты, чудо....
|
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Почему же не о том, полиморфизм он везде полиморфизм, а что может быть проще, чем понять изначальный смысл слова, тогда уже не составляет труда понять его применение к любой области... так что не мысли так узко... к тому же любой частный пример не в силах всесторонне описать явление...
Добавлено через 3 минуты и 10 секунд SKrivosein, в Main можно всё до строки \"//или так...\" включительно удалить, как не имеющее никакого отношения к полиморфизму P.S. Тема полиморфизма жены не раскрыта! -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
Able |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 82 Регистрация: 13.6.2006 Где: Тюмень Репутация: нет Всего: 2 |
то как мыслим не тема поста...
Тут конкретный вопрос, что есть это... а на такой вопрос можно ответить лишь двумя группами способов, других просто нет Первая это Интенциональная группа - самый простой способ, просто показать пальцем вот смотри. (пример с водой) и вторая это Дескриптивный или дефинитивный, т.е. описать максимально, что есть это для выделения его из мира вещей... как сделал Exeption? вы же описываете своими словами (хочешь объяснить говори на детском языке), не говорите на одном языке с человеком задавшим вопрос! Вообще на месте задающего вопрос я бы обратился к этимологии слова ПОЛИМОРФ что это и как это... почему ИЗМ... Полиморфизм — от греч. poly — много и morphe — форма Полиморфизм в биологии, наличие в пределах одного вида резко отличных по облику особей, не имеющих переходных форм. Классический пример - оборотень... сущность одна, а форма разная, как у воды! (сущность т.е. существенное, физика с химией тут не причем) В программировании же общая идея такова "один интерфейс, множество методов".
Думаю, что после поста Exeption, вообще не должно возникнуть вопросов, проще некуда... разве, что пример добавить более развернутый, насытить вариантами использования… но не мне гуру дополнять ))) Это сообщение отредактировал(а) Able - 29.2.2008, 03:33 |
|||
|
||||
source777 |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Не занудствуй
Фантастика не может быть классическим примером... Вода, как и любая жидкость, не обладает полиморфизмом, сколько раз это надо повторить, чтобы до тебя дошло? перечитывай определение, пока не врубишься:
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
Able |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 82 Регистрация: 13.6.2006 Где: Тюмень Репутация: нет Всего: 2 |
Все это Троелсен и Страструп
|
|||
|
||||
CareyDom |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 30.6.2022 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
TaskGangster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 21.7.2022 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |