@proRuby

Страница 1328 из 1594
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
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
ну про переписали там тожене сказано, что нельзя
как это не сказано? entity can allow its behaviour to be extended without MODYFYING its source code.

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
touch "—r."
не работает же

Теперь у меня более захватывающая загадка как проверить через 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
➜ ~ mkdir 1 ➜ ~ cd 1 ➜ 1 touch "—r." ➜ 1 ls —r. ➜ 1 rm "—r." ➜ 1 ls ➜ 1
там точка стояала в конце предложения

я удалил ее для того чтоб ошибок небыло

файл с именем '-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 гуглил, но не разобрался.

Страница 1328 из 1594