metaclass: (дзедline)
metaclass ([personal profile] metaclass) wrote2013-03-13 10:40 am

ООП потиху закапывают

http://avva.livejournal.com/2581700.html
Все, что было полезного в ООП, унесли в другие парадигмы (если оно раньше еще оттуда не было заимствовано), остальное решили закопать :)

[identity profile] xeno-by.livejournal.com 2013-03-13 12:35 pm (UTC)(link)
Контракт в том примере публично виден.

Но "извне" это растяжимое понятие. В Скале есть способ собирать большие модули из небольших кусочков. При этом каждый из кусочков, несмотря на то, что определен отдельно от других (возможно, даже в другом пакете), логически находится в одной песочнице вместе со своими зависимостями (называется cake pattern). Как следствие, для значительной части кода ада вложенности не существует. Т.е. будет не class Foo { Bar.baz }, а class Foo { self: Bar => baz }.

Вы спросите, чем же это отличается от обычных неймспейсов и не-вложенных классов. Тем, что модули в Скале в отличие от пакетов в Джаве являются первоклассными сущностями, т.е. их можно передавать в методы, у них есть контракты, ими можно параметризировать код.
(deleted comment)

[identity profile] xeno-by.livejournal.com 2013-03-13 01:02 pm (UTC)(link)
Считается. Потому, что self-type или extends пишутся один раз, а квалификаторы не пишутся много раз.
(deleted comment)

[identity profile] xeno-by.livejournal.com 2013-03-13 01:12 pm (UTC)(link)
Более полный пример:
object Module extends Part1 with Part2 with Part3
trait Part1 { self: Module => ... }
trait Part2 { self: Module => ... }
trait Part3 { self: Module => object NestedModule { ... } }


Все определения из PartX можно использовать в любом PartY без квалификатора. Чтобы использовать определения из NestedModule, нужно или юзать квалификатор, или написать import NestedModule._.
(deleted comment)

[identity profile] xeno-by.livejournal.com 2013-03-13 01:21 pm (UTC)(link)
Как скажете. Наверное, я не очень хорошо объяснил, но у меня, к сожалению, на более развернутый рассказ нет времени.

Одно хочу сказать - лично я после перехода с сишарпа на скалу стал писать гораздо меньше импортов.
(deleted comment)

[identity profile] xeno-by.livejournal.com 2013-03-13 01:48 pm (UTC)(link)
Согласен. Я бы рад помочь, на это как раз и нет времени.

Мне кажется, "жутко" тут получается потому, что незнакомо.
Edited 2013-03-13 13:48 (UTC)
(deleted comment)

[identity profile] xeno-by.livejournal.com 2013-03-13 01:54 pm (UTC)(link)
А где в том примере декларативщина? Или вы про Скалу вообще?
(deleted comment)

[identity profile] xeno-by.livejournal.com 2013-03-13 02:01 pm (UTC)(link)
Скала любая.

[identity profile] metaclass.livejournal.com 2013-03-13 01:55 pm (UTC)(link)
Слушай, а вот оные объекты, собранные из частей - это ж получается типа синглетонов - т.е. анонимный класс и один его экземпляр?

[identity profile] xeno-by.livejournal.com 2013-03-13 02:03 pm (UTC)(link)
Ну да, они так и реализованы. Но мне лично проще думать о них как о first-class неймспейсах - какая-то именованная штука, внутри которой есть другие штуки.

[identity profile] metaclass.livejournal.com 2013-03-13 02:07 pm (UTC)(link)
Но формально такой объект можно использовать как хранилище какого-нибудь состояния? Например, в качестве кэша над коннектом к БД.

[identity profile] xeno-by.livejournal.com 2013-03-13 02:10 pm (UTC)(link)
Да. В модулях могут быть не только определения методов и вложенных классов и модулей, но и стейт.

[identity profile] jdevelop.livejournal.com 2013-03-14 01:52 am (UTC)(link)
ребе, выложите наконец свой код на гитхаб, и будем смотреть