@oop_ru

Страница 447 из 785
da horsie
12.01.2018
23:35:42
Для чего нужны статические методы?

Dan
12.01.2018
23:37:38
В каком контексте?

da horsie
12.01.2018
23:38:16
да в любом. Когда их применение оправдано? Когда они - единственный способ?

Chupa
12.01.2018
23:39:01
Я контейнер и инверсию зависимостей везде использую, и как-то не нужны они совсем стали.

Google
Chupa
12.01.2018
23:39:52
Чет глупость написал вначале

da horsie
12.01.2018
23:40:10
Вот есть у меня метод, который не использует this. Есть ли хоть одна причина делать его статическим?

melancholiac
12.01.2018
23:40:43
не думаю

Dan
12.01.2018
23:40:56
да в любом. Когда их применение оправдано? Когда они - единственный способ?
если ты не планируешь этому методу давать доступ к данным объекта - делай статическим.

melancholiac
12.01.2018
23:41:14
какая то неоднородность методов будет если один всего

но это не точно

Chupa
12.01.2018
23:41:21
Какой-нибудь фабричный метод объекта, который создает сам себя должен быть статичным

Dan
12.01.2018
23:43:18
вот! зачем?
Есть две теории. Первая теория базируется на учениях МакКоннелла, Фаулера и Мартина. Вторая - на собственных эмпирических предпочтениях. Если ты больше тяготеешь к красивой и изящной стилистике и придерживаешься стайлгайдов - обращай внимание на контекст и соседние методы. А если ты пишешь сам по себе - делай как считаешь нужным. В любом случае будешь прав.

da horsie
12.01.2018
23:43:58
Какой-нибудь фабричный метод объекта, который создает сам себя должен быть статичным
Вот я тоже раньше так думал. Допустим, если у меня класс A и метод типа A.fromFoo() возвращает экземпляр A. А потом я взял и сделал B extends A. И теперь у меня B.fromFoo() возвращает все ттот же экземпляр A. Нелогично как-то.

Dan
12.01.2018
23:44:11
Опять же, если ты говоришь в контексте джавы, то там понятно почему метод должен быть статичным.

da horsie
12.01.2018
23:44:59
Google
Dan
12.01.2018
23:45:20
ну будем говорить о java-подобных языках, которых много
Нет, я конкретно именно о Java. Модификатор static в Java напрямую связан с классом, если поле статично, значит оно принадлежит классу, если метод статичный, аналогично — он принадлежит классу. Исходя из этого, можно обращаться к статическому методу или полю используя имя класса.

Chupa
12.01.2018
23:45:35
в php можно через static вместо self возвращать B, а не A

Dan
12.01.2018
23:45:53
В других языках это реализуется другими способами, а иногда пропускается вообще

В php можно вообще всё делать, там полная свобода.

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

da horsie
12.01.2018
23:46:59
в php можно через static вместо self возвращать B, а не A
Не всегда. Но это не важно. Смежный вопрос: должны ли статические методы наследоваться?

Dan
12.01.2018
23:47:37
Нет. Статические методы не должны наследоваться по-определению. Какой тогда в них смысл?

Хотя опять же, это в теории и по словам опытных товарищей, написавших много книжек по коду и его "красоте"

Ты в праве использовать любые стили. Хоть венгерскую нотацию, плевать.

da horsie
12.01.2018
23:48:40
Нет. Статические методы не должны наследоваться по-определению. Какой тогда в них смысл?
Ну вот мне тоже так кажется, иначе возникает дурацкая ситуация, которую я выше описал

Chupa
12.01.2018
23:50:35


Я не понял смысла на самом деле того, что изображено

da horsie
12.01.2018
23:52:10
Sergey
12.01.2018
23:52:58
вот! зачем?
Чтоб лишний объект не аллоцировать для вызова?

Chupa
12.01.2018
23:53:38
Искал про Late static binding в java, а его нет оказывается

f4rt~
12.01.2018
23:54:20
обычно по долгу службы сталкиваешься с тем, что статика это в основном поганые хелпер классы, фасады и прочее

da horsie
12.01.2018
23:54:46
Чтоб лишний объект не аллоцировать для вызова?
нуууу... ооп и оптимизация по стеку/памяти это штуки из разных миров по-моему

под ооп я имею в виду обывательское понимание "как в жава"

Google
f4rt~
13.01.2018
00:02:27
под ооп я имею в виду обывательское понимание "как в жава"
можно пойти от обратного, что бы понять ответ на твой вопрос, когда нужен конкретно объект ?

da horsie
13.01.2018
00:03:34
чтобы связи в нужную сторону направить

Chupa
13.01.2018
00:05:07


da horsie
13.01.2018
00:05:24
принцип инверсии зависимостей

f4rt~
13.01.2018
00:05:27
ну я понял,инверсированные стрелки зависимостей, на интерфейс ага. что тогда из этого можно предположить, когда нужны/не нужны статические классы?

когда тебе сознательно нужно нарушить инкапсуляцию?:D

da horsie
13.01.2018
00:05:54
и будем считать, что у нас есть перегрузка методов, так что "именованные конструкторы из пхп" не нужны

da horsie
13.01.2018
00:13:49
Aleh
13.01.2018
00:14:39
что делает pick()?
если в вашем домене покупатели берут корзины, то это ее взять)

если пользователи регистируются, то пусть это так и называется

da horsie
13.01.2018
00:15:26
если в вашем домене покупатели берут корзины, то это ее взять)
так она уже создана. они где-то сложены в кучу и покупатель ее берет? тогда почему не this.pileOfBaskets.pick()?

f4rt~
13.01.2018
00:15:28
интересно как тогда в домене выглядит new Human(new Busket(new Product)))

da horsie
13.01.2018
00:16:13
нет, не создана до того, как ее возьмут
т.е. цель - инкапсулировать процесс создания корзины?

Aleh
13.01.2018
00:16:45
или имени?

da horsie
13.01.2018
00:16:52
метода

Google
Aleh
13.01.2018
00:17:02
да, создает корзину

da horsie
13.01.2018
00:17:15
получается, что он две вещи делает: 1) создает корзину и 2) назначает ее покупателю

так?

f4rt~
13.01.2018
00:17:34
намек на SRP ?

Aleh
13.01.2018
00:17:37
в случае. когда этот бизнес-процесс именуют "покупатель взял корзину" или типа того

da horsie
13.01.2018
00:17:40
иначе в чем отличие от new?

Aleh
13.01.2018
00:17:48
названием

new не имеет отношения к домену, pick - имеет

а new вообще запрещен

f4rt~
13.01.2018
00:18:30
ага как и class

Aleh
13.01.2018
00:18:30
приватный

f4rt~
13.01.2018
00:18:33
call Bugaenko

Aleh
13.01.2018
00:18:42
класс можно)

da horsie
13.01.2018
00:18:56
а new вообще запрещен
ну я и говорю, ты хочешь скрыть процесс создания экземпляра козрины

Aleh
13.01.2018
00:19:07
ну и new можно, просто есть куча ситуаций, где можно гораздо лучше и достаточно дешево сделать)

я хочу дать ему имя)

da horsie
13.01.2018
00:19:57
тогда почему pick(), а не create()?

Aleh
13.01.2018
00:20:14
потому что бизнес говорит pick

это у них так называется

Google
Aleh
13.01.2018
00:20:28
и когда новый разработчик будет спрашивать - ему объяснят

причем смогут объяснить даже не разработчики

da horsie
13.01.2018
00:20:42
это у них так называется
ну хорошо, принимается

то есть суть просто в переименовании "new" ради ubiquitous language

Aleh
13.01.2018
00:21:32
да

da horsie
13.01.2018
00:22:53
ну ок, соглашусь. хотя пример невероятный, как по мне)

Aleh
13.01.2018
00:23:39
наличие доменной области?))

da horsie
13.01.2018
00:23:51
нет, конкретно переименование операции new

Like
13.01.2018
00:24:39
Эт, доброй ночи :) Я влезу со своим, вы не против?)

da horsie
13.01.2018
00:24:45
доменный язык vs шок от приватного констркутора... ну хз такое себе

Aleh
13.01.2018
00:25:08
нет, конкретно переименование операции new
если эти методы у тебя first class, то вполне отлично blahblahblahWith(Buskcet.pick)

da horsie
13.01.2018
00:25:46
ну ок ок

я готов допустить, что где-то упарываются доменным дизайном до такой степени.

Sergei
13.01.2018
00:26:53
Вот есть у меня метод, который не использует this. Есть ли хоть одна причина делать его статическим?
Да - сделав его статическим, ты даёшь гарантии (enforced by compiler) что и в будущем "случайно" туда не просочится this. Таким образом ты усиливаешь инкапсуляцию, ограничивая доступ к данным объекта из метода, который и не должен бы этоми данными объекта пользоваться. (Предполагается, что неиспользоыание this является частью логики вычислений, и не появилось "случайно")

da horsie
13.01.2018
00:27:06
наверно можно и до такого докатиться, если все остальные проблемы решены

Aleh
13.01.2018
00:27:21
я готов допустить, что где-то упарываются доменным дизайном до такой степени.
это как раз очень малая степень упарывания практически ничего от тебя не требующая

ну т.е. можешь начать использовать прямо сейчас бесплатно, прям лайфхак)

da horsie
13.01.2018
00:28:35
ну т.е. можешь начать использовать прямо сейчас бесплатно, прям лайфхак)
хз. это как полировать одну доску в лодке, когда с другого борта дыра

мое мнение)

Aleh
13.01.2018
00:29:27
хз. это как полировать одну доску в лодке, когда с другого борта дыра
полировка это 100% кавередж и еще мутационные тесты проходят и даже где-то сбоку проперти проверяются

da horsie
13.01.2018
00:29:29
возможно просто у меня психика травмирована

Aleh
13.01.2018
00:29:43
а это задача минуты или 5

Страница 447 из 785