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

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

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

[identity profile] jakobz.livejournal.com 2013-03-13 09:42 am (UTC)(link)
Лучше чего, что ты еще пробовал?

[identity profile] xeno-by.livejournal.com 2013-03-13 09:43 am (UTC)(link)
приношу извинения за неточную формулировку. более точно вместо "вложенные в неймспейсы" было бы сказать "вложенные в модули".

здесь просто очень важно, что контейнер - первоклассная сущность (т.е. его можно передавать в функции, возвращать из функций, можно делать if (blah) module1 else module2). обычная коннотация слова "неймспейс" это что-то второсортное вроде пакета в жабе или неймспейса в шарпе или плюсах, а это начисто убивает всю соль задумки.

в чем собственно задумка? это описано по ссылкам в родительском каменте: http://metaclass.livejournal.com/788219.html?thread=16796923#t16796923
Edited 2013-03-13 09:45 (UTC)

[identity profile] xeno-by.livejournal.com 2013-03-13 09:43 am (UTC)(link)
приношу извинения за неточную формулировку. более точно вместо "вложенные в неймспейсы" было бы сказать "вложенные в модули" : http://metaclass.livejournal.com/788219.html?thread=16797691#t16797691

[identity profile] jakobz.livejournal.com 2013-03-13 09:50 am (UTC)(link)
Почти 10 лет вижу пацанов из вуза и учебки нашей, которых учат всю дорогу по ООП. Многие не умеют писать внятные алгоритмы из двух-трех циклов, зато нахерачить фабрик и адаптеров от входа на пустом месте - умеют многие, и многие так и делают.

[identity profile] xeno-by.livejournal.com 2013-03-13 10:06 am (UTC)(link)
type User из примера выше нигде не используется по полностью квалифицированному имени. в чем именно заключается проблема?

[identity profile] metaclass.livejournal.com 2013-03-13 10:58 am (UTC)(link)
new вызывать же запрещено, это tight coupling.
Лучшие погонщики индусов приказывают в этом случае создавать и явно ссылаться на внутренние классы только внутри их контейнеров, где имя короткое. А снаружи за нас вывод типов пусть думает.

[identity profile] golikov konstantine (from livejournal.com) 2013-03-13 11:09 am (UTC)(link)
Подождем тренда "программирование [и образование] не нужно" и снова окажемся на гребне волны?

[identity profile] xeno-by.livejournal.com 2013-03-13 11:10 am (UTC)(link)
Почитайте ссылку все-таки. Юзер из примера не предназначен для инстанциации извне по своему имени (поэтому я и написал, что тип != класс), а служит для описания контракта модуля.

[identity profile] xeno-by.livejournal.com 2013-03-13 11:12 am (UTC)(link)
Главное - сокрытие деталей реализации. В жабе или шарпе с интерфейсами это получается очень многословно, но в Скале есть лучший способ, который не требует набивания текста более необходимого. Опять же, гляньте линку.

[identity profile] xeno-by.livejournal.com 2013-03-13 11:14 am (UTC)(link)
Получается, мы пришли к консенсусу, что есть разные виды вложенности типов, некоторые из которых не приводят к аду?

[identity profile] metaclass.livejournal.com 2013-03-13 11:14 am (UTC)(link)
Насколько я понимаю, в скале объявлять явно типы переменных вообще мало где нужно.

По идее, в параметрах методов могут быть такие проблемы, но методы либо живут там же где и типы, либо работают с супертипами вроде общих трейтов (и живут в этих же трейтах).

Т.е. вариант "модуль А ссылается на глубоко внутренние типы модуля B по полному пути" - это скорее всего, плохо разложили код по модулям, такого в норме быть не должно.

[identity profile] vit-r.livejournal.com 2013-03-13 11:16 am (UTC)(link)
У него нет строгой типизации. Люди будут строки таблицы загонять в noSQL, а потом разбирать парсером

[identity profile] vit-r.livejournal.com 2013-03-13 11:23 am (UTC)(link)
Ещё? Да я людей не могу найти, кто ещё вживую видел 100% кодогенерацию из ОО-моделей.

Структурный подход, Фортран, модули Паскаля, полное моделирование в RAD, функциональное тоже, правда меньше, плюс логическое с Прологомм, САП, хоть и не ковырял, но давал указания. Аспектно-ориентированное туда же.

Matlab/Simulink не смотрел, но это как-бы и не для масс.

[identity profile] vit-r.livejournal.com 2013-03-13 11:24 am (UTC)(link)
Проблема в том, что те, кто говорят, что не нужно, к тому времени окажутся в начальниках.

[identity profile] golikov konstantine (from livejournal.com) 2013-03-13 11:27 am (UTC)(link)
я просто оставлю это здесь
github .com/Mikkeren/FizzBuzzEnterpriseEdition

[personal profile] alll 2013-03-13 11:29 am (UTC)(link)
"Не стали давать на первом курсе" теперь уже означает "закопать". Ну, ок.

[identity profile] berezovsky.livejournal.com 2013-03-13 11:31 am (UTC)(link)
Может, рано на первом.

[personal profile] alll 2013-03-13 12:06 pm (UTC)(link)
Естественно рано. Если это не ПТУ, конечно. Но там вроде заявлено, что никак не ПТУ.

[personal profile] alll 2013-03-13 12:09 pm (UTC)(link)
"Трясти" вроде как именно про это обстоятельство. :)
Другой вопрос, а действительно ли надо трясти, но он скорее из области психотерапии.

[personal profile] ex0_planet 2013-03-13 12:28 pm (UTC)(link)
Трясти очень полезно в смысле visibility перед менеджментом, который дает денег сразу (а парадигма - когда еще...).

[identity profile] xeno-by.livejournal.com 2013-03-13 12:29 pm (UTC)(link)
Есть импорты так же как и везде, но см. мой ответ ниже.

[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 }.

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

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

[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._.

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

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

Page 2 of 4