![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
vinter, так весь смысл в том, что доступ через интерфейс контролируемый при любой операции, связанной с внутренним состоянием объекта. Это не нарушение(если не впадать в абсолютизм).
Геттеры/сеттеры инкапсулируют внутреннюю структуру объекта и позволяют осуществить контроль доступа, т.е. инкапсулируют правила по которым доступ должен быть осуществлён(проверка границ, типа, размеров etc.) Это сообщение отредактировал(а) W4FhLF - 29.8.2008, 09:42 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
с этой частью я согласен. Ты видимо меня не понял, я говорил о внутренней перменной, для которой есть гет\сет просто как return\=, т.е это то же самое, что паблик, но типо скрыто за интерфейс. Я говорил об этом. |
|||
|
||||
| Alek86 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
если это внутреннее состояние, то геты и сеты должны отсутствовать если же это типа шарпового Свойства, то геты и сеты пишутся только так. и ничего не нарушают. поскольку через год реализация этого класс может так поменяться, что и переменной, скрывающейся за гетом и сетом, уже не будет.
кроме "мнения чужого дядьки" есть еще собственный опыт мучения при рефакторинге кода, отладке, обнаружении багов... |
||||
|
|||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
а я говорю нарушают, и кто прав?
и что? паблик переменная точно так же пропадет, разница в чем? |
||||
|
|||||
| W4FhLF |
|
||||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Т.е.? Что такое по-твоему внутреннее состояние? Ну допстим свойство visible объекта характеризует его внутреннее состояние. Почему геты и сеты здесь должны отсутсововать?
Ты ещё сказал, что паблик переменные маст хэв когда они нужны. А когда они нужны-то? Кроме случаев с простейшими структурами-классами типа:
Ничего придумать не могу. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||||
|
|||||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: нет Всего: -1 |
Подождите, кто сказал что мой код под винду? Он под линуксом работает, вот только хочу узнать как сделать, чтобы работал правильно...
|
|||
|
||||
| Alek86 |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
я шарповое свойство - это внешнее состояние объекта. и при его изменении на самолм деле вызывается функция, которая помимо изменения переменной (внутреннего свойства) может делать еще кучу полезных вещей. если же это реализовать с помощью публичной переменной, то такой автоматизации не добьешься к примеру есть класс Квадрат
ты, конечно же, сделаешь просто структуру
потом окажется, что у этого класса(структуры) нужно часто использовать размер для подсчета площади. при том, что размеры квадратов меняются не так часто. я, для оптимизации, напишу так
что сделаешь ты? Это сообщение отредактировал(а) Alek86 - 29.8.2008, 10:38 |
||||||
|
|||||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Anton Vatchenko, тестовый пример, на котором ты измерял скорость, под винду. А как сделать правильно тебе уже показали.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
||||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
не могу сходу пример привести, просто я не отметаю их использование совсем, т.е если надо, значит надо. Глупый конечно пример, НО Синглтон.
разницы нет, в Винде С++ ничем не отличается Добавлено через 3 минуты и 41 секунду Alek86, я сделаю через КЭШ, Get для площади кеширует вычисление, т.е не вычисляет, если уже вычислен. Хотя конкретно в данном примере это роли не играет. Set это Set, почему в Set происходит вычисление сторонней переменной? это не гут. |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
обычно его реализуют с помощью статичесткой ф-ии GetInstance()... кстати, как во всяком правиле, тут (неиспользование паблик переменных) есть исключения и в приведенной задаче в книге Саттера они описываются. и их процент очень мал (думаю, меньше одного) |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
я имел ввиду данные которые Синглтон хранит, а не экземпляр |
|||
|
||||
| Alek86 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
set - это set для юзера а прогер может писать там все, что посчитает нужным для ускорения или упрощения вида класса там может со временем вообще 10 переменных меняться (если того потребуют обстоятельства). в этом и заключается вся прелесть инкапсуляции + отделения интерфейса от реализации класса
можно в коде? вроде его не так уж и много Добавлено через 1 минуту и 18 секунд тоже не совсем понял... синглтон в GetInstance возвращает ссылку(указатель) на экземпляр класса какие там данные публичные? |
||||
|
|||||
| vinter |
|
||||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Singleton можно использовать как глобальное хранилище параметров, вот там много паблик переменных.
согласен, но толлько если там простейшие операции, если идут математические вычисление, то это не гут. Пользователь делает Set, он не просит вычилить площадь, она ему может никогда не понадобиться. |
||||||
|
|||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
vinter, а теперь посморти на свой код и мой
если программист А использует мой код, а программист Б - твой, то у какого программиста будет меньше всего проблем при изменении класса Square (или структуры на класс)? Добавлено через 36 секунд придирка bool m_bSurCache; должен быть mutable |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |