Вопросы с тегом «inheritance»

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

143
Откуда взялась эта концепция «отдавать предпочтение композиции перед наследованием»?

В последние несколько месяцев, мантра «композиция благосклонности вместо наследования», кажется, возникла из ниоткуда и стала почти своего рода мемом в сообществе программистов. И каждый раз, когда я вижу это, я немного озадачен. Это как кто-то сказал: «Скорее тренируйся, чем молотки». По моему...

123
Есть ли «реальная» причина, по которой множественное наследование ненавидят?

Мне всегда нравилась идея поддержки множественного наследования в языке. Чаще всего это преднамеренно, и предполагаемая «замена» - это интерфейсы. Интерфейсы просто не охватывают все то же основание, что и множественное наследование, и это ограничение может иногда приводить к дополнительному...

109
Почему я должен предпочесть композицию наследству?

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

105
Почему квадратное наследование от Rectangle будет проблематичным, если мы переопределим методы SetWidth и SetHeight?

Если Квадрат является типом Прямоугольника, то почему Квадрат не может наследовать от Прямоугольника? Или почему это плохой дизайн? Я слышал, как люди говорят: Если вы сделали Square производным от Rectangle, то Square должен использоваться везде, где вы ожидаете прямоугольник В чем здесь проблема?...

70
Когда использовать абстрактные классы вместо интерфейсов с методами расширения в C #?

«Абстрактный класс» и «интерфейс» являются похожими понятиями, причем интерфейс является более абстрактным из двух. Одним из отличительных факторов является то, что абстрактные классы предоставляют реализации методов для производных классов, когда это необходимо. Однако в C # этот дифференцирующий...

62
Почему хорошо разбить программу на несколько классов? [закрыто]

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

55
Действительно ли ОО-программирование так же важно, как это делают компании по найму? [закрыто]

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

54
Как миксины или признаки лучше, чем обычное множественное наследование?

C ++ имеет простое множественное наследование, многие языковые схемы запрещают его как опасное. Но некоторые языки, такие как Ruby и PHP, используют странный синтаксис, чтобы делать то же самое и называть это миксинами или чертами. Я много раз слышал, что миксином / признаками сложнее...

50
Что такое система типов?

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

48
LSP vs OCP / Замена Лискова VS Open Закрыть

Я пытаюсь понять твердые принципы ООП и пришел к выводу, что у LSP и OCP есть некоторые сходства (если не сказать больше). принцип открытого / закрытого состояния гласит, что «программные объекты (классы, модули, функции и т. д.) должны быть открыты для расширения, но закрыты для модификации»....

39
Зачем наследовать класс, а не добавлять свойства?

Я нашел дерево наследования в нашей (довольно большой) базе кода, которая выглядит примерно так: public class NamedEntity { public int Id { get; set; } public string Name { get; set; } } public class OrderDateInfo : NamedEntity { } Из того, что я мог бы собрать, это прежде всего используется, чтобы...

37
Подклассы только для конструктора: это анти-шаблон?

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

37
Является ли создание подклассов для конкретных случаев плохой практикой?

Рассмотрим следующий дизайн public class Person { public virtual string Name { get; } public Person (string name) { this.Name = name; } } public class Karl : Person { public override string Name { get { return "Karl"; } } } public class John : Person { public override string Name { get { return...

37
Являются ли абстрактные классы / методы устаревшими?

Я использовал для создания много абстрактных классов / методов. Затем я начал использовать интерфейсы. Теперь я не уверен, что интерфейсы не делают абстрактные классы устаревшими. Вам нужен полностью абстрактный класс? Вместо этого создайте интерфейс. Вам нужен абстрактный класс с некоторой...

36
Как определить, что метод может быть переопределен более сильным обязательством, чем определение, что метод может быть вызван?

От: http://www.artima.com/lejava/articles/designprinciples4.html Эрих Гамма: Я все еще думаю, что это правда, даже после десяти лет. Наследование - это крутой способ изменить поведение. Но мы знаем, что это хрупко, потому что подкласс может легко делать предположения о контексте, в котором...

36
Является ли «композиция над наследством» нарушением «сухого принципа»?

Например, предположим, у меня есть класс для расширения других классов: public class LoginPage { public String userId; public String session; public boolean checkSessionValid() { } } и некоторые подклассы: public class HomePage extends LoginPage { } public class EditInfoPage extends LoginPage { }...

35
Когда мне следует расширить класс Java Swing?

Мое текущее понимание реализации Наследования состоит в том, что следует расширять класс только при наличии отношения IS-A . Если родительский класс может дополнительно иметь более конкретные дочерние типы с различной функциональностью, но будет совместно использовать общие элементы,...

34
Являются ли Python mixins анти-паттерном?

Я полностью осознаю, что pylintи другие инструменты статического анализа не являются всезнающими, и иногда их советам нужно не подчиняться. (Это относится к различным классам сообщений, а не только к convention.) Если у меня есть классы, такие как class related_methods(): def a_method(self):...

34
В разработке Java обычно используется больше подклассов, чем в C # / .NET?

Я недавно начал смотреть на разработку Android. Это вернуло меня в мир разработки программного обеспечения на Java. В прошлый раз, когда я работал с Java, я должен признать, что ООП я не понимал почти так же, как (я думаю), что я делаю сейчас. Поскольку я в основном использовал C # в своей карьере,...