Страница 2 из 2

Re: C# vs Java: properties

Добавлено: 07 июн 2009, 22:11
Ranger
это ты еще то, что там заместо anonimous inner classes, не видел.

или видел?

Re: C# vs Java: properties

Добавлено: 07 июн 2009, 22:24
badger
Ranger писал(а):это ты еще то, что там заместо anonimous inner classes, не видел.

или видел?
Если Вы про случаи использования delegates там, где в Java можно только через anonymous inner classes, то видел конечно. Как раз delegates я не считаю плохой идеей. Не так удобно, конечно, как в функциональных языках, но ничего, жить можно. Это по сути те же объекты, только синтаксически замаскированные и упрощённые для удобства программиста.

Я уже писал, что в целом считаю дизайн C# очень даже неплохим. Это я только теперь, в этой теме, по прошествии некоторого времени, решил попридираться к некоторым его концепциям вроде properties и namespaces в сравнении с Java.

Re: C# vs Java: properties

Добавлено: 07 июн 2009, 22:56
Stanislav
badger писал(а):
А что Вы инкапсуляцией называете тогда, можно уточнить? Я не применительно к С# которого не знаю, а вообще.
Надеюсь, понаопределяя private полей x и public методов а-ля getX()/setX(), единственная функция которых вернуть или присвоить значение x, Вы не рискнёте утверждать, что в подобном классе имела место инкапсуляция данных, представленных этим x. Её там и близко не будет, что видно уже исходя из самих названий методов.
Рискну - именно это и есть инкапсуляция. И такой способ обеспечивает сокрытие данных.

Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов. Принцип инкапсуляции (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.
Сокрытие данных — неотделимая часть ООП, управляющая областями видимости. Является логическим продолжением инкапсуляции. Целью сокрытия является невозможность для пользователя узнать или испортить внутреннее состояние объекта.

Re: C# vs Java: properties

Добавлено: 07 июн 2009, 23:03
aissp
тише, у нас теоретег вещаить :) не спугни :)

Re: C# vs Java: properties

Добавлено: 08 июн 2009, 00:14
badger
aissp писал(а):тише, у нас теоретег вещаить :) не спугни :)
Как же, вспугнёшь меня. Я практик, и более того, прагматик. Но на досуге люблю потеоретизировать. Особенно на любимые темы.

По делу есть чего сказать, или ты так, дурку повалять зашёл?

Re: C# vs Java: properties

Добавлено: 08 июн 2009, 00:26
Waterbyte
badger писал(а):
aissp писал(а):тише, у нас теоретег вещаить :) не спугни :)
Как же, вспугнёшь меня. Я практик, и более того, прагматик. Но на досуге люблю потеоретизировать. Особенно на любимые темы.

По делу есть чего сказать, или ты так, дурку повалять зашёл?
я снова таки извиняюсь, шо встреваю в умный разговор, но мне [таки]*) кажеццо, шо "дурку повалять" - есть рулез, что бы там кто ни говорил. Даже еси нету чего сказать по делу.

*) скобочки - ибо перебор

пыс. нет, ты скажи: я не прав?

Re: C# vs Java: properties

Добавлено: 08 июн 2009, 00:26
badger
Stanislav писал(а):Рискну - именно это и есть инкапсуляция. И такой способ обеспечивает сокрытие данных.

Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию.
В том и дело, что в данном случае инкапсуляция как таковая отсутствует. getX()/setX() напрямую следуют внутренней реализации класса. Они не оперируют ничем иным, как физическим обращением к полю x. Другими словами, здесь нет никакого скрытия внутренней структуры. Она проявлена через методы доступа, которые жёстко завязаны на эту структуру. И если понадобится изменить структуру, то придётся переделывать и все методы getX()/setX(). А это не инкапсуляция.

Хороший пример инкапсуляции -- наручные часы. Шестерёнки, пружинки -- внутренняя структура. Завод часов -- метод. Можно менять внутреннее устройство часов, совершенно не меняя метода завода.

Я, кстати, не утверждаю, что getX()/setX() конструкции вредны. Это бывает необходимо, но это не ООП.

Re: C# vs Java: properties

Добавлено: 08 июн 2009, 00:28
badger
Waterbyte писал(а):я снова таки извиняюсь, шо встреваю в умный разговор, но мне [таки]*) кажеццо, шо "дурку повалять" - есть рулез, что бы там кто ни говорил. Даже еси нету чего сказать по делу.

*) скобочки - ибо перебор

пыс. нет, ты скажи: я не прав?
Прав канешна. А я сам что делаю? Логинюсь, понимаешь, в Каморку и теоретизирую тут бесплатно. Тоже валяю дурку. Тока мы с aissp разную дурку валяем. Его беседа сводится только к тому, "жмут ему трусы или не жмут", и даже если жмут, то ему всё равно, так как "платят деньги", чтобы ходил в тех трусах.

А мне интересны детали: почему эти трусы жмут, а те не жмут. То есть, я не только мыслью о деньгах живу. Я не против, его право, но если он других взглядов, зачем здесь это высказывать? Мне был бы интересен ход его мыслей, а не его эмоции по данному вопросу.

Re: C# vs Java: properties

Добавлено: 08 июн 2009, 00:41
Waterbyte
Ну не все же склонны к абстракциям и дедукциям. Вон, тот же aissp, к примеру, не видит связи между интервью на бухгалтерскую (ну или какую есчо, абсолютно неважно) позицию и на попадание в киношные "сферы", а я - ну так вижу, и что? Не спорить же мне с ним по этому поводу. Поделились мнениями-тире-эмоциями, каждый в силу своей собственной степени запущенности алекситимии - и поржали вместе. Плохо ли?

Re: C# vs Java: properties

Добавлено: 08 июн 2009, 00:50
badger
Waterbyte писал(а):Ну не все же склонны к абстракциям и дедукциям. Вон, тот же aissp, к примеру, не видит связи между интервью на бухгалтерскую (ну или какую есчо, абсолютно неважно) позицию и на попадание в киношные "сферы", а я - ну так вижу, и что? Не спорить же мне с ним по этому поводу. Поделились мнениями-тире-эмоциями, каждый в силу своей собственной степени запущенности алекситимии - и поржали вместе. Плохо ли?
Да конечно же нормально. Вот и я, в силу своей запущенности, ржу сижу. А он ржёт по-своему :)

Re: C# vs Java: properties

Добавлено: 08 июн 2009, 07:02
Stanislav
badger писал(а):
Stanislav писал(а):Рискну - именно это и есть инкапсуляция. И такой способ обеспечивает сокрытие данных.

Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию.
В том и дело, что в данном случае инкапсуляция как таковая отсутствует. getX()/setX() напрямую следуют внутренней реализации класса. Они не оперируют ничем иным, как физическим обращением к полю x. Другими словами, здесь нет никакого скрытия внутренней структуры. Она проявлена через методы доступа, которые жёстко завязаны на эту структуру. И если понадобится изменить структуру, то придётся переделывать и все методы getX()/setX(). А это не инкапсуляция.

Хороший пример инкапсуляции -- наручные часы. Шестерёнки, пружинки -- внутренняя структура. Завод часов -- метод. Можно менять внутреннее устройство часов, совершенно не меняя метода завода.

Я, кстати, не утверждаю, что getX()/setX() конструкции вредны. Это бывает необходимо, но это не ООП.
Нет, это именно ООП - инкапсуляция ничего не говорит о том, как нужно бороться с изменением структуры - об этом говорит полиморфизм. :D
Кстати, сравните:
нарушение инкапсуляции:

Код: Выделить всё

паблик дабл синусУглаСтрельбы;
или сохранение

Код: Выделить всё

приват дабл синус;
приват булево этоВойна;
свойство синусУглаСтрельбы
   гет ( ...)
   сет (
       синус = значение;
       если  (синус > 4) тогда    
             если (этоВойна) тогда
                   синус = 4;
             иначе
                   синус = 1;
   )
вы это называете "только прямой доступ к переменной"?

Кстати, пример со швейцарскими часами крайне неудачен - на моих часах нет завода совсем :D Была изменено внутреннее устройство часов :D Можете проверить по инету характеристики, я не вру: часы Тиссо Баллада.

Re: C# vs Java: properties

Добавлено: 08 июн 2009, 09:34
badger
Stanislav писал(а):Нет, это именно ООП - инкапсуляция ничего не говорит о том, как нужно бороться с изменением структуры - об этом говорит полиморфизм. :D
Неа, полиморфизм, это всего лишь насчёт взаимозаменяемости объектов с одинаковым интерфейсом.
Кстати, сравните:
нарушение инкапсуляции:
[skipped]
вы это называете "только прямой доступ к переменной"?
Стас, как раз это я не называю прямым доступом. Хитрый Вы. Вы-то привели пример с более-менне качественным скрытием внутренней структуры. Хотя, похоже, и там надо ещё поработать. Но уже между ним и типичными getX()/setX() есть разница. А я именно про getX()/setX(), единственная цель которых -- автоматизация доступа к полям, что не есть инкапсуляция.
Кстати, пример со швейцарскими часами крайне неудачен - на моих часах нет завода совсем :D Была изменено внутреннее устройство часов :D Можете проверить по инету характеристики, я не вру: часы Тиссо Баллада.
Да охотно верю, но всё же Вы знаете, что подавляющее число, скажем, механических часов имеют одинаковый метод завода при достаточно разнящемся внутреннем устройстве. Хорошо, будем считать пример неудачным.

Re: C# vs Java: properties

Добавлено: 08 июн 2009, 09:56
Stanislav
badger писал(а):
Stanislav писал(а):Нет, это именно ООП - инкапсуляция ничего не говорит о том, как нужно бороться с изменением структуры - об этом говорит полиморфизм. :D
Неа, полиморфизм, это всего лишь насчёт взаимозаменяемости объектов с одинаковым интерфейсом.
Ой... ИМХО это как раз про изменение методов при изменении структуры, а вот интерфейс - одинаков.
badger писал(а): Стас, как раз это я не называю прямым доступом. Хитрый Вы. Вы-то привели пример с более-менне качественным скрытием внутренней структуры. Хотя, похоже, и там надо ещё поработать. Но уже между ним и типичными getX()/setX() есть разница. А я именно про getX()/setX(), единственная цель которых -- автоматизация доступа к полям, что не есть инкапсуляция.
Я не хитрый, на самом деле именно такой пример (и много сложнее) и имелся ввиду при разработке свойств. Ну а как это в реале используется - ну так извините - в программировании много разных спецов: есть ваятели, есть ваяльники, а есть и ваялы... :D

Re: C# vs Java: properties

Добавлено: 08 июн 2009, 10:01
badger
Stanislav писал(а):Я не хитрый, на самом деле именно такой пример (и много сложнее) и имелся ввиду при разработке свойств. Ну а как это в реале используется - ну так извините - в программировании много разных спецов: есть ваятели, есть ваяльники, а есть и ваялы... :D
Понятное дело. Мир не идеален. Но потеоретизировать иногда хочется :)