@oop_ru

Страница 350 из 785
Anton
03.10.2017
15:19:41
EntityManagerInterface... давно это для меня было :)

Aleh
03.10.2017
15:19:44
Наоборот хорошо Оо

Adel
03.10.2017
15:19:55
Почему это?
потмоу что не надо наследоваться. надо композировать :)

Google
Sergey
03.10.2017
15:19:57
и что под "да конечно" подразумевается

Adel
03.10.2017
15:20:17
ну да :)

Aleh
03.10.2017
15:20:18
потмоу что не надо наследоваться. надо композировать :)
Не надо наследовать реализации, типы ради бога наследуйте

Anton
03.10.2017
15:20:29
а почему в шарпах да, конечно?
Потому что там так принято

Sergey
03.10.2017
15:20:47
проблема с extends как раз таки в смешивании понятия Наследования реализаций и типов

в контексте interface extends interface в наследовании ничего плохого нет

Aleh
03.10.2017
15:21:20
Интерфейсы без всякой ерунды типа дефолтных реализаций не смешивают

Sergey
03.10.2017
15:21:39
Интерфейсы без всякой ерунды типа дефолтных реализаций не смешивают
чем тебе дефолтная реализация не нравится?) ну да. кастыль)

Aleh
03.10.2017
15:22:17
чем тебе дефолтная реализация не нравится?) ну да. кастыль)
Тем что опять смешиваются понятия реализации и абстракции )

Adel
03.10.2017
15:27:26
если реализация неотделима от этой абстракции, то я не понимаю смысла. Те же 8 из 9 методов LoggerInterface - должны быть default методами.

Google
Adel
03.10.2017
15:28:44
что именно?

Aleh
03.10.2017
15:29:41
что абстракция связана с этой реализацией?

Adel
03.10.2017
15:30:25
у LoggerInterface был бы один метод log(). А остальные 8 - просто методы-хелперы.

Adel
03.10.2017
16:33:35
сейчас загуглю :)

ага. ну так я и говорю. в абстрактном классе можно было бы сделать protected abstract function log(...) и публичные методы error() info() etc.

Sergey
03.10.2017
16:35:37
моя мысль простая - не нужно было туда пихать эти методы-хелперы

Adel
03.10.2017
16:35:51
так пихай их в мтеоде лог?

Sergey
03.10.2017
16:35:52
они вообще не нужны

так пихай их в мтеоде лог?
ты ж его protected сделал

предлагаешь мне наследоваться?

а я не хочу наследоваться

Adel
03.10.2017
16:36:17
реализовать :)

Sergey
03.10.2017
16:36:19
мне от логгера нужен только метод log

Adel
03.10.2017
16:36:23
ты же хочешь свой логгер :)

Sergey
03.10.2017
16:36:23
и больше никаких методов не надо

Adel
03.10.2017
16:36:25
фактически

Sergey
03.10.2017
16:36:34
ты же хочешь свой логгер :)
я хочу кастомные уровни, логгер свой я не хочу

Google
Aleh
03.10.2017
16:36:47
мне от логгера нужен только метод log
ну я бы сказал, что нужно было разделить интерфейсы с методом log и хелперы эти

Sergey
03.10.2017
16:36:57
короч psr это хорошо но веьсма спорные штуки

Aleh
03.10.2017
16:37:37
мне как пользователю очень ок вместо log(‘error’, $msg) писать error($msg)

Sergey
03.10.2017
16:38:04
это и связанность уменьшает, так то да... но блин

Aleh
03.10.2017
16:38:11
я хочу кастомные уровни, логгер свой я не хочу
psr это ж вроде ограничивает, тебе тогда нельзя от psr\logger зависеть

Sergey
03.10.2017
16:38:13
короч абстрактные классы это плохо

Aleh
03.10.2017
16:38:55
да блин, логгер как логгер)

Sergey
03.10.2017
16:39:15
что до хэлперов и абстрактного класса - лучше трейт уже

как раз самое оно - тупой бойлерплейт

Adel
03.10.2017
16:39:56
трейты по мне - хуже абстрактных классов :)

они противоестественные

andretshurotshka?❄️кде
03.10.2017
16:40:15
тайпклассы

Aleh
03.10.2017
16:40:20
они противоестественные
чтобы это значило)

тайпклассы
не, это не те трейты)

andretshurotshka?❄️кде
03.10.2017
16:40:32
Aleh
03.10.2017
16:40:38
Блмн(
те хорошие)

andretshurotshka?❄️кде
03.10.2017
16:40:52
Я всегда думал что трейты это только тайпклассы

Aleh
03.10.2017
16:41:04
Я всегда думал что трейты это только тайпклассы
в языке для одаренных это механизм копи-паста

Google
Sergey
03.10.2017
16:41:08
трейты по мне - хуже абстрактных классов :)
это копипаста. Всего-то. Вот ты жалуешься на копипасту, тупую копипасту, без какой-либо логики. Готов даже в дефолтные методы или в абстрактный класс это запихнуть потому что 99% что будет одинаковым у всех реализаций. Даже более того - это даже юнит тестами покрывать не особо хочется.

вот для таких вещей трейты неплохо так

предоставляет дефолтную реализацию для потребителей (тех кто имплементит) твоего красивого интерфейса на 9 методов

Adel
03.10.2017
16:42:38
да ну :)

костыль

Sergey
03.10.2017
16:43:03
protected тоже кастыль, и дефолтные методы интерфейсов

но зато как прижились

Sergey
03.10.2017
16:44:07
protected тоже кастыль, и дефолтные методы интерфейсов
я б сказал бы абстрактные классы костыль, а дефолтные методы норм)

Sergey
03.10.2017
16:44:44
я б сказал бы абстрактные классы костыль, а дефолтные методы норм)
ну мне дефолтные методы нравятся больше чем абстрактные классы. Последние позволяют слишком много

andretshurotshka?❄️кде
03.10.2017
16:45:11
в тайпклассах есть DefaultSignatures это тоже самое?

Aleh
03.10.2017
16:48:17
похоже, да

Pavel
03.10.2017
19:16:51
Глупый вопрос: почему так все ломают копья насчет определения ООП, если в вики есть четкое определение - Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which may contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods. https://en.wikipedia.org/wiki/Object-oriented_programming Или оно слишком расплывчатое?

Aleh
03.10.2017
19:17:25
Дело в том, что ооп основано на концепции сообщений:)

Pavel
03.10.2017
19:19:27
А какие проблемы из этого вытекают?

Aleh
03.10.2017
19:20:51
Важно взаимодействие между объектами, а не сами объекты

Sergei
03.10.2017
19:33:26
Глупый вопрос: почему так все ломают копья насчет определения ООП, если в вики есть четкое определение - Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which may contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods. https://en.wikipedia.org/wiki/Object-oriented_programming Или оно слишком расплывчатое?
Люди вроде бы читают это определение и другие что "ооп создан для моделирования реальных процесов, переноса обьектов предметной области в код как бы напрямую что намного увеличивает семантику кода" но, потом человек смотрит в реальный код, библиотеки, разные примеры а там: гетеры, сетеры, утил классы, названия обьектов вообще хз какие... и тут начинает действовать синдром утёнка, т.к. других примеров нет и человек думает что вот ЭТО то и есть ООП, нормальный код. Определения из вики и других умных книг благополучно забываются.

Pavel
03.10.2017
19:35:34
ну как всегда, проблема в людях). А с функциональщиной, наверное, поэтому и нет проблем, ибо не мейнстрим.

Sasha
03.10.2017
19:50:22
Всем привет

Sergey
04.10.2017
08:42:05
тут у кого-то пригорает от -er суффиксов в именовании классов?

Writer, Loader, Encoder, Serializer и тд?

Google
Tex
04.10.2017
08:42:43
А должно?

Sergey
04.10.2017
08:43:09
Writer, Loader, Encoder, Serializer и тд?
Вопрос в том существуют такие существительные на самом деле или это искусственные существительные с суффиксом er

Sergey
04.10.2017
08:44:29
это все существительные созданные из глаголов - to write, to load, to encode и тд

Sergey
04.10.2017
08:44:36
+ не забываем про "функциональное ядро и императивную оболочку"

Aleh
04.10.2017
08:44:37
не быстро не просто не понятно —- три кита функционального программирования

А больше проблем нет

Sergey
04.10.2017
08:45:19
это все существительные созданные из глаголов - to write, to load, to encode и тд
есть разница как по мне между Loader и UserManager или PasswordVerifier

DNS::Resolve, File::load, Password::verify

Tex
04.10.2017
08:45:51
есть разница как по мне между Loader и UserManager или PasswordVerifier
Ну, если Loader это абстрактный класс или интерфейс - всё ок.

Sergey
04.10.2017
08:46:09
Ну, если Loader это абстрактный класс или интерфейс - всё ок.
мы сейчас названия типов обсуждаем) что это именно - не важно

Aleh
04.10.2017
08:46:59
У меня немного пригорает от интерфейсов типа Loader::load, Resolver::resolve и т.д.

В таких случаях вероятно потеряна концепция какая-то

Sergey
04.10.2017
08:47:34
у меня ассоциации с подобного вида сторями которые порой выдают бизнес аналитики

Aleh
04.10.2017
08:48:16
Ну да)

val
04.10.2017
08:50:57
подскажите, как считаете нужно поступить с отглагольными существительными в подобном кейсе для неких "решателей" уравнений например: interface Solver{ Solve(); int GetProgress(); void Cancel(); } class BruteforceSolver implements Solver class GradientDescentSolver implements Solver

val
04.10.2017
08:53:39
допустим функция нескольких переменных

Sergey
04.10.2017
08:54:13
ну то есть почему бы не сделать Gradient у которого есть метод descent

val
04.10.2017
08:54:13
то есть функция одна, но стратегии поиска корней разные

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