Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объясните доходчив пожалуйста про полиформизм 
:(
    Опции темы
gogzor
Дата 12.2.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 21.9.2006

Репутация: нет
Всего: нет



Привет всем.

В процессе изучения принципов ООП , понял всё , кроме полиформизма...
Прочитал кучу описаний , но там всё написано слишком замороченым языком.

Объясните мне пожалуйста попроще : что такое полиформизм , с каким-нибудь простеньким примером.  smile 
Я просто хочу чётко понять ЧТО ЭТО , ДЛЯ ЧЕГО он используется и КОГДА.

Заранее благодарен.
PM MAIL   Вверх
Able
Дата 12.2.2008, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 13.6.2006
Где: Тюмень

Репутация: нет
Всего: 2



Если кратко , то это то, что позволяет по разному использовать один и тот же метод в "новых" унаследованных классах (производных классах) т.е. "для переопределения поведения производных классов" [Троелсен Э. C# и .NET, 168-170].

Это сообщение отредактировал(а) Able - 12.2.2008, 21:48
PM MAIL WWW ICQ   Вверх
gogzor
Дата 12.2.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 21.9.2006

Репутация: нет
Всего: нет



Как это использовать один метод по разному? У него же функция одна.
Override тут я так понимаю не причем?

 smile 
PM MAIL   Вверх
Able
Дата 12.2.2008, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 13.6.2006
Где: Тюмень

Репутация: нет
Всего: 2



Еще как причем но это классический полиморфизм.
Так же существует понятие абстрактного класса и метода.
А тебе что конкретно не понятно с полиморфизмом?
давай твой пример где ты чего то не понял?


Это сообщение отредактировал(а) Able - 12.2.2008, 22:14
PM MAIL WWW ICQ   Вверх
Raid
Дата 13.2.2008, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.6.2007
Где: Москва

Репутация: нет
Всего: нет



Залил лекцию и практическое занятие по теме полиморфизм. Если вдумчиво прочитаешь, то наверняка разберешься Посмотри
PM MAIL   Вверх
Legolas
Дата 13.2.2008, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 14.2.2007

Репутация: 3
Всего: 5



gogzor, существует несколько методов использования полиморфизма: я использую полиморфизм методом переопределения и методом перегрузки.  я тебе могу скинуть лекцию из инста про полиморфизм - там очень доходчиво это всё расписывается, куча примеров с подробнейшими комментами.

лекция - http://slil.ru/25466740

если не поймешь пиши здесь - попробую объяснить.

Добавлено через 4 минуты и 20 секунд
класс!!! одно и тоже скинули  smile  smile 
PM MAIL   Вверх
gogzor
Дата 13.2.2008, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 21.9.2006

Репутация: нет
Всего: нет



Спасибо за отличную лекцию!
Начинаю понимать. Если что , отпишусь.
PM MAIL   Вверх
gogzor
Дата 16.2.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 21.9.2006

Репутация: нет
Всего: нет



Люди.

Вот скажите :

Я создал интерфейс.
Прописал там нужный метод .

Потом в каждом классе , где я реализую этот интерфейс , этот метод переопределяется по своему , это же тоже принцип полиморфизма - многоформенности?
PM MAIL   Вверх
FractalizeR
Дата 16.2.2008, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: нет
Всего: 4



Полиморфизм в том, что при вызове этого метода, в зависимости от типа экземпляра будут вызваны разные реализации этого метода. Так что, в принципе, вы правы.

Это сообщение отредактировал(а) FractalizeR - 16.2.2008, 23:05


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
source777
Дата 19.2.2008, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



gogzor, самое понятное определение полиморфизма:
"Полиморфизмом называется свойство некоторых веществ существовать в нескольких кристаллических фазах, отличающихся по симметрии структуры и по свойствам. Каждая из этих фаз, стабильная в определенной области температур и давлений, называется полиморфной модификацией." (с) Шаскольская М.П.

Применительно к программированию это переводится как:
"Полиморфизмом называется свойство некоторых объектов в зависимости от внешних условий вызывать различные полиморфные модификации определенного метода" smile 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Able
Дата 20.2.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 13.6.2006
Где: Тюмень

Репутация: нет
Всего: 2



на пример ВОДА... лед, жидкость, пар  а вещество одно и тоже...

gogzor, да так...
PM MAIL WWW ICQ   Вверх
source777
Дата 20.2.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата

на пример ВОДА... лед, жидкость, пар  а вещество одно и тоже...
Нет, это разные агрегатные состояния... полиморфизм подразумевает одно и то же агрегатное состояние для всех модификаций... Например, тот же лёд обладает множеством полиморфных модификаций... 
Впрочем классический пример полиморфизма - это белое и серое олово, причем такой полиморфизм называют ещё аллотропией, т.к. один химический элемент в соединении. Аллотропия - частный случай полиморфизма, если аллотропные модификации имеют одинаковую хим.формулу (эквивалент для программирования - сигнатура метода)...
Так что наличие методов с разной сигнатурой, но одним именем (проще говоря, перегруженных), правильнее называть аллотропией, а не статическим полиморфизмом, как это принято smile 

Это сообщение отредактировал(а) source777 - 20.2.2008, 22:45


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Exception
Дата 25.2.2008, 01:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 1
Всего: 186



Вы чего-то всё усложняете. Полиморфизм -- это когда мы общаемся с некоторым базовым методом, не волнуясь о том, переопределён ли он в дочерних классах и что на самом деле делает.

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

Код
abstract class Animal {
        public abstract string MakeSound ();
}

class Dog : Animal {
        public override string MakeSound ()
        {
                return "Гав!";
        }
}

class Cat : Animal {
        public override string MakeSound ()
        {
                return "Мяу!";
        }
}


Вся фишка полиморфизма заключается в том, что теперь нам необязательно знать, какой именно класс используется, чтобы вызвать базовый метод, потому что вызвана будет именно переопределённая версия:

Код
class EntryPoint {
        public static void Main ()
        {
                Animal someAnimal = new Cat ();
                Console.WriteLine (someAnimal.MakeSound ()); // "Мяу!"
                Animal anotherAnimal = new Dog ();
                Console.WriteLine (anotherAnimal.MakeSound ()); // "Гав!"

                // Мы даже можем передать экземпляр Dog или Cat в метод, который
                // принимает объекты базового класса Animal, и этот метод
                // сможет вызывать соответствующие реализации MakeSound ()
                // как если бы он вызывал их напрямую у объектов Cat или Dog:
                HandleAnimal (someAnimal); // передаём экземпляр кота -- самому коту это вряд ли понравилось бы
        }

        private static void HandleAnimal (Animal animal)
        {
                // В нашем случае на консоль пять раз будет выведено
                // Cat said Мяу!
                for (int i = 0; i < 5; i++)
                        Console.WriteLine ("{0} said {1}", animal.GetType ().Name, animal.MakeSound ());
        }
}


Это сообщение отредактировал(а) Exception - 25.2.2008, 01:34
PM   Вверх
SKrivosein
Дата 25.2.2008, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



А ещё так с интерфейсами...
Код

namespace CatDog_and_Wafe
{
    class Program
    {
        static void Main(string[] args)
        {

            Cat cat = new Cat();
            Console.WriteLine(cat.GetHabits);
            Dog dog = new Dog();
            Console.WriteLine(dog.GetHabits);
            Wafe wafe = new Wafe();
            Console.WriteLine(wafe.MakeSound());
            Console.WriteLine(wafe.GetHabits);

            //или так...
            Animal someAnimal = new Cat();
            Animal anotherAnimal = new Dog();
            IHasHabits ihabits;
            ihabits = (IHasHabits)someAnimal;
            Console.WriteLine(ihabits.GetHabits);
            ihabits = (IHasHabits)anotherAnimal;
            Console.WriteLine(ihabits.GetHabits);
            ihabits = (IHasHabits)wafe;
            Console.WriteLine(ihabits.GetHabits);
        }
    }
    abstract class Animal
    {
        public abstract string MakeSound();
    }

    class Dog : Animal, IHasHabits
    {
        public override string MakeSound()
        {
            return "Гав!";
        }
        public string GetHabits
        {
            get { return "Виляю хвостом..."; }
        }
    }

    class Cat : Animal, IHasHabits
    {
        public override string MakeSound()
        {
            return "Мяу!";
        }
        public string GetHabits
        {
            get { return "Трусь о ноги..."; }
        }
    }

    class Wafe : IHasHabits          //не родственый класс
    {
        public string MakeSound()
        {
            return "Твою мать!";
        }
        public string GetHabits
        {
            get { return "Bытягую скалку... "; }
        }
    }
    public interface IHasHabits
    {
        string GetHabits { get; }
    }

}


полиморфизм через интерфейсы подержуют и независимые от себя классы.
Авторские права на зверьё у Exception smile 

Это сообщение отредактировал(а) SKrivosein - 27.2.2008, 03:09


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
SKrivosein
Дата 25.2.2008, 03:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



А это мы имеем на диаграмме Visual Studia
user posted image

Это сообщение отредактировал(а) SKrivosein - 26.2.2008, 03:00


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
Exception
Дата 25.2.2008, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 1
Всего: 186



Я бы всё-таки переименовал IHabits в IHasHabits, а MethodHabits -- в GetHabits (или, что ещё лучше, сделал бы read-only свойство Habits вместо метода).
PM   Вверх
SKrivosein
Дата 26.2.2008, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



Извиняюсь,эт я сначала хотел метод написать,а потом в 3 часа ночи переписывать лень было. smile
ИСПРАВИЛ! smile  

Это сообщение отредактировал(а) SKrivosein - 26.2.2008, 03:03


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
Able
Дата 26.2.2008, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 13.6.2006
Где: Тюмень

Репутация: нет
Всего: 2



source777, не о том ты, чудо....  smile 
PM MAIL WWW ICQ   Вверх
source777
Дата 26.2.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(Able @  26.2.2008,  19:20 Найти цитируемый пост)
source777, не о том ты, чудо....   
Почему же не о том, полиморфизм он везде полиморфизм, а что может быть проще, чем понять изначальный смысл слова, тогда уже не составляет труда понять его применение к любой области...  так что не мысли так узко... к тому же любой частный пример не в силах всесторонне описать явление...

Добавлено через 3 минуты и 10 секунд
SKrivosein, в Main можно всё до строки \"//или так...\" включительно удалить, как не имеющее никакого отношения к полиморфизму
P.S. Тема полиморфизма жены не раскрыта!


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Able
Дата 29.2.2008, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 13.6.2006
Где: Тюмень

Репутация: нет
Всего: 2



то как мыслим не тема поста...

Тут конкретный вопрос, что есть это... 
а на такой вопрос можно ответить лишь двумя группами способов, других просто нет
Первая это Интенциональная группа - самый простой способ, просто показать пальцем вот смотри. (пример с водой) и 
вторая это Дескриптивный или дефинитивный, т.е. описать максимально, что есть это для выделения его из мира вещей... как сделал Exeption?
вы же описываете своими словами (хочешь объяснить говори на детском языке), не говорите на одном языке с человеком задавшим вопрос!

Вообще на месте задающего вопрос я бы обратился к этимологии слова ПОЛИМОРФ что это и как это... почему ИЗМ...
Полиморфизм — от греч. poly — много и morphe — форма 
Полиморфизм в биологии, наличие в пределах одного вида резко отличных по облику особей, не имеющих переходных форм.
Классический пример - оборотень... сущность одна, а форма разная, как у воды! (сущность т.е. существенное, физика с химией тут не причем)

В программировании же общая идея такова "один интерфейс, множество методов". 

Цитата

Например, для языка Си, в котором полиморфизм поддерживается недостаточно, нахождение абсолютной величины числа требует трёх различных функций: abs(), labs() и fabs(). Эти функции подсчитывают и возвращают абсолютную величину целых, длинных целых и чисел с плавающей точкой соответственно. В С++ каждая из этих функций может быть названа abs(). Тип данных, который используется при вызове функции, определяет, какая конкретная версия функции действительно выполняется. В С++ можно использовать одно имя функции для множества различных действий. Это называется перегрузкой функций (function overloading).


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


Это сообщение отредактировал(а) Able - 29.2.2008, 03:33
PM MAIL WWW ICQ   Вверх
source777
Дата 29.2.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(Able @  29.2.2008,  03:32 Найти цитируемый пост)
Тут конкретный вопрос, что есть это... 
Не занудствуй

Цитата(Able @  29.2.2008,  03:32 Найти цитируемый пост)
Классический пример - оборотень... сущность одна, а форма разная
Фантастика не может быть классическим примером...

Цитата(Able @  29.2.2008,  03:32 Найти цитируемый пост)
как у воды
Вода, как и любая жидкость, не обладает полиморфизмом, сколько раз это надо повторить, чтобы до тебя дошло? перечитывай определение, пока не врубишься:
Цитата
"Полиморфизмом называется свойство некоторых веществ существовать в нескольких кристаллических фазах, отличающихся по симметрии структуры и по свойствам. Каждая из этих фаз, стабильная в определенной области температур и давлений, называется полиморфной модификацией."


Цитата(Able @  29.2.2008,  03:32 Найти цитируемый пост)
В программировании же общая идея такова "один интерфейс, множество методов". 
Это ты чьими словами сказал? Впрочем неважно, ибо никакого отношения к полиморфизму эта фраза не имеет...



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Able
Дата 14.3.2008, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 13.6.2006
Где: Тюмень

Репутация: нет
Всего: 2



Все это Троелсен и Страструп  smile 
PM MAIL WWW ICQ   Вверх
CareyDom
Дата 1.7.2022, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 30.6.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
TaskGangster
Дата 23.7.2022, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 21.7.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1921 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.