Sly32: Это далеко не всегда возможно.
В принципе, понимание основных принципов ООП отвечает на вопросы когда и что использовать - инкапсуляция, наследование, полиморфизм....
Интерфейсы - хорошая штука, если уместны
Описать поведение интерфейсами можно всегда.
Вот если есть общее состояние, то тогда да, желательно использовать абстрактный класс, в котором инкапсулируется состояние, а всё поведение лучше реализовать через интерфейсы.
Если у нескольких объектов есть одинаковое поведение, то можно его реализацию вынести в базовый класс в виртуальные методы и при необходимости переопределять в наследниках. Но это всё равно интерфейсы.
Есть 2 способа - наследование и реализация интерфейсов. Из стартпоста я понял, что если применить наследование, то получается множественное наследование.
С этим связана куча граблей, по которым прошлись толпы разработчиков и большинство из них не рекомендуют использовать наследование от нескольких классов. В моём любимом C# множественное наследование прямо запрещено. А вот интерфейсов можно реализовать сколько угодно. Да и принципы SOLID рекомендуют использовать интерфейсы.
PS Все широкоизвестные паттерны проектирования можно реализовать, как через наследование, так и через интерфейсы. Вряд ли ТС придумал что-то новое, что не укладывается в паттерны GOF.
---------- Добавлено 14.05.2020 в 20:52 ----------
Solmyr:
Интерфейсы чуть ближе, но тоже вопрос же не про то. Интерфейсы, это как сделать так чтобы 3Д-рендерить можно было и автомобили и деревья. И автомобиль и дерево реализуют для этого одинаковый интерфейс.
Какое-то слишком узкое у вас получилось применение интерфейсов.
Solmyr: В одних случаях его надо собирать на заводе. В других случаях им надо управлять на дороге. В третьих случаях надо его рендерить как 3D объект. По сути объект один, а поведение разное. Пропертя пересекаются частично, все-таки это реально один и тот же автомобиль, и, скажем, его длина нужна во всех трех случаях, но некоторые пропертя нужны только в одном сценарии использования - скажем цвет. А методы и вовсе почти не пересекаются.
Вопрос в том, что говорит теория программирования? Надо делать один класс для всех сценариев использования, или же делать разные классы для разных сценариев?
Удобнее делать 1 класс и реализовать в нём интерфейсы: собирать на заводе, управлять на дороге, рендерить как 3D объект. И в разные обработчики передавать класс по нужному интерфейсу. Всё логично же.
foxi: Английский нужен чтоб потом найти нормально оплачиваемую работу.
Я комментировал сообщение про то, что
первый язык для программиста - АНГЛИЙСКИЙ
, а не про поиск работы. По этой фразе получается, что если английский не знаешь, даже не стоит пытаться лезть в программирование.
По софтскилам, вопросов нет, с английским лучше, чем без.
---------- Добавлено 25.04.2020 в 16:22 ----------
SeVlad: 2. По старым популярным стекам действительно инфы на русском более чем достаточно. (Правда, и лажи валом), а вот по относительно новым (та же моб разработка) уже значительно хуже.
Лажи и в английском валом, и её пропорционально столько же, сколько и на любом другом языке.
athe: Фокси прав - первый язык для программиста - АНГЛИЙСКИЙ,
Эту мантру из года в год повторяют те, кто начинал программировать ещё в 90-х, когда интернет был по талонам а книги передавались из рук в руки.
Уже лет 10 начинающему программисту английский не особо-то и важен. По любой популярной технологии и языку достаточно материала на русском. И дело тут даже не в переводах, а именно в контенте, генерированном русскоязычными разрабами.
Для новичка пытаться тянуть одновременно английский и какой-нибудь JS сразу на английском - это глупость.
Даже перейдя на уровень мидла, достаточно английского уровня средней школы и уметь в ГуглТранслейт. Гораздо важнее работать в коллективе других программистов - это самый быстрый вариант наблатыкаться в любом языке.
ЗЫ. Чтобы научиться прогать, надо прогать, а не английский учить. Изучая английский, вы начнёте чуть лучше понимать английски, а не прогать.
Это далеко не всегда возможно.
В принципе, понимание основных принципов ООП отвечает на вопросы когда и что использовать - инкапсуляция, наследование, полиморфизм....
Интерфейсы - хорошая штука, если уместны
Описать поведение интерфейсами можно всегда.
Вот если есть общее состояние, то тогда да, желательно использовать абстрактный класс, в котором инкапсулируется состояние, а всё поведение лучше реализовать через интерфейсы.
Если у нескольких объектов есть одинаковое поведение, то можно его реализацию вынести в базовый класс в виртуальные методы и при необходимости переопределять в наследниках. Но это всё равно интерфейсы.
"Название села Убей, по утверждению историков, происходит от чувашского слова «Уба» (пер. на рус. – медведь)...".
Только на чувашском медведь - упа, а не уба.
Есть ещё вот такая деревня в моём районе:
Есть 2 способа - наследование и реализация интерфейсов. Из стартпоста я понял, что если применить наследование, то получается множественное наследование.
С этим связана куча граблей, по которым прошлись толпы разработчиков и большинство из них не рекомендуют использовать наследование от нескольких классов. В моём любимом C# множественное наследование прямо запрещено. А вот интерфейсов можно реализовать сколько угодно. Да и принципы SOLID рекомендуют использовать интерфейсы.
PS Все широкоизвестные паттерны проектирования можно реализовать, как через наследование, так и через интерфейсы. Вряд ли ТС придумал что-то новое, что не укладывается в паттерны GOF.
---------- Добавлено 14.05.2020 в 20:52 ----------
Интерфейсы чуть ближе, но тоже вопрос же не про то. Интерфейсы, это как сделать так чтобы 3Д-рендерить можно было и автомобили и деревья. И автомобиль и дерево реализуют для этого одинаковый интерфейс.
Какое-то слишком узкое у вас получилось применение интерфейсов.
В одних случаях его надо собирать на заводе. В других случаях им надо управлять на дороге. В третьих случаях надо его рендерить как 3D объект. По сути объект один, а поведение разное. Пропертя пересекаются частично, все-таки это реально один и тот же автомобиль, и, скажем, его длина нужна во всех трех случаях, но некоторые пропертя нужны только в одном сценарии использования - скажем цвет. А методы и вовсе почти не пересекаются.
Вопрос в том, что говорит теория программирования? Надо делать один класс для всех сценариев использования, или же делать разные классы для разных сценариев?
Удобнее делать 1 класс и реализовать в нём интерфейсы: собирать на заводе, управлять на дороге, рендерить как 3D объект. И в разные обработчики передавать класс по нужному интерфейсу. Всё логично же.
Это, конечно, невинный мультик, но... Неужели никто не задумывался, а почему только у тихого маленького Пятачка было дома ружьё?
Мне его жалко. Я бы ему сайт продвинул
написанную вот таким коллегой как ты
Сам дурак 🍿
естественно! а то потом читаешь код и ужасаешься. Даже правильно переменные и методы не назовете, что бы потом кто-то смог нормально понять
Ишь ты, какие мы изнеженные стали 🙅
Обойдётесь переменными вида: x, y, i, j, a1, a2...a3 и т.п. Деды наши обходились как-то и вы обойдётесь 🚬
Помню ещё на плюсах ковырялись в:
#define true false;
и ничё, никто не умер ☝.
Английский нужен чтоб потом найти нормально оплачиваемую работу.
Я комментировал сообщение про то, что
По софтскилам, вопросов нет, с английским лучше, чем без.
---------- Добавлено 25.04.2020 в 16:22 ----------
2. По старым популярным стекам действительно инфы на русском более чем достаточно. (Правда, и лажи валом), а вот по относительно новым (та же моб разработка) уже значительно хуже.
Лажи и в английском валом, и её пропорционально столько же, сколько и на любом другом языке.
Тупость и Даннинга — Крюгер они наднациональны.
Глупость это то что вы пишете. Без яхыка будете вариться в мелкой луже.
Заблуждаетесь. Новичку никакой океан информации не нужен, даже противопоказан, с толку сбивает только.
И контента на русском далеко не лужа. Информации более, чем достаточно.
Фокси прав - первый язык для программиста - АНГЛИЙСКИЙ,
Эту мантру из года в год повторяют те, кто начинал программировать ещё в 90-х, когда интернет был по талонам а книги передавались из рук в руки.
Уже лет 10 начинающему программисту английский не особо-то и важен. По любой популярной технологии и языку достаточно материала на русском. И дело тут даже не в переводах, а именно в контенте, генерированном русскоязычными разрабами.
Для новичка пытаться тянуть одновременно английский и какой-нибудь JS сразу на английском - это глупость.
Даже перейдя на уровень мидла, достаточно английского уровня средней школы и уметь в ГуглТранслейт. Гораздо важнее работать в коллективе других программистов - это самый быстрый вариант наблатыкаться в любом языке.
ЗЫ. Чтобы научиться прогать, надо прогать, а не английский учить. Изучая английский, вы начнёте чуть лучше понимать английски, а не прогать.