Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 December 01

D

Dmitry in NodeUA - JavaScript and Node.js in Ukraine
Вечір в хату!
источник

KR

Kostyantin Randomnam... in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
тогда я потерял нить :-/
если вернуться к самому началу, то речь шла о каноническом примере для демонстрации lsp - геометрические фигуры должны образовывать двухуровневую иерархию наследования с абстрактным классом на вершине, и не должны наследоваться друг от друга
а дальше речь шла уже о разных ухищрениях для избегания дублирования кода - типа у этих типов фигур площадь вычисляется схожим образом, значит... и вот дальше шли разные предложения, от переноса общего кода в (ещё один) базовый класс, до выделения общего кода в отдельные классы, которые должны подмешиваться
закончилось всё, как я и ожидал, срачем
но гитлера не вспомнили
почему не должны, у тебя могут прямоугольники наследоваться от 4хугольников, а квадраты от прямоугольников. И каждый будет изменять\добавлять детали. Вопрос что у чувака идеи были типа мы работает с прямоугольниками, а теперь давайте им угол поменяем и они больше не будут прямоугольниками. Где теперь ваше все?
источник

ДП

Дима Полос in NodeUA - JavaScript and Node.js in Ukraine
Dmitry
Вечір в хату!
Доброго вечора!
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Kostyantin Randomname
почему не должны, у тебя могут прямоугольники наследоваться от 4хугольников, а квадраты от прямоугольников. И каждый будет изменять\добавлять детали. Вопрос что у чувака идеи были типа мы работает с прямоугольниками, а теперь давайте им угол поменяем и они больше не будут прямоугольниками. Где теперь ваше все?
Не могут в том смысле, что такое наследование нарушает LSP
А последний вопрос ко мне относится? Потому что отказ от наследования в пользу композиции как раз такие вопросы снимает
источник

KR

Kostyantin Randomnam... in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
Не могут в том смысле, что такое наследование нарушает LSP
А последний вопрос ко мне относится? Потому что отказ от наследования в пользу композиции как раз такие вопросы снимает
почему нарушает? заменяй прямоугольники прямоугольниками  и у тебя все будет хорошо, а геометрические фигуры геометрическими
источник

/

// JD in NodeUA - JavaScript and Node.js in Ukraine
Наконец-то украинские чаты пошли !
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Kostyantin Randomname
почему нарушает? заменяй прямоугольники прямоугольниками  и у тебя все будет хорошо, а геометрические фигуры геометрическими
Я не до конца понял, что ты предлагаешь. Нарушение принципа состоит в самом факте наследования, а не в том, какие ссылки мы храним (если всё-таки речь о том, что в рантайме мы можем подменить что-то чем-то)
Почему нарушает было обсуждено выше, и если ты не согласен с тем, что таки нарушает, проще будет ответить на одно из тех сообщений
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
тогда я потерял нить :-/
если вернуться к самому началу, то речь шла о каноническом примере для демонстрации lsp - геометрические фигуры должны образовывать двухуровневую иерархию наследования с абстрактным классом на вершине, и не должны наследоваться друг от друга
а дальше речь шла уже о разных ухищрениях для избегания дублирования кода - типа у этих типов фигур площадь вычисляется схожим образом, значит... и вот дальше шли разные предложения, от переноса общего кода в (ещё один) базовый класс, до выделения общего кода в отдельные классы, которые должны подмешиваться
закончилось всё, как я и ожидал, срачем
но гитлера не вспомнили
Если я сделаю такую иерархию
GeometricFigure->Quadrangle->Rectangle->Square
ничего не нарушается  ЕСЛИ все эти классы поддерживают интерфейс GeometricFigure (то есть имеют все обьявленные в нем методы) и не имеют более строгих условий и новых эксепшенов внутри. но если я внутри Square напишу if (this.width != this.height) throw Error(…) то LSP нарушается
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
"Нарушение принципа состоит в самом факте наследования" -  нарушение принципа в том КАК пронаследовали - сломали в наследнике родительское поведение или нет
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
Если я сделаю такую иерархию
GeometricFigure->Quadrangle->Rectangle->Square
ничего не нарушается  ЕСЛИ все эти классы поддерживают интерфейс GeometricFigure (то есть имеют все обьявленные в нем методы) и не имеют более строгих условий и новых эксепшенов внутри. но если я внутри Square напишу if (this.width != this.height) throw Error(…) то LSP нарушается
😭

У прямоугольника будут отдельные методы для изменения длины и высоты? А у квадрата они будут менять одно и то же?
Может быть написан код, который на вход принимает rectangle, меняет ширину, но при этом ожидает, что длина не изменилась?
Это же и будет сломом родительского поведения в наследнике, потому что у родителя при смене длины ширина не меняется

С наследованием прямоугольника от четырёхугольника ещё хуже, потому что в последнем можно менять длины сторон отдельно, равно как и менять значения конкретного угла. Про изменение угла в прямоугольнике и квадрате вообще не стоит говорить, там как раз эксепшн и должен пролетать, если уж сделали наследование
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Коллеги могу ли я на двух ядерном ноуте форкнуть 800 раз процесс? или всё же ограничится количеством ядер? Насколько эти критично для производительности. Процессы абсолютно независимы и делают независимые операции. Я хочу получить паралельное выполнение расчётов внутри форнутых процессов.

const { fork } = require('child_process');

const data = ['... some data']; // 800 obj

for (let i = 0; i < data.length; i++) {
   const child = fork(__dirname + '/someLogic');
   child.on('message', (msg) => {
       console.log(`Process ${i} msg`, msg);
   });
   child.send({ type: 'START', data: data[i] });
};
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Вернее насколько это целесообразно
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Коллеги могу ли я на двух ядерном ноуте форкнуть 800 раз процесс? или всё же ограничится количеством ядер? Насколько эти критично для производительности. Процессы абсолютно независимы и делают независимые операции. Я хочу получить паралельное выполнение расчётов внутри форнутых процессов.

const { fork } = require('child_process');

const data = ['... some data']; // 800 obj

for (let i = 0; i < data.length; i++) {
   const child = fork(__dirname + '/someLogic');
   child.on('message', (msg) => {
       console.log(`Process ${i} msg`, msg);
   });
   child.send({ type: 'START', data: data[i] });
};
Эх... На вас бы Корочкина натравить :)
источник

KR

Kostyantin Randomnam... in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
😭

У прямоугольника будут отдельные методы для изменения длины и высоты? А у квадрата они будут менять одно и то же?
Может быть написан код, который на вход принимает rectangle, меняет ширину, но при этом ожидает, что длина не изменилась?
Это же и будет сломом родительского поведения в наследнике, потому что у родителя при смене длины ширина не меняется

С наследованием прямоугольника от четырёхугольника ещё хуже, потому что в последнем можно менять длины сторон отдельно, равно как и менять значения конкретного угла. Про изменение угла в прямоугольнике и квадрате вообще не стоит говорить, там как раз эксепшн и должен пролетать, если уж сделали наследование
Не меняй, если хочешь соблюсти правила. Заменяй
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Эх... На вас бы Корочкина натравить :)
Помогите понять. Пожалуйста.
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Kostyantin Randomname
Не меняй, если хочешь соблюсти правила. Заменяй
это как?
источник

KR

Kostyantin Randomnam... in NodeUA - JavaScript and Node.js in Ukraine
Если ты хочешь изменить прямоугольнику одну сторону, то вместо геометрической фигуры, которая и есть прямоугольник ты создаешь четырехугольник с новой стороной.
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Kostyantin Randomname
Если ты хочешь изменить прямоугольнику одну сторону, то вместо геометрической фигуры, которая и есть прямоугольник ты создаешь четырехугольник с новой стороной.
мы обсуждаем наследование, а не замену фигур в рантайме
lsp он же про наследование
источник

KR

Kostyantin Randomnam... in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
мы обсуждаем наследование, а не замену фигур в рантайме
lsp он же про наследование
Он про интерфейсы и замену интерфейса фигура(квадрат) заменой интерфейсом фигура(четырехугольник)
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Kostyantin Randomname
Он про интерфейсы и замену интерфейса фигура(квадрат) заменой интерфейсом фигура(четырехугольник)
вот там выше Елена предложила иерархию наследования, мы обсуждаем корректность этой иерархии с т.з. lsp
источник