@prophp7

Страница 75 из 1387
Roman
24.11.2016
14:02:01
А, в этом плане. Ну ок. Мне теперь высказаться, когда интерфейс и абстрактный класс, выступают как типы?

Sergey
24.11.2016
14:02:14
они всегда являются типами

любой класс, интерфейс или абстрактный класс являются типами

способом создания нового типа

Google
Sergey
24.11.2016
14:05:46
https://habrastorage.org/files/d29/bad/2de/d29bad2deaec4f7da9ca1e08f7e47641.png

У тебя есть три класса, три типа, разные реализации нотификаций.

все они входят во множество нотификаторов - абстрактный тип который объеденяет конкретные штуки.

с типами можно делать много разных прикольных вещей

аля композиции типов

``` class Base64 implements Encoder, Decoder;

например вот, есть объект, который является объединением типов Encoder и Decoder

ести типы "свои" и "чужие". Скажем с точки зрения твоего ядра все типы будут твоими, а типы предоставляемые библиотеками - чужими. Чужим типам доверять не стоит. Но если ты знаешь что там бородатые дядьки то можно расслабиться. А вот твоим трем ребятам следует обезопасить себя от возможных изменений в интерфейсах твоих типов, твоего ядра, для своих проектов. Делается это введением "своих" типов, на которые они все могут завязать

тогда будет только одна точка, которая работает с элементами "ядра", а стало быть фиксить что-то будет не сложно. И вообдить новые штуки будет не сложно.

все дело лишь в контроле. Чужие типы мы не контролируем, а стало быть стоит сделать прослойку между ними и нами.

я упоролся

Sergey
24.11.2016
14:12:27
вообще когда говорят "абстракции" и тд, это подразумеваются как раз таки интерфейсы а "абстрактный класс" == "скелет", и то как @fes0r выше написал, интерфейсы уже могут иметь дефолтные методы и вот скоро будут приватные дефолтные методы иметь тоже так что по большей степени абстрактный класс это такой себе костыль и недопонимание..

Sergey
24.11.2016
14:13:32
ну в былые времена в C++ были только абстрактные классы... и делать композиции типов можно было за счет множественного наследования от абстрактных виртуальных классов

Google
Sergey
24.11.2016
14:13:58
потом была java которым было впадлу делать множественное наследование и они ввели интерфейсы как способ задавать "абстрактное виртуальное"

но абстрактные классы они оставили просто потому что "ну а че нет"

Sergey
24.11.2016
14:14:21
а поддерживать расширяемые классы это боль, следовательно абстрактный класс это двойная боль)

Sergey
24.11.2016
14:14:30
бооооооль

Sergey
24.11.2016
14:14:55
но абстрактные классы они оставили просто потому что "ну а че нет"
чтобы не сломать то что раньше было, поэтому и оставили

Sergey
24.11.2016
14:15:10
там много вещей таких в языке

Sergey
24.11.2016
14:15:14
когда они воровали из C++

Sergey
24.11.2016
14:15:25
ну не воровали))

Sergey
24.11.2016
14:15:33
заимствовали)

Sergey
24.11.2016
14:16:16
я вот щас как раз удаляю на проекте один абстрактный класс, от которого пошел рак

Sergey
24.11.2016
14:16:31
абстрактные кансерогены

https://www.jetbrains.com/phpstorm/whatsnew/#definitions

Sergey
24.11.2016
14:18:15
2016.3 же

Sergey
24.11.2016
14:48:48
ну тайтл страницы кривой)

Steven
24.11.2016
16:01:44
Никогда не понимал(и до сих пор не понимаю) вопроса отличия абстрактного класса от интерфейса. Ну, то есть что здесь спрашивают? Это концептуально разные вещи, где интерфейс описывает как с этим классом работать, а абстрактный класс - что-то вроде костыля в ооп, когда при проектировании иерархии нужна стартовая точка для наследования, где этот класс хранит общие свойства. Абстрактный класс Human. Дочерние man, woman. Не можем же мы создать некоторое существо Human, не уточнив его специфики. Значит пусть он будет абстрактный и имеет какой-то базовый набор свойств. А любители гуманоидов пусть не задают ему никаких абстракций. Как-то так я это вижу. Можете бить ногами.

Sergey
24.11.2016
16:21:41
Абстрактный класс - рудимент

> Не можем же мы создать некоторое существо Human, не уточнив его специфики. можем

> Значит пусть он будет абстрактный и имеет какой-то базовый набор свойств. это не нужно

наследование раньше было нужно тупо для экономии памяти

Google
Sergey
24.11.2016
16:22:39
раньше это лет 30 назад

Aleh
24.11.2016
16:23:42
наследование вместо композиции?

ну просто оно еще так-то юзается там, где лень делать структурные типы

Aleh
24.11.2016
16:25:42
дааа, норм задачка кстати)

Sergey
24.11.2016
16:25:46
а как быть с трансгендерами?)

Sergey
24.11.2016
16:25:52
сексист... ?

Sergey
24.11.2016
16:26:06
ну есть Human -> Woman, Human -> Man

Sergey
24.11.2016
16:26:12
как называть притеснение трансгендеров?

Aleh
24.11.2016
16:26:12
хехе

Sergey
24.11.2016
16:26:27
ну есть Human -> Woman, Human -> Man
скажи это брата-сестрам Вачевски

Sergey
24.11.2016
16:26:30
а трансгендеров куда?) у них то свойства общие

уже сестрам Вачевски

Sergey
24.11.2016
16:27:15
ну они все еще братья... технически... то что их пипки вывернули наизнанку и напичкали гормнов это все же больше космитические изменения

допишу в задачку

"Сделай мне такое: бармен Вася хочет стать Василисой и пойти учиться на первую трансгендерную космонавтку в космический вуз"

Sergey
24.11.2016
16:29:02
хм

звучит прям как требования на проекте!

Google
Steven
24.11.2016
16:30:00
Куда вас понесло...

Sergey
24.11.2016
16:30:25
https://pbs.twimg.com/media/BB9WlqBCIAEWC_O.jpg

дельфинопластика

вот еще один челендж

тут без множественного наследования уже никак

Sergey
24.11.2016
16:31:08
хуйня ваше наследование

Steven
24.11.2016
16:32:29
В моем примере такого не предусматривалось.

Sergey
24.11.2016
16:32:38
https://s-media-cache-ak0.pinimg.com/564x/2d/58/f1/2d58f1bebb284c52abbc1f2b6d4899f8.jpg

ну короч надо сделать тип новый ManBearBig который будет лишь композицией трех типов

Steven
24.11.2016
16:33:37
А зачем?

Admin
ERROR: S client not available

Sergey
24.11.2016
16:33:59
А для тех кто скажет "так можно от млекопитающего отнаследовать" есть добрый сосед человек паук

А зачем?
просто показываем что наследование - это так себе решение в плане гибкости

наследование классов мол

любых, абстрактных или не очень

Steven
24.11.2016
16:35:09
Ну, так вы молотком борщ мешаете.

Sergey
24.11.2016
16:35:18
че б и нет

Steven
24.11.2016
16:35:52
Это не очень реальные примеры из жизни. Да и само собой не бывает ничего идеального.

Sergey
24.11.2016
16:36:26
Это не очень реальные примеры из жизни. Да и само собой не бывает ничего идеального.
у меня был юзер. Потом их решили разделить на покупателей и продавцов

норм кейс для наследования вида User <- Customer | Merchant

Google
Sergey
24.11.2016
16:36:41
?

Sergey
24.11.2016
16:37:03
зачем там наследование вообще?)

Sergey
24.11.2016
16:37:10
да погоди ты

мне мнение надо узнать у человека

Steven
24.11.2016
16:37:24
Сразу скажу, что я так себе программист, поэтому не мощни сильно. Ну, допустим.

Sergey
24.11.2016
16:37:47
через месяц клиент решил "а хер с ним пусть им можно будет и то и то. Кастомер может стать мерчантом и наоборот. надо только недостающие части заполнить при первом логине"

Sergey
24.11.2016
16:38:04
тру стори, было такое)

Sergey
24.11.2016
16:38:17
причем когда мерчант логинится как кастомер впервый раз надо ему пароль для транзакций генерить и отправлять на почту

и новый счет заводить

я вот честно скажу - наследование тут меня подвело

и задача которая без наследования заняла бы 4 часа работы заняла у меня добрых 3 дня разработки + регрессионное тестирование всего приложения

Steven
24.11.2016
16:39:14
Ну, подождите. Он это сказал "потом". А проектируем мы систему до этого "потом".

Sergey
24.11.2016
16:39:33
можно было сделать за 4 dev + 2 QA а вышло 24 dev + 16 QA

проект с рейтом $100/h

Steven
24.11.2016
16:40:37
Полегче, полегче)

Sergey
24.11.2016
16:40:42
оверхэд 34 часа

$3400

из-за плохого решения

причем и то и то решение имплементить одинаково

Steven
24.11.2016
16:41:12
Будто ты мне счет выставляешь)

Sergey
24.11.2016
16:41:13
по времени

мне просто важно что бы ты понял что не важно что будет потом. Если ты этого не знаешь и можно сделать более гибко и с теми же временными затратами - лучше делать более гибко

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