[Перевод PBE] Непонятен смысл выражения

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
17 messages Options
Reply | Threaded
Open this post in threaded view
|

[Перевод PBE] Непонятен смысл выражения

George Herolyants-3
Ещё вопросик есть.
Никак не могу понять, что они хотели этим сказать?

Generally you should avoid using \ct{do:}, unless you want to send
messages to each of the elements of a collection.

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

Dmitry Matveev
Я думаю, они имели ввиду использовать do только для тех случаев, когда
надо просто послать определённое сообщение каждому элементу коллекции.

Если в блоке, переданном #do:, будет какое-нибудь очень хитрое
поведение (например, зависимость от состояния предыдущего элемента из
коллекции), но (ИМХО) тут уже нужен не #do: :)

2010/10/20, George Herolyants <[hidden email]>:
> Ещё вопросик есть.
> Никак не могу понять, что они хотели этим сказать?
>
> Generally you should avoid using \ct{do:}, unless you want to send
> messages to each of the elements of a collection.
>
> --
> http://groups.google.ru/group/sugr

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

George Herolyants-3
Да в общем, непонятно. Тогда бы уж написали "если вам не нужен
результат вычисления блока" или что-то в этом роде. А то просто сложно
в St представить себе ситуацию, когда не надо послать сообщение :).
Эта строчка стоит в контексте сравнения do: и collect: так вот,
по-моему, в плане необходимости посылки сообщения они никак не
отличаются :).

20 октября 2010 г. 15:21 пользователь Dmitry Matveev
<[hidden email]> написал:

> Я думаю, они имели ввиду использовать do только для тех случаев, когда
> надо просто послать определённое сообщение каждому элементу коллекции.
>
> Если в блоке, переданном #do:, будет какое-нибудь очень хитрое
> поведение (например, зависимость от состояния предыдущего элемента из
> коллекции), но (ИМХО) тут уже нужен не #do: :)
>
> 2010/10/20, George Herolyants <[hidden email]>:
>> Ещё вопросик есть.
>> Никак не могу понять, что они хотели этим сказать?
>>
>> Generally you should avoid using \ct{do:}, unless you want to send
>> messages to each of the elements of a collection.
>>
>> --
>> http://groups.google.ru/group/sugr
>
> --
> http://groups.google.ru/group/sugr

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

George Herolyants-3
Ладно, вот ещё задачка :)
The class \clsindmain{Dictionary} clearly illustrates that the
collection hierarchy is based on subclassing and not subtyping.

В общем, я понимаю, что они хотят сказать. И я даже согласен с ними
:), но как это коротко сказать по-русски?

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

Nikolay Kleptsov
Возможный вариант перевода.
Класс Dictionary наглядно показывает, что иерархия коллекций основана на подклассах, а не на типах.

2010/10/20 George Herolyants <[hidden email]>
Ладно, вот ещё задачка :)
The class \clsindmain{Dictionary} clearly illustrates that the
collection hierarchy is based on subclassing and not subtyping.

В общем, я понимаю, что они хотят сказать. И я даже согласен с ними
:), но как это коротко сказать по-русски?

--

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

George Herolyants-3
Ну в общем да, это почти дословно переводит фразу, но, к сожалению, не
доносит её смысла. А смысл таков, что наследование реализации --
плохо, и непоследовательное следование принципу подстановки тоже плохо
(там у них дальше был пример с Set'ом и Dictionary на эту тему). И вот
как это коротко сказать по-русски...

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

Yuriy Mironenko
In reply to this post by George Herolyants-3
Я думаю, что там имелось в виду, что #do: не следует использовать,
если только мы не хотим ПРОСТО/ТОЛЬКО ЛИШЬ послать сообщение каждому
объекту коллекции. Ну в смысле, что не стоит делать штуковины вроде

res:=OrderedCollection new.
arr do:[:entry| entry isGood ifTrue:[res add: entry]].

или там

res:=0.
arr do:[:entry| res:=res+entry asInteger].

или ещё чего-нибудь в таком роде, что очень часто принимаются делать
"опытные Java/C++ программисты". И хорошо ещё, если это не будет некий
монстр типа (1 to: arr size) do:[:i| (arr at: i)....]

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

Yuriy Mironenko
In reply to this post by George Herolyants-3
Ой, а можно более подробно эту общетеоретическую часть? Ну или сылки,
где почитать? А то я не понял ваших слов про "наследование реализации"
и "следование принципу подстановки". Как впрочем и оригинальную фразу
про subtyping и subclassing.

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

George Herolyants-3
http://en.wikipedia.org/wiki/Implementation_inheritance
http://en.wikipedia.org/wiki/Liskov_substitution_principle

Вот, а вообще у них там дальше идёт такой пример с Dictionary и Set'ом:
"Хотя Dictionary является подклассом класса Set, мы, скорее всего, не
станем использовать Dictionary там, где ожидаем Set."

Т.е. (как я это понимаю), классы коллекций выстроены в чёткую
иерерархию, но не вполне совместимы по интерфейсам. Т.е. сообщения,
используемые для одних коллекций фактически не имеют смысла для
других. Я где-то даже встречал классы в середине иерархии, которые
переопределяют метод суперклассов, выбрасывая исключение, т.к. для
этой коллекции этот метод использовать нельзя. Вот и получается, что
они скорее повторно используют внутренние особенности реализации, чем
порождают подтипы.

22 октября 2010 г. 4:26 пользователь Assargadon <[hidden email]> написал:
> Ой, а можно более подробно эту общетеоретическую часть? Ну или сылки,
> где почитать? А то я не понял ваших слов про "наследование реализации"
> и "следование принципу подстановки". Как впрочем и оригинальную фразу
> про subtyping и subclassing.
>
> --
> http://groups.google.ru/group/sugr

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

Denis Kudriashov
По-моему как раз из-за таких "кривых" моментов в реализации коллеций, существуют много попыток их переписать. На последнем есуге показывали реализацию на трейтах, не помню как называлась.

26 октября 2010 г. 11:06 пользователь George Herolyants <[hidden email]> написал:
http://en.wikipedia.org/wiki/Implementation_inheritance
http://en.wikipedia.org/wiki/Liskov_substitution_principle

Вот, а вообще у них там дальше идёт такой пример с Dictionary и Set'ом:
"Хотя Dictionary является подклассом класса Set, мы, скорее всего, не
станем использовать Dictionary там, где ожидаем Set."

Т.е. (как я это понимаю), классы коллекций выстроены в чёткую
иерерархию, но не вполне совместимы по интерфейсам. Т.е. сообщения,
используемые для одних коллекций фактически не имеют смысла для
других. Я где-то даже встречал классы в середине иерархии, которые
переопределяют метод суперклассов, выбрасывая исключение, т.к. для
этой коллекции этот метод использовать нельзя. Вот и получается, что
они скорее повторно используют внутренние особенности реализации, чем
порождают подтипы.

22 октября 2010 г. 4:26 пользователь Assargadon <[hidden email]> написал:
> Ой, а можно более подробно эту общетеоретическую часть? Ну или сылки,
> где почитать? А то я не понял ваших слов про "наследование реализации"
> и "следование принципу подстановки". Как впрочем и оригинальную фразу
> про subtyping и subclassing.
>
> --
> http://groups.google.ru/group/sugr

--
http://groups.google.ru/group/sugr

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

George Herolyants-3
А почему "кривых" в кавычках?

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

Alex Kogan
In reply to this post by Yuriy Mironenko
res:=OrderedCollection new.
arr do:[:entry| entry isGood ifTrue:[res add: entry]].

или там

res:=0.
arr do:[:entry| res:=res+entry asInteger].

 (1 to: arr size) do:[:i| (arr at: i)....]

Ну а чего тут уж такого криминального



2010/10/21 Assargadon <[hidden email]>
Я думаю, что там имелось в виду, что #do: не следует использовать,
если только мы не хотим ПРОСТО/ТОЛЬКО ЛИШЬ послать сообщение каждому
объекту коллекции. Ну в смысле, что не стоит делать штуковины вроде

res:=OrderedCollection new.
arr do:[:entry| entry isGood ifTrue:[res add: entry]].

или там

res:=0.
arr do:[:entry| res:=res+entry asInteger].

или ещё чего-нибудь в таком роде, что очень часто принимаются делать
"опытные Java/C++ программисты". И хорошо ещё, если это не будет некий
монстр типа (1 to: arr size) do:[:i| (arr at: i)....]

--

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

Denis Kudriashov
In reply to this post by George Herolyants-3
Потому что коллекции в смолтолке очень хороши :))

26 октября 2010 г. 11:27 пользователь George Herolyants <[hidden email]> написал:
А почему "кривых" в кавычках?

--

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

Dmitry Matveev
In reply to this post by Alex Kogan
26.10.10, Alex Kogan<[hidden email]> написал(а):

> res:=OrderedCollection new.
> arr do:[:entry| entry isGood ifTrue:[res add: entry]].
>
> или там
>
> res:=0.
> arr do:[:entry| res:=res+entry asInteger].
>
>  (1 to: arr size) do:[:i| (arr at: i)....]
>
> Ну а чего тут уж такого криминального

Это просто не Smalltalk way.

Вместо первого - select:, вместо второго - inject:into:, вместо третьего - do:.

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

Nikolay Kleptsov
In reply to this post by Denis Kudriashov


2010/10/27 Denis Kudriashov <[hidden email]>
Потому что коллекции в смолтолке очень хороши :))


Java и С отдыхают :)

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

George Herolyants-3
Это бесспорно :)

26 октября 2010 г. 23:36 пользователь Nikolay Kleptsov
<[hidden email]> написал:

>
>
> 2010/10/27 Denis Kudriashov <[hidden email]>
>>
>> Потому что коллекции в смолтолке очень хороши :))
>>
>
> Java и С отдыхают :)
>
> --
> http://groups.google.ru/group/sugr

--
http://groups.google.ru/group/sugr
Reply | Threaded
Open this post in threaded view
|

Re: [Перевод PBE] Непонятен смысл выражения

Dennis Schetinin
In reply to this post by Denis Kudriashov
Мне кажется, не будет криминала, как-то прокомментировать это неоднозначное высказывание. Всегда можно сделать сноску с пометкой "комментарий переводчика". Еще, наверное, есть смысл задать уточняющий вопрос на одном из форумов, связанных с этой книгой. Полезно будет и автору оригинала --- если у читателя возникает непонимание, значит написано не очень хорошо.

Но конкретно по подклассам и подтипам в данной конкретной --- мне все таки не понятно, что здесь имеется ввиду. Особенно по поводу типов. Там понятие типа вводится вообще где-нибудь? Я не нашел. И ничего ни про принцип Лисковой, ни про то что наследовать ради повторного использования кода... А это вообще имеет отношение к сути рассматриваемого в данной главе вопроса? Ведь, как я понимаю, речь идет о коллекциях. Надо ли здесь путать читателя какими-то рассуждениями по теории объектного программирования? Я эти слова (будь я автором) вообще бы выкинул.


26 октября 2010 г. 11:15 пользователь Denis Kudriashov <[hidden email]> написал:
По-моему как раз из-за таких "кривых" моментов в реализации коллеций, существуют много попыток их переписать. На последнем есуге показывали реализацию на трейтах, не помню как называлась.

26 октября 2010 г. 11:06 пользователь George Herolyants <[hidden email]> написал:

http://en.wikipedia.org/wiki/Implementation_inheritance
http://en.wikipedia.org/wiki/Liskov_substitution_principle

Вот, а вообще у них там дальше идёт такой пример с Dictionary и Set'ом:
"Хотя Dictionary является подклассом класса Set, мы, скорее всего, не
станем использовать Dictionary там, где ожидаем Set."

Т.е. (как я это понимаю), классы коллекций выстроены в чёткую
иерерархию, но не вполне совместимы по интерфейсам. Т.е. сообщения,
используемые для одних коллекций фактически не имеют смысла для
других. Я где-то даже встречал классы в середине иерархии, которые
переопределяют метод суперклассов, выбрасывая исключение, т.к. для
этой коллекции этот метод использовать нельзя. Вот и получается, что
они скорее повторно используют внутренние особенности реализации, чем
порождают подтипы.

22 октября 2010 г. 4:26 пользователь Assargadon <[hidden email]> написал:
> Ой, а можно более подробно эту общетеоретическую часть? Ну или сылки,
> где почитать? А то я не понял ваших слов про "наследование реализации"
> и "следование принципу подстановки". Как впрочем и оригинальную фразу
> про subtyping и subclassing.
>
> --
> http://groups.google.ru/group/sugr

--
http://groups.google.ru/group/sugr

--



--
Dennis Schetinin

--
http://groups.google.ru/group/sugr