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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использовать ли глобальные переменные? целесообразность использования гл. п. 
V
    Опции темы
Lazin
Дата 14.4.2009, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(Anikmar @  13.4.2009,  23:12 Найти цитируемый пост)
Ну? Глобальная переменная некого типа тоже одна на все приложение и вторую такую-же создать нельзя. Ведь переменная типа "Класс_сингл_тон" одна? - Да. Она глобальная? - Да. В чем ее принципиальная разница от переменной не класса  "Класс_сингл_тон"?

глобальная переменная
Код

MyClass global1, global2;

синглтон
Код

MyClass::instance()->mymethod();

чувствуешь разницу?
время жизни глобальной переменной не определено, можно созданть множество объектов и тд..
синглтон это вообще совершенно другое, это не замена глобальных переменных, если у нас что-то в программе должно-быть доступно в разных еденицах трансляции это не синглтон, синглтон, это когда объект некоторого типа может быть создан только в одном экземпляре, например лог-файл, или файл конфигурации...
PM MAIL Skype GTalk   Вверх
Anikmar
Дата 14.4.2009, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Lazin @  14.4.2009,  05:53 Найти цитируемый пост)
чувствуешь разницу?
время жизни глобальной переменной не определено, можно созданть множество объектов и тд..
синглтон это вообще совершенно другое, это не замена глобальных переменных, если у нас что-то в программе должно-быть доступно в разных еденицах трансляции это не синглтон, синглтон, это когда объект некоторого типа может быть создан только в одном экземпляре, например лог-файл, или файл конфигурации... 


Опять-таки скажу, что особой разности не вижу. Объект синглтона естественно один, но никто не мешает натыкать разных классов-синглтонов, как и не мешает натыкать глобальных переменных. Так что остаюсь при своем мнении - главное не как обозвать глобальный объект и во что его обернуть, а как его организовать и как с ним работать. Суть глобального объекта и объекта синглтона одинакова. Последний, согласен, более защищен от неправильных действий, но все равно сам объект остается глобальным, а то что скрыт за вызовом метода - также можно скрыть и обычный объект, если не объявлять его extern, а доступаться через некий глобальный интерфейс. К тому же предел паранойи должен быть - я понимаю защиту от дураков-пользователей, но защиту от дураков- программистов собственной команды нужно организовывать методом увольнения оных. ИМХО.

У меня глобальный объект настройки вынесен в отдельный модуль, который линкуется к каждому проекту в виде библиотеки. Из проекта требуется вызвать метод Init для его инициализации, а дальше через интерфейсные методы получать/сохранять необходимую информацию. Я пока не увидел никаких особых проблем - если объект хорошо документирован и есть инструкция, то никакой опасности нет.

Ну а с дури и болт сломать можно.
ИМХО.

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



а синглтон разве обязан быть глобальным?
конечно любой глобальный объект это гвоздь в гроб масштабируемости кода, и множество разных синглтонов используемых глобально в проекте это плохо, но еще хуже использование глобальных переменных, так как в примере ТС-а


Цитата(Anikmar @  14.4.2009,  07:29 Найти цитируемый пост)
У меня глобальный объект настройки вынесен в отдельный модуль, который линкуется к каждому проекту в виде библиотеки. Из проекта требуется вызвать метод Init для его инициализации, а дальше через интерфейсные методы получать/сохранять необходимую информацию. Я пока не увидел никаких особых проблем - если объект хорошо документирован и есть инструкция, то никакой опасности нет.

если этот глобальный объект хранит конфигурацию приложения, то это нормально, так как конфигурация приложения редко меняется
PM MAIL Skype GTalk   Вверх
GoldFinch
Дата 14.4.2009, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Lazin @  14.4.2009,  09:14 Найти цитируемый пост)
еще хуже использование глобальных переменных, так как в примере ТС-а

если говорить о примере ТСа, то там применение глобальных переменных совершенно оправдано, т.к. прога маленькая
кроме того оно неплохо преобразуется в такой код:
Код

class Rec {
  int n, c;
  Rec();
public:
  Rec(int n_,int c_):n(n_),c(c_){}
  void operator() ( int sum ) {
    if ( sum == n ) {
    }
    for ( i = 1; i <= c; i++ )
      rec( sum + a[i] )
    }
  }
}
int main(){
  Rec rec(10, 23);
  rec( 0 );
  return( 0 );
}


Это сообщение отредактировал(а) GoldFinch - 14.4.2009, 08:37
PM MAIL ICQ   Вверх
MAKCim
Дата 14.4.2009, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Любитель @  13.4.2009,  19:08 Найти цитируемый пост)
так это будут самые что ни есть неглобальные переменные. Обычный инстан-метод по сути. 

нет, переменная как была глобальной, так и останется
вообще в таких случаях прямое обращение к глобальной переменной заменяется на вызов API получения ее адреса, который в случае чего легко меняется



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Remiznik
Дата 14.4.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



сразу скажу что больших проетков не писал, но мнение по этому поводу есть !

Для меня какждая функция должна быть универсальной, то есть может как можно чаше использоваться и даже быть пересена в другой проект так как это очень удобно написал одну функцию и юзаешь( конечно это почти не возможно но нужно стремиться ) . А при использованиии глобальных переменых это невозможно.
И потом наверно я не слишком умён чтоб отследить все изменения глобальной переменной в процессе работы программы ведь если есть даже пара функций с изменением глоб.пер. и они часто используетться не так просто это сделать !
PM MAIL   Вверх
zim22
Дата 14.4.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: -1
Всего: 69



Цитата(Remiznik @  14.4.2009,  16:13 Найти цитируемый пост)
 очень удобно написал одну функцию и юзаешь( конечно это почти не возможно 

а как же функции из STL?



--------------------
PM MAIL   Вверх
Remiznik
Дата 14.4.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а что STL ? я использую STL но причом тут глоб.перемен ?
PM MAIL   Вверх
Anikmar
Дата 14.4.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Lazin @  14.4.2009,  08:14 Найти цитируемый пост)
если этот глобальный объект хранит конфигурацию приложения, то это нормально, так как конфигурация приложения редко меняется 

Я с начала спора говорил - все от конкретики зависит и полностью отказываться от глобальных переменных себе же дороже.

Цитата(Remiznik @  14.4.2009,  16:13 Найти цитируемый пост)
 А при использованиии глобальных переменых это невозможно.

Если каждая функция будет использовать глобальные переменные для своей внутренней работы - в топку такой код.

Цитата(Cтpaнник @  13.4.2009,  21:54 Найти цитируемый пост)
А каков размер проекта (в тыс. LOC) и сколько в нем разработчиков? 

Для интереса написал программулинку, которая посчитала сколько строк у меня сейчас в рабочем проекте. Получилось 96000 с пустыми строками и 84000 без учета оных. Как я и говорил не сильно большой проект, тем не менее и в крупных проектах использовали глобальные объекты без всякого вреда для проекта и психики команды.

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


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: -1
Всего: 69



Цитата(Remiznik @  14.4.2009,  16:46 Найти цитируемый пост)
а что STL ? я использую STL но причом тут глоб.перемен ?

в том то и дело, что функции STL не нуждаются в глобальных переменных.


--------------------
PM MAIL   Вверх
GoldFinch
Дата 14.4.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



zim22, и много их там, функций STL? 20?
PM MAIL ICQ   Вверх
vinter
Дата 14.4.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(GoldFinch @  14.4.2009,  18:45 Найти цитируемый пост)
zim22, и много их там, функций STL? 20?

мдя.. открой да посмотри, и не позорься.
Цитата(Anikmar @  14.4.2009,  17:47 Найти цитируемый пост)
в крупных проектах использовали глобальные объекты без всякого вреда для проекта и психики команды.

код с глобальными переменными не пройдет ревью ни у одного здравомыслящего программиста.


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


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: -1
Всего: 69



Цитата(GoldFinch @  14.4.2009,  17:45 Найти цитируемый пост)
 и много их там, функций STL? 20?

60 штук  smile 


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


Explorer
****


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

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



zim22, ~100


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


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: -1
Всего: 69



Цитата(vinter @  14.4.2009,  19:48 Найти цитируемый пост)
~100

нет. извольте, но я настою на своём.

Страуструп. Язык программирования С++. Специальное издание. Глава 18.
Цитата

18.2. На первый взгляд может показаться, что алгоритмов стандартной библиотеки несметное число. Однако их всего 60.





--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




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


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

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