Какая концепция OO "Base b = new Derived()" пример?

Я проходил тест и встречал вопрос, в котором мы не нашли соглашения с моими коллегами.

C++

  1 class Base {};
  2 class Derived : public Base {};
  3 class Foo
  4 {
  5 public:
  6     Foo()
  7     {
 -8-         Base* b = new Derived(); // Concept name is?
  9     }
 10 };

С#

  1 abstract class Base{}
  2 public class Derived : Base{}
  3
  4 public class Foo
  5 {
  6    public Foo
  7    {
 -8-        Base b = new Derived(); // Concept name is?
  9    }
 10 }

Возникает вопрос: строка № 8 выше является примером следующей концепции оо

  • Полиморфизм
  • Агрегация
  • Герметизация
  • Абстракция
  • Наследование

Пожалуйста, поставьте ссылку с ответом на источник знаний.

P.S. Тест представляет собой "OO Concept" на breinbench. Это бесплатно.

Обновление:

Из одного ответа, защищающего полиморфизм

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

Из википедии, которая защищает наследование

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

и

Наследование поэтому имеет другое вид, двойной, называемый полиморфизм, который описывает многие фрагменты кода контролируется совместным управлением код.

поэтому Base = new Derived() показывает 'is' (наследование). И последствием этого является полиморфизм.

Так что я сомневаюсь, что правильно?

Ответ 1

Этот вопрос легко... Это Полиморфизм.

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

http://en.wikipedia.org/wiki/Polymorphism_(computer_science)

[Обновить, обновить]

Надеюсь, что это достаточно верно... все это разные способы сказать одно и то же.

Полиморфизм (Руководство по программированию на С#)

"Через наследование класс может быть используется как несколько типов; может быть используется как собственный тип, любые базовые типы, или любого типа интерфейса, если он реализует интерфейсы. Это называется полиморфизм".

[Обновление]

Учитывая комментарии, я постараюсь быть более конкретным... Я не говорю, что, поскольку Derived наследует от Base, что строка является примером полиморфного поведения, я говорю, что назначение экземпляра переменной переменной тип, из которого он происходит, является примером полиморфного поведения. Чтобы процитировать первое предложение ссылки, я приложил...

"В информатике полиморфизм функция языка программирования, которая позволяет использовать значения разных типов данных для обработки с использованием однородного Интерфейс"

Смысл в том, что я могу рассматривать экземпляр Derived как экземпляр Base, демонстрирующий поведение Polymorphic. Это не зависит от существования виртуальных методов в классе.

и другую цитату из другого источника...

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

Ответ 2

Реальный ответ: плохо сформированный и, следовательно, бессмысленный вопрос.

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

Ответ 3

Этот фрагмент примерно Inheritance

Краткий обзор понятий

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

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

Наследование - это взаимосвязь между производными классами и базовыми классами и категоризацией понятий. Он определяет отношения "is-a" между слишком сущностями, добавляя способность использовать производные классы, где ожидается база.

Полиморфизм означает, что два объекта похожи в интерфейсе, но ведут себя по-разному (подумайте о методах virtual).

Агрегация определяет взаимосвязь "has-a" между двумя понятиями. Означает, что объект состоит из другого объекта.

Ответ 4

Я думаю, что разнообразие ответов показывает, что это плохо сконструированный вопрос.

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

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

Ответ 5

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

Наследование больше связано с наследованием членов и/или реализаций членов от родительского к дочернему (от базового до производного, от супер до суб, абстрактного к конкретному) классу.

Я вижу, что разрешение виртуальных функций на конкретную реализацию как свойство полиморфизма не отвлекается на отсутствие разрешения виртуальной функции в этом примере.

Ответ 6

Ответ - полиморфизм.

См. http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming.

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

Определение полиморфизма в простейших терминах хорошо комментируется статьей wikipedia:

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

Конечно, строка 8 является примером объекта , отображающего, типа Base, но на самом деле имеет тип Derived

Ответ 7

  • Полиморфизм

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

    • нет, потому что Base * b не является членом
  • Инкапсуляция

    • не вижу того, что мы инкапсулировали.. кроме реализации конструктора
  • Абстрактные

    • Я думаю - да - мы будем использовать более абстрактный класс, а затем создадим
  • Наследование

    • связь между базой и производным является наследованием - но вы спрашивали о строке назначения

ИЗМЕНИТЬ

Абстракция упрощает комплекс реальность по классам моделирования соответствующей проблеме, и работая на наиболее подходящем уровне наследования для данного аспекта проблема.

определение из wikipedia - http://en.wikipedia.org/wiki/Object_oriented

Ответ 9

Я думаю, что простой код здесь лучше всего описывается как пример подтипирования (http://en.wikipedia.org/wiki/Subtype). В терминологии объектно-ориентированного программирования полиморфизм относится к способности подклассов изменять или специализировать поведение, определенное в базовом классе (http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming). Этот пример на самом деле не показывает этого.

Из вариантов, перечисленных в brainbench, я полагаю, что наследование имеет наибольшее значение просто потому, что оно наиболее расплывчато.

Ответ 10

Это не является прямым выбором.

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

Это не касается непосредственно наследования, потому что выделенный код не делает никакого наследования. Строка 2 - это наследование.

Это, конечно, не об абстракции, инкапсуляции или агрегации, потому что, ну, это не так близко к этим вещам.

Концепция наиболее непосредственно иллюстрирует автоматическое литье.