обобщение Liskov substitution principle
От: Codealot Земля  
Дата: 22.02.22 16:56
Оценка:
Liskov substitution principle говорит о типах, которые наследуют друг от друга. Как насчет ситуации, когда типы не связаны наследованием, но выполняют похожие функции, например массивы и списки в .NET? Для такой ситуации тоже полезно сделать интерфейс этих классов максимально близким, чтобы можно было заменить один на другой с минимумом гемора.
Для этого принципа есть какое-то формальное название?
Ад пуст, все бесы здесь.
Re: duck typing
От: omgOnoz  
Дата: 22.02.22 16:58
Оценка:
Здравствуйте, Codealot, Вы писали:

сабж?
Re[2]: duck typing
От: Codealot Земля  
Дата: 22.02.22 16:59
Оценка: -1
Здравствуйте, omgOnoz, Вы писали:

O>сабж?


Нет. Если названия и сигнатуры методов в похожих типах не совпадают, то никакой duck typing не сработает.
Ад пуст, все бесы здесь.
Re: обобщение Liskov substitution principle
От: Stanislav V. Zudin Россия  
Дата: 22.02.22 17:02
Оценка: +1
Здравствуйте, Codealot, Вы писали:

C>Liskov substitution principle говорит о типах, которые наследуют друг от друга. Как насчет ситуации, когда типы не связаны наследованием, но выполняют похожие функции, например массивы и списки в .NET? Для такой ситуации тоже полезно сделать интерфейс этих классов максимально близким, чтобы можно было заменить один на другой с минимумом гемора.


Если мне склероз не изменяет, для этой цели придуман IEnumerable.
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: обобщение Liskov substitution principle
От: Codealot Земля  
Дата: 22.02.22 17:08
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Если мне склероз не изменяет, для этой цели придуман IEnumerable.


Будет очень эффективно, если ты попытаешься сделать через него Reverse
Ад пуст, все бесы здесь.
Re[3]: обобщение Liskov substitution principle
От: Stanislav V. Zudin Россия  
Дата: 22.02.22 17:47
Оценка:
Здравствуйте, Codealot, Вы писали:

SVZ>>Если мне склероз не изменяет, для этой цели придуман IEnumerable.


C>Будет очень эффективно, если ты попытаешься сделать через него Reverse


Он для этого и не предназначен.
Ты же не пытаешься обращаться к элементам списка по индексу?
_____________________
С уважением,
Stanislav V. Zudin
Re[4]: обобщение Liskov substitution principle
От: Codealot Земля  
Дата: 22.02.22 17:52
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Он для этого и не предназначен.


Значит, никакого отношения к поставленному мной вопросу он и не имеет.
Ад пуст, все бесы здесь.
Re[5]: обобщение Liskov substitution principle
От: Muxa  
Дата: 22.02.22 17:58
Оценка:
SVZ>>Он для этого и не предназначен.
C>Значит, никакого отношения к поставленному мной вопросу он и не имеет.

Дык ты обозначь что за похожие функции, выполняемые списком и массивом ты имеешь в виду. Хранение более чем одного элемента чтоли?
Мы же не телепаты.
Re[3]: duck typing
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.02.22 17:58
Оценка: +1
Здравствуйте, Codealot, Вы писали:

C>Нет. Если названия и сигнатуры методов в похожих типах не совпадают, то никакой duck typing не сработает.


Ну должен же компилятор как-то догадаться, что некие два метода по сути своей одинаковые. Duck typing предлагает конкретный, весьма простой, механизм, как ему это объяснить.
Re[4]: duck typing
От: Codealot Земля  
Дата: 22.02.22 18:10
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Ну должен же компилятор как-то догадаться, что некие два метода по сути своей одинаковые. Duck typing предлагает конкретный, весьма простой, механизм, как ему это объяснить.


Чтобы он догадался, у них должна быть сделана одинаковая сигнатура. И вот именно про это и был мой вопрос, а не про то, что происходит после.
Ад пуст, все бесы здесь.
Re[6]: обобщение Liskov substitution principle
От: Codealot Земля  
Дата: 22.02.22 18:10
Оценка:
Здравствуйте, Muxa, Вы писали:

M>Дык ты обозначь что за похожие функции, выполняемые списком и массивом ты имеешь в виду. Хранение более чем одного элемента чтоли?


Как я уже писал — Reverse, в качестве примера.
Работает одинаково для обоих коллекций. Значит, и сигнатура у методов должна быть максимально одинаковой, чтобы можно было легко заменить в коде один класс на другой. Вопрос — у этой идеи есть какое-нибудь умное название, чтобы вдолбить в голову тех, кто не понимает зачем это нужно?
Ад пуст, все бесы здесь.
Re[7]: обобщение Liskov substitution principle
От: Muxa  
Дата: 22.02.22 18:16
Оценка: +1
C>Как я уже писал — Reverse, в качестве примера.
C>Работает одинаково для обоих коллекций. Значит, и сигнатура у методов должна быть максимально одинаковой, чтобы можно было легко заменить в коде один класс на другой. Вопрос — у этой идеи есть какое-нибудь умное название, чтобы вдолбить в голову тех, кто не понимает зачем это нужно?

Статический полиморфизм?
void ReverseIt<T>(T collection){
  collection.Reverse();
}
Re[5]: duck typing
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.02.22 18:46
Оценка:
Здравствуйте, Codealot, Вы писали:

Pzz>>Ну должен же компилятор как-то догадаться, что некие два метода по сути своей одинаковые. Duck typing предлагает конкретный, весьма простой, механизм, как ему это объяснить.


C>Чтобы он догадался, у них должна быть сделана одинаковая сигнатура. И вот именно про это и был мой вопрос, а не про то, что происходит после.


Ну вот, сведение типов по сигнатурам методов и называется duck typing.
Re: обобщение Liskov substitution principle
От: Sharov Россия  
Дата: 22.02.22 23:01
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Liskov substitution principle говорит о типах, которые наследуют друг от друга. Как насчет ситуации, когда типы не связаны наследованием, но выполняют похожие функции, например массивы и списки в .NET? Для такой ситуации тоже полезно сделать интерфейс этих классов максимально близким, чтобы можно было заменить один на другой с минимумом гемора.

C>Для этого принципа есть какое-то формальное название?

https://en.wikipedia.org/wiki/Ad_hoc_polymorphism
Правда общий интерфейс должен быть.
Кодом людям нужно помогать!
Re[4]: обобщение Liskov substitution principle
От: Doom100500 Израиль  
Дата: 23.02.22 06:44
Оценка: :))
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Ты же не пытаешься обращаться к элементам списка по индексу?


Пфффф. Ты плохо ориентируешся в вопросе...
Спасибо за внимание
Re: обобщение Liskov substitution principle
От: elmal  
Дата: 23.02.22 10:48
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Для этого принципа есть какое-то формальное название?

interface segregation principle вполне достаточно. Вкупе с такой фичей как Intersection Types, чтоб не городить новых интерфейсов которые являются
комбинацией более мелких.
Re: обобщение Liskov substitution principle
От: Kolesiki  
Дата: 23.02.22 12:19
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Для этого принципа есть какое-то формальное название?


Duck typing?
Re[3]: duck typing
От: Kolesiki  
Дата: 23.02.22 12:22
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Здравствуйте, omgOnoz, Вы писали:


O>>сабж?


C>Нет. Если названия и сигнатуры методов в похожих типах не совпадают, то никакой duck typing не сработает.


А кто тебе сказал, что они НЕ СОВПАДАЮТ?? Duck принцип про то и говорит — если ты можешь это "открыть", "записать" и "закрыть", значит это ФАЙЛ! Независимо от объекта. Значит вызовы априори идентичны.
Re: обобщение Liskov substitution principle
От: amironov79  
Дата: 23.02.22 15:12
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Liskov substitution principle говорит о типах, которые наследуют друг от друга. Как насчет ситуации, когда типы не связаны наследованием, но выполняют похожие функции, например массивы и списки в .NET? Для такой ситуации тоже полезно сделать интерфейс этих классов максимально близким, чтобы можно было заменить один на другой с минимумом гемора.

C>Для этого принципа есть какое-то формальное название?

Структурный полиморфизм или статическая утиная типизация. Примеры можно посмотреть в интерфейсах go и в питоновских протоколах. Если же вопрос касается только .net, то в C# в явном виде такого нет, но массивы и списки реализуют IList<T>.
Re[4]: duck typing
От: Codealot Земля  
Дата: 23.02.22 17:19
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>А кто тебе сказал, что они НЕ СОВПАДАЮТ??


А вот потому что кто-то сделал так, что они не совпадают.
duck typing — это система типизации, а не принципы проектирования классов. А мой вопрос — про принципы проектирования классов.
Ад пуст, все бесы здесь.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.