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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [опрос]Паттерны проектирования 
:(
    Опции темы
 
Используете ли вы паттерны проектирования в своих программах?
Да [ 20 ]  [43.48%]
Нет [ 8 ]  [17.39%]
Нет, но хочу [ 10 ]  [21.74%]
Что это? [ 8 ]  [17.39%]
Всего проголосовавших: 46
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
chipset
Дата 31.3.2005, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Паттерны проектирования - готовые элементы дизайна архитектуры программы, из которых дизайнер получает возможность строить программы как-бы блоками. Пример паттерна: паттерн синглетон это, если я правильно помню, класс которого всегда имеется только один обьект во всей программе. Более подробно их описывает Domestic Cat здесь, ну а настоящий классик - Александреску со своим Modern C++ Design.
ИМХО, весьма удобная штука, заюзываю их...
Ко всему прочему, облегчает общение нескольких программеров между собой вводя некого рода словарь smile
Выкладываем свои мнения smile



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 31.3.2005, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 30.3.2005, 22:50)
ну а настоящий классик - Александреску со своим Modern C++ Design.


Ты это... неправ smile Классики - это Банда Четырех (Gang Of Four, GoF) - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides с книгой Design Patterns.




--------------------

PM   Вверх
Fire-Plug
Дата 31.3.2005, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Domestic @ 31.3.2005, 07:57)
Классики - это Банда Четырех (Gang Of Four, GoF)

Это правда, но читать Александреску намного легче, чем Гамму со товорищи... smile
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
chipset
Дата 31.3.2005, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Domestic Cat, то разве не для Java?smile

Это сообщение отредактировал(а) chipset - 31.3.2005, 08:35


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
np9mi7
Дата 31.3.2005, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Domestic Cat привел паттерн как раз из банды четырех, а Александреску посмотрел на проблему намного шире... по сути,
Код

class Singleton
{
    private static Singleton instance;
    private Singleton() {}
    public static Singleton getInstance()
    {
        if (instance == null) 
               instance = new Singleton();
        else return null;
        return instance;
    }
    public static void dispose()
    {
        instance = null;
    }
}
, объектов какого класса может быть много, но все методы статичны.... Александреску это подметил и его синглтон - действительно синглтон - те объект только один и все тут!


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Domestic Cat
Дата 31.3.2005, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 30.3.2005, 23:34)
Domestic Cat, то разве не для Java?smile

Если она была издана в 1995 году, то какая Java? smile
Цитата(np9mi7 @ 30.3.2005, 23:50)
, объектов какого класса может быть много, но все методы статичны.... Александреску это подметил и его синглтон - действительно синглтон - те объект только один и все тут!

Ну создай мне хотя бы пару объектов, потом посмотрим...


--------------------

PM   Вверх
Fire-Plug
Дата 31.3.2005, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(np9mi7 @ 31.3.2005, 08:50)
те объект только один и все тут!

Объект-то один, да вот доступиться к нему можно только однажды. Почему?

Цитата(np9mi7 @ 31.3.2005, 08:50)

Код

public static Singleton getInstance()
{
        if (instance == null) 
               instance = new Singleton();
        else return null;
        return instance;
}

Да потому, что это не ф-ция-создатель, а просто катастрофа! Только один раз ссылку на instance возвращает, а то всё время null! Будет вам GPF(exception 0x00000005) вместо синглтона или Ява-машина все исключительные ситуации перехватывет?
Этот оператор:
Код

 else return null;

надо для для врагов оставить и описать как принципиальную особенность Ява-реализации синглтона.

А у Александреску, кстати, в примере реализации синглтона им. Скотта Мэйерса - деструктор private.
Что будет при компиляции?
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
chipset
Дата 31.3.2005, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Fire @ 30.3.2005, 22:13)
Ява-машина все исключительные ситуации перехватывет?

Я не уверен, но вроде бы..
Синглетон, как я его представляю:
Код

class Singleton
{
Singleton();
Singleton *_instance;
public:
 Singleton*  getInstance()
{
  if(_instance) return _instance;
   _instance = new Singleton();
  return _instance; 
}
 
virtual ~Singleton();
};


Цитата(np9mi7 @ 30.3.2005, 21:50)
но все методы статичны...

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

Это сообщение отредактировал(а) chipset - 31.3.2005, 09:27


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Fire-Plug
Дата 31.3.2005, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(np9mi7 @ 31.3.2005, 08:50)
объектов какого класса может быть много, но все методы статичны

Как, неужели, все методы статичны?
Дык такой паттерн имеет совсем другое название и по инициативе того же Скотта Мэйерса назван монотип, т.к. все члены могут быть тоже только статичны.
А как же single-то, если объектов много? Как-то нелогично. Стоит ли тогда паттерн городить да ещё книжки заумные писать? Вот к примеру:
Код

class MyClass
{
...
};

// Сичас сделаю много объектов и никакой синглтон здесь совершенно не причем
MyClass obj1, obj2,....,objN;
MyClass *pObj1= new Class;
...
MyClass *pObjN= new Class;

ЗЫ: Может ты фабрику объектов имеешь в виду?
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
Domestic Cat
Дата 31.3.2005, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Fire @ 31.3.2005, 00:13)
Да потому, что это не ф-ция-создатель, а просто катастрофа! Только один раз ссылку на instance возвращает, а то всё время null! Будет вам GPF(exception 0x00000005) вместо синглтона или Ява-машина все исключительные ситуации перехватывет?
Этот оператор:


Вообще-то зависит все от того, какой синглтон нужен. Можно на все запросы возвращать ссылку на один и тот же объект, можно дать доступ один раз, как в приведенном выше случае. Никаких иксепшнов тут не будет, если клиент попросил синглтон однажды. Чаще всего, если синглтон просят два раза - это сигнал бага в коде, потому лучше вернуть на такой запрос null или напрямую бросить иксепшн - легко дебаггить будет.


--------------------

PM   Вверх
np9mi7
  Дата 31.3.2005, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
Ну создай мне хотя бы пару объектов, потом посмотрим...
, согласен, конструктор приват...не заметил...
а что если нужны параметры при конструировании...
да ладно ладно, если синглтон - это объект который на протежении всей жизни только один, то тогда это решение вполне удовлетворительно (хоте не мне это говорить)....
Говорю Александреску всю эту тему развил до более общего понятия.

Domestic Cat, согласись что у грека он намного более функционален?

Ладно, это вопрос вкуса smile
Цитата

Как, неужели, все методы статичны?
Дык такой паттерн имеет совсем другое название и по инициативе того же Скотта Мэйерса назван монотип, т.к. все члены могут быть тоже только статичны.
, посмотри на решение предложенное Domestic Cat, там толь конструктор не статичен...

Это сообщение отредактировал(а) np9mi7 - 31.3.2005, 09:41


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 31.3.2005, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(np9mi7 @ 30.3.2005, 22:38)
а что если нужны параметры при конструировании...

Функция initialize передающая параметры в конструктор?


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
np9mi7
Дата 31.3.2005, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



эй!

chipset, до понедельника, все будет! smile


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Domestic Cat
Дата 31.3.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(np9mi7 @ 31.3.2005, 00:38)
Domestic Cat, согласись что у грека он намного более функционален?


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


--------------------

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


Шустрый
*


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

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



Цитата(chipset @ 31.3.2005, 09:26)
Синглетон, как я его представляю:

Будет ни одного объекта Singleton, т.к. ф-ция getInstance() - нестатический метод класса, а конструктор private. Нужен статический метод getInstance() и статический же член Singleton *_instance. Т.е.
Код

class Singleton
{
public:
static Singleton* Instance()
{
  if(0 == _instance)   
     _instance = new Singleton();
  return _instance; 
}
static void Dispose()
{
     if(_instance) 
     {
          delete _instance;
          _instance= 0;
     }
}
private:
   Singleton();
   virtual ~Singleton();

   static Singleton *_instance;
};
// В cpp-файле:
Singleton * Singleton::_instance= 0;

--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
np9mi7
  Дата 31.3.2005, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
В Java есть анонимные классы, синглтоны по определению, без каких-либо усилий.
, с++ нету...
Цитата
Паттерн - это форма организации классов, там нет жесткой структуры - сделай вот так и все.
, согласен, но появились ссылки на код можно и покритиковать.... smile чуть чуть

Это сообщение отредактировал(а) np9mi7 - 31.3.2005, 09:59


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 31.3.2005, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Fire @ 30.3.2005, 22:48)
Singleton * Singleton::_instance= 0;

Он же private? :\
_instance

Это сообщение отредактировал(а) chipset - 31.3.2005, 09:56


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Fire-Plug
Дата 31.3.2005, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(np9mi7 @ 31.3.2005, 09:38)
, посмотри на решение предложенное Domestic Cat, там толь конструктор не статичен...

А что, на Яве другое понятие(и реализация) статических методов, т.е. методов, не получающих указатель this, к-рые именно поэтому имеют доступ только к статическим членом класса?
Не хочу обидеть Domestic Cat, но "Кто в жизни не ошибался", - сказал ёжик слезая с кактуса.
Я лично смотрю на решение Мейерса, или Алесандреску, или Гаммы...
Добавлено @ 10:00
Цитата(chipset @ 31.3.2005, 09:56)
Он же private? :\

Канэшна, Владимир Ильич!
(Ответ Сталина на вопрос, сможет ли он для дела революции расстрелять 10 тыс. чел)
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
chipset
Дата 31.3.2005, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Fire @ 30.3.2005, 22:57)

Канэшна, Владимир Ильич!
(Ответ Сталина на вопрос, сможет ли он для дела революции расстрелять 10 тыс. чел)

И как ты тогда получаешь к ним доступ? smile


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 31.3.2005, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Fire @ 31.3.2005, 00:57)
А что, на Яве другое понятие(и реализация) статических методов, т.е. методов, не получающих указатель this, к-рые именно поэтому имеют доступ только к статическим членом класса?
Не хочу обидеть Domestic Cat, но "Кто в жизни не ошибался", - сказал ёжик слезая с кактуса.

Эээ.. а можно пояснить, чем статик не устраивает и в чем ошибка?


--------------------

PM   Вверх
chipset
Дата 31.3.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 30.3.2005, 23:06)
Эээ.. а можно пояснить, чем статик не устраивает и в чем ошибка?

Ну ты не получаешь указателя this когда используешь static функции, т.е. не можешь иметь доступ к нестатическим членам.

Это сообщение отредактировал(а) chipset - 31.3.2005, 10:14


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 31.3.2005, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 31.3.2005, 01:09)
Ну ты не получаешь указателя this кода используешь static указатели...

А на кой он мне сдался, если у меня есть ссылка на объект?


--------------------

PM   Вверх
Fire-Plug
Дата 31.3.2005, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(chipset @ 31.3.2005, 10:03)
И как ты тогда получаешь к ним доступ?

Код

Singleton::Instance()->Foo(); // Foo() - пора бы уже эту ф-цию сделать компилер-генерируемую по умолчанию :D  


Цитата(Domestic @ 31.3.2005, 10:06)
Эээ.. а можно пояснить, чем статик не устраивает и в чем ошибка?

Речь шла в утверждении одного из апологетов решения о всех статических методах синглтона, кроме конструктора. Уместно напомнить известный афоризм, что если такая программа заработает с первого раза, это значит, что программист не понял задания.
Для класса со всеми статическими методами и соответственно членами есть свое определение - монотип.
Я иногда использую монотип-классы, в роли хэлперов, когда нужна голая функциональность, и не хочется вводить namespace.
В общем случае, класс со множеством статических функций - неудобен и потому не нужен.
Синглтону нужно всего 2 статических метода, а для синглтона Мэйерса - только один.
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
Domestic Cat
Дата 31.3.2005, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Fire @ 31.3.2005, 01:32)
Речь шла в утверждении одного из апологетов решения о всех статических методах синглтона, кроме конструктора.

Впервые слышу, по крайней мере я тут такого не упоминал. В коде я привел только методы, относящиеся собственно к тому, как создать синглтон; все остальные методы не могут быть статичными, иначе их можно было бы вызывать сколько угодно, вообще не создавая объектов.


--------------------

PM   Вверх
Fire-Plug
Дата 31.3.2005, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(chipset @ 31.3.2005, 09:56)
Цитата (Fire-Plug @ 30.3.2005, 22:48)
Singleton * Singleton::_instance= 0;


Он же private? :\
_instance

chipset, дико извиняюсь, только сейчас понял весь вопрос.
Ну ведь это уже классика С++ - объявление статического члена класса!
Статический член должен быть объявлен и инициализирован как глобальная переменная!
Цитата
Static data members must be initialized at file scope, even if private. (© MSDN)

Добавлено @ 10:51
Цитата(np9mi7 @ 31.3.2005, 09:38)
, посмотри на решение предложенное Domestic Cat, там толь конструктор
не статичен...


Цитата(Domestic @ 31.3.2005, 10:39)
Впервые слышу, по крайней мере я тут такого не упоминал

Уместны сразу несколько аналогий:
1) Ответ Иешуа Га-Ноцри Понтию Пилату по поводу искажения смысла проповедей его последователями.
2) "Речи тов. Брежнева нужно не только слушать, но и читать. Вместо "сосиски сраные" было сказано "социалистические страны"".
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
chipset
Дата 31.3.2005, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Fire @ 30.3.2005, 23:44)
Уместны сразу несколько аналогий:

Domestic Cat имел ввиду методы связанные с управлением синглетона, а ты про все говорил.

Это сообщение отредактировал(а) chipset - 31.3.2005, 11:01


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Hroft
Дата 31.3.2005, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как-то странно поставлен вопрос изначальный. "Используете ли вы паттерны". А как их можно не использовать? До того, как я вообще узнал о книже Design Patterns, имея всего пару лет не слишком интенсивной программистской практики, я уже использовал некоторые. Фасад, например. Паттерны - это всего лишь идеи, наиболее важные и полезные. Они не имеют никакого отношения непосредственно к программированию, тем более к конкретным языкам. Даже в повседневной жизни мы все применяем некоторые из них.
PM MAIL ICQ   Вверх
chipset
Дата 31.3.2005, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Hroft, я вот не использовал.. smile
Я вообще-то имел ввиду архитектурную часть, т.е. пишешь ли ты в проектной документации: так и так, это будет синглетоном, а это будет фабрикой.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Hroft
Дата 31.3.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну тогда я тоже не использовал smile.
И, сдается мне, не все проголосовавшие использовали в таком контексте.
PM MAIL ICQ   Вверх
Fire-Plug
Дата 31.3.2005, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(chipset @ 31.3.2005, 11:16)
Я вообще-то имел ввиду архитектурную часть, т.е. пишешь ли ты в проектной документации:


Цитата(Hroft @ 31.3.2005, 11:20)
И, сдается мне, не все проголосовавшие использовали в таком контексте


Придется напомнить изначальную формулировку вопроса:
Цитата
Используете ли вы паттерны проектирования в своих программах?


И снова уместна ещё одна аналогия:
- Говоря "сволочь усатая", вы кого конкретно имели в виду, тов. Жюков?
- Гитлера, тов. Сталин!
- А вы кого конкретно имели в виду, тов. Берия?
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
np9mi7
Дата 31.3.2005, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
Я вообще-то имел ввиду архитектурную часть, т.е. пишешь ли ты в проектной документации: так и так, это будет синглетоном, а это будет фабрикой.
, сейчас стараюсь писать (UML). так нагляднее, тем более тем программистам с которыми работаешь в комманде намного проще понять друг друга. Вообще патерны это дело очень хорошее действительно как средство общения + багаж готовых проектных решений для конкретной ситуации. Если вы занимаетесь коммандной разработкой то дело пойдет на много эфф. если иметь у себя под боком багаж проектных решений. Например у нас в отделе есть набор проектных решений специфичных для нашей области прикладного программирования. это очень удобно. вообще всем советую как то коллеционировать свои решения и их обобщать, это ведет к не изобретанию велосипеда. те же паттерны которые нам предлагают в книгах и статьях, это есть наиболее часто встречающиеся проблемы и их решения, так что я за образцы! тем более внутри комманды!


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Hroft
Дата 31.3.2005, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



np9mi7: золотые слова.

Жаль нету смайлика ОВАЦИЯ. Я бы уважаемому Гидранту их парочку вставил (в сообщении своем). Всегда приятно почитать посты умного и начитанного человека, изумительно начитанного, весьма грамотного, пусть даже малость не следящего за язычком...
PM MAIL ICQ   Вверх
Domestic Cat
Дата 31.3.2005, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата
Жаль нету смайлика ОВАЦИЯ.


Попробуй линк "Показать всё" пod смайлами.


--------------------

PM   Вверх
chipset
Дата 31.3.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Hroft @ 31.3.2005, 00:59)
Жаль нету смайлика ОВАЦИЯ.

Эт есть smile
--Resize_Images_Alt_Text--


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Hroft
Дата 1.4.2005, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Клево smile.
Гидрант: smile smile
Ну да хорош оффтопить.

Кстати, об Александреску. Loki пробовали пользовать? Как впечатления? Мне понравилось. Жаль только, что под разные компиляторы по-разному многие вещи делаются... Но это уже беда компиляторов.
PM MAIL ICQ   Вверх
Fire-Plug
Дата 2.4.2005, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пересмотрел полемику, чтобы понять с чего сыр-бор начался...
Цитата(Domestic @ 31.3.2005, 09:33)
Вообще-то зависит все от того, какой синглтон нужен. Можно на все запросы возвращать ссылку на один и тот же объект, можно дать доступ один раз, как в приведенном выше случае. Никаких иксепшнов тут не будет, если клиент попросил синглтон однажды.

Если объект нужен однажды, то не проще создать его обычным образом, прямо в том месте, где он будет использован, а не строить предложенную выше конструкцию с однократным доступом, к-рая только потребляет ресурсы? Конструкцию такого типа следует назвать "Собака на сене или Сам не гам и другому не дам"-синглтон.
Цитата(Domestic @ 31.3.2005, 09:33)

Чаще всего, если синглтон просят два раза - это сигнал бага в коде, потому лучше вернуть на такой запрос null или напрямую бросить иксепшн

Создается впечатление, что данная фраза - это в лучшем случае искреннее заблуждение.
В идее синглтона нет ничего даже близко похожего на процитированное утверждение. Как раз наоборот.
Обратимся к "классикам"
Цитата
1) GoF: "Гарантировать, что класс имеет только один экземляр и обеспечить глобальную точку доступа к нему"
2) Александреску: "Синглтон - это улучшенная глобальная переменная"... "Вам нужно использовать синглтон, когда вы моделируете типы, экземпляр к-рых концептуально должен быть уникальным в приложении, такие как Клавиатура, Дисплей, Сист. Часы..."

Улавливаете разницу - уникальный объект или однократный объект?
Синглтон разрабатывался для того, чтобы его чаще всего запрашивали много раз из разных мест в приложении.
Обратная ситауция, когда нужно гарантировать, что объект будет использован только однажды... Зачем такой одноразовый объект в памяти держать - его следует уничтожать сразу после использования, а не занимать пусть даже 4 байта под его статический указатель. Т.е. требуется другая реализация, не основанаая на принципах построения синглтона и, соотственно, другое название - этакий object unitary(однократный) - Unitarion.
Приведите примеры для такого Unitarion-а, имеющие приблизительно такой же вес, как и те, что привел Александреску.
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
Domestic Cat
Дата 2.4.2005, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Fire @ 2.4.2005, 00:32)
Если объект нужен однажды, то не проще создать его обычным образом, прямо в том месте, где он будет использован,

А что значит "создать объект обычным образом"? Что, есть "необычное создание объекта"?

Цитата(Fire @ 2.4.2005, 00:32)
а не строить предложенную выше конструкцию с однократным доступом, к-рая только потребляет ресурсы?

Какие ресурсы??? Если такие ресурсы считать то нужно идти на асме писать...

Цитата(Fire @ 2.4.2005, 00:32)
Конструкцию такого типа следует назвать "Собака на сене или Сам не гам и другому не дам"-синглтон.


Вообще, ЧИТАЙ ВНИМАТЕЛЬНЕЕ - нигде у меня не написано, что объект нужен однажды. У меня написано, что "можно дать доступ один раз" и "попросил синглтон однажды."
Потому все дальнейшие рассуждения - непонятно к чему вообще:
Цитата(Fire @ 2.4.2005, 00:32)
Синглтон разрабатывался для того, чтобы его чаще всего запрашивали много раз из разных мест в приложении.
Обратная ситауция, когда нужно гарантировать, что объект будет использован только однажды... Зачем такой одноразовый объект в памяти держать - его следует уничтожать сразу после использования, а не занимать пусть даже 4 байта под его статический указатель. Т.е. требуется другая реализация, не основанаая на принципах построения синглтона и, соотственно, другое название - этакий object unitary(однократный) - Unitarion.
Приведите примеры для такого Unitarion-а, имеющие приблизительно такой же вес, как и те, что привел Александреску.

Посмотри внимательно на код, который я привел, и на то, что подразумевалось под словами "просят синглтон". "Просят" - значит вызывают метод getInstance, чтобы получить ссылку на уникальный объект. С этой ссылкой никто не мешает ничего делать - можешь хоть пятьдесят раз ее скопировать. Когда клиент вызывает этот метод, он ожидает, что уникальный объект будет создан. Потому, если метод вызван два раза, то в таком контексте это скорее будет означать баг.
Не вижу никаких противоречий ни с кем.


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 1.4.2005, 22:59)
С этой ссылкой никто не мешает ничего делать - можешь хоть пятьдесят раз ее скопировать. Когда клиент вызывает этот метод, он ожидает, что уникальный объект будет создан.

Боюсь мороки с передачей ссылки туда-сюда будет.. Кроме того, если отойти от стандартного синглетона, и сделать функцию-конструктор то геммороя будет горраааздо меньше, да и параметры можно передавать.

Это сообщение отредактировал(а) chipset - 2.4.2005, 10:15


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 01:14)
да и параметры можно передавать.


Опять не понял, а кто мешает передавать параметры:
Код

public Singleton getInstance(int parameter1, MyClass parameter2)
{
      return new Singleton(parameter1, parameter2);
}

private Singleton (int parameter1, MyClass parameter2)
{
      //...
}


Цитата(chipset @ 2.4.2005, 01:14)
Боюсь мороки с передачей ссылки будет.. Кроме того, если отойти от стандартного синглетона, и сделать функцию-конструктор

Синглтон не сделан раз и навсегда; делать его можно как хочешь, под твои нужды. Если многим классам нужна ссылка на объект синглтона, - пожалуйста, делай так. Но ИМО, чем большему количеству классов нужна ссылка, тем хуже дизайн. Недаром появилось понятие layered architecture - система разрабатывается слоями, чтобы уменьшить связи между классами. Чем больше классов завязаны на к-л объект, тем ригиднее такая структура, тем она хуже. В крайнем случае используется Медиатор, но лучше всего спроектировать так, чтобы синглтон был нужен одному классу.


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 1.4.2005, 23:23)
Но ИМО, чем большему количеству классов нужна ссылка, тем хуже дизайн.

Чтобы не быть голословным:
Цитата(Modern)
Шаблон гарантирует, что класс имеет только один экземпляр и обеспечивает глобальный доступ к нему.



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата
Шаблон гарантирует, что класс имеет только один экземпляр и обеспечивает глобальный доступ к нему.

Во-первых, что бы там кто не писал про паттерны, это субъективное мнение, которое не являетя истиной в последней инстанции.
Во-вторых, паблик статик переменные доступны везде, т.к. для обращения к ним достаточно названия класса.


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 1.4.2005, 23:44)
Во-первых, что бы там кто не писал про паттерны, это субъективное мнение, которое не являетя истиной в последней инстанции.

Конечно не является.. каждый делает так, как ему удобнее smile
Мы лишь пытаемся выяснить чей вариант удобнее..
Цитата(Domestic @ 1.4.2005, 23:44)
Во-вторых, паблик статик переменные доступны везде, т.к. для обращения к ним достаточно названия класса.

Паблик-статик переменные не являются синглетонами, по крайней мере по Александреску (а как кстати правильно писать?), поскольку ихнего типа может создаться ещё один обьект, что недопустимо для синглетона.

Это сообщение отредактировал(а) chipset - 2.4.2005, 10:49


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 01:48)
Паблик-статик переменные не являются синглетонами, по крайней мере по Александреску (а как кстати правильно писать?), поскольку ихнего типа может создаться ещё один обьект, что недопустимо для синглетона.

Ох, ну опечатался - я имел в виду не только переменные, но и методы, точнее метод getInstance(), который вроде объявлен как статик...


--------------------

PM   Вверх
np9mi7
Дата 2.4.2005, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Ну, все нормально, экземпляр один ссылок много...

А layered architecture, это то что нужно, объект может пользоваться сервисом синглтона, но не иметь к нему больше некакого отношения...


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 2.4.2005, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 1.4.2005, 23:51)
Ох, ну опечатался - я имел в виду не только переменные, но и методы, точнее метод getInstance(), который вроде объявлен как статик...

Ну пусть даже и так, но getInstance у тебя все равно возвращает null, т.е. геммороя с хранением линка не избежать.

Это сообщение отредактировал(а) chipset - 2.4.2005, 11:02


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 01:59)
Ну пусть даже и так, но getInstance у тебя все равно возвращает null.


Ты уверен?


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 00:01)

Ты уверен?

После первого вызова smile


Это сообщение отредактировал(а) chipset - 2.4.2005, 11:03


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 01:59)
т.е. геммороя с хранением линка не избежать.

У меня щас крыша поедет smile С каких пор хранение линка стало геморроем?


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 00:03)

У меня щас крыша поедет smile С каких пор хранение линка стало геморроем?

Потому что тебе придется раздавать его всем желающим из той первой функции где ты его получил, или строить класс-раздаватель линка smile

Это сообщение отредактировал(а) chipset - 2.4.2005, 11:04


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 02:02)

После первого вызова smile

Ну кто мешает тебе убрать этот нул и возвращать линк ВСЕ ВРЕМЯ? То один вариант, полезный в определенных случаях, если тебе нужен синглтон из 10 классоб, - ПОЖАЛУЙСТА, кроме того, что в таком дизайне возникают сомнения, других возражений нет...


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 00:05)
Ну кто мешает тебе убрать этот нул и возвращать линк ВСЕ ВРЕМЯ?

Я так и делаю.. smile

Цитата(Domestic @ 2.4.2005, 00:05)
кроме того, что в таком дизайне возникают сомнения, других возражений нет...

Ну, да, Александреску вообще слабенький программист, чё он лезет- кто знает...

Это сообщение отредактировал(а) chipset - 2.4.2005, 11:10


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 02:09)
Ну, дык, Александреску вообще слабенький программист, чё он полёз - кто знает...


Если бы то, что классы должны быть слабо связаны, придумал я, я бы еще понял твои слова, но это вообще-то обычная вещь в ООП; Фаулера, Купера и тысячи других тоже трудно причислить к соплякам...


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



А теперь представь, что тебе нужно будет добавить ещё один класс в дизайн который юзает синглетон и тебе придется сразу закладывать в его конструктор параметр а-ля "Singleton *single", ну разве красивое решение? Хотя это уже дело вкуса..
Кстати, для организации классов в кучки которые пользуются одним синглетоном существуют неймспейсы.
Добавлено @ 11:20
Цитата(Domestic @ 2.4.2005, 00:14)
классы должны быть слабо связаны

А я как-то не вижу что доступ к синглетону со всех классов влияет на связь оных классов в увеличивающем смысле. Скорее уж наоборот, передача другим классам линка на синглетон ещё более их связывает.

Это сообщение отредактировал(а) chipset - 2.4.2005, 11:21


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 02:19)
Кстати, для организации классов в кучки которые пользуются одним синглетоном существуют неймспейсы.

Первая стадия - это стадия проекторования. И классы в неймспейсы объединяют не на основании того, что всем им нужен один синглтон.

Цитата(chipset @ 2.4.2005, 02:19)
А я как-то не вижу что доступ к синглетону со всех классов влияет на связь оных классов в увеличивающем смысле. Скорее уж наоборот, передача другим классам линка на синглетон ещё более их связывает.

А доступ часто дается для того, чтобы сохранить ссылку в поле объекта. Да фих с ним... Просто есть еще один хороший принцип ООП - принцип ответственности за что-то одно (Single Responsibility Principle). То значит, что синглтон, как и любой другой класс, должен быть ответственен за что-то одно. Раз это синглтон, то это значит, что вообще критично, чтобы такой объект был один. Потому чаще всего он не будет нужен в бог знает каких методах непонятно каких классов.


--------------------

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


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 00:23)
И классы в неймспейсы объединяют не на основании того, что всем им нужен один синглтон.

Нет конечно.
Хорошо, возьмем конкретный пример синглетона: Logfile.
Какова по твоему область действия этого синглетона?

Это сообщение отредактировал(а) chipset - 2.4.2005, 11:33


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 02:33)
Нет конечно. Но возьмем конкретный пример синглетона: Logfile.
Какова по твоему область действия этого синглетона?


Логгер делают доступным везде - см. статик кейворд. Но конкретные логгеры вообще-то реализуют как хотят, не обязательно синглтоном. Можно просто хранить именованные логгеры в статик векторе, и ничего страшного не произойдет, если ты сделаешь не один логгер а пять.
К тому же все-таки это скорее средство дебаггинга и аудита, учитывать которое в дизайне некритично.


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 00:43)
если ты сделаешь не один логгер а пять.

Обычно один файл для лога, или N их создается, все равно, доступ к ним ОДИН.

Цитата(Domestic @ 2.4.2005, 00:43)
Логгер делают доступным везде - см. статик кейворд.

См. замечание насчёт файла, следовательно глупо делать вторую копию логгера.

Это сообщение отредактировал(а) chipset - 2.4.2005, 11:45


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 02:44)
Обычно один файл для лога, или N их создается, все равно, доступ к ним ОДИН.

А если логгеры в консоль пишут или в разные сокеты/файлы?




--------------------

PM   Вверх
chipset
Дата 2.4.2005, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 00:47)

А если логгеры в консоль пишут или в разные сокеты/файлы?

Все равно, открываются они ОДИН РАЗ, все аутпуты, т.е. эдакий логговой аутпут программы. Это пофиг, важно что так будет удобнее посылать сообщения для логгера, ОДНОМУ логгеру..

Это сообщение отредактировал(а) chipset - 2.4.2005, 11:49


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 02:49)
Все равно, открываются они ОДИН РАЗ, все аутпуты, т.е. эдакий логговой аутпут программы. Это пофиг, важно что так будет удобнее посылать сообщения для логгера, ОДНОМУ логгеру..

а если я хочу разные логгеры, так чтобы я мог вызвать в коде один логгер и писать в него, не указывая каждый раз что мне нужен именно логгер для сокета или логгер для записи в файл с ИНФО а не ЕРРОРами? У тебя получается универсальный логгер на все случаи жизни, а это плохо.


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 00:52)
У тебя получается универсальный логгер на все случаи жизни, а это плохо.


Ну почему же. Взяли, инициализировали аутпут в начале, а потом тока и делай что инфу в его качай...
Помойму мы не туда зашли. Вопрос был: нужен ли логгер всем классам?

Это сообщение отредактировал(а) chipset - 2.4.2005, 11:56


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 02:55)
Ну почему же. Взяли, инициализировали аутпут в начале, а потом тока и делай что инфу в его качай...
Помойму мы не туда зашли. Вопрос был: нужен ли логгер всем классам?


Предполагать, что всем классам понадобится ОДИН логгер, неправильно. Возможно, им понадобится один и тот же логгер, возможно - несколько разных. Потому здесь скорее подойдет паттерн Фабрика, чем синглтон.


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Так!© Ющенко
Поскольку с логгером тебя не переубедить, что скажешь насчёт Keyboard или Display?

Это сообщение отредактировал(а) chipset - 2.4.2005, 12:00


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 03:00)
что скажешь насчёт Keyboard или Display?


Дык... а шо ? smile Обработку событий кеиборда ложат обычно в один единственный класс, даже метод.


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



А узнавание какая клавиша нажата?
Ок, а такой синглетон как App?
Может лучше пересраховаться (дать всем получать _instance, а не только избранным) чем недосраховацца?


Это сообщение отредактировал(а) chipset - 2.4.2005, 12:07


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 03:07)
Ок, а такой синглетон как App?
Может лучше пересраховаться (дать всем получать _instance а не только избранным) чем недосраховацца?

Перебирать до утра можно smile Есть случаи, когда хорошо дать ссылку на синглтон любому желающему; есть случаи когда наоборот, нужно ограничить круг клиентов. Последний случай более подходит для кода, написанного тобой, первый - для стандартных библиотек. Такша давай заканчивать, а то я спать хочу, третий час ночи smile


--------------------

PM   Вверх
chipset
Дата 2.4.2005, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



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

Цитата(Domestic @ 2.4.2005, 01:12)
Есть случаи, когда хорошо дать ссылку на синглтон любому желающему; есть случаи когда наоборот, нужно ограничить круг клиентов. Последний случай более подходит для кода, написанного тобой, первый - для стандартных библиотек.

ОК! smile

Цитата(Domestic @ 2.4.2005, 01:12)
Такша давай заканчивать, а то я спать хочу, третий час ночи smile

Ок smile Интересно, мне всю ночь будет синглетон прячущий инстанс за пазуху и смотрящий жалобными глазами на другие классы, будет сниться? smile

Это сообщение отредактировал(а) chipset - 2.4.2005, 12:40


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 03:15)
смотрящий жалобными глазами

Нет, скорее "смотрящий жабными глазами" smile


--------------------

PM   Вверх
np9mi7
Дата 2.4.2005, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
Предполагать, что всем классам понадобится ОДИН логгер, неправильно. Возможно, им понадобится один и тот же логгер, возможно - несколько разных. Потому здесь скорее подойдет паттерн Фабрика, чем синглтон.
, хотел спросить, а как они определяют какой им ЛОГ нужен? Или это определяется кем то внешним?

Если самому клиенту пофиг куда писать свой ЛОГ, то тогда имеет смысл чтоб ЛОГ настраивал кто - то другой, а клиент общался с ним через единый интерфейс.

Если ЛОГ синглтон, то тогда он действительно ОДИН, и все будут писать только в него, если необходимо предусмотреть возможность нескольких ЛОГов, то, на мой взгляд, можно применить паттерн: STRATEGY (описан в банде четырех).

Но опять, нужно смотреть от задачи. Если хочеться несколько ЛОГов, то можно так, если он один, то можно и синглтон, типа одно место куда я сливаю все что произошло. Но и в том и другом случае, на мой взгляд, клиенту совершенно не нужно знать про особености ЛОГов, те должен быть один интерфейс.

Ну например: в случае простого win nt сервиса, можно использовать синглтон, те один ЛОГ который пишет в Aplitation Event, в случае мего сетевого приложения, который должен определять, что за ошибка, кого уведомить, то тут уместен паттерн STRATEGY.

А вы как считаете?

Цитата
Есть случаи, когда хорошо дать ссылку на синглтон любому желающему; есть случаи когда наоборот, нужно ограничить круг клиентов. Последний случай более подходит для кода, написанного тобой, первый - для стандартных библиотек.
, интересно посмотреть на реализацию этого ограничения на с++, если метод getInstance() открыт. че приватом делать и рожать друзей? или я чего не понимаю smile


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 2.4.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(np9mi7 @ 2.4.2005, 03:07)
Если самому клиенту пофиг куда писать свой ЛОГ, то тогда имеет смысл чтоб ЛОГ настраивал кто - то другой, а клиент общался с ним через единый интерфейс.

Он настраивается при инициализации.. smile
Цитата(np9mi7 @ 2.4.2005, 03:07)
, интересно посмотреть на реализацию этого ограничения на с++, если метод getInstance() открыт. че приватом делать и рожать друзей? или я чего не понимаю smile

Ну за што мы тут такой флейм развели smile
Просто у Кота такая реализация getInstance:
Код

  public static Singleton getInstance()
    {
        if (instance == null) 
               instance = new Singleton();
        else return null;
        return instance;
    }

Таким образом, он возвращает линк только один раз и создается тут же.. Во-второй, третий, N-ый раз возвращается null. Гемморой заключается в бережном хранении линка и передаче его только "избранным".
ЗЫ. А у меня уже.. хотя нет, ещё 4 утра smile

Это сообщение отредактировал(а) chipset - 2.4.2005, 14:33


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
np9mi7
Дата 2.4.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
Он настраивается при инициализации.. smile

ты наверное это имеешь ввиду
Код

instance = new Singleton();
, а что если LOG - ов , как писал Domestic Cat, может быть много??? Тогда вероятно таким макаром тебе придеться либо наражать много синглтонов разных видов, которые и будут настраиваться через инициализацию поскольку вот такая штука уже работать не будет:
Код

class LOG 
{
          
            public:
                       virtual bool 2Log() = 0;
};
class txt : public LOG
{
            public:
                      virtual bool 2Log();
};

и ты не сможешь создать
Код

instance = new LOG();
, он же абстракный! Тогда, лучше говорю использовать STRATEGY вместо синглтон!


ps че хоть пытаемся решить smile


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 2.4.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(np9mi7 @ 2.4.2005, 06:23)
, а что если LOG - ов , как писал Domestic Cat, может быть много???

По моей версии, может быть много ФАЙЛОВ или консолей, или ещё чего-нибудь, но они все хранятся как аутпуты Log'a. Это не та задача что мы решаем, кстати.

Цитата(np9mi7 @ 2.4.2005, 06:23)
ps че хоть пытаемся решить smile

Пытаемся разобраться, что лучше:
а) Возвращать указатель на синглетон через getInstance всё время.
б) Возвращать только первый раз, потом передавать ссылку только избранным.
ЗЫ. У меня уже 7 часов.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
np9mi7
Дата 2.4.2005, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
но они все хранятся как аутпуты Log'a
, это как, код, хоть чуть чуть smile


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 2.4.2005, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(np9mi7 @ 2.4.2005, 06:58)
это как, код, хоть чуть чуть smile

Просто map<fstream,fileid>, в простейшем варианте..



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 2.4.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 08:29)
По моей версии, может быть много ФАЙЛОВ или консолей, или ещё чего-нибудь, но они все хранятся как аутпуты Log'a. Это не та задача что мы решаем, кстати.


Чипсет, иметь один логгер плохо, потому, что это плохо smile Во-первых, он будет содержать в себе логику работы с файлами, сокетами, консолью и еще бог знает чем, а это напрямую нарушает SRP. Во-вторых, логгер обычно настраивают на вывод определеноого типа мессаг, например, я хочу писать в лог файл только все, что выше SEVERE, а в консоль выводить начиная с INFO. У тебя не класс, а монстр получится.


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 09:44)
Чипсет, иметь один логгер плохо, потому, что это плохо smile

Логично smile
Ок, но зачем тебе два класса Keyboard, Display? smile


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 05:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 20:30)
Ок, но зачем тебе два класса Keyboard, Display? smile

А мне они триста лет не надо smile
Что ты хочешь сказать?


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 18:41)
Что ты хочешь сказать?

Я хочу сказать что одни разработчики вменяют в понятие синглетона одно, другие разработчики другое.. Твой синглетон совсем не соответствует Александреску, потом как он не глобален, зато он соответствует GoF.
Покажи мне плз причину плохости Александресковской архитектуры.

Это сообщение отредактировал(а) chipset - 3.4.2005, 05:48


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 20:47)
Я хочу сказать что одни разработчики вменяют в понятие синглетона одно, другие разработчики другое.. Твой синглетон совсем не соответствует Александреску, потом как он не глобален, зато он соответствует GoF.
Покажи мне плз причину плохости Александресковской архитектуры.


Цитата(Domestic @ 2.4.2005, 01:23)
Синглтон не сделан раз и навсегда; делать его можно как хочешь, под твои нужды. Если многим классам нужна ссылка на объект синглтона, - пожалуйста, делай так.




--------------------

PM   Вверх
chipset
Дата 3.4.2005, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Я всё понимаю smile
Мне просто хочется узнать, почему ты делаешь именно так, и какие преимущества Гофовского синглетона.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



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


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Обьясни чем смертельно что:

Цитата(Domestic @ 2.4.2005, 19:00)
кто-то попытался вызвать getInstance два раза до вызова dispose.

Гораздо безгемморойнее получать инстанс отовсюду чем переносить его как лишний параметр через функцию.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 21:09)
Гораздо безгемморойнее получать инстанс отовсюду чем переносить его как лишний параметр через функцию.


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


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Итак, у нас есть два варианта:
1) Пусть синглетон кто хочет во всем приложении тот и получает.
2) Доступ к синглетону имеет только один(два, три, четыре, неважно) избранный класс который его и допрашивает.
Вероятно, что в первом варианте имеют место быть полностью глобальные классы, такие как: Application, Keyboard, Game, при этом очень высока вероятность того что придет В. Пупкин и напишет ещё десяток классов которые будут заюзывать переменные и функции расположенные в этих классах.
Во-втором варианте, вероятно что более подходят классы к которым обращаются только определенное (постоянное!) количество классов, такие как: Logger, чё там ещё?
Опять-же, всё зависит полностью от архитектуры приложения.
Насчёт архитектуры приложения у меня вопросов больше нету, всё говорит нелюбовь к глобальным переменным.
Agreed?


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Я бы скорее сказал так.
Случай 1 (когда getInstance возвращает ссылку всегда) весьма напоминает (интерфейсом) другие паттерны, ту же фабрику, стейт или стратегию. В Java например, абстрактный класс NumberFormat имеет такие методы, которые тем не менее, возвращают ссылку не на синглтон, а ссылки на новые объекты класса DecimalFormat; и это далеко не единственный случай. Потому сам по себе интерфейс синглтона нисколько не говорит о том, что он синглтон. Программер Петя может, взглянув на паблик методы такого класса, пользоваться getInstance как обычным методом-фабрикой, считая, что он с каждым вызовом создает новый объект.
Тогда в рантайме что будет проишодить, неясно - зависит от самого синглтона и от кода Пети. Возможно, тем самым он введет баг, который выловить будет очень сложно, так как ошибка логическая.
Во втором варианте, возвращающем нул или бросающем иксепшн, такого не произойдет, ибо Петя сразу же получит скажем, иксепшн "Singleton method getInstance can be called only once".

Поэтому, пользоваться первым вариантом можно, если то, что думает Петя о синглтоне (считает, что это обычный класс или нет), неважно. Тот же простой логгер, реализованный как синглтон, вполне сработает в обеих случаях.


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 19:43)
Потому сам по себе интерфейс синглтона нисколько не говорит о том, что он синглтон.

Защищеный конструктор+метод instance применяется в других паттернах?



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 07:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 22:01)
Защищеный конструктор+метод instance применяется в других паттернах?

А если класс абстрактный ? ;)


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 20:05)
А если класс абстрактный ? ;)

Класс считается абстрактным если у него есть хоть одна виртуальная функция (в С++), поэтому причем тут защищеный конструктор я не догоню smile


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 22:14)
Класс считается абстрактным если у него есть хоть одна виртуальная функция (в С++), поэтому причем тут защищеный конструктор я не догоню smile


Дык я в курсе. Просто все равно ведь может быть конструктор, даже у абстрактного класса. Кстати, тогда его делают чаще всего протектед, чтобы сабклассы моглу к нему обратиться. Такшта похоже весьма.


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 20:19)
Кстати, тогда его делают чаще всего протектед, чтобы сабклассы моглу к нему обратиться.

А зачем его вообще прятать? Класс то все равно не создастся..


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 22:25)
А зачем его вообще прятать? Класс то все равно не создастся..

Энкапсуляция - дело хорошее, даже в этом случае.


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 20:26)
Энкапсуляция - дело хорошее, даже в этом случае.

Энкапсуляция это когда пользователь класса не подозревает о его содержимом, если я не ошибаюсь. Причем энкапсуляция к прятанию элемента интерфейса: конструктора?

Это сообщение отредактировал(а) chipset - 3.4.2005, 08:03


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 23:03)
Энкапсуляция это когда пользователь класса не подозревает о его содержимом, если я не ошибаюсь. Причем энкапсуляция к прятанию элемента интерфейса: конструктора?


Ты хочешь сказать, что декларация метода как протектед или приват не есть инкапсуляция? smile


--------------------

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



После всего прочитанного, хочеться задать один вопрос:

Что такое СИНГЛТОН?


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 3.4.2005, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 21:05)
Ты хочешь сказать, что декларация метода как протектед или приват не есть инкапсуляция? smile

Нет конечно.
Просто смысла от хоть какой-либо возни с конструктором в абстрактном классе очень мало. Кроме того, разве можно спутать абстрактный класс с синглетоном?
Добавлено @ 08:12
Цитата(np9mi7 @ 2.4.2005, 21:08)
Что такое СИНГЛТОН?

Цитата(Modern)
Описание шаблона Singleton в книге Gamma et al(1995) весьма просто: "Шаблон гарантирует, что класс имеет только один экземпляр и обеспечивает глобальный доступ к нему".

С другой стороны, в той же Modern C++ Design:
Цитата
"Оптимальной реализации синглетона не существует. В зависимости от конкретной задачи наилучшими оказываются различные реализации, включая машинно-зависимые.



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 23:08)
Просто смысла от хоть какой-либо возни с конструктором в абстрактном классе очень мало. Кроме того, разве можно спутать абстрактный класс с синглетоном?


Если его писал ты, то нет. А если не ты, то тока так.


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 21:13)
Если его писал ты, то нет. А если не ты, то тока так.

Ок. Предположим имееца какой-то абстрактный класс: Something. У него конструктор в защищеной секции.
Что делает В. Пупкин добавляя класс использующий этот Something в проект? Вызывает Something::instance чтобы получить его, вот так:
Код

foo::instance();

Даже если instance будет невиртуальной, статической и вообще будет в классе, компилятор огрызнётся:
Цитата
cannot instantiate abstract class



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Не пойму, ты к чему ведешь smile


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 21:22)
Не пойму, ты к чему ведешь smile

К тому что singleton трудно спутать с другими шаблонами.

Это сообщение отредактировал(а) chipset - 3.4.2005, 08:26


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
DerLaM
Дата 3.4.2005, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет!
Извините но у меня вопрос не по теме!
Скажите пожалуйста реально ли изучить с++ (с нуля) за 2 месяца, для того чтобы хотябы научиться делать простую записную книжку?
P.S. Простите за флуд но моя скорость (10 кб/сек) не позволяет найти нужную тему smile
PM MAIL   Вверх
chipset
Дата 3.4.2005, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(DerLaM @ 2.4.2005, 21:29)
Скажите пожалуйста реально ли изучить с++ (с нуля) за 2 месяца, для того чтобы хотябы научиться делать простую записную книжку?

Зависит от тебя smile

Цитата(DerLaM @ 2.4.2005, 21:29)
P.S. Простите за флуд но моя скорость (10 кб/сек) не позволяет найти нужную тему smile

Давай я тему разделю?


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(chipset @ 2.4.2005, 23:25)
К тому что singleton трудно спутать с другими шаблонами.

паттернами то есть.
Спутать легко. Если ты не читаешь документацию от корки до корки, или она просто плохая. А часто ты изучаешь сорцы всех чужих библиотек? Вот потому и легко.


--------------------

PM   Вверх
np9mi7
  Дата 3.4.2005, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



НУ
chipset, так то реализация, а то сематника смысл! ОБЪЕКТ СУЩЕСТВУЕТ ОДИН! И все тут, а не доступ к нему один! В этом и есть смысл!

Хочешь мультитрейд? Создавай! Но опять этот менеджер, если он синглтон тоже ОДИН, а как ты там им управляешь это все уже другие вопросы!

Если используешь библиотеку Loki, то там синглтон обертывается в спец. шаблон и создается один экзкмпляр в глобольной/статической области памяти! Каким боком это класс в синглтоне непонятно, потому как он ОДИН (а это главная задача шаблона) а доступ к нему ты можешь сам разрулить без всякого instance() а методами самого класса в обертке!

Цитата
Просто смысла от хоть какой-либо возни с конструктором в абстрактном классе очень мало. Кроме того, разве можно спутать абстрактный класс с синглетоном?
А почему нет? Он может определять единый интерфейс, а быть на самом деле одним объектом из иерархии... (как ты писал, опр. при создании).

Зачем прятать конструктор абстрактного класса? (те объекта у этого класса нет, он опр только единый интерфейс)

Он вызывается при создании потомка. Ну так даже если его закроешь то все равно он будет вызываться. Если его писал не ты, зачем его закрывать? Яж его использовать буду только после наследования от него.... Создать экз. все равно не получиться....

Ну скорее всего это просто дело вкуса... smile

ps может имеет смысл как то разделять темы? А то все свалено в кучу.... Может создать таких мега постов штук так пять и вообще обсудить ООП? И паттерны? А?

Это сообщение отредактировал(а) np9mi7 - 3.4.2005, 08:41


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 3.4.2005, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 21:39)
Спутать легко. Если ты не читаешь документацию от корки до корки, или она просто плохая. А часто ты изучаешь сорцы всех чужих библиотек? Вот потому и легко.

Код спутывания в студию! smile
Цитата(np9mi7 @ 2.4.2005, 21:40)
а доступ к нему ты можешь сам разрулить без всякого instance() а методами самого класса в обертке!

Он же в private.
Цитата(np9mi7 @ 2.4.2005, 21:40)
А почему нет? Он может определять единый интерфейс, а быть на самом деле одним объектом из иерархии... (как ты писал, опр. при создании).

В плане? Он же не может инстанциироваться ибо абстрактный.
Цитата(np9mi7 @ 2.4.2005, 21:40)
ps может имеет смысл как то разделять темы?

Смысл темы довольно широкий, и мы иногда вихляем в другие стороны но только ради изучения корневой темы.
Цитата(np9mi7 @ 2.4.2005, 21:40)
Зачем прятать конструктор абстрактного класса? (те объекта у этого класса нет, он опр только единый интерфейс)

Чтобы не мешался;)

Это сообщение отредактировал(а) chipset - 3.4.2005, 08:50


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
np9mi7
  Дата 3.4.2005, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
Он же в private.
, а instance() что тебе возвращает? Ссылку на объект? Указатель? (ну копию он врятли вернет так как он ОДИН).

Ну бери ссылку на объект и пытайся вызвать метод, а он тебе сам там:

я занят;
используй меня так хочешь и все тут.

Сам грек для мультитрейда вообще выделяет отдельную стратегию каторая и влияет на метод instance()...

Как вы собирались разным классам запр. использовать ЛОГ? Непонятно зачем? Если код тв пишешь своими руками то просто не используй его и все! Раз он тебе не нужен. Как со стороны сервиса ЛОГа это запретить? Я не понимаю?

Это сообщение отредактировал(а) np9mi7 - 3.4.2005, 09:10


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 3.4.2005, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(np9mi7 @ 2.4.2005, 22:06)
, а instance() что тебе возвращает? Ссылку на объект? Указатель? (ну копию он врятли вернет так как он ОДИН).

Указатель по Александреско на его интерфейс, и?
Цитата(np9mi7 @ 2.4.2005, 22:06)
Как вы собирались разным классам запр. использовать ЛОГ?

Во-первых, это Котъ smile
Во-вторых, просто не давать им линк.
В-третьих, в моем понятии логгер-синглетон должен ловить эксепшны летящие со всего приложения, преобразовывать их в нормальный вид и логить.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
np9mi7
  Дата 3.4.2005, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
Указатель по Александреско на его интерфейс, и?
, по греку ссылка а не указатель. Да и черт с ним, получил интерфейс а объект сам тебе даст или не даст им пользоваться в зависимости от состояния.

Цитата
В-третьих, в моем понятии логгер-синглетон должен ловить эксепшны летящие со всего приложения, преобразовывать их в нормальный вид и логить.
, ну ты поймаешь эксепшен и начнешь его обрабатывать и все. А где тут давать использовать не довать использовать? Непонимаю... smile

Цитата
Во-вторых, просто не давать им линк.
, зачем? Код пишешь ты smile Ну не используй его, а когда нужно не используй. то что получиться что то типа этого уродства:

Код

#include "log_single.h"
// ---------------------------------------------------------
class MEGA_EX
{
    std::string    m_msg;
    public:
        MEGA_EX (const std::string& msg)
        {
            m_msg = msg;
        }
        bool process()
        {
            if(LOG::getInstance())        // если ты мне дал то я все сделаю
            {
                LOG::getInstance()->toLOG(m_msg);
                return true;
            }
            return false;
        }
};
bool MEGA_FUNC () throw (MEGA_EX)
{
    throw MEGA_EX ("shit!");
}
// ---------------------------------------------------------
    
void f()
{
    // ---------------------------------------------------------
    try
    {
        MEGA_FUNC();
    }
    catch(MEGA_EX ex)
    {
        ex.process();
    }
    // ---------------------------------------------------------
}


Это сообщение отредактировал(а) np9mi7 - 3.4.2005, 09:51


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 3.4.2005, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(np9mi7 @ 2.4.2005, 22:37)
, по греку ссылка а не указатель. Да и черт с ним, получил интерфейс а объект сам тебе даст или не даст им пользоваться в зависимости от состояния.

Блин, я это говорил а Кот как раз за противоположную точку зрения smile
Ну да ладно, не впервой.
В общем принцип такой: те кто не должен - не должны получать линк.

Цитата(np9mi7 @ 2.4.2005, 22:37)
, ну ты поймаешь эксепшен и начнешь его обрабатывать и все. А где тут давать использовать не довать использовать? Непонимаю... smile

Тут есть два принципа просто:
1) Каждый класс сам ловит свои исключения и вызывает логгера чтобы добавить туда иксепшн.
2) Глобальный логгер сам ловит исключения.
Цитата(np9mi7 @ 2.4.2005, 22:37)
, зачем? Код пишешь ты...


Нет.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
np9mi7
Дата 3.4.2005, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
Каждый класс сам ловит свои исключения и вызывает логгера чтобы добавить туда иксепшн.
, пусть ошибка обр. методом ошибки!
Код

class EX
{
    std::string    m_msg;
    //------------------------------------------------------
    protected:
        EX (const std::string& msg){m_msg = msg;} // ну раз хочеться....:-)
    public:
        virtual bool process() = 0;
};

сама реализация обработчика будет использовать тот или иной ЛОГ, а клиент ловит ошибку и вызавает обр. и ничего незнает про ЛОГ.

Как тебе это smile


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
chipset
Дата 3.4.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(np9mi7 @ 2.4.2005, 22:58)
сама реализация обработчика будет использовать тот или иной ЛОГ, а клиент ловит ошибку и вызавает обр. и ничего незнает про ЛОГ.

Ок, но мы ща про паттерны smile


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
np9mi7
Дата 3.4.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
Ок, но мы ща про паттерны smile
, угу smile


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Domestic Cat
Дата 3.4.2005, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Вот нафлудили, чуть отошел - сразу про какой-то С++, ЛОГ... smile


--------------------

PM   Вверх
chipset
Дата 3.4.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Domestic @ 2.4.2005, 23:02)
Вот нафлудили, чуть отошел - сразу про какой-то С++, ЛОГ... smile

Спокойствие, только спокойствие© Карлсон.
Усё под контролем.
Что у нас осталось невыясненным насчёт синглетона?


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
np9mi7
Дата 3.4.2005, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
Что у нас осталось невыясненным насчёт синглетона?
, наверное сам синглтон (я правильно пишу синглетон это на англ. singleton) не ожидал такого....
НУ да ладно, как насчет статьи в FAQ?


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Fire-Plug
Дата 3.4.2005, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Domestic @ 2.4.2005, 09:59)
С этой ссылкой никто не мешает ничего делать - можешь хоть пятьдесят раз ее скопировать.

Это может на Яве принято копировать ссылки. Особенно удобно копировать их делать между объектами разных классов.
Нахрена мне копировать ссылку? С какой целью? Первый вызов ф-ции Instance() создает объект и возвращает его ссылку или указатель. Все остальные вызовы Instance() получают ссылку или указатель на уже готовый объект. Ссылку можно скопировать в некоей локальной области видимости, где предполагается часто использовать объект, чтобы не вызывать Instance() многократно, но это дело вкуса, а не принципа. След. цитата раскрывает причины такого подхода:
Цитата(Domestic @ 2.4.2005, 10:23)
но лучше всего спроектировать так, чтобы синглтон был нужен одному классу

А вот это уже х*рня!!!! Ты где таких архитектурных принципов нахватался? Мне чтобы весь тот bullshit разгребать, к-рый ты авторитетно на голову публики сыплешь, рабочей недели не хватит.
Ты вообще похоже не врубаешься нахрена синглтон нужен. Например, класс реализующий сист. реестр, сист. часы и т.д. и т.п. Ты что, предлагаешь доступ, например, к объекту сист. реестра позволять в строго одном классе-клиенте и больше не моги? Или скажем DB-connection?
Одному отдельно взятому классу синглтон и н*хер не нужен. Достаточно статического члена или статическим указателя-члена, чтобы последний экземпляр объекта-клиента удалил этот единственный эксемпляр.
Кроме того, если некий класс нужен только какому-то одному классу, то этот первый класс можно вообще положить вместе с его объявлением в cpp-файл для класса-клиента и никакая другая зараза даже не узнает, что такой класс существует, т.к. он невидим для остального кода.
"Создать объект обычным образом"- имелось в виду, например, на стеке в блоке: создал, тут же заюзал, а на выходе из блока он сам помер. Не нужна никакакая специальная техники вроде статического указателя, живущего для "мертвого" уже объекта до конца приложения . Этот мертвый указатель или что еще хуже статич. переменная класса - особенно при многократном использовании подобной "техники" - это и есть потеря ресурсов.
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
chipset
Дата 3.4.2005, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Fire @ 2.4.2005, 23:39)
А вот это уже х*рня!!!! Ты где таких архитектурных принципов нахватался? Мне чтобы весь тот bullshit разгребать, к-рый ты авторитетно на голову публики сыплешь, рабочей недели не хватит.
Ты вообще похоже не врубаешься нахрена синглтон нужен.


 ! 
 
Спокойно, ведите аргументированный спор, пожалуйста.
Иначе пойдут баны.

Добавлено @ 10:46
Цитата(Fire @ 2.4.2005, 23:39)
Ты вообще похоже не врубаешься нахрена синглтон нужен.

По вашему мнению, люди из GoF(откуда Кот взял код) полное ламо?

Цитата(Fire @ 2.4.2005, 23:39)
Одному отдельно взятому классу синглтон и н*хер не нужен.

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

Это сообщение отредактировал(а) chipset - 3.4.2005, 10:48


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Fire @ 3.4.2005, 01:39)
Это может на Яве принято копировать ссылки. Особенно удобно копировать их делать между объектами разных классов.


smile Ну попробуй...

Цитата(Fire @ 3.4.2005, 01:39)
А вот это уже х*рня!!!! Ты где таких архитектурных принципов нахватался? Мне чтобы весь тот bullshit разгребать, к-рый ты авторитетно на голову публики сыплешь, рабочей недели не хватит.


smile smile smile Бедняги ГоФ и Купер... Пришел Fire-Plug и их опустил... Ржунимагу...


Цитата(Fire @ 3.4.2005, 01:39)
Одному отдельно взятому классу синглтон и н*хер не нужен.


Вау! А двум значит нужен??? smile smile
Цитата(Fire @ 3.4.2005, 01:39)
Кроме того, если некий класс нужен только какому-то одному классу, то этот первый класс можно вообще положить вместе с его объявлением в cpp-файл для класса-клиента и никакая другая зараза даже не узнает, что такой класс существует, т.к. он невидим для остального кода.


Ха, а реюзабилити и модульность - для просто так штоль?


Цитата(Fire @ 3.4.2005, 01:39)
"Создать объект обычным образом"- имелось в виду, например, на стеке в блоке: создал, тут же заюзал, а на выходе из блока он сам помер. Не нужна никакакая специальная техники вроде статического указателя, живущего для "мертвого" уже объекта до конца приложения .

С какой стати он должен жить для "мертвого объекта"?

Короче, уважаемый, еще раз в таком тоне позвольшь вести разговор - забаню.


--------------------

PM   Вверх
Fire-Plug
Дата 3.4.2005, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Domestic @ 2.4.2005, 09:59)
Когда клиент вызывает этот метод, он ожидает, что уникальный объект будет создан. Потому, если метод вызван два раза, то в таком контексте это скорее будет означать баг.
Не вижу никаких противоречий ни с кем.

Кто сказал, что вызывать метод Instance() 2, 3,...,N раз есть "скорее всего" ошибка? Это что, GoF такой принцип вводит и на нем категорически настаивает? Уникальный объект создается однажды. Ссылки можно получать сколько угодно раз покуда нужно с помощью одной и той же ф-ции, к-рая кстати и реализует принцип глобальной точки доступа, а не скопированная кудо-то ссылка, к-рая сама по себе уж точно локальный объект в некоей области видимости.
Цитата(Domestic @ 2.4.2005, 10:23)
Но ИМО, чем большему количеству классов нужна ссылка, тем хуже дизайн.

Не следует путать божий дар с яичницей. А именно яичницу из разных классов, реализующих разные функциональные аспекты приложения с нек-рыми сервисами общего назначения для всего приложения. Именно такие сервисы в кач-ве примеров и приводит Александреску и именно к таким сервисам должен быть обеспечен глобальный доступ из любого места приложения. Именно это и есть архитектурный принцип синглтона, а всё остальные попытки ревизии или недопонимания - просто bullshit.
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
Domestic Cat
Дата 3.4.2005, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Fire @ 3.4.2005, 02:02)
Кто сказал, что вызывать метод Instance() 2, 3,...,N раз есть "скорее всего" ошибка? Это что, GoF такой принцип вводит и на нем категорически настаивает? Уникальный объект создается однажды. Ссылки можно получать сколько угодно раз покуда нужно с помощью одной и той же ф-ции, к-рая кстати и реализует принцип глобальной точки доступа, а не скопированная кудо-то ссылка, к-рая сама по себе уж точно локальный объект в некоей области видимости.

Перечитай то, что написано на предыдущих страницах.

Цитата(Fire @ 3.4.2005, 02:02)
Не следует путать божий дар с яичницей. А именно яичницу из разных классов, реализующих разные функциональные аспекты приложения с нек-рыми сервисами общего назначения для всего приложения. Именно такие сервисы в кач-ве примеров и приводит Александреску и именно к таким сервисам должен быть обеспечен глобальный доступ из любого места приложения. Именно это и есть архитектурный принцип синглтона, а всё остальные попытки ревизии или недопонимания - просто bullshit.

Поздравляю с открытием истинного "архитектурного принципа синглтона". smile smile smile


--------------------

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


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Fire @ 3.4.2005, 00:02)
Именно такие сервисы в кач-ве примеров и приводит Александреску и именно к таким сервисам должен быть обеспечен глобальный доступ из любого места приложения. Именно это и есть архитектурный принцип синглтона, а всё остальные попытки ревизии или недопонимания - просто bullshit.

Говорят же.. Александреску не коммитет по стандартизации синглетонов.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Fire-Plug
Дата 3.4.2005, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Domestic @ 3.4.2005, 11:01)
Цитата (Fire-Plug @ 3.4.2005, 01:39)
"Создать объект обычным образом"- имелось в виду, например, на стеке в блоке: создал, тут же заюзал, а на выходе из блока он сам помер. Не нужна никакакая специальная техники вроде статического указателя, живущего для "мертвого" уже объекта до конца приложения .


С какой стати он должен жить для "мертвого объекта"?

Почитай определение статической переменной, особенно в части о времени её жизни и сразу поймешь.

Цитата(Domestic @ 3.4.2005, 11:01)

Короче, уважаемый, еще раз в таком тоне позвольшь вести разговор - забаню.


Ну, давай, если других аргументов нет кроме эклектических выкрутасов.

Цитата(Domestic @ 3.4.2005, 11:01)
Ха, а реюзабилити и модульность - для просто так штоль?

Кому нужна такая реюзабилити и отдельный модуль для нек-рой ограниченной реализации.
Предлагаю класс CatString - один экземпляр на одного объекта-клиента на каждый процесс.
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
Domestic Cat
Дата 3.4.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Я даже спорить не хочу. Паттерн, повторяю, не есть что-то жеско закрепленное на века великим
Fire-Plugом. Его пользуют так, как нужно в данной ситуации. По твоим постам видно, что ты этого просто не понимаешь.

Цитата(Fire @ 3.4.2005, 03:19)
Предлагаю класс CatString - один экземпляр на одного объекта-клиента на каждый процесс.

"Экземпляр" - это, я так понимаю, объект? Тогда говори как принято. Кто такой объект-клиент? При чем тут процесс, по-твоему что, процессы должны делить между собой объекты?


Цитата(Fire @ 3.4.2005, 03:19)
Почитай определение статической переменной, особенно в части о времени её жизни и сразу поймешь.

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

Цитата
эклектических

Проверь по словарю значение этого слова.




--------------------

PM   Вверх
Fire-Plug
Дата 4.4.2005, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Domestic @ 3.4.2005, 12:36)
Паттерн, повторяю, не есть что-то жеско закрепленное на века

С данным утверждением никто не спорит. Речь идет (до сих пор) о примере реализации некоторого шаблона, к-рому делается попытка присвоить название "синглтон".
Реализация ф-ции, к-рая создает экземпляр класса в таком шаблоне предлагается в след виде:
Цитата(Domesic)
 
Код

class Singleton
{
    private static Singleton instance;
    public static Singleton getInstance()
    {
        if (instance == null) 
               instance = new Singleton();
        else return null;
        return instance;
    }
...
};

Эта реализация противоречит опеределению синглтона, сформулированному GoF: "Гарантировать, что класс имеет только один экземляр и обеспечить глобальную точку доступа к нему", а именно - части определения об обеспечении глобального доступа. Покажем, что это так.
Указ. ф-ция getInstance() предоставляет ссылку на уникальный объект для объекта того класса, кто первым его запросит. Для всех остальных запросов указатель= 0. Т.о., предлагаемая конструкция не обеспечивает глобального доступа к уникальному объекту, а следовательно, данный шаблон не есть синглтон.
Предлагаемое затем решение хранить полученную ссылку в объекте нек-рого класса (т.е. локально) также притиворечит определению синглтона, а подобная практика его использования не приветствуется:
Цитата
Pattern Digest (http://patterndigest.com/patterns/Singleton.html)
6. Clients access the singleton by calling the static instance function to get a reference to the single instance and then using it to call other methods.
7. Clients must not store this instance reference -- Each code segment that needs to access the singleton should call the instance function, perform the work needed and then discard the reference as quickly as possible
Далее, рассуждения об ограничениях и принципах использования, высказанные в отношении как бы синглтона, таких, в частности, как ошибочность многократных запросов синглтона, к-рые есть следствие недостатков архитектурных решений, вероятных ошибок в логике приложения и т.п. - несостоятельны, т.к. речь идет не о синглтоне.
Указанная выше ф-ция getInstance() реализует некий другой шаблон. Я ранее предлагал (правда, в шутку) назвать такой шаблон Унитарион.
Выводы:
1. Пример «синглтона», приведенный выше не реализует синглтон, т.к. противоречит его определению.
2. Выводы о вероятной ошибочности архитектуры и логики приложения при многократном доступе к нек-рому уникальному объекту общего назначения, созданному на основе шаблона синглтон, из разных классов и различных частей приложения – несостоятельны, т.к. речь идет не о синглтоне.
Данное замечание не рассматривает детали реализации синглтона, как решения, гарантирующего глобальный(и многократный) доступ к объекту, а только оперирует его определением.
Цитата(Domestic @ 2.4.2005, 10:44)
что бы там кто не писал про паттерны, это субъективное мнение, которое не являетя истиной в последней инстанции

Но если уже договорилсь об определении, давайте ему следовать.
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
Domestic Cat
Дата 4.4.2005, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Fire @ 3.4.2005, 22:56)
Эта реализация противоречит опеределению синглтона, сформулированному GoF: "Гарантировать, что класс имеет только один экземляр и обеспечить глобальную точку доступа к нему", а именно - части определения об обеспечении глобального доступа. Покажем, что это так.

Это свидетельствует о том, что ты не понимаешь, что значат слова "точка глобального доступа".
Например, некий ламер по имени Джеймс Даблью Купер, автор многих книг, в частности, "Паттерны в Java" и "Паттерны в C#", понимает это как точку, доступную всем, что абсолютно не значит, что получить ссылку на синглтон может любой желающий. В частности, он приводил пример с принтером - когда принтер занят, никто не может иметь доступа к нему; поэтому реализация Синглтона у Купера была именно такой (только не нул возвращался, а бросался иксепшн).
Цитата(Fire @ 3.4.2005, 22:56)
7. Clients must not store this instance reference -- Each code segment that needs to access the singleton should call the instance function, perform the work needed and then discard the reference as quickly as possible

Это мнение одного человека непонятно для какого случая.


Цитата(Fire @ 3.4.2005, 22:56)
Далее, рассуждения об ограничениях и принципах использования, высказанные в отношении как бы синглтона, таких, в частности, как ошибочность многократных запросов синглтона, к-рые есть следствие недостатков архитектурных решений, вероятных ошибок в логике приложения и т.п. - несостоятельны, т.к. речь идет не о синглтоне.

Обращайся к Куперу и его примерам, учи матчасть.


--------------------

PM   Вверх
Fire-Plug
Дата 4.4.2005, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Domestic @ 3.4.2005, 12:36)
в некоторых языках классы вместе с их статическими переменными могут быть выгружены из памяти...

Классы из памяти быть выгружены не могут, если только это не память разработчика.
Очевидно, есть необходимость напомнить о таком понятии как "Время жизни" переменной и его определение для статических переменных, в т.ч. для членов класса. Полагаю, что невозможность привести здесь копии сотв. раздела из хотя бы "Язык программирования С++" Страуструпа очевидна. Но необходимо напомнить, что статическая переменная-член класса - это глобальная переменная с ограниченной видимостью. Если в "некоторых языках" это не так, хотя очень сомнительно, то это проблемы самих "некоторых языков" в интерпретации глобальных переменных (Что, снова придется обращаться к определениям, инвариантным относительно конкретного языка?)
И кроме того, нечего вводить в заблуждение аудиторию, предлагая решение на «нек-ром языке», где соглашение о времени жизни статических переменных (возможно) иное, чем в С++, из-за чего эффект от применения подобного решения в С++ будет совершенно другим.
ЗЫ: Здесь вообще-то форум по С++.

--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
Domestic Cat
Дата 4.4.2005, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Fire @ 3.4.2005, 23:24)
Классы из памяти быть выгружены не могут, если только это не память разработчика.

Зря обижаешь разработчика и его память
http://portal.acm.org/citation.cfm?id=609742.609750


Цитата(Fire @ 3.4.2005, 23:24)
И кроме того, нечего вводить в заблуждение аудиторию, предлагая решение на «нек-ром языке», где соглашение о времени жизни статических переменных (возможно) иное, чем в С++, из-за чего эффект от применения подобного решения в С++ будет совершенно другим.

Никто никого в заблуждение не вводил.


Цитата(Fire @ 3.4.2005, 23:24)
ЗЫ: Здесь вообще-то форум по С++.

А я вижу, не слепой.


--------------------

PM   Вверх
Fire-Plug
Дата 4.4.2005, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Domestic @ 4.4.2005, 08:07)
когда принтер занят, никто не может иметь доступа к нему; поэтому реализация Синглтона у Купера была именно такой (только не нул возвращался, а бросался иксепшн).

Пример чрезвычайно плохохо Use case, архитектуры и никуда ни годного решения. Доступ в очередь к принтеру, а не к самому устройству, должен быть глобальным, а менеджер обслуживающий очередь и работающий с конкретным устройством, должен разрешать некритические ситуации, когда принтер выполняет текущее задание. Единственная ситауция, когда необходимо уведомить юзера и, быть может, отменить задание - проблема технического характера (нет связи с принтером, закончился картриж и т.д. и т.п.). Как на самом деле и реализовано. Так что поищи пример получше. Этот - слишком примитивный.
Кстати, по твоему однократному объекту - не приведено ни одного весомого примера, только общие рассуждения типа "если бы да кабы".
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
chipset
Дата 4.4.2005, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Позвольте влезть в вашу высокопрофессиональную беседу.
Цитата(Domestic @ 3.4.2005, 22:07)
Например, некий ламер по имени Джеймс Даблью Купер, автор многих книг, в частности, "Паттерны в Java" и "Паттерны в C#", понимает это как точку, доступную всем, что абсолютно не значит, что получить ссылку на синглтон может любой желающий.

Мне кажется, что если не каждый может получить синглетон, это уже автоматически означает что синглетон не доступен всем.
Цитата(Domestic @ 3.4.2005, 22:07)
Это мнение одного человека непонятно для какого случая.

Купер тоже один smile

Цитата(Fire @ 3.4.2005, 21:56)
Данное замечание не рассматривает детали реализации синглтона, как решения, гарантирующего глобальный(и многократный) доступ к объекту, а только оперирует его определением.

Что ты подразумеваешь под глобальностью?

Цитата(Fire @ 3.4.2005, 21:56)
Данное замечание не рассматривает детали реализации синглтона, как решения, гарантирующего глобальный(и многократный) доступ к объекту, а только оперирует его определением.

Многократный доступ тоже возможен, это уже обсуждалось.
Добавлено @ 08:43
Цитата(Fire @ 3.4.2005, 22:39)
Так что поищи пример получше. Этот - слишком примитивный.

Я уже приводил пример: Logger.
Ловит исключения посланные изо всех концов приложения и кладёт их в файл. Второй обьект данного класса не только бессмысленен но ещё и опасен.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Domestic Cat
Дата 4.4.2005, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Fire @ 3.4.2005, 23:39)
Пример чрезвычайно плохохо Use case, архитектуры и никуда ни годного решения. Доступ в очередь к принтеру, а не к самому устройству, должен быть глобальным, а менеджер обслуживающий очередь и работающий с конкретным устройством, должен разрешать некритические ситуации, когда принтер выполняет текущее задание. Единственная ситауция, когда необходимо уведомить юзера и, быть может, отменить задание - проблема технического характера (нет связи с принтером, закончился картриж и т.д. и т.п.). Как на самом деле и реализовано. Так что поищи пример получше. Этот - слишком примитивный.
Кстати, по твоему однократному объекту - не приведено ни одного весомого примера, только общие рассуждения типа "если бы да кабы".


С какой стати я должен тебе что-то искать? Мне этот пустой спор уже надоел, мне неохота тратить время на фипню - а именно, должен иметь синглтон строчку return null / throw new Exception или нет. Наличие этой строчки обусловлено конкретной ситуацией, но никак не общими рассуждениями. Будь у тебя опыт, ты бы это понимал. Если ты не веришь Куперу - и не ему одному, дело твое. Переубеждать не собираюсь.




--------------------

PM   Вверх
chipset
Дата 5.4.2005, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Ещё один недостаток я встретил в том, что UML не поддерживает их как stereotype smile

Это сообщение отредактировал(а) chipset - 5.4.2005, 01:32


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Fire-Plug
Дата 7.4.2005, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Domestic @ 4.4.2005, 08:07)
Это свидетельствует о том, что ты не понимаешь, что значат слова "точка глобального доступа"
Джеймс Даблью Купер, автор многих книг ... понимает это как точку, доступную всем, что абсолютно не значит, что получить ссылку на синглтон может любой желающий

Давайте не кастрировать определения в угоду Куперу. Речь идет не об абстрактной "точке глобального доступа", а глобальной точке доступа к нему, а именно - к уникальному объекту в контексте определения синглтона. Не зря, в частности, Александреску, описывая синглтон, проводит аналогию с глобальной переменной. А в смысле Купера – все знают, где дверь(т.е. доступная всем глоб. точка - адрес статич. ф-ции instance), но только один избранный узнает куда она ведет.
Цитата
- Кто там?
- Почтальон Печкин. Я вам посылку принес, только я вам ее не дам! У вас докУментов нет.

Применение шаблона Купера подразумевает наличие некоей политики для определения клиента, к-рому будет предоставлена ссылка на объект. Очевидно, что обобщенно сформулировать такую политику невозможно: она определяется только в контексте конкретной задачи. В то же время политика применения синглтона общая – всем, кто запрашивает – по аналогии с глобальной переменной.
Итак, налицо различные сценарии с различным содержанием (для синглтона – уникальность объекта; для шаблона Купера – уникальность доступа), для к-рых имеет место попытка использовать один и тот же термин. Данная ситуация нормальна?
Принцип «Как хочу, так и кручу», ведущим быть не может и не должен. Об определениях и семантике решений необходимо договариваться. В первую очередь, тем, кто публикует книги.
Цитата(Domestic @ 4.4.2005, 08:53)
Мне этот пустой спор уже надоел, мне неохота тратить время на фипню - а именно, должен иметь синглтон строчку return null / throw new Exception или нет.

Нет уж! Изволь отвечать за свои слова. Ты с видом эксперта привел обзор ряда шаблонов. В описании одного из наиболее известных, вместо объективных сведений, т.е. предоставления версии GoF, Майерса, и в т.ч. версии Купера, как имеющую иной смысл, отличный от принятого ранее, приведена точка зрения только одного автора, к-рой следуешь ты лично.
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
Domestic Cat
Дата 7.4.2005, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата(Fire @ 6.4.2005, 23:59)
Итак, налицо различные сценарии с различным содержанием (для синглтона – уникальность объекта; для шаблона Купера – уникальность доступа), для к-рых имеет место попытка использовать один и тот же термин. Данная ситуация нормальна?

Вполне. Суть в том, что существует один объект синглтона, все остальное - детали реализации.
Цитата(Fire @ 6.4.2005, 23:59)
Принцип «Как хочу, так и кручу», ведущим быть не может и не должен. Об определениях и семантике решений необходимо договариваться. В первую очередь, тем, кто публикует книги.

Вот ты этим и займись - собери Александреску, ГоФ, Купера и др, и договаривайтесь.

Цитата(Fire @ 6.4.2005, 23:59)
Нет уж! Изволь отвечать за свои слова. Ты с видом эксперта привел обзор ряда шаблонов. В описании одного из наиболее известных, вместо объективных сведений, т.е. предоставления версии GoF, Майерса, и в т.ч. версии Купера, как имеющую иной смысл, отличный от принятого ранее, приведена точка зрения только одного автора, к-рой следуешь ты лично.

Мое дело, что хочу, то и привожу.

Если ты не понял, повторяю еще раз: мне этот разговор не интересен. Мне интересно обсуждать паттерны, а не строчку в синглтоне.


--------------------

PM   Вверх
Fire-Plug
Дата 7.4.2005, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Domestic @ 4.4.2005, 08:33)
Цитата (Fire-Plug @ 3.4.2005, 23:24)
Классы из памяти быть выгружены не могут, если только это не память разработчика.

Зря обижаешь разработчика и его память
http://portal.acm.org/citation.cfm?id=609742.609750

Класс - это абстрактное понятие OOD.
Для программиста класс - это тип, определяемый пользователем (Б.Страуструп)
Для компилятора - это шаблон, по к-рому нужно сгенерировать код для создания объекта и операций над ним.
Если апологеты Явы уже выгружают из памяти классы, а не объекты - флаг им в руки. Пусть сообщат об этом Гради Бучу.
В отношении статич. переменных, в т.ч. членов-класса. Ява-код живет в искусственной среде Ява-машины, к-рая обращается с памятью по своему разумению. Если Ява имеет другое, чем С++, соглашение об их времени жизни, то нечего лезть со своим уставом в чужой монастырь. Как уже ранее упоминалось, эффект от похожих на первый взгляд реализаций в языках с различной интерпретацией времени жизни статич. переменных будет разный.

Добавлено @ 09:45
Цитата(Domestic @ 7.4.2005, 09:06)
Мне интересно обсуждать паттерны, а не строчку в синглтоне.

Ты уже обсудил, приведя субъективное мнение одного автора. С таким же успехом от тебя можно ожидать и других "обсуждений". За подобный "обзор" соискатели обычно получают 3.14-зделей и от руководителей, и от оппонентов и от коллег.
Мне лично уже тоже надоело иметь дело с носорогом. Period
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
chipset
Дата 7.4.2005, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Fire @ 6.4.2005, 23:36)
Ты уже обсудил, приведя субъективное мнение одного автора. С таким же успехом от тебя можно ожидать и других "обсуждений".

Ну а ты разве не привел субьективное мнение Александреску и GoF'a?
Синглетон - он всегда синглетон, если его имеется один экземпляр и к нему имеется глобальный доступ.
Ещё раз повторяю: глобальность - понятие растяжимое.
Детали реализации определяются в зависимости от задачи и это не повод к тому чтобы ругаться и спорить тут, и тем более оскорблять других участников.

 ! 
 
Тем более что я уже предупреждал. Если нету никаких разумных аргументов в ход идут личные высказывания, но это недопустимо, по-крайней мере здесь.



Это сообщение отредактировал(а) chipset - 7.4.2005, 09:58


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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