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

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

4
Наследование против миксинов в динамических языках?
Когда следует предпочитать шаблоны наследования миксинам в динамических языках? Под миксинами я имею в виду собственно правильное микширование, как при вставке функций и элементов данных в объект во время выполнения. Когда бы вы использовали, например, наследование прототипа вместо миксинов? Чтобы проиллюстрировать, что я имею в виду под mixin, приведем псевдокод: …

1
Почему (/ сделал) Бертран Мейер считает, что создание подклассов - единственный способ расширить «закрытый» модуль?
В Построении объектно-ориентированного программного обеспечения Мейера (1988) он определяет принцип открытия / закрытия следующим образом: Модуль будет считаться открытым, если он все еще доступен для расширения. Например, должна быть возможность добавить поля к структурам данных, которые он содержит, или новые элементы к набору функций, которые он выполняет. Модуль считается закрытым, …

3
Есть ли конкретное название для парадокса «Квадрат наследует от прямоугольника»?
Определенная ошибка ООП показана с классом Square, унаследованным от Rectangle, где логически Square является специализацией Rectangle и поэтому должен наследовать от него, но все рушится, когда вы пытаетесь изменить длину или ширину Square. Есть ли конкретный термин для описания того, что происходит с этим случаем?

5
Когда использовать наследование, когда использовать «просто логическое поле»?
В нашем приложении Rails мы добавляем уведомления. Вот некоторые из них blocking: Они останавливают прогресс любого ресурса, к которому они добавлены, потому что некоторая информация об этом ресурсе отсутствует. Другие уведомления являются простыми уведомлениями и предоставляют только информацию. Сегодня у меня была дискуссия с другим программистом в нашей команде. Я …

4
Когда перемещать общее поле в базовый класс?
В настоящее время у меня есть два производных класса, Aи Bоба имеют общее поле, и я пытаюсь определить, должно ли оно перейти в базовый класс. На него никогда не ссылаются из базового класса, и говорят, что если в какой-то момент в будущем будет получен другой класс, Cкоторый не имеет _field1, …

4
Почему в Java нет модификатора доступа «только для подклассов»?
В Java есть четыре доступных модификатора доступа для методов: public - любой класс может использовать этот метод. protected - классы в одном пакете и подклассы в любом пакете могут использовать этот метод. private - только этот класс может использовать этот метод. no modifier («пакет приватный») - только классы в одном …

14
Как я могу объяснить полезность Наследования? [закрыто]
В настоящее время этот вопрос не очень подходит для нашего формата вопросов и ответов. Мы ожидаем, что ответы будут подтверждены фактами, ссылками или опытом, но этот вопрос, скорее всего, вызовет дебаты, споры, опрос или расширенное обсуждение. Если вы считаете, что этот вопрос можно улучшить и, возможно, вновь открыть, обратитесь за …

1
Как проверить принцип подстановки Лискова в иерархии наследования?
Вдохновленный этим ответом: Лиск принцип замещения требует , что Предпосылки не могут быть усилены в подтипе. Постусловия не могут быть ослаблены в подтипе. Инварианты супертипа должны быть сохранены в подтипе. Ограничение истории («правило истории»). Объекты считаются изменяемыми только через их методы (инкапсуляция). Поскольку подтипы могут вводить методы, которых нет в …

6
Реальные сценарии для защищенных методов
Сегодня я заметил, что я в основном никогда не использую protectedметоды в коде C ++, потому что я редко чувствую необходимость вызывать непубличные методы родителя. Я использую защищенный в Java в шаблоне шаблонного метода, но так как вы можете переопределить закрытые методы в C ++, мне это тоже не нужно …

8
«Предпочитаю композицию наследованию» - единственная причина защищаться от изменений подписи?
Эта страница поддерживает композицию перед наследованием со следующим аргументом (перефразировав его в моих словах): Изменение в сигнатуре метода суперкласса (который не был переопределен в подклассе) во многих случаях вызывает дополнительные изменения, когда мы используем наследование. Однако, когда мы используем Композицию, необходимые дополнительные изменения происходят только в одном месте: подклассе. Неужели …

2
Как избежать написания множества сквозных функций в оболочке?
У меня есть класс, который оборачивает другой класс общего базового типа. Поскольку интерфейс базового типа довольно большой, это требует написания множества сквозных функций. Я ищу способ избежать этого. Давайте сделаем пример: Car / \ Volvo VolvoWithTrailer Теперь мне нужно реализовать каждую функцию в автомобильном интерфейсе для VolvoWithTrailer и вызвать соответствующую …

3
Композиция по наследству, но
Я пытаюсь научиться программировать и сталкиваюсь с противоречивой информацией, которая сбивает меня с толку. Я изучал ООП и что такое абстрактные классы / интерфейсы и как их использовать, но потом я читаю, что нужно «отдавать предпочтение композиции, а не наследованию». Я понимаю, что композиция - это когда один класс создает …

2
Почему базовый класс должен иметь здесь виртуальный деструктор, если производный класс не выделяет необработанную динамическую память?
Следующий код вызывает утечку памяти: #include <iostream> #include <memory> #include <vector> using namespace std; class base { void virtual initialize_vector() = 0; }; class derived : public base { private: vector<int> vec; public: derived() { initialize_vector(); } void initialize_vector() { for (int i = 0; i < 1000000; i++) { …

5
Наследование против дополнительного свойства с нулевым значением
Для классов с необязательными полями лучше использовать наследование или свойство, допускающее значение NULL? Рассмотрим этот пример: class Book { private String name; } class BookWithColor extends Book { private String color; } или class Book { private String name; private String color; //when this is null then it is "Book" …
12 java  inheritance  class  null 

3
Считается ли интерфейс «пустым», если он наследуется от других интерфейсов?
Насколько я могу судить, пустые интерфейсы, как правило, считают плохой практикой, особенно когда такие вещи, как атрибуты, поддерживаются языком. Однако считается ли интерфейс «пустым», если он наследуется от других интерфейсов? interface I1 { ... } interface I2 { ... } //unrelated to I1 interface I3 : I1, I2 { // …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.