Java Developer
  • Композиция vs Наследование в Java

    Богдан, я ещё только учусь, не судите строго. Как вы считатете, будет ли полезно читателям и мне, если вы не только укажете на глупости, но и исправите их?

    Поддержал: Denis Makarov
  • Композиция vs Наследование в Java

    Давайте пройдём ещё раз.

    Квадрат — это бесспорно инстанциация, задача с детским подвохом. Но про БМП я в условии указал, что это такой же автомобиль, но с добавленным пулемётом и методом стрелять(). Принцип Лисков вроде бы не нарушается, БМП всегда можно использовать как машину. И всё равно, я бы рекомендовал не использовать наследование.

  • Композиция vs Наследование в Java

    Нет-нет, вы комментируйте, пожалуйста.

    Но тут, извините, снова пытаемся словами из реального мира описать программирование. Вы хотите сказать, что tight coupling (например, наследование) как-то упрочняет дизайн приложения?!

  • Композиция vs Наследование в Java

    Абсолютно верно, конечно.

  • Композиция vs Наследование в Java

    Антон, не воспринимайте, пожалуйста как личный выпад, но вся эта статья призвана бороться с позицией

    «Я, конечно, знаю, что джунам запрещают наследование. И на ДОУ вот недавно опять писали. Но, во-первых, я далеко не джун, а, во-вторых, у этих классов есть общий код. Надо вынести его в базовый класс!!!»

    Не надо. Лучше сделать отдельный класс, который может обрабатывать СSV — читать, фильтровать и т.д. В итоге возвращать данные. И использовать (а не наследовать), создавая экземпляр этого класса в других. Первый выигрыш от такого подхода — его можно замокать для тестов.

  • Композиция vs Наследование в Java

    Спасибо, такой комментарий мотивирует писать ещё.

    Касательно собеседования:

    а). Заказчик платит деньги и может менять требования. Это, считаю, нормально. Явно делать акцент — дать подсказку.
    б). Вот кандидатов, которые «спохватятся и предложат композицию» я и стараюсь брать. И, хотелось чтобы разницу между наследованием и композицией понимали не только серьёзные сеньоры, а, извините, все.

  • Композиция vs Наследование в Java

    Спасибо вам за коментарии, учусь выражаться яснее.

    Я пытался выразить мысль, что даже если кажется, что отношение между реальными объектами is-a (БМП — это машина, квадрат — это прямоугольник) — это никоим образом не означает, что должна быть соответствующая иерархия классов.

  • Композиция vs Наследование в Java

    Конечно там не нужно наследование! Элементарный подвох на усвоение материала.

    Я, собственно, два раза и пытался сказать, что іs-a ни разу не означает наследование.

    С ним, на мой взгляд, не только у детей проблема. Повторяюсь, я затрудняюсь привести пример правильного. Может вы?

  • Композиция vs Наследование в Java

    Спасибо за коментарий. Это моя первая статья, стараюсь как могу.

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

    Пример правильного наследования сможете подсказать?

    Поддержал: Сергей Кухарев
  • Композиция vs Наследование в Java

    А от тут не можу погодитись. Дійсно, від одного елементу — класу, що вибирає користувачів — для розширення функціоналу можна технічно перейти як до декоратора (при потребі з делегуванням), так і до спадкоємця.

    Але оці фільтрування і перетворення можуть використовуватись ще десь. Тоді їх краще оформити не в методах спадкоємця, а в лямбдах. І тоді, вибачте, у нас знову ж таки композиція.

  • Композиция vs Наследование в Java

    Згода. Я от не зміг приклад вдалого наслідування навести. Може ви?

  • Композиция vs Наследование в Java

    На всякий случай ещё раз — у каждого подхода есть плюсы и минусы. Имхо, недостатки наследования сильно перевешивают. Именно тот факт, что многие принцип DRY воспринимают «так, надо в базовый класс вынести» и побудил меня написать эту статью.

    Такой у меня стиль собеседования — чётко ставлю задачу, а потом понемногу меняю условия. Считаю способность думать важнее знания определений. Но это уже другая тема.

  • Композиция vs Наследование в Java

    Такий у нас візуальний ентерпрайз :-) Я вже звик до цього прикладу на співбесідах, але він не про темплейти. Хай буде замість звіта — будинок, header-a — дах, footer-a — фундамент. Стаття не зміниться.

    Декомпозицію треба вчитися робити до спадкування.

    От я і намагаюсь донести це.

  • Композиция vs Наследование в Java

    1) Статья в первую очередь о том, что наследование — это сильная связь и вредит гибкости, поэтому пользоваться им не надо (зачёркнуто) в исключительных случаях, осознавая последствия.
    2) Похожая композиция — это не нарушение принципа DRY.
    3) Если дела пойдут так, что отчёты будут практически сходны, используем шаблон фабрика (с параметрами), а если параметров становится много/неудобно, возвращаемся к п.2

  • Композиция vs Наследование в Java

    Тепло! :-)

  • Композиция vs Наследование в Java

    Так я вроде об этом и написал. Композиция. Новый отчёт (или модификация старого) никак не связан с предыдущими. Если существующие части (header, footer и т.д.) подходят — инжектим и используем их, если нет — дописываем нужные. Вы статью до конца прочитали?

  • Композиция vs Наследование в Java

    Квадрат — это действительно прямоугольник. Отношение is-a? Значит наследник?

    Ринат, не обижайтесь, боюсь, мы сейчас к правильному ответу придём, а мне бы хотелось подержать интригу и услышать ещё мнения.

    Поддержал: Віктор Ярошевич
  • Композиция vs Наследование в Java

    Я о том и толкую, что дочерний класс по определению содержит публичные методы родителя. И если метод есть, но пользоваться им «не надо» — это плохой дизайн.

    Поддержал: Serhiy Dudynsky
  • Композиция vs Наследование в Java

    1) Незачем. И хорошо бы это как-то подчеркнуть, а унаследованый сеттер setB вносит неразбериху.
    2) Ответил выше. Можно вызвать setA и setB в произвольном порядке с разными значениями.
    3) Тепло :-)

  • Композиция vs Наследование в Java

    А если setB будет вызван после setA с другим значением?

← Сtrl 1... 789101112 Ctrl →