
Evgeniy
05.07.2017
08:19:30
так можно в классах имена полей придумывать каждый раз разное

Sergey
05.07.2017
08:19:36

Evgeniy
05.07.2017
08:19:42
потому что поле name хранится уже в одном классе

Sergey
05.07.2017
08:19:46
что в этом такого, это ж билдер

Google

Evgeniy
05.07.2017
08:20:43

Sergey
05.07.2017
08:21:00

Evgeniy
05.07.2017
08:21:46
в том что можно в конктракте знать что есть метод возвращающий что то с другим контрактом(интерфейсом) и вызывать что то у него
а может быть свойство с нужным интерфейсом обращаешься к свойству

Sergey
05.07.2017
08:22:16

andretshurotshka?❄️кде
05.07.2017
08:23:34
Что за LoD

Sergey
05.07.2017
08:24:16
Law of Demeter

Evgeniy
05.07.2017
08:24:53
и тут вопрос к команде
по хорошему я согласен с тобой и такое делать не надо
но опять же зависит от команды
когда у тебя группа из программистов и так исторически принято

Google

Evgeniy
05.07.2017
08:25:38
то ты в меньшинстве
и тебе надо объяснять почему это плохо
такова реальность

Sergey
05.07.2017
08:25:59
стой
ты опять начинаешь уходить от ответа

Evgeniy
05.07.2017
08:26:17
хорошо

Sergey
05.07.2017
08:26:24
вопрос - каким образом в java поля являются частью контракта?
публичные поля абстрактного класса?

Evgeniy
05.07.2017
08:26:44
в java в Interface могут быть объявленны fields (там их так называют, в php property но смысл один)

Sergey
05.07.2017
08:27:01

Evgeniy
05.07.2017
08:27:14
сейчас

andretshurotshka?❄️кде
05.07.2017
08:27:19
Блин, ООП сложнее ФП)

Myroslav
05.07.2017
08:27:31
Ребят, есть у кого может быть статейка нормальная как работают генераторы?
В частности в php
Сорри за оффтоп.

Sergey
05.07.2017
08:27:41

Андрэ
05.07.2017
08:28:17

Sergei
05.07.2017
08:29:36

Sergey
05.07.2017
08:30:39
то есть это константы по сути

Sergei
05.07.2017
08:30:51
Угу

Sergey
05.07.2017
08:30:56
ясно понятно

Google

Sergey
05.07.2017
08:31:05
ну я уже нагуглил
а то уж испугался
ну тогда это не может быть частью контракта

Pavel
05.07.2017
08:33:32
у кого тут контракт головного мозга?))) Можешь сказать откуда это понятие возникло, ну т.е. когда это решили и кто (назови имена!!! шучу))). Я как то гуглил не нашел.

Sergey
05.07.2017
08:33:58
ну можно попробовать назвать Барнтрана Мэйерса
86-ой год вроде или 88-ой

Java73
05.07.2017
08:34:13

Sergey
05.07.2017
08:34:41
ну и в целом это развитие идей information hiding которые были еще в начале 70-хэ

Pavel
05.07.2017
08:34:55
во у меня на столе

Sergey
05.07.2017
08:35:29
а вообще можешь Хоара обвинить с его логикой)
во у меня на столе
а ты читал то ее?) а то про Мэйерса говорят что все цитируют но никто не читал)

Pavel
05.07.2017
08:36:49
читаю, она на английском - тяжко

Evgeniy
05.07.2017
08:39:42
давай пруфы
https://gist.github.com/29ccd964b5f8356869805b5f717fc01e

Sergey
05.07.2017
08:40:16
мы уже выяснили что это просто контстанты
а значит там нет поведения, не является частью контракта

Evgeniy
05.07.2017
08:41:19
String это объект
такойже как например ArrayList
внутри которого есть свои методы с поведением
как например такое https://gist.github.com/eecd9199c810e50af9a37f39980c09d4

Google

Evgeniy
05.07.2017
08:42:50
пихаешь туда любой mutable объект и творишь магию

Sergey
05.07.2017
08:42:53

Evgeniy
05.07.2017
08:42:55
это все очень плохо
но возможно
а еще в Java 8 в интерфейсе можно писать код который со своими ограничениями но возможно что то исполнять)

Sergey
05.07.2017
08:43:33
это не его часть
мне кажется твоя проблема в том, что "интерфейсы" != контракты
ну мол интерфейс объекта это не тоже самое что что-то с ключевым словом interface

Evgeniy
05.07.2017
08:44:53

Pavel
05.07.2017
08:45:24
а ты читал то ее?) а то про Мэйерса говорят что все цитируют но никто не читал)
Мейерс вводит понятия контракта не на публичный api, а на метаданные которыми метод может информировать внешний мир и обрабатывать на основе этой информации вхождения. Я так понял что его контраты не совсем те контракты о которых мы иногда говорим. Например в UML диаграммах интерфейсы являются контрактами но не имеются в виду Мейерские

Evgeniy
05.07.2017
08:45:36
интерфейс объекта это класс и его публичные методы и свойства
иногда от класса отходят и используют какой то интерфейс который реализует объект
и тогда интерфейс это набор методов в данной роли
ну так очень идеализированно
и с кучей допущений

Sergey
05.07.2017
08:46:31
ну то есть у тебя контракт
контрактом может быть только поведение какое-то
его можно характеризовать как раз таки прекондишенами, посткондишенами и инвариантами
именно по этой причине final static поля в джававских интерфейсах не могут быть частью контракта просто по одной причине - это не поведение.

Google

Java73
05.07.2017
08:47:31
Вся теория накладывается просто на конкретную реализацию в ооп языке интерфейсов и других способов использования объекта

Sergey
05.07.2017
08:47:57

Java73
05.07.2017
08:48:07
А мне паскал

Pavel
05.07.2017
08:48:14

Java73
05.07.2017
08:48:16
Теперь пинайте

Sergey
05.07.2017
08:48:47
мэйерс просто слово контракт как мне кажется популяризировал но это не точно

Pavel
05.07.2017
08:49:13
Барбара там вродь над АТД мучались помоему

Sergey
05.07.2017
08:49:24
http://wiki.c2.com/?DesignByContract
там чуть больше истории
Pre- and postconditions were first supported natively in a language in BarbaraLiskovs CLU (circa 1974 - 1977).
Hoare's 1972 Acta Informatica paper described the use of representation invariants and abstraction functions to prove correctness of abstract data types.

Java73
05.07.2017
08:50:25
Интерфейсы как набор обьявленных методов и свойств как раз и придумали для того, чтоб пользователь объекта, который реализует этот интерфейс, знал, что именно реализует объект, и не знает как. Зато интерфейс стабилен, если даже объект меняется.

Pavel
05.07.2017
08:51:03
Ну круто, теперь хоть что то

Java73
05.07.2017
08:51:35
Как это знание на практике поможет?

Pavel
05.07.2017
08:51:52
это чисто мне было интересно
что бы понять контракты, нужно стать контрактом, думать как контракт....Это я шучу, просто иногда на некоторые вещи интересно посмотреть со стороны имено авторов

Java73
05.07.2017
08:54:35
Иногда бывает так, что есть способы сделать что-то проще, но люди упрямо натягивают паттерны, пишут интерфейсы, и всё это из-за таких вот, кто написал "наследование зло и ведет в ад, хелперы зло, только композиция, ничего больше, только фабрика, только инверсия зависимостей... "
Три строки кода превращаются в три модуля с пятью лишними абстракциями
Но потом скажут ЗАТО ООООООП

Pavel
05.07.2017
08:56:04
Иногда бывает так, что есть способы сделать что-то проще, но люди упрямо натягивают паттерны, пишут интерфейсы, и всё это из-за таких вот, кто написал "наследование зло и ведет в ад, хелперы зло, только композиция, ничего больше, только фабрика, только инверсия зависимостей... "
Должен быть баланс, дядьки в книжках пишут все это юзайте в больших приложениях которые требуют гибкости и расширения. Вот там то к этому делу нужно относиться очень осторожно, шаг влево шаг в право и потом акунется