wizzard: (Default)
[personal profile] wizzard

почему в интерфейсе не может быть конструкторов? аррргх.

насчет “в языке нету синтаксиса” – делается на раз-два. ISomeType something= new<ISomeType> typeVariable(arg, arg2, arg3), например. И статический чекинг, и все тут, и не конфликтует ни с чем.

без синтаксиса делается тоже на раз-два, либо фабриками, либо рефлекшеном, но некрасиво это :/

У меня ностальгия по питоновой общности между constructors, factories и вообще callables…

Date: 2009-12-15 08:48 am (UTC)
From: [identity profile] mr-aleph.livejournal.com
а зачем интерфейсу конструктор?

Date: 2009-12-15 08:56 am (UTC)
From: [identity profile] mr-aleph.livejournal.com
wow, cool idea.

только это не для интерфесов, а скорее для трейтов фича...

Date: 2009-12-15 09:22 am (UTC)
From: [identity profile] mr-aleph.livejournal.com
я опять чего-то нагнал.

я думал Scala traits поддерживают такую фичу, как ты хотел... но оказывается нет.

для меня трейт был "статическим требованием на тип: т.е. списком методов с сигнатурами, которые класс обязан объявлять"

но тогда непонятно, чем это отличается от констрейнтов...

Date: 2009-12-15 09:35 am (UTC)
From: [identity profile] insooo.livejournal.com
Степанов в своей недавней книжке описывает трейт типа как "набор свойств типа примитивных в контексте алгоритма в котором тип может учавствовать".)

Date: 2009-12-15 11:29 pm (UTC)
From: [identity profile] alexey-rom.livejournal.com
Насколько я понимаю, это type traits в C++. С traits в Scala/Smalltalk/etc. просто случайное совпадение названия.

Date: 2009-12-15 11:28 pm (UTC)
From: [identity profile] alexey-rom.livejournal.com
Traits в Scala происходят от Smalltalk (с попытками их добавить в Java/C# и Ruby mixins по дороге). Это, грубо говоря, интерфейс + (частичная) реализация. Отличие от абстрактных классов в том, что допускается множественное наследование от трэйтов, у них нет конструкторов и т.д.

Date: 2009-12-15 10:18 am (UTC)
From: [identity profile] hydrargentum.livejournal.com
Классы свойств объединяют полезные типы и константы, в применении к шаблонным параметрам обеспечивающие дополнительный уровень косвенности.

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

(C) Джоасатис & Водервурд - Шаблоны С++, Классы Свойств и Стратегий.

Date: 2009-12-15 09:51 am (UTC)
From: [identity profile] shadow-aka-hf.livejournal.com
>классу, реализующему данный интерфейс, иметь конструктор с данной сигнатурой

Зачем?

Date: 2009-12-15 10:00 am (UTC)
From: [identity profile] shadow-aka-hf.livejournal.com
Точнее так: зачем эта возможность именно в интерфейсе, который есть требования к уже существующему объекту?

Date: 2009-12-15 06:19 pm (UTC)
From: [identity profile] shadow-aka-hf.livejournal.com
Ну, да. Но случай не очень частый.
Можно требовать необходимый конструктор в рантайм.

Date: 2009-12-16 10:22 am (UTC)
From: [identity profile] shadow-aka-hf.livejournal.com
Удобно, но в логику интерфейсов это плохо укладывается. К тому же, удобно у всех свое.

Date: 2009-12-15 11:18 pm (UTC)
From: [identity profile] alexey-rom.livejournal.com
Согласен!

+ констрейнты на конструкторы с аргументами.

+ трейты.

+ тайпклассы.

А ещё таблеток от жадности.

Date: 2009-12-15 11:38 pm (UTC)
From: [identity profile] alexey-rom.livejournal.com
Dictionary passing нам поможет (добавить аналог тайпклассов в C# даже без поддержки на уровне CLR). См. статью JavaGI: Generalized Interfaces for Java

Date: 2009-12-22 01:35 am (UTC)
From: [identity profile] 109.livejournal.com
+ static virtual methods. или хотя бы static abstract (во щас флейм развернётся!)

Date: 2009-12-22 10:46 am (UTC)
From: [identity profile] 109.livejournal.com
ага, даже в Дельфи метаклассы более осмысленные. а уж то, что в шарпе нельзя вызвать static method у инстанса, это вообще retarded.

Date: 2009-12-15 11:34 pm (UTC)
From: [identity profile] alexey-rom.livejournal.com
А ответ на сам вопрос простой. Потому же, почему в интерфейсе не может быть статических методов (чего мне тоже регулярно хочется). Конструкторы не наследуются и в таблицу виртуальных методов не входят.

Date: 2009-12-22 01:30 am (UTC)
From: [identity profile] 109.livejournal.com
формально: в интерфейсе не может быть конструкторов по той же причине, что и статических методов. потому что конструктор - это не instance method.

по существу: пример не понял. что такое typeVariable?

Date: 2009-12-22 10:41 am (UTC)
From: [identity profile] 109.livejournal.com
а, ну это хорошо бы и безотносительно интерфейсов иметь. totally integrated metadata. и чтобы статические методы класса являлись инстанс методами метакласса, для полноты.

Profile

wizzard: (Default)
wizzard

January 2019

S M T W T F S
  12 345
6789101112
1314 1516171819
202122 23242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 24th, 2026 09:49 pm
Powered by Dreamwidth Studios