Подтвердить что ты не робот

Полиморфизм - определение только двух предложений

Я посмотрел на другие определения и объяснения, и никто из них не удовлетворил меня. Я хочу узнать, может ли кто-нибудь определить полиморфизм не более чем в двух предложениях без использования какого-либо кода или примеров. Я не хочу слышать "Итак, у вас есть человек/автомобиль/консервный нож..." или как получается слово (никто не впечатлен тем, что вы знаете, что означает поли и морф). Если у вас есть очень хорошее представление о том, что такое полиморфизм и хорошо владейте английским языком, вы должны быть в состоянии ответить на этот вопрос в кратком, хотя и плотном, определении. Если ваше определение точно определяет полиморфизм, но настолько плотно, что требует нескольких считываний, то это именно то, что я ищу.

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

Полиморфизм против перегрузки и перегрузки
Попробуйте описать полиморфизм так легко, как вы можете

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

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

4b9b3361

Ответ 1

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

(*) В идеальном случае, во всяком случае, очевидно, что часто вызывающий код очень правильно выбрал соответствующую реализацию!

Ответ 2

Фрукты можно есть, как правило, но разные виды фруктов едят по-разному. Яблоко, которое является плодом, можно есть (потому что это плод). Банан можно также съесть (потому что это также плод), но по-другому от яблока. Сначала вы очищаете его.

Ну, по крайней мере, я знаю, но я странный в некоторых манерах, так что я знаю.

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

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

Ответ 3

Полиморфизм объявляет единый интерфейс, который не знает тип, оставляя детали реализации конкретным типам, реализующим интерфейс.

Ответ 4

Собственно, существует несколько форм полиморфизма, и вокруг него есть довольно противоречие; вы даже можете увидеть профессоров CS, которые не могут определить его должным образом. Мне известны три типа:

  • ad-hoc полиморфизм (выглядит как утка и ходит как утка = > утка). Например, можно увидеть в Haskell и Python.

  • общий полиморфизм (где тип - это экземпляр некоторого родового типа). Можно увидеть в С++ например (вектор int и вектор строки имеют размер функции-члена).

  • Политизм подтипа (где тип наследуется от другого типа). Можно увидеть на большинстве языков программирования OO (т.е. Треугольник - это форма).

Ответ 5

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

Ответ 6

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

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

Ответ 7

Определение

Полиморфизм - это 10-долларовое слово для идеи за 1 доллар - что, когда я прошу что-то сделать, мне все равно, как это достигается, если конечный результат уместен. Пока услуга предоставляется правильно, я не забочусь о ее реализации.

Обсуждение

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

Примеры

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

Когда я хочу распечатать документ, я его распечатаю. Меня не волнует язык реализации, бренд принтера, стиль подключения, выбор расходных материалов или качество бумаги.

Ответ 8

Несколько реализаций одного и того же интерфейса.

Пример. Многие модели телефонов реализуют интерфейс цифровой клавиатуры.

Ответ 9

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

Хорошо, что трудно....

Ответ 10

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

Павел.

Ответ 11

полиморфизм == несколько классов + одинаковые сигнатуры методов + поведение, специфичное для класса.

Ответ 12

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

Это довольно общий, но единственный способ, с помощью которого я могу обернуть все три типа полиморфизмов, о которых я знаю: ad hoc, parametric и subtype. Ниже я расскажу подробнее, и отсортировал типы полиморфизма по имени, в алфавитном порядке. Тот, который вам интересен, скорее всего, является подтипом полиморфизма, который является последним.

Специальный полиморфизм

Специальный полиморфизм является актом предоставления нескольких реализаций одного и того же метода для разных типов параметров. В OOP, он обычно известен как перегрузка метода. Например:

public String format(int a) {
    return String.format("%2d", a);
}

public String format(Date a) {
    return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(a);
}

Оба метода format используют один интерфейс, но они работают с объектами разных типов.

Параметрический полиморфизм

Параметрический полиморфизм - это действие, при котором класс (или метод) работает над типом, который сам является параметром класса (или метода). Это часто называют дженериками.

Например, Java List[T] ожидает параметр T во время создания экземпляра, и этот параметр определяет тип результирующего объекта.

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

List[String] и List[Date] обмениваются одним интерфейсом, но работают с (и являются) разными типами.

Политип подтипа

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

Чтобы использовать обычный пример: Animal предоставляет контракт, который должны соблюдаться всеми реализациями. Dog является Animal и поддерживает все операции, которые Animal объявляет. В соответствии с принципом подстановки Лискова, это позволяет использовать экземпляр Dog, где ожидается экземпляр Animal (но не наоборот).

Если Cat и Dog - оба подкласса Animal, то они имеют один интерфейс, но на самом деле разные типы.

Я собираюсь здесь немного касаться, но полиморфизм подтипа (я думаю) единственный, который позволяет переопределить: действие переопределения поведения метода, определенного родительским классом. Это часто путают с перегрузкой, которая, как мы видели ранее, является типом полиморфизма и на самом деле не нуждается в подклассов (а также не требует классов).

Ответ 13

Кажется, что здесь содержатся лучшие определения, поэтому позвольте мне добавить два цента, пожалуйста, только для других наблюдателей. Надеюсь, это может помочь.

Существует два вида полиморфизма:

1. Compile-time (static) polymorphism or (ad hoc) polymorphism.

Это просто перегрузка метода и перегрузка оператора

2.  Run time or (dynamic) polymorphism.

Первый термин наследуется от терминов Java и С++.

Но в терминологии .NET только второй (я имею в виду полиморфизм времени выполнения) действительно считается полиморфизмом и просто называется полиморфизм.

И насколько я знаю, существует три метода для реализации (время выполнения) полиморфизма.

 1. Parametric polymorphism or simply the use of generics (templates in C++).

 2. Inheritance-based polymorphism or subtyping.

 3. Interface-based polymorphism.

Простой пример полиморфизма на основе интерфейса:

interface Imobile
{
    void Move();
}

class Person :Imobile
{
    public void Move() { Console.WriteLine("I am a person and am moving in my way."); }
}

class Bird :Imobile
{
    public void Move() { Console.WriteLine("I am a bird and am moving in my way."); }
}

class Car :Imobile
{
    public void Move() { Console.WriteLine("I am a car and am moving in my way."); }
}


class Program
{

    static void Main(string[] args)
    {
        // Preparing a list of objects
        List<Imobile> mobileList = new List<Imobile>();

        mobileList.Add(new Person());
        mobileList.Add(new Bird());
        mobileList.Add(new Car());

        foreach (Imobile mobile in mobileList)
        {
            mobile.Move();
        }

        // Keep the console open
        Console.WriteLine("Press any key to exit the program:");
        Console.ReadKey();
    }
}

Вывод:

 I am a person and am moving in my way.
 I am a bird and am moving in my way.
 I am a car and am moving in my way.
 Press any key to exit the program:

Ответ 14

Несколько форм одного объекта называются полиморфизмом.

Ответ 15

Полиморфизм - это способность объекта появляться и вести себя по-разному для одного и того же вызова. ex: каждое животное появляется и звучит по-разному (когда вы ударяете его:))

Ответ 16

Полиморфизм - это особенность языков программирования, которая позволяет рассматривать объект как экземпляр его супертипа.

Ответ 17

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

Ответ 18

Полиморфизм

Различные объекты могут реагировать на одно и то же сообщение различными способами, позволяя объектам взаимодействовать друг с другом, не зная их точного типа.

Via: http://www.agiledata.org/essays/objectOrientation101.html

Ответ 19

Это определение, которое я всегда соблюдал:

Два объекта являются полиморфными (по отношению к конкретному протоколу) между ними, если оба отвечают на одни и те же сообщения с той же семантикой.

Полиморфизм относится к сообщениям, заключается в возможности отвечать на один и тот же набор сообщений одной и той же семантикой.

Если два объекта CAN ответят на пустое? но семантика сообщения отличается, тогда.. они не являются полиморфными.

Ответ 20

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

Ответ 21

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

Ответ 22

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

(Типы поддержки С++ перечислены и сопоставлены в моем ответе: Полиморфизм в С++)

Ответ 23

Объекты одного типа (т.е. реализующие один и тот же интерфейс или производные от одного класса) ведут себя по-разному (под тем же именем метода).

Ответ 24

Концепция полиморфизма в последнее время стала явлением. Вот фактический дрейф. Runtime определяет, какой подтет должен быть вызван ссылкой суперкласса. Теперь, что на практике означает? Это на самом деле ничего не значит. Вы можете просто кодировать без полиморфизма. Итак, почему? Потому что, если у нас нет полиморфизма, нам нужно запомнить все определения функций подкласса. Полиморфизм спасает нас от этого на практике.

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

List list = new List();

но если вы проверите IList, вы можете воспользоваться интерфейсом как:

IList list = new List();

и свободно используйте ссылку IList. Предполагая, что IList также реализуется в другом классе, вы можете использовать методы этого неизвестного класса с помощью ссылки IList снова, не пытаясь запомнить это имя класса. Замечательно, не так ли?

Теперь появится более ценная информация:
Java по умолчанию является полиморфным, тогда как .NET и С++ в MS нет, вы должны объявить базовую функцию virtual (и ключевое слово .NET override).

Кроме того, в полиморфизме существует 2 интегральных правила. Один из них - наследование (через интерфейс impl или через расширение класса), а другое - переопределение. Без переопределения полиморфизма не существует. Обратите внимание, что перегрузка метода (которая всегда находится в одном классе) также является типом "минималистического" полиморфизма.

Ответ 25

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

Ответ 26

Для данной сигнатуры метода разные реализации методов выполняются для разных классов, связанных с иерархией.

Ответ 27

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

Т.е.: в Java, поскольку ArrayList и LinkedList реализуют List, если вы объявляете переменную как List, вы всегда можете выполнять операции, разрешенные в List, независимо от того, была ли указана переменная как ArrayList или LinkedList.

Ответ 28

Полиморфизм - это способность функции автоматически адаптироваться к принятию входных данных разных типов данных. Вы можете "добавить" два удвоения "1.1" и "2.2" и получить "3.3" или "Добавить" две строки "Stack" и "Overflow" и получить "StackOverflow".

Ответ 29

Я предполагаю, что иногда объекты динамически вызываются. Вы не уверены, будет ли объект треугольником, квадратом и т.д. В классической форме poly. пример.

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

Вам будет безразлично, будет ли его квадрат, треугольник или прямоугольник. Вы просто заботитесь об этом районе. Следовательно, метод getArea будет вызываться в зависимости от переданного динамического объекта.

Ответ 30

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