Re: C# vs Java: properties
Добавлено: 07 июн 2009, 22:11
это ты еще то, что там заместо anonimous inner classes, не видел.
или видел?
или видел?
Если Вы про случаи использования delegates там, где в Java можно только через anonymous inner classes, то видел конечно. Как раз delegates я не считаю плохой идеей. Не так удобно, конечно, как в функциональных языках, но ничего, жить можно. Это по сути те же объекты, только синтаксически замаскированные и упрощённые для удобства программиста.Ranger писал(а):это ты еще то, что там заместо anonimous inner classes, не видел.
или видел?
Рискну - именно это и есть инкапсуляция. И такой способ обеспечивает сокрытие данных.badger писал(а):Надеюсь, понаопределяя private полей x и public методов а-ля getX()/setX(), единственная функция которых вернуть или присвоить значение x, Вы не рискнёте утверждать, что в подобном классе имела место инкапсуляция данных, представленных этим x. Её там и близко не будет, что видно уже исходя из самих названий методов.А что Вы инкапсуляцией называете тогда, можно уточнить? Я не применительно к С# которого не знаю, а вообще.
Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов. Принцип инкапсуляции (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.
Сокрытие данных — неотделимая часть ООП, управляющая областями видимости. Является логическим продолжением инкапсуляции. Целью сокрытия является невозможность для пользователя узнать или испортить внутреннее состояние объекта.
Как же, вспугнёшь меня. Я практик, и более того, прагматик. Но на досуге люблю потеоретизировать. Особенно на любимые темы.aissp писал(а):тише, у нас теоретег вещаитьне спугни
я снова таки извиняюсь, шо встреваю в умный разговор, но мне [таки]*) кажеццо, шо "дурку повалять" - есть рулез, что бы там кто ни говорил. Даже еси нету чего сказать по делу.badger писал(а):Как же, вспугнёшь меня. Я практик, и более того, прагматик. Но на досуге люблю потеоретизировать. Особенно на любимые темы.aissp писал(а):тише, у нас теоретег вещаитьне спугни
По делу есть чего сказать, или ты так, дурку повалять зашёл?
В том и дело, что в данном случае инкапсуляция как таковая отсутствует. getX()/setX() напрямую следуют внутренней реализации класса. Они не оперируют ничем иным, как физическим обращением к полю x. Другими словами, здесь нет никакого скрытия внутренней структуры. Она проявлена через методы доступа, которые жёстко завязаны на эту структуру. И если понадобится изменить структуру, то придётся переделывать и все методы getX()/setX(). А это не инкапсуляция.Stanislav писал(а):Рискну - именно это и есть инкапсуляция. И такой способ обеспечивает сокрытие данных.
Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию.
Прав канешна. А я сам что делаю? Логинюсь, понимаешь, в Каморку и теоретизирую тут бесплатно. Тоже валяю дурку. Тока мы с aissp разную дурку валяем. Его беседа сводится только к тому, "жмут ему трусы или не жмут", и даже если жмут, то ему всё равно, так как "платят деньги", чтобы ходил в тех трусах.Waterbyte писал(а):я снова таки извиняюсь, шо встреваю в умный разговор, но мне [таки]*) кажеццо, шо "дурку повалять" - есть рулез, что бы там кто ни говорил. Даже еси нету чего сказать по делу.
*) скобочки - ибо перебор
пыс. нет, ты скажи: я не прав?
Да конечно же нормально. Вот и я, в силу своей запущенности, ржу сижу. А он ржёт по-своемуWaterbyte писал(а):Ну не все же склонны к абстракциям и дедукциям. Вон, тот же aissp, к примеру, не видит связи между интервью на бухгалтерскую (ну или какую есчо, абсолютно неважно) позицию и на попадание в киношные "сферы", а я - ну так вижу, и что? Не спорить же мне с ним по этому поводу. Поделились мнениями-тире-эмоциями, каждый в силу своей собственной степени запущенности алекситимии - и поржали вместе. Плохо ли?
Нет, это именно ООП - инкапсуляция ничего не говорит о том, как нужно бороться с изменением структуры - об этом говорит полиморфизм.badger писал(а):В том и дело, что в данном случае инкапсуляция как таковая отсутствует. getX()/setX() напрямую следуют внутренней реализации класса. Они не оперируют ничем иным, как физическим обращением к полю x. Другими словами, здесь нет никакого скрытия внутренней структуры. Она проявлена через методы доступа, которые жёстко завязаны на эту структуру. И если понадобится изменить структуру, то придётся переделывать и все методы getX()/setX(). А это не инкапсуляция.Stanislav писал(а):Рискну - именно это и есть инкапсуляция. И такой способ обеспечивает сокрытие данных.
Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию.
Хороший пример инкапсуляции -- наручные часы. Шестерёнки, пружинки -- внутренняя структура. Завод часов -- метод. Можно менять внутреннее устройство часов, совершенно не меняя метода завода.
Я, кстати, не утверждаю, что getX()/setX() конструкции вредны. Это бывает необходимо, но это не ООП.
Код: Выделить всё
паблик дабл синусУглаСтрельбы;
Код: Выделить всё
приват дабл синус;
приват булево этоВойна;
свойство синусУглаСтрельбы
гет ( ...)
сет (
синус = значение;
если (синус > 4) тогда
если (этоВойна) тогда
синус = 4;
иначе
синус = 1;
)
Неа, полиморфизм, это всего лишь насчёт взаимозаменяемости объектов с одинаковым интерфейсом.Stanislav писал(а):Нет, это именно ООП - инкапсуляция ничего не говорит о том, как нужно бороться с изменением структуры - об этом говорит полиморфизм.
Стас, как раз это я не называю прямым доступом. Хитрый Вы. Вы-то привели пример с более-менне качественным скрытием внутренней структуры. Хотя, похоже, и там надо ещё поработать. Но уже между ним и типичными getX()/setX() есть разница. А я именно про getX()/setX(), единственная цель которых -- автоматизация доступа к полям, что не есть инкапсуляция.Кстати, сравните:
нарушение инкапсуляции:
[skipped]
вы это называете "только прямой доступ к переменной"?
Да охотно верю, но всё же Вы знаете, что подавляющее число, скажем, механических часов имеют одинаковый метод завода при достаточно разнящемся внутреннем устройстве. Хорошо, будем считать пример неудачным.Кстати, пример со швейцарскими часами крайне неудачен - на моих часах нет завода совсемБыла изменено внутреннее устройство часов
Можете проверить по инету характеристики, я не вру: часы Тиссо Баллада.
Ой... ИМХО это как раз про изменение методов при изменении структуры, а вот интерфейс - одинаков.badger писал(а):Неа, полиморфизм, это всего лишь насчёт взаимозаменяемости объектов с одинаковым интерфейсом.Stanislav писал(а):Нет, это именно ООП - инкапсуляция ничего не говорит о том, как нужно бороться с изменением структуры - об этом говорит полиморфизм.
Я не хитрый, на самом деле именно такой пример (и много сложнее) и имелся ввиду при разработке свойств. Ну а как это в реале используется - ну так извините - в программировании много разных спецов: есть ваятели, есть ваяльники, а есть и ваялы...badger писал(а): Стас, как раз это я не называю прямым доступом. Хитрый Вы. Вы-то привели пример с более-менне качественным скрытием внутренней структуры. Хотя, похоже, и там надо ещё поработать. Но уже между ним и типичными getX()/setX() есть разница. А я именно про getX()/setX(), единственная цель которых -- автоматизация доступа к полям, что не есть инкапсуляция.
Понятное дело. Мир не идеален. Но потеоретизировать иногда хочетсяStanislav писал(а):Я не хитрый, на самом деле именно такой пример (и много сложнее) и имелся ввиду при разработке свойств. Ну а как это в реале используется - ну так извините - в программировании много разных спецов: есть ваятели, есть ваяльники, а есть и ваялы...