4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
|
|
1 | |
Нужны ли геттеры/сеттеры в чистом си?05.12.2014, 15:45. Показов 3507. Ответов 34
Метки нет (Все метки)
0
|
05.12.2014, 15:45 | |
Ответы с готовыми решениями:
34
Нужны ли геттеры и сеттеры Оставлять ли геттеры-сеттеры если они не нужны Как работают геттеры и сеттеры и зачем они нужны? Геттеры и сеттеры |
Вездепух
11653 / 6336 / 1719
Регистрация: 18.10.2014
Сообщений: 15,990
|
|
05.12.2014, 22:34 | 21 |
Разумеется. Я не понимаю, откуда может даже возникнуть такой вопрос.
Задача геттеров и сеттеров - отделить интерфейс от реализации. Никаких противопоказаний этому в С нет. Меня удивляет тот факт, что некоторые из выступивших привязывают понятия геттера/сеттера к неким "переменным". Вся задача, вся идея геттеров/сеттеров заключается именно и только в том, чтобы скрывать от вызывающего кода факт существования (или несуществования) такой переменной. Никто не знает, обращается ли геттер/сеттер к некоей "переменой" или делает что-то совсем другое. Это принцип, разумеется, совершенно языконезависим. Т.е. вопроса о "нужности" геттеров/сеттеров в С просто не сущесвует.
0
|
Диссидент
27704 / 17320 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
05.12.2014, 22:38 | 22 |
Это хорошая мудрость. Ее можно по разному переиначивать. Чем лучше соседи - тем ниже забор
Твой забор - лицо твоей задницы Не по теме: Знаете, тема заборов для меня больная. По жизни. 15 лет назад я приобрел дачку. Прельстила меня полная открытость пространства. И вот последние несколько лет по повышению общего уровня жизни и чудовищной дешевизны профнастилов (забор из профа обходится на 20% дороже, чем из рабицы) моя улица стала похожа на тюремный коридор. Если постараться, здесь можно найти много аналогий с ООП и другими модными прибамбасами. Но моя хатка - с краю (буквально). И я любуюсь лесом. А каркули - любуются своим забором. Что еще любопытно, как правило, забор ставится красивой (крашенной) стороной на улицу. А изнутри наши заборостроители видят исходный унылый грунт. В общем, метафору заборов можно развивать и развивать...:)
2
|
4479 / 2714 / 485
Регистрация: 28.04.2012
Сообщений: 8,582
|
|||||||||||
06.12.2014, 09:26 | 23 | ||||||||||
Маленький ответец: модульность.
1
|
4479 / 2714 / 485
Регистрация: 28.04.2012
Сообщений: 8,582
|
|
07.12.2014, 10:26 | 26 |
Модульность -- не вещь, которую можно "изобрести", а свойство. Инкапсуляция тоже не вещь, а метод.
Фигасе 5 копеек. Инкапсуляция на сегодняшний день -- основной метод увеличения модульности.
0
|
Модератор
12438 / 7465 / 1749
Регистрация: 25.07.2009
Сообщений: 13,721
|
||||||
07.12.2014, 22:57 | 27 | |||||
Грязным хаком
0
|
07.12.2014, 23:24 | 28 | |||||
Prove:
Кликните здесь для просмотра всего текста
0
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
07.12.2014, 23:29 | 29 |
А вопросец-то вот:
В общем случае нет. Язык так и задумывался: предоставить доступ ко всему с наименьшими ограничениями. Это "синтаксически усовершенствованный ассемблер", так что может быть стоило бы присмотреться к другому кандидату.
0
|
Модератор
12438 / 7465 / 1749
Регистрация: 25.07.2009
Сообщений: 13,721
|
|
08.12.2014, 00:06 | 30 |
gazlan, а попробуйте угадать, зачем у автора код на три части разбит?
1
|
08.12.2014, 11:15 | 32 |
Есть. Такие ситуации возникают из-за архитектурных ограничений, прямым следствием которых является невозможность использования стандартных средств/механизмов для установки значений. Частный случай: допустим есть некая структура, содержащая массив переменной длины (т.е. указатель как поле). В таком случае мы не будем иметь возможность корректно "засетить" значение ни через оператор присваивания, ни через memcpy, по понятным причинам. А значит, надо писать сеттер. Прямым следствием этого, в силу т.н. "принципов грамотного проектирования кода" будет и написание соответствующего подобия геттера. Как-то так.
1
|
09.12.2014, 10:36 | 33 | ||||||||||
Как же это я в такой популярной теме то не еще отметился своим дилетантским имхом? Исправляюсь
Разумеется есть, и встречаются они постоянно. Вот живем мы, допустим, не на компьютере с ОС, а на обычном микроконтроллере, допустим, восьмибитном, пишем все сами, ручками. И есть у нас там глобальная волатильная двухбайтовая переменная short a, которую мы можем писать/читать из нашего основного кода, и из процедуры обработки прерывания. Но прерывание может возникнуть в любой момент, даже когда мы читаем ее значение как b = a; - мы (наш ассемблерный листинг, разумеется, мы то не думаем про байты, правда, это же не барское дело?) прочитали старший байт, а тут внезапно пришло случилось прерывание, которое перезаписало нам оба байта переменной а, оно успешно завершилось, а наш основной код честно прочитал во второй байт b уже новый второй байт а - и мы получили в b мусор, причем, если мы не думаем про байты, то даже не понимаем откуда он там А все потому, что наш безобидный оператор "=" в данном случае не атомарен, и надо писать геттер - или оборачивать в скобки типа
Вот такая байка про сеттеры/геттеры в С. И на ее фоне забавно читать мнения насчет "не нужны" и "присмотреться к другому кандидату" - ибо С - это самый что ни на есть кандидатский кандидат в этом случае, других то и нет в большинстве камней.
0
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
09.12.2014, 21:02 | 34 |
Не по теме: _Ivana, съел, не обляпался :D Всё таки Ваш пример не очевиден - семафор. С таким же успехом любые push, pop можно отнести в ту же категорию и при этом совсем не обязательно прятать реализацию (инкапсулировать, именно эта идея развивается с начала поста). Именно в этом ключе я и объсянился, видимо, не совсем ясно (или совсем неясно, что в итоге одно и то же). А за примерами когда push/pop нужны, я думаю далеко ходить не надо.
0
|
09.12.2014, 23:26 | 35 |
Как всегда, разногласия оказались мнимыми и из-за терминов. Прятать что-либо так, чтобы нельзя было добраться при всем желании - имхо немного перебор и отдает паранойей и недоверием к разработчику - за границу массива не залезь, адрес возврата не подмени, регистр состояния не покорежь... Другое дело, что всякие синтаксические обертки повышают удобство и читаемость.
2
|
09.12.2014, 23:26 | |
09.12.2014, 23:26 | |
Помогаю со студенческими работами здесь
35
Геттеры и сеттеры Геттеры и Сеттеры Геттеры и сеттеры Классы (сеттеры и геттеры) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |