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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [опрос]Паттерны проектирования 
:(
    Опции темы
 
Используете ли вы паттерны проектирования в своих программах?
Да [ 20 ]  [43.48%]
Нет [ 8 ]  [17.39%]
Нет, но хочу [ 10 ]  [21.74%]
Что это? [ 8 ]  [17.39%]
Всего проголосовавших: 46
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
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

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


 




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


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

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