https://toster.ru/answer?answer_id=456447#answers_list_answer
Ну что сказать?
Всё вроде так...
А вот если автомойка может помыть "самолёт"? Что будем делать?
Вводить интерфейс "что-то что можно помыть"? Типа и "самолёт можно помыть", и "машину можно помыть".
Или делать "фабрику моек"? Типа "машина дай мне свою мойку" или "самолёт дай мне свою мойку"?
Или делать Service Locator? Типа "дайте мне тех, кто может помыть самолёт или тех кто может помыть машину".
Или Duck-typing?
Или что-то ещё?
А если ещё бывают не только автомойки, но и ещё и "мастерские по смене колёс"?
Тут как?
Интерфейс?
Фабрика?
Service Locator?
Duck-typing?
А если ещё кроме моек бывают "мастерские по смене масла"?
Ну это всё конечно "теоретические вопросы"...
А вот например - ТАНК.
Помыть - МОЖНО, а колёса поменять - НЕЛЬЗЯ.
Можно поменять ГУСЕНИЦЫ.
А масло поменять - можно.
А есть ещё "колёсные танки" - им и колёса можно поменять.
А ГУСЕНИЦЫ - НЕЛЬЗЯ.
ServiceLocator?
Или Visitor?
А вот есть ещё танки, которым МАСЛО менять НЕЛЬЗЯ. Только сразу двигатель. Сняли и выкинули. И поставили НОВЫЙ.
Может вообще анемичная модель? :-)
Или всё же ServiceLocator?
Или - "вот тебе нечто" и дай мне "инструмент, который может обрабатывать это нечто". Причём полиморфно.
Фабрика фабрик?
У меня есть свой ответ - Ни о чём. Про "бесконечно" рекурсивный парсинг кода и структур данных.
Но он не всем понравится.
P.S.
"Основаные цели при использовании полиморфизма:
Не совсем так...
А предположим ещё бывают "плавающие танки" и "плавающие машины" и плавающие самолёты".
Что тогда?
АОП?
Ну что сказать?
Всё вроде так...
А вот если автомойка может помыть "самолёт"? Что будем делать?
Вводить интерфейс "что-то что можно помыть"? Типа и "самолёт можно помыть", и "машину можно помыть".
Или делать "фабрику моек"? Типа "машина дай мне свою мойку" или "самолёт дай мне свою мойку"?
Или делать Service Locator? Типа "дайте мне тех, кто может помыть самолёт или тех кто может помыть машину".
Или Duck-typing?
Или что-то ещё?
А если ещё бывают не только автомойки, но и ещё и "мастерские по смене колёс"?
Тут как?
Интерфейс?
Фабрика?
Service Locator?
Duck-typing?
А если ещё кроме моек бывают "мастерские по смене масла"?
Ну это всё конечно "теоретические вопросы"...
А вот например - ТАНК.
Помыть - МОЖНО, а колёса поменять - НЕЛЬЗЯ.
Можно поменять ГУСЕНИЦЫ.
А масло поменять - можно.
А есть ещё "колёсные танки" - им и колёса можно поменять.
А ГУСЕНИЦЫ - НЕЛЬЗЯ.
ServiceLocator?
Или Visitor?
А вот есть ещё танки, которым МАСЛО менять НЕЛЬЗЯ. Только сразу двигатель. Сняли и выкинули. И поставили НОВЫЙ.
Может вообще анемичная модель? :-)
Или всё же ServiceLocator?
Или - "вот тебе нечто" и дай мне "инструмент, который может обрабатывать это нечто". Причём полиморфно.
Фабрика фабрик?
У меня есть свой ответ - Ни о чём. Про "бесконечно" рекурсивный парсинг кода и структур данных.
Но он не всем понравится.
P.S.
"Основаные цели при использовании полиморфизма:
- уменьшение дублирования в коде
Не совсем так...
А предположим ещё бывают "плавающие танки" и "плавающие машины" и плавающие самолёты".
Что тогда?
АОП?
я вот кстати вместо одного метода
ОтветитьУдалитьПомыть(Автомобиль автомобиль)
иногда нарочно делаю два метода
ПомытьЖелтуюЛадуКалину(ЖелтаяЛадаКалина автомобиль)
и
ПомытьЧернуюВолгу(ЧернаяВолга автомобиль)
Причём мне сложно сформулировать словами, почему в одном случае я выбираю универсальный метод, а в другом - несколько конкретных (которые в свою очередь вызовут один универсальный, но уже приватный метод).
Я кстати тоже иногда подобным "грешу".
Удалить"которые в свою очередь вызовут один универсальный, но уже приватный метод"
УдалитьВидимо в одном случае нам неважно кто и как вызывает метод, а в другом - мы "стараемся разделить зоны ответственности".
Формально. На уровне компилятора.
Николай, а на другие вопросы ответов не созрело?
УдалитьИли вопросы не интересны?
Да как бы... надо просто уметь пользоваться инструментарием и не городить огород. И если ваши UML и кодогенераторы позволяют в любой момент одно подменить другим - это супер.
Удалить"надо просто уметь пользоваться инструментарием и не городить огород."
УдалитьСогласен :-)
Пост примерно об этом и был.
"И если ваши UML и кодогенераторы позволяют в любой момент одно подменить другим - это супер."
И с этим согласен. И об этом частично пост был. В какой-то мере - позволяют.
Ставим "галочку на модели" и получаем "другое решение". Понятное дело, что "из списка возможных".
> Или вопросы не интересны?
ОтветитьУдалитьВопросы интересны, и мне интересно смотреть на Ваш ход мыслей. (Делаю в голове пометки, иногда они в рабочем процессе всплывают.)
Просто в конкретный жизненный период я немного охладел ко всему этому... да и вообще какое-то затишье в блогосфере
"мне интересно смотреть на Ваш ход мыслей"
УдалитьПосле:
http://programmingmindstream.blogspot.ru/2015/07/todo-exports.html
http://programmingmindstream.blogspot.ru/2015/07/todo_10.html
http://programmingmindstream.blogspot.ru/2015/07/todo_9.html
http://programmingmindstream.blogspot.ru/2015/07/blog-post_10.html
- дело пойдёт :-)