
Nikita
02.08.2018
12:45:51
так солид в руби не возможен

Tim
02.08.2018
12:49:43
насколько подавляющему тоже нельзя сказать, ну и доказать
просто мнение

Google

Roman
02.08.2018
12:51:17

Tim
02.08.2018
12:51:33

Nikita
02.08.2018
12:51:43
потому что как минимум ты не можешь выполнить принцип разделения интерфейсов, потому что их нет

Tim
02.08.2018
12:52:23
энкапсуляция, наследование, полиморфизм. но имхо энкапсуляция самый важный принцип

kolas
02.08.2018
12:53:35
в солид то лучше написано, single responsibilty

Roman
02.08.2018
12:53:43

Nikita
02.08.2018
12:55:26
если захотеть можно и гандон на глобус натянуть, только от этого ничего не изменится, эти методы все равно не будут интерфейсами, такими как например в жаве или любом другом языке где есть это нативно

Roman
02.08.2018
12:58:07

Roman
02.08.2018
13:22:27
речь не о том "есть ли в руби интерфейсы", а о том "что такое разделение интерфейсов"
действительно, все как скороговорку, а по сути копни глубже - и никто объяснить не может

Tim
02.08.2018
13:26:24
даже не объяснить, а просто настолько привыкли их нарушать, что даже не замечают этого
"мы всегда так писали"

Google


Tim
02.08.2018
13:27:05
ну вот только наследование у меня кстати вызывает вопросы
именно наследование реализации
потому что потомки зависят от реализации предков, и оверрайд любого неабстрактного метода может внезапно поломаться
если в методе (или даже наверное методах) родителя внести изменения
и я хз че с этим делать. только стараться не оверрайдить мб
ой бля нет не так. щас
был пример такой, например есть класс типа коллекция, у него есть метод вставить элемент и есть метод вставить несколько элементов. при чем в первоначальной имплементации метод несколько элементов в лупе дёргает метод вставить один элемент.
допустим, создаём класс мониторенная_коллекция, где при вставке например будет создаваться джоба с логами какими-то, не важно, что-то будет происходить. И учитывая первоначальную имплементацию родительского класса, мы заоверрайдим метод вставить_элемент, и таким образом сможем мониторить вставку и когда дёргают вставить_элемент, и когда дёргают вставить_несколько_элементов (потому что вставить_несколько дёргает вставить_элемент)
Дальше ради производительности вносим в родительский класс изменения: вставить_несколько например не использует больше через луп вставить_один, а делает как-нибудь по-своему. И тогда вот это изменение в родительском классе ломает дочерний класс, потому что вставить несколько больше не мониторится
Вот, пример вспомнил, а как обобщить правило хз
близко, но не то


Egor
02.08.2018
13:38:51
Может это?
https://en.wikipedia.org/wiki/Open%E2%80%93closed_principle

Tim
02.08.2018
13:41:32
по-моему нет "an entity can allow its behaviour to be extended without modifying its source code."

Egor
02.08.2018
13:43:48
почему нет?)

Tim
02.08.2018
13:44:04
у кого-нибудь есть мысли по этому поводу? я просто слышал по сути только "наследование имплементации надо запретить, надо наследовать интерфейс"
почему нет?)
ну типа, это означает, что поведение класса можно дополнить в другом месте
не трогая его непосредственные сорцы

Egor
02.08.2018
13:44:51
так
в твоём примере переписали сорцы, только родителя

Google

Egor
02.08.2018
13:45:21
но он тоже сущность, и его тоже нельзя переписывать, судя этому принципу

Tim
02.08.2018
13:45:28
изменение сорцов родителя привели к крашу потомка
не
этот принцип разрешает "расширять" поведение сущности без изменения её сорцов

Egor
02.08.2018
13:46:20
всё верно

Tim
02.08.2018
13:46:20
ну наследование по факту просто
ну не только, ещё можно манкипатч
вот, но он не говорит, что нельзя изменять поведение сущности в другом месте
говорит, что можно дополнять

Egor
02.08.2018
13:47:22
ты про дочернюю сущность?
её нельзя переписывать?
а родителя - можно?

Roman
02.08.2018
13:48:25
ну так так вообще ничо нельзя наследовать. можно даже упростить - не два метода, а один. а в наследнике super и потом ишо что-то

Tim
02.08.2018
13:48:31
нет, я про родителя

Roman
02.08.2018
13:48:35
меняешь parent - child сломался

Tim
02.08.2018
13:49:15
каким образом? подробней плз

Egor
02.08.2018
13:49:16

Tim
02.08.2018
13:49:37
ну про переписали там тожене сказано, что нельзя
суть в том что можно расширять
не изменяя сорцы

Google

Roman
02.08.2018
13:50:07
каким образом? подробней плз
а, или ты имеешь в виду, что как ты там называл вставить_несколько по сути не поменялся наружу, а только изменил свою внутренюю имплементацию - а это уже сломало чайлд?
тогда не оверрайди приватные методы =)

Egor
02.08.2018
13:52:25

Tim
02.08.2018
13:53:43
про запрет ничего же

Egor
02.08.2018
13:55:13

Admin
ERROR: S client not available

Tim
02.08.2018
13:55:37
ну я не вижу запрета)

Roman
02.08.2018
14:00:21

Tim
02.08.2018
14:03:39
не удалили
он остался в том и смысл
и вставить_много остался
только внутри изменился и уже не вызывает вставить_один
а другой класс мониторил тем, что оверрайдил вставить_один
и поэтому у него поломался монитор вставить_много

Roman
02.08.2018
14:18:23
аа все, понял

Dima
02.08.2018
15:06:59
Всем загадка. Как создать и удалить в bash файд с именем -r

Google

Dima
02.08.2018
15:07:08
только что решил.
было интересно.

Alexander
02.08.2018
15:08:10
touch "—r."

Dima
02.08.2018
15:10:21
Теперь у меня более захватывающая загадка как проверить через test в BASH сущестование файла с именем -f я ее не решил.

Alexander
02.08.2018
15:11:31
не работает же
➜ ~ mkdir 1
➜ ~ cd 1
➜ 1 touch "—r."
➜ 1 ls
—r.
➜ 1 rm "—r."
➜ 1 ls
➜ 1

Dima
02.08.2018
15:12:17
я удалил ее для того чтоб ошибок небыло
файл с именем '-r' как ключь для команды rm
имя из двух символов
name ='-r'
'-' == name[0]
'r'==name[1]

Alexander
02.08.2018
15:13:48

Dima
02.08.2018
15:14:09
как интересно.
у меня он не создает

Alexander
02.08.2018
15:16:11
ладно, не ломай голову. Там не минус, там дефис %)

Dima
02.08.2018
15:18:29

Alexander
02.08.2018
15:18:49
compose + дабл минус
а, трипл :)

Felix
02.08.2018
15:19:42
compose это что?)

Dima
02.08.2018
15:19:50
compose + дабл минус
интеерсно, я с этим не сталкивался, я даже что такое compose гуглил, но не разобрался.