
Ilia
13.03.2017
00:04:19
ладно, в php все равно нет явного объявления и краха с памятью или аодобным не случится

Sergey
13.03.2017
00:05:46
в PHP или любых других языках с динамической системой типов ты это из коробки имеешь:
function add()
{
$args = func_get_args();
if (count($args) > 1) {
$numbers = $args;
} else {
$numbers = $args[0];
}
return array_reduce($numbers, function($sum, $number) {
return $sum + $number;
}, 0);
}
конечно не так красиво как может показаться но в целом работает так же. Просто ифы явные вместо сравнения по сигнатуре

Ilia
13.03.2017
00:07:44
веселуха, че

Google

Ilia
13.03.2017
00:07:52
а что про LSP

Sergey
13.03.2017
00:09:31
ну в целом все просто. LSP как бы тебе говорит что если у тебя система завязана на какую-то абстракцию с типом T, если ей подставят любую реализацию этой абстракции являющейся типом T', система должна продолжать работать корректно. То есть никаких "новых" исключений, никаких доп проверок на входящие аргументы.
> Be conservative in what you send, be liberal in what you accept"

Ilia
13.03.2017
00:10:34
это просто термин чтобы посоны не беспокоились и применяли чаще

Sergey
13.03.2017
00:10:38
то есть мы можем ослаблять прекондишены но инварианты оставляем теми же
например в PHP комьюнити многие бесились что мол return type hinting нельзя переопределить в дочерних классах
это как раз таки последствие LSP
если ты обязался выплевывать тип SomeParent то уж изволь продолжать это делать

Ilia
13.03.2017
00:11:54
хм, хорошо, видимо я с этим еще столкнусь

Sergey
13.03.2017
00:12:21

Ivan
13.03.2017
00:12:29
спасибо за обяснение LSP! а то я его сразу так и не понял
что за видос? :)

Google

Sergey
13.03.2017
00:12:49
https://www.youtube.com/watch?v=bVwZquRH1Vk
у этого чувака весьма годные объяснения

Ilia
13.03.2017
00:13:30
а что насчет OCP и ISP? ха видос спасибо, схоронил, днем посмотрю

Sergey
13.03.2017
00:13:57
OCP это "расширяй функционал не меняя код"
ISP - "лучше маленькие специализированные интерфейсы чем жирные и много функциональные"
про это в другой раз) а то я уже чет спать хочу

Ilia
13.03.2017
00:14:41

Sergey
13.03.2017
00:14:52

Ilia
13.03.2017
00:15:00

Sergey
13.03.2017
00:15:16

Ilia
13.03.2017
00:15:19
декораторы?

Sergey
13.03.2017
00:15:29
class Base64 implements Encoder, Decoder
где надо encode делать - юзаешь Encoder. Где decode - Decoder
ну мол идея в том что твои объекты... они как бы живут себе в капсулах в ус не дуют и делают себе работу
но иногда им надо с другими объектами общаться, то есть в их капсулу могут приходит всякие там свидетели иеговы и т.д. и отвлекать по всяким глупостям о боге
а им только декодировать base64 иногда надо

Ilia
13.03.2017
00:17:04

Sergey
13.03.2017
00:17:33
ну мол у тебя интерфейсы и так самодостаточны

Google

Ilia
13.03.2017
00:18:04

Sergey
13.03.2017
00:18:15
ну то есть... один интерфейс - одна задача
например "подсчет стоимости товара"

Ilia
13.03.2017
00:18:48
SRP)
Ааа, свинью подложили! этого в списке нет :)

Sergey
13.03.2017
00:18:49
или там "рекалькуляция НДС"
по сути идеально интерфейс с одним публичным методом
иногда надо 2
3 - ну очень редко но может быть будет полезным
но больше лучше не делать

Ilia
13.03.2017
00:19:36
класс , у которого 2-3 метода и не более?

Sergey
13.03.2017
00:19:42
интерфейс.

Sergey
13.03.2017
00:20:04
иногда бывает так что с точки зрения coheasion удобне поместить реализации 5-ти интерфейсов в одном классе

Ilia
13.03.2017
00:20:10
ладно, что такое интерфейс? из чего он состоит?

Sergey
13.03.2017
00:20:13
пример - опять же тот же Base64
если ты поменяем реализацию encode то и реализацию decode надо править
потому логично пихать это в отдельный класс
но мы все еще можем давать возможность юзать отдельные функции этого класса, предоставляя 2 отдельных интерфейса

Ilia
13.03.2017
00:21:15

Sergey
13.03.2017
00:21:28

Google

Ilia
13.03.2017
00:21:40

Sergey
13.03.2017
00:21:43
это "апишка" твоих объектов. поведение
то как ты можешь взаимодействовать с объектом. Публичные методы
можно объявить интерфейс без реализации (interface, abstract class)
но у всего так или иначе будет интерфейс

Ilia
13.03.2017
00:22:36
ладно, пока думаю достаточно, если хотите донести что-то еще, то приму, а так не хочу задерживать :)
про абстракции надо будет почитать, на выходных книг накачал

Sergey
13.03.2017
00:23:15

Ilia
13.03.2017
00:23:32

Sergey
13.03.2017
00:23:38
"экземпляр"

Admin
ERROR: S client not available

Ilia
13.03.2017
00:23:59

Sergey
13.03.2017
00:24:01
все буквально есть объект. И та штука объект, и эта штука объект. И скаляры в php объекты, просто без поведения.
у всех этих вещей вполне себе конкретная история почему так сделали

Ilia
13.03.2017
00:25:19

Sergey
13.03.2017
00:25:36
скажем те же модификаторы доступа - это кастыли которые нужны были в C++ потому что там объявление реализации интерфейса уехало туда же где интерфейсы живут - в заголовочный файл

Ilia
13.03.2017
00:25:44

Sergey
13.03.2017
00:25:48
а оттуда пошло дальше)

Google

Sergey
13.03.2017
00:26:17
разлица лишь "абстракция" и "реализация"
скажем во всяких там ruby/python чуваки для абстракций делают просто классы с методами и оттуда кидают исключения.

Ilia
13.03.2017
00:26:54
абстракция полезна в крупном проекте только?

Sergey
13.03.2017
00:26:56
что мол "низя меня просто так юзать"
абстракция, это способ декомпозиции проблемы из большой на более мелкие
и вот с декомпозицией у нынешних разработчиков большие проблемы)

Ilia
13.03.2017
00:28:38

Sergey
13.03.2017
00:28:41
любят они снизу вверх на проблемы смотреть.

Ilia
13.03.2017
00:29:12
следовательно нарушение SRP

Sergey
13.03.2017
00:29:22
блин чувак ты сейчас просто гадаешь)
но в целом да - выливается это в нарушение SRP, нарушение закона деметры, нарушение инкапсуляции... полиморфизм - не не слышали
как мне кажется большая проблема в том что когда чуваки начинают писать например какой-то класс, то начинают с пропертей
как буд-то бы это самое важное что есть
а следует начинать с поведения. Что будет делать объект. А проперти - потом разберемся что там надо
ну и начинать надо с объекта под названием Application раз уж на то пошло)

Ilia
13.03.2017
00:31:25

Sergey
13.03.2017
00:31:52
https://en.wikipedia.org/wiki/Actor_model

Ilia
13.03.2017
00:32:24
просто модель поведения?
разве не составление алгоритма? или это относится к процедурно-функц стилю?

Sergey
13.03.2017
00:32:59
ну твоя система это ничто иное как модель поведения