Зачем нужно наследование
От: BlackEric http://black-eric.lj.ru
Дата: 23.12.17 11:16
Оценка:
Хожу я тут по собеседованиям. И вот уже дважды меня спросили зачем нужно наследование.
Ответ, что для расширения и переопределения функционала базовых классов их не устроил. В пример начинаю приводить декоратор, C# extension methods и .т. д.

Что-то я не могу даже нагуглить какой ответ там ожидался.
https://github.com/BlackEric001
Re: Зачем нужно наследование
От: Amon_RA Россия  
Дата: 23.12.17 11:26
Оценка: :)
Здравствуйте, BlackEric, Вы писали:

Я бы ответил, что для прокидывания интерфейса. Например, COM. Ты не знаешь что внутри, но знаешь что поддерживает тот или иной интерфейс и уже можешь работать с этим.
Re[2]: Зачем нужно наследование
От: BlackEric http://black-eric.lj.ru
Дата: 23.12.17 12:57
Оценка: :)
Здравствуйте, Amon_RA, Вы писали:

A_R>Здравствуйте, BlackEric, Вы писали:


A_R>Я бы ответил, что для прокидывания интерфейса. Например, COM. Ты не знаешь что внутри, но знаешь что поддерживает тот или иной интерфейс и уже можешь работать с этим.


Не уверен. В C++ интерфейсов нет, а наследование есть.
https://github.com/BlackEric001
Re: Зачем нужно наследование
От: iZEN СССР  
Дата: 23.12.17 13:01
Оценка: 1 (1) -6 :)
Здравствуйте, BlackEric, Вы писали:

BE>Хожу я тут по собеседованиям. И вот уже дважды меня спросили зачем нужно наследование.

BE>Ответ, что для расширения и переопределения функционала базовых классов их не устроил. В пример начинаю приводить декоратор, C# extension methods и .т. д.

LSP — входит в пять принципов ООП — SOLID.

BE>Что-то я не могу даже нагуглить какой ответ там ожидался.


Вот и выросло поколение ЕГЭ, избегающее думать и задумываться.
Отредактировано 23.12.2017 13:03 iZEN . Предыдущая версия .
Re[2]: Зачем нужно наследование
От: BlackEric http://black-eric.lj.ru
Дата: 23.12.17 13:03
Оценка:
Здравствуйте, iZEN, Вы писали:

ZEN>Здравствуйте, BlackEric, Вы писали:


BE>>Хожу я тут по собеседованиям. И вот уже дважды меня спросили зачем нужно наследование.

BE>>Ответ, что для расширения и переопределения функционала базовых классов их не устроил. В пример начинаю приводить декоратор, C# extension methods и .т. д.

ZEN>https://ru.wikipedia.org/wiki/Принцип_подстановки_Барбары_Лисков

ZEN>- входит в пять принципов ООП — SOLID.

А можно подробнее, что я не понял связь принципа подстановки и наследования.
https://github.com/BlackEric001
Re: Зачем нужно наследование
От: Qt-Coder  
Дата: 23.12.17 13:11
Оценка: +4
Здравствуйте, BlackEric, Вы писали:

BE>Что-то я не могу даже нагуглить какой ответ там ожидался.

Для уменьшения копи-паста.
Re: Зачем нужно наследование
От: torvic Голландия  
Дата: 23.12.17 13:13
Оценка: +2
я не заморачиваюсь и просто спрашиваю, что ожидалось услышать
правда, я и хожу, последнее время, джаст фо фан
*в большинстве случаев, долго ржу (не вслух)
Re: Зачем нужно наследование
От: reversecode google
Дата: 23.12.17 13:21
Оценка: +2
уже устал повторять, не заморачивайтесь
если хотят нанять, наймут
даже без опыта или плохо решенного задания итд
Re[2]: Зачем нужно наследование
От: reversecode google
Дата: 23.12.17 13:25
Оценка:
про солид итд спрашивают обычно в контексте про ооп, оод, паттерны проектирования итд

хотя можно было бы ответить тип — наследование нужно для уменьшения избыточности
но это все разный угол на одну и туже точку, что ожидал в ответ собеседующий никто не узнает
Re: Зачем нужно наследование
От: L_G Россия  
Дата: 23.12.17 16:17
Оценка:
BE> зачем нужно наследование

1) для DRY ("Каждая часть знания должна иметь единственное, непротиворечивое и авторитетное представление в рамках системы") — общий для разных наследников код реализуется в их предке, заодно и общие поля данных в нём описываются (обычно когда все классы пишет один программист)

2) (то что вы собственно ответили) для удобства расширения по принципу открытости/закрытости — O в SOLID (обычно когда наследников пишет уже другой программист)
Каша в голове — пища для ума (с)
Re[2]: Зачем нужно наследование
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 23.12.17 18:06
Оценка: +5
Здравствуйте, iZEN, Вы писали:

BE>>Хожу я тут по собеседованиям. И вот уже дважды меня спросили зачем нужно наследование.

BE>>Ответ, что для расширения и переопределения функционала базовых классов их не устроил. В пример начинаю приводить декоратор, C# extension methods и .т. д.

ZEN>LSP — входит в пять принципов ООП — SOLID.


Это не причина использования наследования, а ограничение на это использование.

BE>>Что-то я не могу даже нагуглить какой ответ там ожидался.


ZEN>Вот и выросло поколение ЕГЭ, избегающее думать и задумываться.


А какое поколение отличается неумением читать вопрос и ответами на то, что не спрашивалось?
The God is real, unless declared integer.
Re: Перед этим спрашивали "Что такое наследование?"?
От: igor-booch Россия  
Дата: 23.12.17 18:39
Оценка:
Перед тем как задать вопрос "Зачем нужно наследование?", спрашивали "Что такое наследование?" ?
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания
http://rsdn.ru/Info/rules.xml
Re: Зачем нужно наследование
От: Osaka  
Дата: 23.12.17 18:45
Оценка: +2
BE>Хожу я тут по собеседованиям. И вот уже дважды меня спросили зачем нужно наследование.
Это один из приёмов повторного использования кода.
BE>Ответ, что для расширения и переопределения функционала базовых классов их не устроил. В пример начинаю приводить декоратор, C# extension methods и .т. д.
Приёмов повторного использованя кода много, сравнительная эффективность сильно зависит от исполнителя, у каждого может оказаться свой любимый инструментарий.
BE>Что-то я не могу даже нагуглить какой ответ там ожидался.
Нужно угадать и спеть почитаемые именно этими собоседователями мантры и паттерны.
Re[3]: Зачем нужно наследование
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 23.12.17 19:01
Оценка:
Здравствуйте, BlackEric, Вы писали:

A_R>>Я бы ответил, что для прокидывания интерфейса. Например, COM. Ты не знаешь что внутри, но знаешь что поддерживает тот или иной интерфейс и уже можешь работать с этим.

BE>Не уверен. В C++ интерфейсов нет, а наследование есть.

Если следовать классике жанра C++, то считается, что интерфейс в нём это:
1. Открытые члены класса
2. Шаблон проектирования

И то и другое в C++ легко реализуемо и по сути является базовыми понятиями. Нет лишь специального ключевого слова, как в некоторых других известных языках программирования. Хотя если брать более продвинутые реализации такие как Qt, стоит отметить, что там интерфейсы ушли далеко вперёд, в частности это хорошо видно в плагиностроении.
Re[2]: Зачем нужно наследование
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 23.12.17 19:24
Оценка: +1
Здравствуйте, Amon_RA, Вы писали:

A_R>Я бы ответил, что для прокидывания интерфейса. Например, COM. Ты не знаешь что внутри, но знаешь что поддерживает тот или иной интерфейс и уже можешь работать с этим.


Это уже не просто наследование, а больше полиморфизм. Но раз уж они были упомянуты, то можно ещё спросить и про инкапсуляцию. Хотя с другой стороны зачем спрашивать. Может всё это повод задуматься, может быть наследование и не нужно вовсе и эффективнее использовать агрегирование, а то и вовсе переходить на другую парадигму программирования, то есть не ООП. По большому счёту наследование это понятие из материальной логики, именно оттуда программисты и взяли это и многое другое.
Re: Зачем нужно наследование
От: Cyberax Марс  
Дата: 24.12.17 08:49
Оценка: +1 -3 :))) :)))
Здравствуйте, BlackEric, Вы писали:

BE>Хожу я тут по собеседованиям. И вот уже дважды меня спросили зачем нужно наследование.

Чтобы скрытно увеличить связность и добавить неочевидные взаимодействия. Украсить случайными перекрытиями функций базового класса.
Sapienti sat!
Re[2]: Зачем нужно наследование
От: Masterspline  
Дата: 24.12.17 12:45
Оценка: 3 (1)
ZEN>LSP — входит в пять принципов ООП — SOLID.

На самом деле наследование используется для двух вещей:
  1. наследование интерфейса (и тут LSP рулит, потому что такое наследование говорит, что производный класс является и базовым тоже). Компилятор поддерживает неявное приведение производного типа к базовому.
  2. для более базового принципа — повторного использования кода (а также закрытости к изменению и открытости к расширению). Тут используется приватное наследование (которое в том числе запрещает неявное приведение производного класса к базовому). В этом случае LSP не работает (хотя используется все то же наследование, но любители LSP такой вариант вообще не понимают, поэтому хором рассказывают сказки, что это что-то "странное" и "так делать не надо", хотя нет никаких причин не использовать инструмент там, где он подходит). Это как раз тот случай, когда квадрат можно унаследовать от прямоугольника (если наследование от Shape не требуется). Часто заменяется инкапсуляцией, потому что так понятнее.

P.S. Это все было про C++ (хотя это базовые принципы ООП, которые универсальные).
Re[2]: Зачем нужно наследование
От: Privalov  
Дата: 25.12.17 09:59
Оценка: +1 :)
Здравствуйте, Cyberax, Вы писали:

C>Украсить случайными перекрытиями функций базового класса.


Или намеренными. Мне приходилось видеть, когда используют наследование только потому, что в наследуемом классе есть подходящий метод. Повбывав бы.
Re: Зачем нужно наследование
От: vmpire Россия  
Дата: 25.12.17 14:00
Оценка: :)
BE>Хожу я тут по собеседованиям. И вот уже дважды меня спросили зачем нужно наследование.
BE>Ответ, что для расширения и переопределения функционала базовых классов их не устроил. В пример начинаю приводить декоратор, C# extension methods и .т. д.

BE>Что-то я не могу даже нагуглить какой ответ там ожидался.

У меня завтра как раз собеседование, вот и спрошу кандидата
Re[2]: Зачем нужно наследование
От: Mr.Delphist  
Дата: 28.12.17 17:24
Оценка:
Здравствуйте, Qt-Coder, Вы писали:

QC>Здравствуйте, BlackEric, Вы писали:


BE>>Что-то я не могу даже нагуглить какой ответ там ожидался.

QC>Для уменьшения копи-паста.

Плохо продуманное наследование только увеличивает количество копипасты. "А если хочется переопределить поведение наследника, надо взять 99% кода из метода предка и вклинить свой 1% там где нужно"

Собственно, паттерны от GoF/Fowler/etc как раз об этом: набор типичный сценариев, которые появляются при вычленении сущностей, и как не накосячить с этим в своём коде.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.