@oop_ru

Страница 77 из 785
Sergey
25.01.2017
20:31:08
http://stackoverflow.com/questions/2671496/java-when-to-use-static-methods

так а че его к инстансу не прикрепить?
инстанс его может юзать как обычный метод тоже ведь

Aleh
25.01.2017
20:33:11
ну, тогда ему надо делать this.isSame(this, other)

тупо как-от

Google
Sergey
25.01.2017
20:33:29
ну или другой пример у тебя есть класс сервиса, который куда-то запросы хреначит. тебе нужен escapeQuery. ты ж не будешь в отдельный неймспейс писать функцию, которая этим будет заниматься?

Aleh
25.01.2017
20:34:16
так а че не объект под это дело запилить?

new EscapedQuery там

Sergey
25.01.2017
20:34:34
зачем?

ооп ради ооп?)

Aleh
25.01.2017
20:35:02
короче ж выйдет, не?

new короткое слово)

Sergey
25.01.2017
20:35:36
$this->escapeQuery($str) - тоже как-то ок

Aleh
25.01.2017
20:37:05
т.е. он все-таки у какого-то инстанса

Sergey
25.01.2017
20:37:31
ему не нужен конкретный инстанс же

зачем его к инстансу привязывать тогда?

Aleh
25.01.2017
20:37:56
ну ты ж зачем-то его внес в этот класс)

Sergey
25.01.2017
20:38:05
к классу имеет отношения

Google
Sergey
25.01.2017
20:38:10
а к конкретному инстансу нет)

Aleh
25.01.2017
20:38:48
имеет отношение = нужен ему?

Sergey
25.01.2017
20:42:48
статическому методу не нужен инстанс, а инстанс может его юзать

Golodnyi
26.01.2017
05:19:49
чет туплю

если у меня есть абстрактный класс, в котором есть статический протектед метод, который работает с константами класса, при наследовании от этого абстракта вызывая данный self метод, он работает с константами родительского (абстрактного) класса, а не с константами того, чей объект создается, как сделать как я хочу?

da horsie
26.01.2017
05:21:58
язык какой?

Golodnyi
26.01.2017
05:22:08
пхп

Denis
26.01.2017
05:22:16
Если пхп то юзать static

da horsie
26.01.2017
05:22:25
http://php.net/manual/en/language.oop5.late-static-bindings.php

Denis
26.01.2017
05:22:25
А не self

Golodnyi
26.01.2017
05:26:35
спс

Sergey
26.01.2017
05:45:18
Существуют иные мнения)
как не крути, ООП это процедурщина с изолированным состоянием. Банально продолжая аналогию что объект это разумный комьютер (то есть просто компьютер). Компьютер внутри процедурный. То что у тебя взаимодействие сети комьютеров организуется как-то красиво, через сообщения и тд. - это да, круто. Но в целом это просто попытка разделить стэйт и изолировать сайд эффекты. p.s. Мне бложик Егора в целом помог на некоторые вещи по другому посмотреть.

da horsie
26.01.2017
06:34:42
если по этому пути следовать, то и про функции можно сказать то же самое

они внутри - о боже! - процедурные

Alan
26.01.2017
06:35:08
все - опкоды)

da horsie
26.01.2017
06:35:23
а все люди под одеждой голые

Sergey
26.01.2017
06:35:28
если по этому пути следовать, то и про функции можно сказать то же самое
ну если ты всковырнешь до уровня инструкций то как бы да

но там более качественная абстракция уже

da horsie
26.01.2017
06:35:51
Sergey
26.01.2017
06:36:19
в труЪ-ооп она тоже качественная
это когда у тебя все объекты имутабельные, нет исключений (они невозможны или всегда обрабатываются на том же уровне где происходит вызов)

Google
Sergey
26.01.2017
06:36:22
?

Sergey
26.01.2017
06:41:52
ну то есть зачем тебе "правильное ооп" когда есть более-менее вменяемое "функциональное". Там нет этого булшита которое копилось десятилетиями, там все основано на вещах которые были придуманы еще в 30-х годах и математически обосновано... там красота

точнее там отсутствует двусмысленность

Sergey
26.01.2017
06:47:11
звучит как будто я что-то сказал против ФП
я к тому что понятие "тру функциональщина" существует и его разделяет большинство людей знакомых с этой самой функциональщиной. А вот "тру ооп" разделяет меньшенство. Повод задуматься.

ну то есть между "чисто процедурным" (когда весь стэйт глобален и есть процедуры работающие с ним) и чисто объектым (когда весь стэйт живет по объектам и не выходит наружу никак (ну то есть совсем никак, если надо что-то сделать - шлем сообщения и с ним шлем нужные зависимости например)

разница не так очевидна как если бы мы сравнивали "чисто процедурное" и "чисто функциональное"

Alexander
26.01.2017
08:14:59
разница не так очевидна как если бы мы сравнивали "чисто процедурное" и "чисто функциональное"
Ооп подход, по идее, был задуман как концепт инструмента, облегчающего жизнь кодера. А если быть совсем точным, то проектировщика систем

То есть перевести идейно декомпозицию кода для работы не с когнитивно абстрактных данных, а на более понятные сущности

Alexander
26.01.2017
08:16:38
Потому как, люди мыслят не в терминах данных, а в терминах предметной области.

da horsie
26.01.2017
08:17:25
То есть перевести идейно декомпозицию кода для работы не с когнитивно абстрактных данных, а на более понятные сущности
RCM с тобой не согласен, и считает тему про "люди мыслят объектами" маркетинговой уловкой

Alexander
26.01.2017
08:18:11
Так пишет уест

Кто/что такое RCM?

da horsie
26.01.2017
08:19:31
Robert Cecil Martin

@fes0r читал критику котлина? http://blog.cleancoder.com/uncle-bob/2017/01/11/TheDarkPath.html

Google
Aleh
26.01.2017
08:30:33
Вообще идея типа декларативный снаружи, императивный внутри

Правильная (просто немного следующая solid grasp) оошчина вполне соответствует тем идеям, которые проповедуются в том же sicp о лиспе

Про расширяемость и все такое

Alexandr
26.01.2017
10:38:32
Ребята, вопрос, переучиваюсь с админа на java девелопера, хотя какая разница, на девелопера. Собственно вопрос: Имеет ли смысл ходить на курсы? Курсы вроде как от толковой конторы.

Alan
26.01.2017
10:42:54
лучше сразу на работу ходить)

Admin
ERROR: S client not available

Alan
26.01.2017
10:43:07
но если практиковаться негде то почему бы и нет

Sergey
26.01.2017
10:44:17
а че джава? админу ближе будет питон

Alexandr
26.01.2017
10:44:21
ну да =) негде только в песочнице, сам задачки ищу по интернетам

Sergey
26.01.2017
10:44:26
тем более админы на нем пишут

почти баш

Alexandr
26.01.2017
10:47:16
у нас в канторе редко на питоне, у нас 80\20 win\nix, но питон приятный для понимания язык =)

Sergey
26.01.2017
12:24:59
https://adamwathan.me/2017/01/24/methods-are-affordances-not-abilities/

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

By having a format() method, the DateTime class is telling us: "Hey, I can be formatted!" Just like a window can be opened, a car can be refueled, or an announcement can be broadcast.

Google
Aleh
26.01.2017
12:38:27
суть в том, чтобы мочь отличать важные концепции, от не очень важных )

надо помнить, что не бывает правильных моделей

Pavel
26.01.2017
14:03:33
By having a format() method, the DateTime class is telling us: "Hey, I can be formatted!" Just like a window can be opened, a car can be refueled, or an announcement can be broadcast.
А почему бы просто не взять термин из формально логики - понятие. Отражения общих существуенных признаков предмета. Открываемость двери это по сути тоже признак

Pavel
26.01.2017
17:06:18
Ну по формальной логике есть только 3 формы мысли - понятие, суждение(высказывание о наличии или отсутствия признака у предмета), умозаключение(совокупность понятий и суждений, нужное для получения знаний о новых признаков). Признак же, это достаточное условие для принадлежности объекта некоторому классу. ООП в этом плане прекрасно в это все вписывается. Нужно только не путаться и понимать, что все методы являються теми же признаками и в сущности ничем не отличаются от свойств.

0x9d8e
26.01.2017
19:18:34
Люди. Подскажите. Есть ИМ (на php) на с легаси, говном и костылями (переписывание согласовано и запланировано, ибо тупик). В нём, допустим, носки. У каждого носка, допустим, массив размеров. Нужно, допустим только в админке, оставить всё как есть, а вот для каталога носок с тремя размерами становится тремя разными носками. С разными айдишниками, страницами и так далее, но основной набор данных у них общий. И класс один и тот же (иначе костылять, неперекостылять). [Примечание: в базе просто запилил табличку {origin_id, clone_id, size_id}] И вот не знаю даже как это адекватно реализовать в плане ООП. Порассуждаю прямо тут (может и отправлять не придётся): Как минимум нам при работе с клонированием нужно не путать где клон, а где оригинал, дабы не настругать в базу говна. Значит это будет два разных класса-обёртки: клон и оригинал. Оригиналу хорошо бы вообще самому позаботиться о том, чтобы его набор клонов (записи в таблице клонов и записи товаров, являющиеся этими клонами) был бы всегда корректным и актуальным. Тут охота запилить публичный маха-метод updateClones(), который бы удалил лишние, да создал недостающие, чтобы можно было дёргать его после сохранения в админке и всяких импортах (правда подозреваю что это не совсем гуд). Это подразумевает наличие, возможно приватных, методов в роде getClones(), сloneExists(int size_id), makeClone(int size_id), getSizes(), getCloneIdBySizeId(int size_id), removeClone(int clone_id), clearClones(), может ещё каких-то. Класс клона позволил бы... ну айдишник оригинала получить. А ещё айдишник размера. Ещё нужен класс, который всё это объединит. Нет, не верно, нужно всё это объединить. Например товар должен уметь определять не клон ли он. Нет. При сохранении товара нужно определить клон ли он. Для клона будет одна реализация сохранения, для оригинала другая (в т.ч. вызывающая обновление/сохранение всех клонов). Наверное логичнее всего это сделать не здоровенным if'ом в товаре, а поручить какому-то классу. Уверен что на это и паттерн есть (стратегия или что там). Но тут имеется ньюанс: вызывать сие должен товар (иначе тонну легаси переписывать). То есть во множестве мест вызывается GoodPage->save() (при том тот код может даже не знать что это GoodPage, ибо для него это просто всякие Page, та и фабрику которая это строит будет адски сложно заставить построить GoodClonePage и GoodOriginPage), так что в любом случае мы правим именно его реализацию. Пожалуй сделаю как проще и запилю там пару приватных методов cloneSave() и originalSave(), а в save() будет что-то такое: if($this->isClone()) { return $this->cloneSave(); } else { return $this->originalSave(); } И если уж понадобится это как-то изменить, то в любом случае править товар. Уровень его "божественности" это не изменит. Так ведь? В итоге будем иметь что-то типа: class GoodClone { public $good_id; public $origin_id; public $size_id; public function remove() { (new GoodPage($clone->good_id))->remove(); $this->data->delete($good_id); } } class GoodCloneOrigin { public $good_id; public function updateClones() { foreach ($this->data->sizes as $size_id) { if (!$this->cloneExists($size_id)) { $this->makeClone($size_id); } } //А при удалении размеров клон по внешнему ключу удалится. //Хотя… «Клон» то да, а товар то не-а. //Убрал внешний ключ. Вернее ON DELETE SET NULL $deletedClones = $this->data->getClonesWhereSizeIsNull(); foreach ($deletedClones as $clone) { $clone->remove(); } } } class GoodPage extends Page { /* … */ //Здесь всё почти без изменений, кроме: private function isClone(); private function saveClone(); private function saveOriginal();//отсюда будет вызов GoodCloneOrigin::updateClones() public function save() { if ($this->isClone()) { return $this->cloneSave(); } else { return $this->originalSave(); } } }

Полную ли я хрень нагородил, или с кетчупом сойдёт?

F01134H
26.01.2017
19:37:39
Охренеееееть

тексты

к такому меня телеграм не готовил

Alan
26.01.2017
19:38:26
с телефона норм

F01134H
26.01.2017
19:39:18
Знаешь, вообще, про клоны есть паттерн prototype

(c) ваш кэп

0x9d8e
26.01.2017
19:43:23
Мне кажется это другие клоны. Я потому столько и написал, что не знаю как это назвать чтобы понятно было.

F01134H
26.01.2017
19:43:53
А зачем вообще клонировать товар?

Ну, в смысле, почему новый не создать

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