Re[52]: Tcl как обоснование ненужности поддержки компонентно
От: Cyberax Марс  
Дата: 06.06.06 17:41
Оценка: 1 (1)
IT wrote:
> C>Просто Java — это пример того, что свойства в понятии .NET нафиг не
> сдались (кроме простого синтаксического сахарка).
> Джава — это как раз пример, как вместо того, чтобы сделать нормальные
> свойства, нужно обязательно извращаться с соглашениями об наименовании.
НЕТ в .NET "нормальных свойств".

В .NET просто есть соглашение об именах get/set-методов и событий и еще
сахарок, который автоматически эти методы генерирует. Все точно так же
как в Java, только там генерацией занимается IDE.

Причем, на самом деле databinding'у вообще должно быть пофиг к чему
биндиться — ничто не мешает ему завязываться на любой get/set-метод.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[53]: Tcl как обоснование ненужности поддержки компонентно
От: IT Россия linq2db.com
Дата: 06.06.06 19:10
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>НЕТ в .NET "нормальных свойств".


RTFM PropertyInfo.

C>В .NET просто есть соглашение об именах get/set-методов и событий и еще сахарок, который автоматически эти методы генерирует. Все точно так же как в Java, только там генерацией занимается IDE.


Свойство в .NET — это самостоятельная сущность, доступная через рефлекшин со всеми вытекающими последствиями. Например, я могу через emit привязать любой подходящий метод к нужному мне свойству. Соглашение об именовании get_/set_ — это всего лишь соглашение конкретного языка, в данном случае C#.

IDE к свойствам никакого особенного по сравнению с другими языковыми конструкциями отношения не имеет и ничего специально не генерит.

C>Причем, на самом деле databinding'у вообще должно быть пофиг к чему биндиться — ничто не мешает ему завязываться на любой get/set-метод.


Вот насчёт public поля я бы с тобой ещё согласился. В BLToolkit я именно так и сделал. А баиндиться к методам?... Сэр редкостный извращенец
Если нам не помогут, то мы тоже никого не пощадим.
Re[49]: Tcl как обоснование ненужности поддержки компонентно
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 07.06.06 03:46
Оценка: 19 (2)
eao197,

E>Да в Java, насколько я помню, с out параметрами дело было вообще швах. Лучшее, что я мог тогда придумать, это передавать ссылку на вектор:

E>
E>public boolean getCurrentEdge( Edge edges[] ) throws Exception
E>  {
E>    Edge current = new Edge();
E>    edges[ 0 ] = current;
E>    ...
E>    current.setLength( calculatedLength );
E>    ...
E>    current.setWidth( calculatedWidth );
E>    ...
E>    return result;
E>  }
E>...
E>Edge current[] = new Edge[1];
E>getCurrentEdge( current );
E>...
E>

E>В таких условиях с out аргументам вообще не захочется связываться.

Есть более универсальный и распространённый способ с использованием бинов (бин — это класс, который состоит из пар методов set* и get*). Если где-то фигурирует бин, то как правило у джавистов срабатывает условный рефлекс "О! здесь возвращается значение".
class EdgeBean
{
    private Edge edge;
    public void setEdge(Edge edge) { this.edge = edge; }
    public Edge getEdge()          { return this.edge; }
}

public boolean getCurrentEdge(EdgeBean bean)
{
    bean.setEdge(new Edge());
    return true;
}

Естественно все IDE способны генерировать такие пары методов set/get для поля или нескольких полей нажатием 2х-3х кнопок.

Так что out-параметры есть, просто их не сразу видно .
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[50]: Tcl как обоснование ненужности поддержки компонентно
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.06.06 06:07
Оценка: :)
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Есть более универсальный и распространённый способ с использованием бинов (бин — это класс, который состоит из пар методов set* и get*). Если где-то фигурирует бин, то как правило у джавистов срабатывает условный рефлекс "О! здесь возвращается значение".

<...код поскипан...>
LCR>Естественно все IDE способны генерировать такие пары методов set/get для поля или нескольких полей нажатием 2х-3х кнопок.

LCR>Так что out-параметры есть, просто их не сразу видно .


Да, давно я не брал в руки шашек Уже лет пять


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[54]: Tcl как обоснование ненужности поддержки компонентно
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 07.06.06 06:40
Оценка:
Здравствуйте, IT, Вы писали:

IT>Свойство в .NET — это самостоятельная сущность, доступная через рефлекшин со всеми вытекающими последствиями.


Я так и не понял, свойство можно передать в метод как параметр/вернуть из, или нет?
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[54]: Tcl как обоснование ненужности поддержки компонентно
От: Cyberax Марс  
Дата: 07.06.06 07:50
Оценка:
IT wrote:
> C>*НЕТ* в .NET "нормальных свойств".
> RTFM PropertyInfo.
RTFM java.beans.BeanInfo.

> Свойство в .NET — это самостоятельная сущность, доступная через

> рефлекшин со всеми вытекающими последствиями. Например, я могу через
> emit привязать любой подходящий метод к нужному мне свойству.
Что мешает привязать к обычному методу или переменной? Я не вижу что
такого фундаментального дают свойства.

> Вот насчёт public поля я бы с тобой ещё согласился. В BLToolkit я именно

> так и сделал. А баиндиться к методам?... Сэр редкостный извращенец
Ну так свойства реализованы как методы — они НЕ являются
самостоятельными сущностями (рекомендую посмотреть на базовый класс
PropertyInfo).
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[50]: Tcl как обоснование ненужности поддержки компонентно
От: Kluev  
Дата: 07.06.06 09:33
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:


LCR>Есть более универсальный и распространённый способ с использованием бинов (бин — это класс, который состоит из пар методов set* и get*). Если где-то фигурирует бин, то как правило у джавистов срабатывает условный рефлекс "О! здесь возвращается значение".

LCR>
LCR>class EdgeBean
LCR>{
LCR>    private Edge edge;
LCR>    public void setEdge(Edge edge) { this.edge = edge; }
LCR>    public Edge getEdge()          { return this.edge; }
LCR>}

LCR>public boolean getCurrentEdge(EdgeBean bean)
LCR>{
LCR>    bean.setEdge(new Edge());
LCR>    return true;
LCR>}
LCR>

LCR>Естественно все IDE способны генерировать такие пары методов set/get для поля или нескольких полей нажатием 2х-3х кнопок.

LCR>Так что out-параметры есть, просто их не сразу видно .


Ужос. Хорошая иллюстрация как под видом простого языка людям впаривается примитивный, в котором даже простые вещи приходится делать через задницу.
Re[55]: Tcl как обоснование ненужности поддержки компонентно
От: IT Россия linq2db.com
Дата: 07.06.06 12:39
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

IT>>Свойство в .NET — это самостоятельная сущность, доступная через рефлекшин со всеми вытекающими последствиями.


ANS>Я так и не понял, свойство можно передать в метод как параметр/вернуть из, или нет?


Значение свойства? Конечно можно. Или ты о чём то другом?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[55]: Tcl как обоснование ненужности поддержки компонентно
От: IT Россия linq2db.com
Дата: 07.06.06 12:51
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> C>*НЕТ* в .NET "нормальных свойств".

>> RTFM PropertyInfo.
C>RTFM java.beans.BeanInfo.

Видимо для начала тебя надо попросить дать определение что ты понимаешь под "нормальное свойство". Боюсь, ты себе каких-то глупостей нафантазировал и теперь с ними борешься.

C>Что мешает привязать к обычному методу или переменной? Я не вижу что такого фундаментального дают свойства.


И почему, как ты думаешь, в бинах не привязались к обычному методу или переменной, а ввели кастрированные свойства и привязались к ним?

C>Ну так свойства реализованы как методы — они НЕ являются самостоятельными сущностями (рекомендую посмотреть на базовый класс PropertyInfo).


Классы — это тоже набор методов и полей. Они по твоему тоже не являются самостоятельными сущностями? Поля — это наборы байт, методы — последовательность команд, и что теперь?
Если нам не помогут, то мы тоже никого не пощадим.
Re[56]: Tcl как обоснование ненужности поддержки компонентно
От: Cyberax Марс  
Дата: 07.06.06 13:22
Оценка:
IT wrote:
>> > RTFM PropertyInfo.
> C>RTFM java.beans.BeanInfo.
> Видимо для начала тебя надо попросить дать определение что ты понимаешь
> под "нормальное свойство". Боюсь, ты себе каких-то глупостей
> нафантазировал и теперь с ними борешься.
Чтобы свойство по поведению не отличалось от обычной переменной.

> C>Что мешает привязать к обычному методу или переменной? Я не вижу что

> такого фундаментального дают свойства.
> И почему, как ты думаешь, в бинах не привязались к обычному методу или
> переменной, а ввели кастрированные свойства и привязались к ним?
В мире Java различные системы привязки не особо используются и
приветствуются, в нормальных системах типа OGNL или JXpath можно
вызывать любые методы. Да и просто система get/set/is оказалась неплохим
соглашением об именах.

Хотя есть исключения — в идиотском JSF слизанном с ASP.NET (вот уж
действительно "death by committee") можно только get/set/is-методы
использовать.

> C>Ну так свойства реализованы как методы — они НЕ являются

> самостоятельными сущностями (рекомендую посмотреть на базовый класс
> PropertyInfo).
> Классы — это тоже набор методов и полей. Они по твоему тоже не являются
> самостоятельными сущностями?
В .NET — являются, так как методы и поля без классов не существуют

А вот в каком-нибудь Lisp'е — не являются.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[55]: Tcl как обоснование ненужности поддержки компонентно
От: Дьяченко Александр Россия  
Дата: 07.06.06 13:28
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> Вот насчёт public поля я бы с тобой ещё согласился. В BLToolkit я именно

>> так и сделал. А баиндиться к методам?... Сэр редкостный извращенец
C>Ну так свойства реализованы как методы — они НЕ являются
C>самостоятельными сущностями (рекомендую посмотреть на базовый класс
C>PropertyInfo).

Ну посмотрел и? Баазовый клас для PropertyInfo это MemberInfo и? От него же наследуются и все остальные *Info (взято с MSDN):

    System.Reflection.MemberInfo
     System.Reflection.EventInfo 
     System.Reflection.FieldInfo 
     System.Reflection.MethodBase 
     System.Reflection.PropertyInfo 
     System.Type

И?
... << RSDN@Home 1.2.0 alpha rev. 652>>
Re[57]: Tcl как обоснование ненужности поддержки компонентно
От: IT Россия linq2db.com
Дата: 07.06.06 13:54
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> Видимо для начала тебя надо попросить дать определение что ты понимаешь под "нормальное свойство". Боюсь, ты себе каких-то глупостей нафантазировал и теперь с ними борешься.

C>Чтобы свойство по поведению не отличалось от обычной переменной.

Ты сам то хоть понял, что только что сказал? "Он же памятник, кто его посадит?" (c). Это же свойство, а то переменная. Два разных человека. Почему тебе не хочется, например, чтобы интерфейс по поведению не отличался бы от класса. Тогда интерфейс можно было бы наследовать от класса! Офигенная идея! Обошли бы ограничение по множественному наследованию

C>В мире Java различные системы привязки не особо используются и приветствуются


И зря. На сегодняшний день это практически единственная возможность без бубнов реюзать логику в UI компонентах.

>> Классы — это тоже набор методов и полей. Они по твоему тоже не являются самостоятельными сущностями?

C>В .NET — являются, так как методы и поля без классов не существуют
C>А вот в каком-нибудь Lisp'е — не являются.

Потому что .NET — это ОО среда. Ещё она компонентная, поэтому в ней совершенно логично смотрятся свойства как самостоятельная сущность, а не кастрированная симуляция.
Если нам не помогут, то мы тоже никого не пощадим.
Re[56]: Tcl как обоснование ненужности поддержки компонентно
От: IT Россия linq2db.com
Дата: 07.06.06 14:06
Оценка:
Здравствуйте, Дьяченко Александр, Вы писали:

C>>(рекомендую посмотреть на базовый класс PropertyInfo).


ДА>Ну посмотрел и?


Когда аргументы кончаются, а признаваться в содеянном не хочется, то и начинаются вот такие отфонарные рекомендации
Если нам не помогут, то мы тоже никого не пощадим.
Re[57]: Tcl как обоснование ненужности поддержки компонентно
От: Дьяченко Александр Россия  
Дата: 07.06.06 14:11
Оценка:
Здравствуйте, IT, Вы писали:

C>>>(рекомендую посмотреть на базовый класс PropertyInfo).

ДА>>Ну посмотрел и?
IT>Когда аргументы кончаются, а признаваться в содеянном не хочется, то и начинаются вот такие отфонарные рекомендации

Ну я думал может там чего интересного написано. Пошел MSDN перерывать... а там и нет ничего интересного... Вот спросил может человек угледел там чего-нибуть что я проглядел...
... << RSDN@Home 1.2.0 alpha rev. 652>>
Re[56]: Tcl как обоснование ненужности поддержки компонентно
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 07.06.06 14:27
Оценка:
Здравствуйте, IT, Вы писали:

IT>>>Свойство в .NET — это самостоятельная сущность, доступная через рефлекшин со всеми вытекающими последствиями.


ANS>>Я так и не понял, свойство можно передать в метод как параметр/вернуть из, или нет?


IT>Значение свойства? Конечно можно. Или ты о чём то другом?


Да, это был дурацкий вопрос. Просто для меня "самостоятельная сущность" это только "first class object". Я забыл, что в С# нельзя и поля куда-то передавать.

Что касается полезности свойств, как таковых, то хочу заметить, что в C++ они имели вполне конкретный смысл — доступ напрямую, минуя вызов метода. В нонешнем виде для программистов в свойствах особого смысла нет. Возможно, для гуй-дизайнера и есть некая сомнительная польза, но как по мне, это должно решатся на уровне атрибутов. По крайней мере, возможностей это даёт намного больше, чем использование "свойств".
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[57]: Tcl как обоснование ненужности поддержки компонентно
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.06.06 14:47
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Что касается полезности свойств, как таковых, то хочу заметить, что в C++ они имели вполне конкретный смысл — доступ напрямую, минуя вызов метода. В нонешнем виде для программистов в свойствах особого смысла нет. Возможно, для гуй-дизайнера и есть некая сомнительная польза, но как по мне, это должно решатся на уровне атрибутов. По крайней мере, возможностей это даёт намного больше, чем использование "свойств".


Кстати, в документике, ссылку на который привел alexeiz
Автор: alexeiz
Дата: 03.06.06
, есть интересный абзац:

Properties are just syntactic saccharine for getter and setter member functions for individual fields.
C++ experts have spent years trying to educate people NOT to use public data, to use member
functions instead, and now we propose to introduce something that looks just like public data? Do
we really want to try to teach people that public fields are still bad, but properties are good, even
though they look just the same from outside the class? Moreover, these public fields have side
effects!


Было бы любопытно услышать, что по этому поводу думают сторонники properties.



2moderators: может пора дисскусию о свойствах из этой темы в отдельную выделить? Например, как раз с сообщения alexeiz-а.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[57]: Tcl как обоснование ненужности поддержки компонентно
От: IT Россия linq2db.com
Дата: 07.06.06 14:48
Оценка: +2
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Что касается полезности свойств, как таковых, то хочу заметить, что в C++ они имели вполне конкретный смысл — доступ напрямую, минуя вызов метода.


Это как? И какие в C++ свойства?

ANS>В нонешнем виде для программистов в свойствах особого смысла нет. Возможно, для гуй-дизайнера и есть некая сомнительная польза, но как по мне, это должно решатся на уровне атрибутов. По крайней мере, возможностей это даёт намного больше, чем использование "свойств".


Атрибуты и свойства нельзя противопоставлять. Это вещи очень хорошо дополняющие друг друга.

Смысл же свойств можно усмотреть хотя бы в том, что программу с ними гораздо легче читать. Может быть я несколько фанатично отношусь к читабельности и простоте своего кода, но для меня этот факт является большим плюсом.

Когда же я вижу
Edge edge = getEdge();
особенно в C# коде, то моему утончённому, я бы даже сказал музыкальному, кодовосприятию начинает становится плохо и хочется (простите мне мой французский) стошнить на это дерьмо.
Если нам не помогут, то мы тоже никого не пощадим.
Re[58]: Tcl как обоснование ненужности поддержки компонентно
От: WolfHound  
Дата: 07.06.06 15:04
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Кстати, в документике, ссылку на который привел alexeiz
Автор: alexeiz
Дата: 03.06.06
, есть интересный абзац:

E>

E>Properties are just syntactic saccharine for getter and setter member functions for individual fields.
E>C++ experts have spent years trying to educate people NOT to use public data, to use member
E>functions instead, and now we propose to introduce something that looks just like public data? Do
E>we really want to try to teach people that public fields are still bad, but properties are good, even
E>though they look just the same from outside the class? Moreover, these public fields have side
E>effects!


E>Было бы любопытно услышать, что по этому поводу думают сторонники properties.

Демагогия обыкновенная. Такая "аргументация" в данном форуме очень частое явление. Особенно когда реальных аргументов нет.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[56]: Tcl как обоснование ненужности поддержки компонентно
От: Cyberax Марс  
Дата: 07.06.06 15:55
Оценка:
Дьяченко Александр wrote:
> Ну посмотрел и? Баазовый клас для PropertyInfo это MemberInfo и? От него
> же наследуются и все остальные *Info (взято с MSDN):
> System.Reflection.MemberInfo
> System.Reflection.EventInfo
> System.Reflection.FieldInfo
> System.Reflection.MethodBase
> System.Reflection.PropertyInfo
> System.Type
> И?
Извиняюсь, я стормозил.

Почему-то заклинило, что PropertyInfo наследуется от MethodBase.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[57]: Tcl как обоснование ненужности поддержки компонентно
От: Дьяченко Александр Россия  
Дата: 07.06.06 16:05
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Извиняюсь, я стормозил.

C>Почему-то заклинило, что PropertyInfo наследуется от MethodBase.

Извенения приняты. Тут помоему уже всех потихоньку клинить начинает... Каждого на своем...
Давайте лучше
... << RSDN@Home 1.2.0 alpha rev. 652>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.