@prophp7

Страница 419 из 1387
Evgeniy
25.06.2017
12:51:04
из глубокого покажу ситуации что объект имутабельный не является имутабельном в случае если принимает хоть одно мутабельное свойство

и покажу такой пример)

ну и объясню соответственно а как вывод просто подвиду под сложность, что сложна жить когда объект меняется

особенно в много поточных система с конкаренси, но и в пхп без этого тоже вносит некую сложность)

Google
Sergey
25.06.2017
12:52:38
введи понятие "стэйт"

Evgeniy
25.06.2017
12:52:54
да стейт в самом начале введу

в определение объект

Sergey
25.06.2017
12:53:06
а еще дай отсылку на goto considered harmful

Evgeniy
25.06.2017
12:53:24
объект это состояние и методы над этим состоянием и все это описано в классе

Sergey
25.06.2017
12:53:33
http://david.tribble.com/text/goto.html

Evgeniy
25.06.2017
12:54:19
я там не глубоко почти без подготовки

Sergey
25.06.2017
12:54:35
а объект - мне тут нравится аналогия Грэга Янга - что мол это такой маленький комьютер. со своей изолированной памятью где он хранит стэйт и работает с ним.

Evgeniy
25.06.2017
12:54:57
вон я выше это примерно и написал)

Sergey
25.06.2017
12:55:03
настолько примерно что нет

Evgeniy
25.06.2017
12:55:50
мб мб

Google
Sergey
25.06.2017
12:55:51
смотри, с аналогией с комьютерами - представь что у тебя все объекты в системе общаются по сети. И реально один объект - это комьютер

отсюда следует что геттеры/сеттеры - неэффективно потому что тебе придется передавать "по сети" большое количество данных. И это как бы плохо с точки зрения изоляции

Evgeniy
25.06.2017
12:56:45
но теперь надо объяснить людям что такое изоляция

Sergey
25.06.2017
12:57:05
"изоляция это когда у тебя есть что-то внутри и что-то снаружи. И то что снаружи не влияет на то что внутри и наоборот".

Evgeniy
25.06.2017
12:57:07
нельзя в определение терминов употреблять другие термины объяснение которых ты не дал

а ну ясно с таким объяснением

тогда имутабельность это неизменность объекта, а мутабельнсоть изменяемость объект, конец

Sergey
25.06.2017
12:57:53
фактически это уже не относится к имутабельности так что пофиг

мне просто не нравится когда объекты объясняют при помощи "классов". Это просто кейворд в языке программирования и не более

Evgeniy
25.06.2017
12:58:31
объект это состояние и методы по работе с этим состоянием

а то что оно в пхп или java сделано через классы

Sergey
25.06.2017
12:59:06
Evgeniy
25.06.2017
12:59:23
да методы = поведение в целом одно и тоже

в этом примере

Sergey
25.06.2017
13:00:04
есть объект "дверь", у нее есть состояние - открыта или закрыта. Есть поведение - ее можно открыть и закрыть. А теперь сделай мне имутабельную дверь

Evgeniy
25.06.2017
13:00:54
если раньше было setState ($newState) то теперь open(), close()

поведения

Sergey
25.06.2017
13:01:09
и возможно даже возвращало бы сама себя

Google
Sergey
25.06.2017
13:02:20
Final?
что final?

ты про java-ский final?

Evgeniy
25.06.2017
13:02:48
сергей существует огромное количество доказательств что ооп не особо пригоден для реального мира, потому что все попытки загнать реальный мир в ооп жестоко разваливались

Darkling
25.06.2017
13:02:50
что final?
final class Door { ... }

Evgeniy
25.06.2017
13:03:23
но реальный мир хорош с точки зрения демонстрации ооп

Sergey
25.06.2017
13:03:31
сергей существует огромное количество доказательств что ооп не особо пригоден для реального мира, потому что все попытки загнать реальный мир в ооп жестоко разваливались
объекты представляют объекты реального мира. Мне тут нравится аналогия дяди боба - адвокаты в бракоразводном процессе представляют мужа и жену. Но они не должны быть мужем и женой.

final class Door { ... }
причем тут имутабельность?

Evgeniy
25.06.2017
13:03:57
при том что если если ты сделаешь дверь имутабельной

кто то расширит твой класс

и сделает setState

Sergey
25.06.2017
13:04:15
Aleh
25.06.2017
13:04:17
ну поэтому не юзайте protected

Evgeniy
25.06.2017
13:04:18
и новый класс станет не имутабельным

Sergey
25.06.2017
13:04:48
наследование НИКАКОГО отношения не имеет к мутабельности. Просто делаешь весь стэйт protected

Evgeniy
25.06.2017
13:04:48
и сломает LSP
да почему же

Evgeniy
25.06.2017
13:04:59
вполне возможно что и нет

Sergey
25.06.2017
13:05:02
да почему же
офигеть, у тебя поведение двери раньше не меняло стэйт а теперь меняет

Google
Sergey
25.06.2017
13:05:17
как по мне - это нифигенское такое изменение в поведении

Evgeniy
25.06.2017
13:05:19
я серег этот пример покажу на видео

Sergey
25.06.2017
13:05:27
private )
пардон

Evgeniy
25.06.2017
13:05:58
там еще приколы есть языка как можно по тролить

Aleh
25.06.2017
13:06:00
если раньше возвращался новый объект с новой ссылкой, а теперь старый, то вы вероятно много где все поломали

Sergey
25.06.2017
13:06:12
ну то есть я к чему - ты говоришь что "не хочешь уходить в глубь", но при этом тащищ наследование

то мне кажется получится каша

Evgeniy
25.06.2017
13:06:36
возможно(

давай обсудим после того что я расскажу как я считаю

Sergey
25.06.2017
13:06:56
оке

Admin
ERROR: S client not available

Evgeniy
25.06.2017
13:07:07
я действительно рад был бы обсудить)

я пример с дверью покажу

Sergey
25.06.2017
13:07:44
можешь любой другой пример. Просто интересно было бы показать два примера - один где имутабельность более чем логична, и пример где работа со стэйтом может казаться проще

Evgeniy
25.06.2017
13:08:03
вот это очень хотел

но ничего простого придумать не смог

Sergey
25.06.2017
13:08:20
а кто говорил что будет легко?)

Evgeniy
25.06.2017
13:08:33
чтобы не было такова что имутабельность это супер мутабельнсоть это фи

Darkling
25.06.2017
13:08:41
final class Door { private $state; public function __construct($state) { $this->state = $state; } public function getState() { return $this->state; } } Я это имел в виду. И да, это пыха. Вполне себе иммутабельно. Если не долбануть сюда сеттер, конечно.

Sergey
25.06.2017
13:09:13
вот я не могу придумать кейс когда имутабельность на вид сложнее но по факту намного проще.

Google
Evgeniy
25.06.2017
13:09:30
да она всегда упрощает

Sergey
25.06.2017
13:09:39
Evgeniy
25.06.2017
13:09:39
кстате надо ли пример с имутабельной дверью все еще

я кажется понял что ты хотел от меня увидеть)

Sergey
25.06.2017
13:10:11
попробуй запилить проект с использованием event sourcing. Я сильно сомневаюсь что ты будешь делать имутабельными вещи вроде "записей в блоге"

Evgeniy
25.06.2017
13:10:35
нее

там есть фишка определенная)

я это в конце покажу

Sergey
25.06.2017
13:11:04
нее
что не? тащишь наследование - тогда изволь рассказать про контракты, прекондишены, инварианты и посткондишены, а так же про LSP

Evgeniy
25.06.2017
13:11:09
там еще можно Multiply call constructor сделать)

будет принимать и новый объект

с точки зрения кода он не будет юзать новые методы

поэтому изменения состояния он делать не будет

Aleh
25.06.2017
13:12:09
это нарушение lsp

Evgeniy
25.06.2017
13:12:18
а в новом объекте могут быть новые методы которые могут сменить состояние

Sergey
25.06.2017
13:12:52
$openedDoor = Door::open(); $closedDoor = $openedDoor->close(); $openedAgainDoor = $closedDoor->open(); assert($closedDoor !== $openedAgainDoor);

попробуй переопределить так что бы дверь стала снова мутабельной и при этом ассерт отработал

если ты сломал посткондишены - то это явно говорит о нарушении LSP

Sergey
25.06.2017
13:14:42
да

Страница 419 из 1387