And can you keep your head, your backbone or your heart? We all found out the answer on the day it fell apart.
Подумалось тут, про уровни абстракции и про взаимоотношения объектов.
Если расширять старую шутку про "математики - это такие машины, перегоняющие кофе в теоремы" до "а программисты перегоняют кофе в код" и пытаться описать её в функциональном языке программирования, резко окажется, что "машина", которая выдаёт "результаты" - не математики или программисты, а кофе.

Ну, посудите сами:
Ввод - вывод:
Кофе(математик) - теорема
Кофе(программист) - код

Но! В парадигме ООП резко становится лучше описывать именно классы "программист" и "математик"; с методом, например, питьё.

Программист.питьё(кофе) - код
Математик.питьё(кофе) - теорема

А метод "питьё", соответственно, общий для всего, что наследует класс "Человек" в целом.

Так. кажется. сегодня я продуктивно поработал и знатно упоролся.


@темы: webweaving

Комментарии
14.09.2015 в 18:26

Всему своё тайми-вайми (с)
:-D :five:
14.09.2015 в 18:53

I have got no kingdom. In this world I'm through.
не-не-не
упарываться так упарываться:



алсо где-то там надо использовать ковариацию или контрвариацию но мне влом
14.09.2015 в 19:15

Женился б ты, барин!
14.09.2015 в 19:26

And can you keep your head, your backbone or your heart? We all found out the answer on the day it fell apart.
Night de Lune, си - это страшно, но красиво, да.
helvene, исходный комментарий тоже был хорош но вот 17 я выдохну уже, да.
14.09.2015 в 19:31

I have got no kingdom. In this world I'm through.
Tengro, это C# =)
14.09.2015 в 19:59

Colorless green ideas sleep furiously
Night de Lune, IDrinkable -> IBeverageTransformer

DrinkResult я б убрал — он отравляет всю классовую иерархию необходимостью наследоваться от него каждый раз, когда ты хочешь вернуть соответствующий класс из IBeverageTransformer. В частности, это лишает тебя возможности возвращать классы, определённые в third-party libraries. Сделать это можно с помощью generics - не знаю, как это выглядит в Шарпах, в java это.



Кроме того, instanceOf (который b is Coffee) считается code smell. Один из способов с этим справиться — double dispatch (см Visitor Pattern*). Но на самое деле это излишне тут, потому что у напитка нет особого поведения, так что его можно просто сделать Enum (не знаю как в шарпах, в джаве к ним можно приклеивать состояние и даже методы).


*Хотя вот я счас на него смотрю, и мне ясно, что с самим этим "паттерном" есть проблемы.
14.09.2015 в 20:10

I have got no kingdom. In this world I'm through.
в джаве к ним можно приклеивать состояние и даже методы
в C# через extention methods можно, но как по мне это костыль
но действительно, если от кофе ничего больше не требуется, можно и enum
ну и с дженериком красивее, да)))
14.09.2015 в 20:33

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

Расширенная форма

Редактировать

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail