Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0935 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


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

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