Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статические члены и наследование 
:(
    Опции темы
mes
Дата 29.8.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vinter @  29.8.2008,  10:20 Найти цитируемый пост)
если же это типа шарпового Свойства, то геты и сеты пишутся только так. и ничего не нарушают.

а я говорю нарушают, и кто прав?

Код

class DC
{
  public:
   Pixel GetPixel (..) const;
   void  SetPixel (..)
  ...
};

class PixelArray
{
 public:
   Pixel GetPixel (..) const;
   void  SetPixel (..)
 private:
    Pixel  ** m_screen;
};


нарушает ?


Это сообщение отредактировал(а) mes - 29.8.2008, 11:31


--------------------
PM MAIL WWW   Вверх
Alek86
Дата 29.8.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(vinter @  29.8.2008,  11:06 Найти цитируемый пост)
Пользователь делает Set, он не просит вычилить площадь, она ему может никогда не понадобиться.

я привел пример, когда стороны квадратов меняются редко а площади требуются часто


--------------------
user posted image    user posted image
PM MAIL   Вверх
mes
Дата 29.8.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Alek86 @  29.8.2008,  10:02 Найти цитируемый пост)
есть еще собственный опыт мучения при рефакторинге кода, отладке, обнаружении багов... 

 smile 


--------------------
PM MAIL WWW   Вверх
vinter
Дата 29.8.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Alek86 @  29.8.2008,  12:28 Найти цитируемый пост)
если программист А использует мой код, а программист Б - твой, то у какого программиста будет меньше всего проблем при изменении класса Square (или структуры на класс)?

проблема изменения не показатель эффективности, представь что вместо вычисления площади идет вычисления обратной матрицы через LUP разложение, ты это тоже во все change методы запихнешь? Все зависит от конкретной задачи, мне ближе cache идеология. 
К тому же я не вижу, проблем в изменении моего класса.



--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 29.8.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(W4FhLF @  29.8.2008,  10:21 Найти цитируемый пост)
Ты ещё сказал, что паблик переменные маст хэв когда они нужны. А когда они нужны-то? 

Кроме случаев с простейшими структурами-классами типа:

структуры (не по слову struct , a по смыслу) - это блок данных , который не имеет  внутреннего состояния , а только внешнее..
В таких случаях инкапсулировать просто нечего 


--------------------
PM MAIL WWW   Вверх
vinter
Дата 29.8.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(mes @  29.8.2008,  12:29 Найти цитируемый пост)
нарушает ?

нет, а вот  меняем название класса на
Код


class Matrix
{
 public:
   Pixel GetElem (..) const;
   void  SetElem (..)
 private:
    int  ** m_screen;
};

и получаем нарушение инкапсуляции.


--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 29.8.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vinter @  29.8.2008,  11:33 Найти цитируемый пост)
проблема изменения не показатель эффективности,


Показатель !

"Проблема изменения" не фактическое выражение , а условное.. Совсем не обязательно "надеяться", что класс будет когда то изменен.
Оно говорит   о том  насколько клиент посвяшен в дела сервера и этим показывает связь реализации.
Чем меньше связь , тем больше сил и памяти остается у программиста на остальные проблемы .

Добавлено через 5 минут и 22 секунды
Цитата(vinter @  29.8.2008,  11:36 Найти цитируемый пост)

нет, а вот  меняем название класса на

Поэтому и надо понимать какую сущность Вы реализуете.. и от этого зависит применение инструментария.
Геттер в чистом виде это не функция Get..() , а функция возврашая не  внутренне состояние, а одну из его составляюших реализации этого состояния. (что и вынуждает повышеное знание об устройстве на стороне клиента )

Добавлено через 13 минут и 7 секунд
Цитата(vinter @  29.8.2008,  11:33 Найти цитируемый пост)
К тому же я не вижу, проблем в изменении моего класса.

Представьте что Вы написали операционную систему, которой пользуются милионы. Но потом обнаружилась что реализация у некоторых сущностей  не очень эфективная (или  не работает на определенной платформе) .. Если реализация скрыта , то Вы ее подправили и милионы пользователей с благодарностью используют ее дальше и в новых направлениях.. А если нет.. страшно подумать... Для следуюшей версии все накопленное ПО нужно переписывать.. Да с масштабом я может быть и загнул, но подобная ситуация наблюдается и в пределах одной проги 
(конечно вышеупомянутое не сильно относится к проге из тысячи строк или если она одноневка)


--------------------
PM MAIL WWW   Вверх
Lycifer
Дата 4.9.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



class A
{
int Get_someElment() {return someElment; }
private:
int someElment;
.
.
.
};

class B
{

public:
int someElement;
.
.
.
};

someFunction()
{
A objA;
B objB;

objB.someElement =10;

memcpy((void*)&objB, (void*)&someElement,sizeof(objB));
}


Результат такой каманды:
objA.Get_someElment();


Так что приватные члены делать не особого смысла

PM MAIL ICQ   Вверх
mes
Дата 4.9.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Lycifer @  4.9.2008,  18:27 Найти цитируемый пост)


Так что приватные члены делать не особого смысла


не совсем понял чего Вы добивались показать своим примером? 

То что можно применить хак и добыть данные из объекта, которые являются приватными?
Да можно.
Только Вы забываетесь , если думаете что ограничение доступа , призвано уберечь данные от повреждения
средствами хака. Хак на то и хак - компилятор умывает руки и вся ответственность перекладывается на программиста.

Этот инструментарий  (ограничение доступа ) призван "всего лишь" облегчить жизнь программиста, указывая на ошибки использования,
ориентируясь на описание класса которое дал сам программист. 
То есть:
Чем правильнее выявит интерфейс, тем легче ему будет использовать его в дальнейшем. 
Чем лучше будет изолирована реализация, тем меньше придется программисту задумываться о том как подключить данную сущность к общему коду. 
Чем меньше будет внешних связей, тем легче выявить и локализировать ошибку/баг.
И многое другое..

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



Это сообщение отредактировал(а) mes - 4.9.2008, 21:59


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1683 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.