![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
||
|
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Паттерны проектирования - готовые элементы дизайна архитектуры программы, из которых дизайнер получает возможность строить программы как-бы блоками. Пример паттерна: паттерн синглетон это, если я правильно помню, класс которого всегда имеется только один обьект во всей программе. Более подробно их описывает Domestic Cat здесь, ну а настоящий классик - Александреску со своим Modern C++ Design.
ИМХО, весьма удобная штука, заюзываю их... Ко всему прочему, облегчает общение нескольких программеров между собой вводя некого рода словарь ![]() Выкладываем свои мнения ![]() --------------------
|
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Ты это... неправ ![]() -------------------- |
|||
|
||||
Fire-Plug |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Это правда, но читать Александреску намного легче, чем Гамму со товорищи... ![]() --------------------
Объясни другому - поймешь сам (Народная примета) |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Domestic Cat, то разве не для Java?
![]() Это сообщение отредактировал(а) chipset - 31.3.2005, 08:35 --------------------
|
|||
|
||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Domestic Cat привел паттерн как раз из банды четырех, а Александреску посмотрел на проблему намного шире... по сути,
|
|||
|
||||
Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Если она была издана в 1995 году, то какая Java? ![]()
Ну создай мне хотя бы пару объектов, потом посмотрим... -------------------- |
||||
|
|||||
Fire-Plug |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Объект-то один, да вот доступиться к нему можно только однажды. Почему?
Да потому, что это не ф-ция-создатель, а просто катастрофа! Только один раз ссылку на instance возвращает, а то всё время null! Будет вам GPF(exception 0x00000005) вместо синглтона или Ява-машина все исключительные ситуации перехватывет? Этот оператор:
надо для для врагов оставить и описать как принципиальную особенность Ява-реализации синглтона. А у Александреску, кстати, в примере реализации синглтона им. Скотта Мэйерса - деструктор private. Что будет при компиляции? --------------------
Объясни другому - поймешь сам (Народная примета) |
||||||||
|
|||||||||
chipset |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Я не уверен, но вроде бы.. Синглетон, как я его представляю:
Тогда придется все переменные обьявлять статичными. Это сообщение отредактировал(а) chipset - 31.3.2005, 09:27 --------------------
|
||||||||
|
|||||||||
Fire-Plug |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Как, неужели, все методы статичны? Дык такой паттерн имеет совсем другое название и по инициативе того же Скотта Мэйерса назван монотип, т.к. все члены могут быть тоже только статичны. А как же single-то, если объектов много? Как-то нелогично. Стоит ли тогда паттерн городить да ещё книжки заумные писать? Вот к примеру:
ЗЫ: Может ты фабрику объектов имеешь в виду? --------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Вообще-то зависит все от того, какой синглтон нужен. Можно на все запросы возвращать ссылку на один и тот же объект, можно дать доступ один раз, как в приведенном выше случае. Никаких иксепшнов тут не будет, если клиент попросил синглтон однажды. Чаще всего, если синглтон просят два раза - это сигнал бага в коде, потому лучше вернуть на такой запрос null или напрямую бросить иксепшн - легко дебаггить будет. -------------------- |
|||
|
||||
np9mi7 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
а что если нужны параметры при конструировании... да ладно ладно, если синглтон - это объект который на протежении всей жизни только один, то тогда это решение вполне удовлетворительно (хоте не мне это говорить).... Говорю Александреску всю эту тему развил до более общего понятия. Domestic Cat, согласись что у грека он намного более функционален? Ладно, это вопрос вкуса ![]()
Это сообщение отредактировал(а) np9mi7 - 31.3.2005, 09:41 |
||||
|
|||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Функция initialize передающая параметры в конструктор? --------------------
|
||||
|
|||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
эй!
chipset, до понедельника, все будет! ![]() |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Паттерн - это форма организации классов, там нет жесткой структуры - сделай вот так и все. В принципе, мзохно и в самом конструкторе смотреть статическое поле, вести счет количеству объектов, если больше одного, бросать иксепшн из конструктора. В Java есть анонимные классы, синглтоны по определению, без каких-либо усилий. Вообще я конкретной реализации паттернов в уме не держу, только класс диаграммы. -------------------- |
|||
|
||||
Fire-Plug |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Будет ни одного объекта Singleton, т.к. ф-ция getInstance() - нестатический метод класса, а конструктор private. Нужен статический метод getInstance() и статический же член Singleton *_instance. Т.е.
--------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
np9mi7 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
![]() Это сообщение отредактировал(а) np9mi7 - 31.3.2005, 09:59 |
||||
|
|||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Он же private? :\ _instance Это сообщение отредактировал(а) chipset - 31.3.2005, 09:56 --------------------
|
||||
|
|||||
Fire-Plug |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
А что, на Яве другое понятие(и реализация) статических методов, т.е. методов, не получающих указатель this, к-рые именно поэтому имеют доступ только к статическим членом класса? Не хочу обидеть Domestic Cat, но "Кто в жизни не ошибался", - сказал ёжик слезая с кактуса. Я лично смотрю на решение Мейерса, или Алесандреску, или Гаммы... Добавлено @ 10:00
Канэшна, Владимир Ильич! (Ответ Сталина на вопрос, сможет ли он для дела революции расстрелять 10 тыс. чел) --------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
И как ты тогда получаешь к ним доступ? ![]() --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Эээ.. а можно пояснить, чем статик не устраивает и в чем ошибка? -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Ну ты не получаешь указателя this когда используешь static функции, т.е. не можешь иметь доступ к нестатическим членам. Это сообщение отредактировал(а) chipset - 31.3.2005, 10:14 --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
А на кой он мне сдался, если у меня есть ссылка на объект? -------------------- |
|||
|
||||
Fire-Plug |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Речь шла в утверждении одного из апологетов решения о всех статических методах синглтона, кроме конструктора. Уместно напомнить известный афоризм, что если такая программа заработает с первого раза, это значит, что программист не понял задания. Для класса со всеми статическими методами и соответственно членами есть свое определение - монотип. Я иногда использую монотип-классы, в роли хэлперов, когда нужна голая функциональность, и не хочется вводить namespace. В общем случае, класс со множеством статических функций - неудобен и потому не нужен. Синглтону нужно всего 2 статических метода, а для синглтона Мэйерса - только один. --------------------
Объясни другому - поймешь сам (Народная примета) |
||||||
|
|||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Впервые слышу, по крайней мере я тут такого не упоминал. В коде я привел только методы, относящиеся собственно к тому, как создать синглтон; все остальные методы не могут быть статичными, иначе их можно было бы вызывать сколько угодно, вообще не создавая объектов. -------------------- |
|||
|
||||
Fire-Plug |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
chipset, дико извиняюсь, только сейчас понял весь вопрос. Ну ведь это уже классика С++ - объявление статического члена класса! Статический член должен быть объявлен и инициализирован как глобальная переменная!
Добавлено @ 10:51
Уместны сразу несколько аналогий: 1) Ответ Иешуа Га-Ноцри Понтию Пилату по поводу искажения смысла проповедей его последователями. 2) "Речи тов. Брежнева нужно не только слушать, но и читать. Вместо "сосиски сраные" было сказано "социалистические страны"". --------------------
Объясни другому - поймешь сам (Народная примета) |
||||||||
|
|||||||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Domestic Cat имел ввиду методы связанные с управлением синглетона, а ты про все говорил. Это сообщение отредактировал(а) chipset - 31.3.2005, 11:01 --------------------
|
||||
|
|||||
Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Как-то странно поставлен вопрос изначальный. "Используете ли вы паттерны". А как их можно не использовать? До того, как я вообще узнал о книже Design Patterns, имея всего пару лет не слишком интенсивной программистской практики, я уже использовал некоторые. Фасад, например. Паттерны - это всего лишь идеи, наиболее важные и полезные. Они не имеют никакого отношения непосредственно к программированию, тем более к конкретным языкам. Даже в повседневной жизни мы все применяем некоторые из них.
|
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Hroft, я вот не использовал..
![]() Я вообще-то имел ввиду архитектурную часть, т.е. пишешь ли ты в проектной документации: так и так, это будет синглетоном, а это будет фабрикой. --------------------
|
|||
|
||||
Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Ну тогда я тоже не использовал
![]() И, сдается мне, не все проголосовавшие использовали в таком контексте. |
|||
|
||||
Fire-Plug |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Придется напомнить изначальную формулировку вопроса:
И снова уместна ещё одна аналогия: - Говоря "сволочь усатая", вы кого конкретно имели в виду, тов. Жюков? - Гитлера, тов. Сталин! - А вы кого конкретно имели в виду, тов. Берия? --------------------
Объясни другому - поймешь сам (Народная примета) |
||||||
|
|||||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
|
|||
|
||||
Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
np9mi7: золотые слова.
Жаль нету смайлика ОВАЦИЯ. Я бы уважаемому Гидранту их парочку вставил (в сообщении своем). Всегда приятно почитать посты умного и начитанного человека, изумительно начитанного, весьма грамотного, пусть даже малость не следящего за язычком... |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Попробуй линк "Показать всё" пod смайлами. -------------------- |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
--------------------
|
|||
|
||||
Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Клево
![]() Гидрант: ![]() ![]() Ну да хорош оффтопить. Кстати, об Александреску. Loki пробовали пользовать? Как впечатления? Мне понравилось. Жаль только, что под разные компиляторы по-разному многие вещи делаются... Но это уже беда компиляторов. |
|||
|
||||
Fire-Plug |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Пересмотрел полемику, чтобы понять с чего сыр-бор начался...
Если объект нужен однажды, то не проще создать его обычным образом, прямо в том месте, где он будет использован, а не строить предложенную выше конструкцию с однократным доступом, к-рая только потребляет ресурсы? Конструкцию такого типа следует назвать "Собака на сене или Сам не гам и другому не дам"-синглтон.
Создается впечатление, что данная фраза - это в лучшем случае искреннее заблуждение. В идее синглтона нет ничего даже близко похожего на процитированное утверждение. Как раз наоборот. Обратимся к "классикам"
Улавливаете разницу - уникальный объект или однократный объект? Синглтон разрабатывался для того, чтобы его чаще всего запрашивали много раз из разных мест в приложении. Обратная ситауция, когда нужно гарантировать, что объект будет использован только однажды... Зачем такой одноразовый объект в памяти держать - его следует уничтожать сразу после использования, а не занимать пусть даже 4 байта под его статический указатель. Т.е. требуется другая реализация, не основанаая на принципах построения синглтона и, соотственно, другое название - этакий object unitary(однократный) - Unitarion. Приведите примеры для такого Unitarion-а, имеющие приблизительно такой же вес, как и те, что привел Александреску. --------------------
Объясни другому - поймешь сам (Народная примета) |
||||||
|
|||||||
Domestic Cat |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
А что значит "создать объект обычным образом"? Что, есть "необычное создание объекта"?
Какие ресурсы??? Если такие ресурсы считать то нужно идти на асме писать...
Вообще, ЧИТАЙ ВНИМАТЕЛЬНЕЕ - нигде у меня не написано, что объект нужен однажды. У меня написано, что "можно дать доступ один раз" и "попросил синглтон однажды." Потому все дальнейшие рассуждения - непонятно к чему вообще:
Посмотри внимательно на код, который я привел, и на то, что подразумевалось под словами "просят синглтон". "Просят" - значит вызывают метод getInstance, чтобы получить ссылку на уникальный объект. С этой ссылкой никто не мешает ничего делать - можешь хоть пятьдесят раз ее скопировать. Когда клиент вызывает этот метод, он ожидает, что уникальный объект будет создан. Потому, если метод вызван два раза, то в таком контексте это скорее будет означать баг. Не вижу никаких противоречий ни с кем. -------------------- |
||||||||
|
|||||||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Боюсь мороки с передачей ссылки туда-сюда будет.. Кроме того, если отойти от стандартного синглетона, и сделать функцию-конструктор то геммороя будет горраааздо меньше, да и параметры можно передавать. Это сообщение отредактировал(а) chipset - 2.4.2005, 10:15 --------------------
|
||||
|
|||||
Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Опять не понял, а кто мешает передавать параметры:
Синглтон не сделан раз и навсегда; делать его можно как хочешь, под твои нужды. Если многим классам нужна ссылка на объект синглтона, - пожалуйста, делай так. Но ИМО, чем большему количеству классов нужна ссылка, тем хуже дизайн. Недаром появилось понятие layered architecture - система разрабатывается слоями, чтобы уменьшить связи между классами. Чем больше классов завязаны на к-л объект, тем ригиднее такая структура, тем она хуже. В крайнем случае используется Медиатор, но лучше всего спроектировать так, чтобы синглтон был нужен одному классу. -------------------- |
||||||
|
|||||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Чтобы не быть голословным:
--------------------
|
||||||
|
|||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Во-первых, что бы там кто не писал про паттерны, это субъективное мнение, которое не являетя истиной в последней инстанции. Во-вторых, паблик статик переменные доступны везде, т.к. для обращения к ним достаточно названия класса. -------------------- |
|||
|
||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Конечно не является.. каждый делает так, как ему удобнее ![]() Мы лишь пытаемся выяснить чей вариант удобнее..
Паблик-статик переменные не являются синглетонами, по крайней мере по Александреску (а как кстати правильно писать?), поскольку ихнего типа может создаться ещё один обьект, что недопустимо для синглетона. Это сообщение отредактировал(а) chipset - 2.4.2005, 10:49 --------------------
|
||||||
|
|||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Ох, ну опечатался - я имел в виду не только переменные, но и методы, точнее метод getInstance(), который вроде объявлен как статик... -------------------- |
|||
|
||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Ну, все нормально, экземпляр один ссылок много...
А layered architecture, это то что нужно, объект может пользоваться сервисом синглтона, но не иметь к нему больше некакого отношения... |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Ну пусть даже и так, но getInstance у тебя все равно возвращает null, т.е. геммороя с хранением линка не избежать. Это сообщение отредактировал(а) chipset - 2.4.2005, 11:02 --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Ты уверен? -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
После первого вызова ![]() Это сообщение отредактировал(а) chipset - 2.4.2005, 11:03 --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
У меня щас крыша поедет ![]() -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Потому что тебе придется раздавать его всем желающим из той первой функции где ты его получил, или строить класс-раздаватель линка ![]() Это сообщение отредактировал(а) chipset - 2.4.2005, 11:04 --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Ну кто мешает тебе убрать этот нул и возвращать линк ВСЕ ВРЕМЯ? То один вариант, полезный в определенных случаях, если тебе нужен синглтон из 10 классоб, - ПОЖАЛУЙСТА, кроме того, что в таком дизайне возникают сомнения, других возражений нет... -------------------- |
|||
|
||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Я так и делаю.. ![]()
Ну, да, Александреску вообще слабенький программист, чё он лезет- кто знает... Это сообщение отредактировал(а) chipset - 2.4.2005, 11:10 --------------------
|
||||||
|
|||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Если бы то, что классы должны быть слабо связаны, придумал я, я бы еще понял твои слова, но это вообще-то обычная вещь в ООП; Фаулера, Купера и тысячи других тоже трудно причислить к соплякам... -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
А теперь представь, что тебе нужно будет добавить ещё один класс в дизайн который юзает синглетон и тебе придется сразу закладывать в его конструктор параметр а-ля "Singleton *single", ну разве красивое решение? Хотя это уже дело вкуса..
Кстати, для организации классов в кучки которые пользуются одним синглетоном существуют неймспейсы. Добавлено @ 11:20
А я как-то не вижу что доступ к синглетону со всех классов влияет на связь оных классов в увеличивающем смысле. Скорее уж наоборот, передача другим классам линка на синглетон ещё более их связывает. Это сообщение отредактировал(а) chipset - 2.4.2005, 11:21 --------------------
|
||||
|
|||||
Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Первая стадия - это стадия проекторования. И классы в неймспейсы объединяют не на основании того, что всем им нужен один синглтон.
А доступ часто дается для того, чтобы сохранить ссылку в поле объекта. Да фих с ним... Просто есть еще один хороший принцип ООП - принцип ответственности за что-то одно (Single Responsibility Principle). То значит, что синглтон, как и любой другой класс, должен быть ответственен за что-то одно. Раз это синглтон, то это значит, что вообще критично, чтобы такой объект был один. Потому чаще всего он не будет нужен в бог знает каких методах непонятно каких классов. -------------------- |
||||
|
|||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Нет конечно. Хорошо, возьмем конкретный пример синглетона: Logfile. Какова по твоему область действия этого синглетона? Это сообщение отредактировал(а) chipset - 2.4.2005, 11:33 --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Логгер делают доступным везде - см. статик кейворд. Но конкретные логгеры вообще-то реализуют как хотят, не обязательно синглтоном. Можно просто хранить именованные логгеры в статик векторе, и ничего страшного не произойдет, если ты сделаешь не один логгер а пять. К тому же все-таки это скорее средство дебаггинга и аудита, учитывать которое в дизайне некритично. -------------------- |
|||
|
||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Обычно один файл для лога, или N их создается, все равно, доступ к ним ОДИН.
См. замечание насчёт файла, следовательно глупо делать вторую копию логгера. Это сообщение отредактировал(а) chipset - 2.4.2005, 11:45 --------------------
|
||||||
|
|||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
А если логгеры в консоль пишут или в разные сокеты/файлы? -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Все равно, открываются они ОДИН РАЗ, все аутпуты, т.е. эдакий логговой аутпут программы. Это пофиг, важно что так будет удобнее посылать сообщения для логгера, ОДНОМУ логгеру.. Это сообщение отредактировал(а) chipset - 2.4.2005, 11:49 --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
а если я хочу разные логгеры, так чтобы я мог вызвать в коде один логгер и писать в него, не указывая каждый раз что мне нужен именно логгер для сокета или логгер для записи в файл с ИНФО а не ЕРРОРами? У тебя получается универсальный логгер на все случаи жизни, а это плохо. -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Ну почему же. Взяли, инициализировали аутпут в начале, а потом тока и делай что инфу в его качай... Помойму мы не туда зашли. Вопрос был: нужен ли логгер всем классам? Это сообщение отредактировал(а) chipset - 2.4.2005, 11:56 --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Предполагать, что всем классам понадобится ОДИН логгер, неправильно. Возможно, им понадобится один и тот же логгер, возможно - несколько разных. Потому здесь скорее подойдет паттерн Фабрика, чем синглтон. -------------------- |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Так!© Ющенко
Поскольку с логгером тебя не переубедить, что скажешь насчёт Keyboard или Display? Это сообщение отредактировал(а) chipset - 2.4.2005, 12:00 --------------------
|
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Дык... а шо ? ![]() -------------------- |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
А узнавание какая клавиша нажата?
Ок, а такой синглетон как App? Может лучше пересраховаться (дать всем получать _instance, а не только избранным) чем недосраховацца? Это сообщение отредактировал(а) chipset - 2.4.2005, 12:07 --------------------
|
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Перебирать до утра можно ![]() ![]() -------------------- |
|||
|
||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Ишо один случай опишу: когда внедряются новые классы в систему, человек который не сталкивался с твоим кодом, тебя будет за него благодарить очень сильно..
ОК! ![]()
Ок ![]() ![]() Это сообщение отредактировал(а) chipset - 2.4.2005, 12:40 --------------------
|
||||||
|
|||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Нет, скорее "смотрящий жабными глазами" ![]() -------------------- |
|||
|
||||
np9mi7 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Если самому клиенту пофиг куда писать свой ЛОГ, то тогда имеет смысл чтоб ЛОГ настраивал кто - то другой, а клиент общался с ним через единый интерфейс. Если ЛОГ синглтон, то тогда он действительно ОДИН, и все будут писать только в него, если необходимо предусмотреть возможность нескольких ЛОГов, то, на мой взгляд, можно применить паттерн: STRATEGY (описан в банде четырех). Но опять, нужно смотреть от задачи. Если хочеться несколько ЛОГов, то можно так, если он один, то можно и синглтон, типа одно место куда я сливаю все что произошло. Но и в том и другом случае, на мой взгляд, клиенту совершенно не нужно знать про особености ЛОГов, те должен быть один интерфейс. Ну например: в случае простого win nt сервиса, можно использовать синглтон, те один ЛОГ который пишет в Aplitation Event, в случае мего сетевого приложения, который должен определять, что за ошибка, кого уведомить, то тут уместен паттерн STRATEGY. А вы как считаете?
![]() |
||||
|
|||||
chipset |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Он настраивается при инициализации.. ![]()
Ну за што мы тут такой флейм развели ![]() Просто у Кота такая реализация getInstance:
Таким образом, он возвращает линк только один раз и создается тут же.. Во-второй, третий, N-ый раз возвращается null. Гемморой заключается в бережном хранении линка и передаче его только "избранным". ЗЫ. А у меня уже.. хотя нет, ещё 4 утра ![]() Это сообщение отредактировал(а) chipset - 2.4.2005, 14:33 --------------------
|
||||||||
|
|||||||||
np9mi7 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
ты наверное это имеешь ввиду
и ты не сможешь создать
ps че хоть пытаемся решить ![]() |
||||||||
|
|||||||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
По моей версии, может быть много ФАЙЛОВ или консолей, или ещё чего-нибудь, но они все хранятся как аутпуты Log'a. Это не та задача что мы решаем, кстати.
Пытаемся разобраться, что лучше: а) Возвращать указатель на синглетон через getInstance всё время. б) Возвращать только первый раз, потом передавать ссылку только избранным. ЗЫ. У меня уже 7 часов. --------------------
|
||||||
|
|||||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
![]() |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Просто map<fstream,fileid>, в простейшем варианте.. --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Чипсет, иметь один логгер плохо, потому, что это плохо ![]() -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Логично ![]() Ок, но зачем тебе два класса Keyboard, Display? ![]() --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
А мне они триста лет не надо ![]() Что ты хочешь сказать? -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Я хочу сказать что одни разработчики вменяют в понятие синглетона одно, другие разработчики другое.. Твой синглетон совсем не соответствует Александреску, потом как он не глобален, зато он соответствует GoF. Покажи мне плз причину плохости Александресковской архитектуры. Это сообщение отредактировал(а) chipset - 3.4.2005, 05:48 --------------------
|
||||
|
|||||
Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
-------------------- |
||||
|
|||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Я всё понимаю
![]() Мне просто хочется узнать, почему ты делаешь именно так, и какие преимущества Гофовского синглетона. --------------------
|
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Ну вот например ты пишешь менеджер, управляющий очередью тредов, которым нужен доступ к неким ресурсам. При этом я знаю, что в своем коде я буду иобращаться к методу getInstance только один раз (до вызова dispose). Тогда возврат нула или выброс иксепшна, как в приведенном варианте, сразу жа будет сигнализировать об ошибке - кто-то попытался вызвать getInstance два раза до вызова dispose. Вот и все. Нужно это не во всех ситуациях, конечно.
-------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Обьясни чем смертельно что:
Гораздо безгемморойнее получать инстанс отовсюду чем переносить его как лишний параметр через функцию. --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Да я его никуда и передавать не буду. Я спроектирую код так, что этот синглтон будет нужен одному единственному классу, в котором сохраню ссылку как поле. -------------------- |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Итак, у нас есть два варианта:
1) Пусть синглетон кто хочет во всем приложении тот и получает. 2) Доступ к синглетону имеет только один(два, три, четыре, неважно) избранный класс который его и допрашивает. Вероятно, что в первом варианте имеют место быть полностью глобальные классы, такие как: Application, Keyboard, Game, при этом очень высока вероятность того что придет В. Пупкин и напишет ещё десяток классов которые будут заюзывать переменные и функции расположенные в этих классах. Во-втором варианте, вероятно что более подходят классы к которым обращаются только определенное (постоянное!) количество классов, такие как: Logger, чё там ещё? Опять-же, всё зависит полностью от архитектуры приложения. Насчёт архитектуры приложения у меня вопросов больше нету, всё говорит нелюбовь к глобальным переменным. Agreed? --------------------
|
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Я бы скорее сказал так.
Случай 1 (когда getInstance возвращает ссылку всегда) весьма напоминает (интерфейсом) другие паттерны, ту же фабрику, стейт или стратегию. В Java например, абстрактный класс NumberFormat имеет такие методы, которые тем не менее, возвращают ссылку не на синглтон, а ссылки на новые объекты класса DecimalFormat; и это далеко не единственный случай. Потому сам по себе интерфейс синглтона нисколько не говорит о том, что он синглтон. Программер Петя может, взглянув на паблик методы такого класса, пользоваться getInstance как обычным методом-фабрикой, считая, что он с каждым вызовом создает новый объект. Тогда в рантайме что будет проишодить, неясно - зависит от самого синглтона и от кода Пети. Возможно, тем самым он введет баг, который выловить будет очень сложно, так как ошибка логическая. Во втором варианте, возвращающем нул или бросающем иксепшн, такого не произойдет, ибо Петя сразу же получит скажем, иксепшн "Singleton method getInstance can be called only once". Поэтому, пользоваться первым вариантом можно, если то, что думает Петя о синглтоне (считает, что это обычный класс или нет), неважно. Тот же простой логгер, реализованный как синглтон, вполне сработает в обеих случаях. -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Защищеный конструктор+метод instance применяется в других паттернах? --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
А если класс абстрактный ? ;) -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Класс считается абстрактным если у него есть хоть одна виртуальная функция (в С++), поэтому причем тут защищеный конструктор я не догоню ![]() --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Дык я в курсе. Просто все равно ведь может быть конструктор, даже у абстрактного класса. Кстати, тогда его делают чаще всего протектед, чтобы сабклассы моглу к нему обратиться. Такшта похоже весьма. -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
А зачем его вообще прятать? Класс то все равно не создастся.. --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Энкапсуляция - дело хорошее, даже в этом случае. -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Энкапсуляция это когда пользователь класса не подозревает о его содержимом, если я не ошибаюсь. Причем энкапсуляция к прятанию элемента интерфейса: конструктора? Это сообщение отредактировал(а) chipset - 3.4.2005, 08:03 --------------------
|
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Ты хочешь сказать, что декларация метода как протектед или приват не есть инкапсуляция? ![]() -------------------- |
|||
|
||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
После всего прочитанного, хочеться задать один вопрос:
Что такое СИНГЛТОН? |
|||
|
||||
chipset |
|
||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Нет конечно. Просто смысла от хоть какой-либо возни с конструктором в абстрактном классе очень мало. Кроме того, разве можно спутать абстрактный класс с синглетоном? Добавлено @ 08:12
С другой стороны, в той же Modern C++ Design:
--------------------
|
||||||||||
|
|||||||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Если его писал ты, то нет. А если не ты, то тока так. -------------------- |
|||
|
||||
chipset |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Ок. Предположим имееца какой-то абстрактный класс: Something. У него конструктор в защищеной секции. Что делает В. Пупкин добавляя класс использующий этот Something в проект? Вызывает Something::instance чтобы получить его, вот так:
Даже если instance будет невиртуальной, статической и вообще будет в классе, компилятор огрызнётся:
--------------------
|
||||||||
|
|||||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Не пойму, ты к чему ведешь
![]() -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
К тому что singleton трудно спутать с другими шаблонами. Это сообщение отредактировал(а) chipset - 3.4.2005, 08:26 --------------------
|
||||
|
|||||
DerLaM |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 1.4.2005 Репутация: нет Всего: нет |
Всем привет!
Извините но у меня вопрос не по теме! Скажите пожалуйста реально ли изучить с++ (с нуля) за 2 месяца, для того чтобы хотябы научиться делать простую записную книжку? P.S. Простите за флуд но моя скорость (10 кб/сек) не позволяет найти нужную тему ![]() |
|||
|
||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Зависит от тебя ![]()
Давай я тему разделю? --------------------
|
||||||
|
|||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
паттернами то есть. Спутать легко. Если ты не читаешь документацию от корки до корки, или она просто плохая. А часто ты изучаешь сорцы всех чужих библиотек? Вот потому и легко. -------------------- |
|||
|
||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
НУ
chipset, так то реализация, а то сематника смысл! ОБЪЕКТ СУЩЕСТВУЕТ ОДИН! И все тут, а не доступ к нему один! В этом и есть смысл! Хочешь мультитрейд? Создавай! Но опять этот менеджер, если он синглтон тоже ОДИН, а как ты там им управляешь это все уже другие вопросы! Если используешь библиотеку Loki, то там синглтон обертывается в спец. шаблон и создается один экзкмпляр в глобольной/статической области памяти! Каким боком это класс в синглтоне непонятно, потому как он ОДИН (а это главная задача шаблона) а доступ к нему ты можешь сам разрулить без всякого instance() а методами самого класса в обертке!
Зачем прятать конструктор абстрактного класса? (те объекта у этого класса нет, он опр только единый интерфейс) Он вызывается при создании потомка. Ну так даже если его закроешь то все равно он будет вызываться. Если его писал не ты, зачем его закрывать? Яж его использовать буду только после наследования от него.... Создать экз. все равно не получиться.... Ну скорее всего это просто дело вкуса... ![]() ps может имеет смысл как то разделять темы? А то все свалено в кучу.... Может создать таких мега постов штук так пять и вообще обсудить ООП? И паттерны? А? Это сообщение отредактировал(а) np9mi7 - 3.4.2005, 08:41 |
|||
|
||||
chipset |
|
||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Код спутывания в студию! ![]()
Он же в private.
В плане? Он же не может инстанциироваться ибо абстрактный.
Смысл темы довольно широкий, и мы иногда вихляем в другие стороны но только ради изучения корневой темы.
Чтобы не мешался;) Это сообщение отредактировал(а) chipset - 3.4.2005, 08:50 --------------------
|
||||||||||||
|
|||||||||||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
Ну бери ссылку на объект и пытайся вызвать метод, а он тебе сам там: я занят; используй меня так хочешь и все тут. Сам грек для мультитрейда вообще выделяет отдельную стратегию каторая и влияет на метод instance()... Как вы собирались разным классам запр. использовать ЛОГ? Непонятно зачем? Если код тв пишешь своими руками то просто не используй его и все! Раз он тебе не нужен. Как со стороны сервиса ЛОГа это запретить? Я не понимаю? Это сообщение отредактировал(а) np9mi7 - 3.4.2005, 09:10 |
|||
|
||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Указатель по Александреско на его интерфейс, и?
Во-первых, это Котъ ![]() Во-вторых, просто не давать им линк. В-третьих, в моем понятии логгер-синглетон должен ловить эксепшны летящие со всего приложения, преобразовывать их в нормальный вид и логить. --------------------
|
||||||
|
|||||||
np9mi7 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
![]()
![]()
Это сообщение отредактировал(а) np9mi7 - 3.4.2005, 09:51 |
||||||||
|
|||||||||
chipset |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Блин, я это говорил а Кот как раз за противоположную точку зрения ![]() Ну да ладно, не впервой. В общем принцип такой: те кто не должен - не должны получать линк.
Тут есть два принципа просто: 1) Каждый класс сам ловит свои исключения и вызывает логгера чтобы добавить туда иксепшн. 2) Глобальный логгер сам ловит исключения.
Нет. --------------------
|
||||||||
|
|||||||||
np9mi7 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
сама реализация обработчика будет использовать тот или иной ЛОГ, а клиент ловит ошибку и вызавает обр. и ничего незнает про ЛОГ. Как тебе это ![]() |
||||
|
|||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Ок, но мы ща про паттерны ![]() --------------------
|
||||
|
|||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
![]() |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Вот нафлудили, чуть отошел - сразу про какой-то С++, ЛОГ...
![]() -------------------- |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Спокойствие, только спокойствие© Карлсон. Усё под контролем. Что у нас осталось невыясненным насчёт синглетона? --------------------
|
||||
|
|||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
НУ да ладно, как насчет статьи в FAQ? |
|||
|
||||
Fire-Plug |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Это может на Яве принято копировать ссылки. Особенно удобно копировать их делать между объектами разных классов. Нахрена мне копировать ссылку? С какой целью? Первый вызов ф-ции Instance() создает объект и возвращает его ссылку или указатель. Все остальные вызовы Instance() получают ссылку или указатель на уже готовый объект. Ссылку можно скопировать в некоей локальной области видимости, где предполагается часто использовать объект, чтобы не вызывать Instance() многократно, но это дело вкуса, а не принципа. След. цитата раскрывает причины такого подхода:
А вот это уже х*рня!!!! Ты где таких архитектурных принципов нахватался? Мне чтобы весь тот bullshit разгребать, к-рый ты авторитетно на голову публики сыплешь, рабочей недели не хватит. Ты вообще похоже не врубаешься нахрена синглтон нужен. Например, класс реализующий сист. реестр, сист. часы и т.д. и т.п. Ты что, предлагаешь доступ, например, к объекту сист. реестра позволять в строго одном классе-клиенте и больше не моги? Или скажем DB-connection? Одному отдельно взятому классу синглтон и н*хер не нужен. Достаточно статического члена или статическим указателя-члена, чтобы последний экземпляр объекта-клиента удалил этот единственный эксемпляр. Кроме того, если некий класс нужен только какому-то одному классу, то этот первый класс можно вообще положить вместе с его объявлением в cpp-файл для класса-клиента и никакая другая зараза даже не узнает, что такой класс существует, т.к. он невидим для остального кода. "Создать объект обычным образом"- имелось в виду, например, на стеке в блоке: создал, тут же заюзал, а на выходе из блока он сам помер. Не нужна никакакая специальная техники вроде статического указателя, живущего для "мертвого" уже объекта до конца приложения . Этот мертвый указатель или что еще хуже статич. переменная класса - особенно при многократном использовании подобной "техники" - это и есть потеря ресурсов. --------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
chipset |
|
||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Добавлено @ 10:46
По вашему мнению, люди из GoF(откуда Кот взял код) полное ламо?
Мы не говорим про отдельно взятый класс, мы говорим про ссылку которую можно передавать и через медиатор, таким образом, линк получат только те кому он нужен. Логика в этом есть, хотя лично я и не согласен с таким проектированием. Это сообщение отредактировал(а) chipset - 3.4.2005, 10:48 --------------------
|
||||||||||
|
|||||||||||
Domestic Cat |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
![]()
![]() ![]() ![]()
Вау! А двум значит нужен??? ![]() ![]()
Ха, а реюзабилити и модульность - для просто так штоль?
С какой стати он должен жить для "мертвого объекта"? Короче, уважаемый, еще раз в таком тоне позвольшь вести разговор - забаню. -------------------- |
||||||||||
|
|||||||||||
Fire-Plug |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Кто сказал, что вызывать метод Instance() 2, 3,...,N раз есть "скорее всего" ошибка? Это что, GoF такой принцип вводит и на нем категорически настаивает? Уникальный объект создается однажды. Ссылки можно получать сколько угодно раз покуда нужно с помощью одной и той же ф-ции, к-рая кстати и реализует принцип глобальной точки доступа, а не скопированная кудо-то ссылка, к-рая сама по себе уж точно локальный объект в некоей области видимости.
Не следует путать божий дар с яичницей. А именно яичницу из разных классов, реализующих разные функциональные аспекты приложения с нек-рыми сервисами общего назначения для всего приложения. Именно такие сервисы в кач-ве примеров и приводит Александреску и именно к таким сервисам должен быть обеспечен глобальный доступ из любого места приложения. Именно это и есть архитектурный принцип синглтона, а всё остальные попытки ревизии или недопонимания - просто bullshit. --------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Перечитай то, что написано на предыдущих страницах.
Поздравляю с открытием истинного "архитектурного принципа синглтона". ![]() ![]() ![]() -------------------- |
||||
|
|||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Говорят же.. Александреску не коммитет по стандартизации синглетонов. --------------------
|
||||
|
|||||
Fire-Plug |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Почитай определение статической переменной, особенно в части о времени её жизни и сразу поймешь.
Ну, давай, если других аргументов нет кроме эклектических выкрутасов.
Кому нужна такая реюзабилити и отдельный модуль для нек-рой ограниченной реализации. Предлагаю класс CatString - один экземпляр на одного объекта-клиента на каждый процесс. --------------------
Объясни другому - поймешь сам (Народная примета) |
||||||
|
|||||||
Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Я даже спорить не хочу. Паттерн, повторяю, не есть что-то жеско закрепленное на века великим
Fire-Plugом. Его пользуют так, как нужно в данной ситуации. По твоим постам видно, что ты этого просто не понимаешь.
"Экземпляр" - это, я так понимаю, объект? Тогда говори как принято. Кто такой объект-клиент? При чем тут процесс, по-твоему что, процессы должны делить между собой объекты?
Видимо, кое кто не знает, что в некоторых языках классы вместе с их статическими переменными могут быть выгружены из памяти...
Проверь по словарю значение этого слова. -------------------- |
||||||
|
|||||||
Fire-Plug |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
С данным утверждением никто не спорит. Речь идет (до сих пор) о примере реализации некоторого шаблона, к-рому делается попытка присвоить название "синглтон". Реализация ф-ции, к-рая создает экземпляр класса в таком шаблоне предлагается в след виде:
Эта реализация противоречит опеределению синглтона, сформулированному GoF: "Гарантировать, что класс имеет только один экземляр и обеспечить глобальную точку доступа к нему", а именно - части определения об обеспечении глобального доступа. Покажем, что это так. Указ. ф-ция getInstance() предоставляет ссылку на уникальный объект для объекта того класса, кто первым его запросит. Для всех остальных запросов указатель= 0. Т.о., предлагаемая конструкция не обеспечивает глобального доступа к уникальному объекту, а следовательно, данный шаблон не есть синглтон. Предлагаемое затем решение хранить полученную ссылку в объекте нек-рого класса (т.е. локально) также притиворечит определению синглтона, а подобная практика его использования не приветствуется:
Указанная выше ф-ция getInstance() реализует некий другой шаблон. Я ранее предлагал (правда, в шутку) назвать такой шаблон Унитарион. Выводы: 1. Пример «синглтона», приведенный выше не реализует синглтон, т.к. противоречит его определению. 2. Выводы о вероятной ошибочности архитектуры и логики приложения при многократном доступе к нек-рому уникальному объекту общего назначения, созданному на основе шаблона синглтон, из разных классов и различных частей приложения – несостоятельны, т.к. речь идет не о синглтоне. Данное замечание не рассматривает детали реализации синглтона, как решения, гарантирующего глобальный(и многократный) доступ к объекту, а только оперирует его определением.
Но если уже договорилсь об определении, давайте ему следовать. --------------------
Объясни другому - поймешь сам (Народная примета) |
||||||||||
|
|||||||||||
Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Это свидетельствует о том, что ты не понимаешь, что значат слова "точка глобального доступа". Например, некий ламер по имени Джеймс Даблью Купер, автор многих книг, в частности, "Паттерны в Java" и "Паттерны в C#", понимает это как точку, доступную всем, что абсолютно не значит, что получить ссылку на синглтон может любой желающий. В частности, он приводил пример с принтером - когда принтер занят, никто не может иметь доступа к нему; поэтому реализация Синглтона у Купера была именно такой (только не нул возвращался, а бросался иксепшн).
Это мнение одного человека непонятно для какого случая.
Обращайся к Куперу и его примерам, учи матчасть. -------------------- |
||||||
|
|||||||
Fire-Plug |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Классы из памяти быть выгружены не могут, если только это не память разработчика. Очевидно, есть необходимость напомнить о таком понятии как "Время жизни" переменной и его определение для статических переменных, в т.ч. для членов класса. Полагаю, что невозможность привести здесь копии сотв. раздела из хотя бы "Язык программирования С++" Страуструпа очевидна. Но необходимо напомнить, что статическая переменная-член класса - это глобальная переменная с ограниченной видимостью. Если в "некоторых языках" это не так, хотя очень сомнительно, то это проблемы самих "некоторых языков" в интерпретации глобальных переменных (Что, снова придется обращаться к определениям, инвариантным относительно конкретного языка?) И кроме того, нечего вводить в заблуждение аудиторию, предлагая решение на «нек-ром языке», где соглашение о времени жизни статических переменных (возможно) иное, чем в С++, из-за чего эффект от применения подобного решения в С++ будет совершенно другим. ЗЫ: Здесь вообще-то форум по С++. --------------------
Объясни другому - поймешь сам (Народная примета) |
|||
|
||||
Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Зря обижаешь разработчика и его память http://portal.acm.org/citation.cfm?id=609742.609750
Никто никого в заблуждение не вводил.
А я вижу, не слепой. -------------------- |
||||||
|
|||||||
Fire-Plug |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Пример чрезвычайно плохохо Use case, архитектуры и никуда ни годного решения. Доступ в очередь к принтеру, а не к самому устройству, должен быть глобальным, а менеджер обслуживающий очередь и работающий с конкретным устройством, должен разрешать некритические ситуации, когда принтер выполняет текущее задание. Единственная ситауция, когда необходимо уведомить юзера и, быть может, отменить задание - проблема технического характера (нет связи с принтером, закончился картриж и т.д. и т.п.). Как на самом деле и реализовано. Так что поищи пример получше. Этот - слишком примитивный. Кстати, по твоему однократному объекту - не приведено ни одного весомого примера, только общие рассуждения типа "если бы да кабы". --------------------
Объясни другому - поймешь сам (Народная примета) |
|||
|
||||
chipset |
|
||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Позвольте влезть в вашу высокопрофессиональную беседу.
Мне кажется, что если не каждый может получить синглетон, это уже автоматически означает что синглетон не доступен всем.
Купер тоже один ![]()
Что ты подразумеваешь под глобальностью?
Многократный доступ тоже возможен, это уже обсуждалось. Добавлено @ 08:43
Я уже приводил пример: Logger. Ловит исключения посланные изо всех концов приложения и кладёт их в файл. Второй обьект данного класса не только бессмысленен но ещё и опасен. --------------------
|
||||||||||||
|
|||||||||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
С какой стати я должен тебе что-то искать? Мне этот пустой спор уже надоел, мне неохота тратить время на фипню - а именно, должен иметь синглтон строчку return null / throw new Exception или нет. Наличие этой строчки обусловлено конкретной ситуацией, но никак не общими рассуждениями. Будь у тебя опыт, ты бы это понимал. Если ты не веришь Куперу - и не ему одному, дело твое. Переубеждать не собираюсь. -------------------- |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Ещё один недостаток я встретил в том, что UML не поддерживает их как stereotype
![]() Это сообщение отредактировал(а) chipset - 5.4.2005, 01:32 --------------------
|
|||
|
||||
Fire-Plug |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Давайте не кастрировать определения в угоду Куперу. Речь идет не об абстрактной "точке глобального доступа", а глобальной точке доступа к нему, а именно - к уникальному объекту в контексте определения синглтона. Не зря, в частности, Александреску, описывая синглтон, проводит аналогию с глобальной переменной. А в смысле Купера – все знают, где дверь(т.е. доступная всем глоб. точка - адрес статич. ф-ции instance), но только один избранный узнает куда она ведет.
Применение шаблона Купера подразумевает наличие некоей политики для определения клиента, к-рому будет предоставлена ссылка на объект. Очевидно, что обобщенно сформулировать такую политику невозможно: она определяется только в контексте конкретной задачи. В то же время политика применения синглтона общая – всем, кто запрашивает – по аналогии с глобальной переменной. Итак, налицо различные сценарии с различным содержанием (для синглтона – уникальность объекта; для шаблона Купера – уникальность доступа), для к-рых имеет место попытка использовать один и тот же термин. Данная ситуация нормальна? Принцип «Как хочу, так и кручу», ведущим быть не может и не должен. Об определениях и семантике решений необходимо договариваться. В первую очередь, тем, кто публикует книги.
Нет уж! Изволь отвечать за свои слова. Ты с видом эксперта привел обзор ряда шаблонов. В описании одного из наиболее известных, вместо объективных сведений, т.е. предоставления версии GoF, Майерса, и в т.ч. версии Купера, как имеющую иной смысл, отличный от принятого ранее, приведена точка зрения только одного автора, к-рой следуешь ты лично. --------------------
Объясни другому - поймешь сам (Народная примета) |
||||||
|
|||||||
Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
Вполне. Суть в том, что существует один объект синглтона, все остальное - детали реализации.
Вот ты этим и займись - собери Александреску, ГоФ, Купера и др, и договаривайтесь.
Мое дело, что хочу, то и привожу. Если ты не понял, повторяю еще раз: мне этот разговор не интересен. Мне интересно обсуждать паттерны, а не строчку в синглтоне. -------------------- |
||||||
|
|||||||
Fire-Plug |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Класс - это абстрактное понятие OOD. Для программиста класс - это тип, определяемый пользователем (Б.Страуструп) Для компилятора - это шаблон, по к-рому нужно сгенерировать код для создания объекта и операций над ним. Если апологеты Явы уже выгружают из памяти классы, а не объекты - флаг им в руки. Пусть сообщат об этом Гради Бучу. В отношении статич. переменных, в т.ч. членов-класса. Ява-код живет в искусственной среде Ява-машины, к-рая обращается с памятью по своему разумению. Если Ява имеет другое, чем С++, соглашение об их времени жизни, то нечего лезть со своим уставом в чужой монастырь. Как уже ранее упоминалось, эффект от похожих на первый взгляд реализаций в языках с различной интерпретацией времени жизни статич. переменных будет разный. Добавлено @ 09:45
Ты уже обсудил, приведя субъективное мнение одного автора. С таким же успехом от тебя можно ожидать и других "обсуждений". За подобный "обзор" соискатели обычно получают 3.14-зделей и от руководителей, и от оппонентов и от коллег. Мне лично уже тоже надоело иметь дело с носорогом. Period --------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 164 |
Ну а ты разве не привел субьективное мнение Александреску и GoF'a? Синглетон - он всегда синглетон, если его имеется один экземпляр и к нему имеется глобальный доступ. Ещё раз повторяю: глобальность - понятие растяжимое. Детали реализации определяются в зависимости от задачи и это не повод к тому чтобы ругаться и спорить тут, и тем более оскорблять других участников.
Это сообщение отредактировал(а) chipset - 7.4.2005, 09:58 --------------------
|
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |