Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];

Вниз

Паттерны.   Найти похожие ветки 

 
Тимохов ©   (2004-06-10 14:13) [0]

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

Примеры книг мне приводили.

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

Заранее спасибо.


 
Игорь Шевченко ©   (2004-06-10 14:22) [1]

Тимохов ©   (10.06.04 14:13)

Например: http://firststeps.narod.ru/theory/pattern/1.html

Кроме того, Яндекс по запросы "паттерны проектирования" выдал 1056 серверов и 24198 страниц :)


 
vuk ©   (2004-06-10 14:27) [2]

to Тимохов ©   (10.06.04 14:13):
>без них я не программист, а что болотное
Ну... Я бы не сказал. По большей части паттерны - это формализация опыта програмирования в некоторых стандартных ситуациях. Знать об их существовании полезно, но говорить, что без них никуда по меньшей мере не верно.


 
Тимохов ©   (2004-06-10 15:31) [3]


> vuk ©   (10.06.04 14:27) [2]

да понимаю я (про чмо болотное шутка была :))).
Но все же о них много говорят. Хочу понять есть ли в этом смысл для программиста, который может и не шибко эрудирован (в смысле широты позниний), но волею судеб 10 лет одновременно с программирование занимался и проектированием.


> Игорь Шевченко ©   (10.06.04 14:22) [1]

Спасибо.
К сожалению интернет помойка (имхо). Может, кроме форумов :)))
К его услугам в области поиска документации я прибегаю только в крайнем случае. Это связано с тем, что считанные разы я находил ответ на свой вопрос...

"Не люблю кошек"
"Может ты не умеешь их готовить" (с) реклама "m. new"


 
Игорь Шевченко ©   (2004-06-10 15:36) [4]

Тимохов ©   (10.06.04 15:31)

Яндекс еще выдает очень много ссылок на интернет-магазины, где классическую книжку (Гамма, Влиссидес, Джонсон, Хэлм) можно купить. Это так, намек... :)


 
Тимохов ©   (2004-06-10 15:39) [5]


> Игорь Шевченко ©   (10.06.04 15:36) [4]

она у меня в электронном виде есть (на eng).
последнее не проблема, когда понимаешь принципиально о чем речь.
например Феня читать на англ. не проблема, т.к. знаешь - про windows.
а вот с указанной вами книгой сложнее - т.к. нужно понимать не только семнатику, но и терминологию...


 
Игорь Шевченко ©   (2004-06-10 15:42) [6]

Тимохов ©   (10.06.04 15:39)

Я серьезные книжки предпочитаю на русском читать, но это уже оффтопик :)


 
Тимохов ©   (2004-06-10 15:45) [7]


> Игорь Шевченко ©   (10.06.04 15:42) [6]

спасибо за ссылку, кстати.
Доступно.
Только не совсем помню UML-обозначений, но вроде книга по UML помогает.


 
Тимохов ©   (2004-06-10 15:50) [8]


> Игорь Шевченко ©   (10.06.04 15:42) [6]

Вот кстати.
Паттерн Abstract Factory (http://firststeps.narod.ru/theory/pattern/2.html).
И зачем она нужна программисту на Delphi, у которого есть виртуальные конструкторы?
Это не сарказм. Просто интересно знать ваше мнение для того, чтобы направить знание паттернов в правильное русло. Т.е. как мне знание этого паттерна поможет лучше писать на delphi.


 
vuk ©   (2004-06-10 15:52) [9]

to Тимохов ©   (10.06.04 15:50) [8]:
>И зачем она нужна программисту на Delphi, у которого есть
>виртуальные конструкторы?
Ну, например, для понимания идеологии COM неплохо подходит. :o)


 
Игорь Шевченко ©   (2004-06-10 16:23) [10]

Тимохов ©   (10.06.04 15:50)


> Паттерн Abstract Factory (http://firststeps.narod.ru/theory/pattern/2.html).
> И зачем она нужна программисту на Delphi, у которого есть
> виртуальные конструкторы?


Пример - вывод результата декомпиляции программы на двух языках.


type
{ Абстрактные классы }
 TCodeOutputStyler = class
 ....
 end;
 
 TCommentOutputStyler = class
 ....
 end;

 TOutputStylerFactory = class
 public
   function CreateCodeOutputStyler: TCodeOutputStyler; virtual; abstract;
   function CreateCommentOutputStyler: TCommentOutputStyler; virtual; abstract;
 end;

{ Конкретные классы }
 
 TCCodeOutputStyler = class(TCodeOutputStyler)
 ...
 end;

 TPascalCodeOutputStyler = class(TCodeOutputStyler)
 ...
 end;

 TCCommentOutputStyler = class(TCommentOutputStyler)
 ...
 end;

 TPascalCommentOutputStyler = class(TCommentOutputStyler)
 ...
 end;

 TCOutputStylerFactory = class(TOutputStylerFactory)
 public
   function CreateCodeOutputStyler: TCodeOutputStyler; override;
   function CreateCommentOutputStyler: TCommentOutputStyler; override;
 end;

 TPascalOutputStylerFactory = class(TOutputStylerFactory)
 public
   function CreateCodeOutputStyler: TCodeOutputStyler; override;
   function CreateCommentOutputStyler: TCommentOutputStyler; override;
 end;

.........
function TCOutputStylerFactory.CreateCodeOutputStyler: TCodeOutputStyler;
begin
 Result := TCCodeOutputStyler.Create;
end;

function TCOutputStylerFactory.CreateCommentOutputStyler: TCommentOutputStyler;
begin
 Result := TCCommentOutputStyler.Create;
end;

function TPascalOutputStylerFactory.CreateCodeOutputStyler: TCodeOutputStyler;
begin
 Result := TPascalCodeOutputStyler.Create;
end;

function TPascalOutputStylerFactory.CreateCommentOutputStyler: TCommentOutputStyler;
begin
 Result := TPascalCommentOutputStyler.Create;
end;

var
 OutputStylerFactory: TOutputStylerFactory;
......
 if OutputStyle = osPascal then
   OutputStylerFactory := TPascalOutputStylerFactory.Create
 else if OutputStyle = osC then
   OutputStylerFactory := TCOutputStylerFactory.Create


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


 
Тимохов ©   (2004-06-10 16:44) [11]


> Игорь Шевченко ©   (10.06.04 16:23) [10]

Спасибо за пример.
Но, думаю, вы согласитесь с тем, что в Дельфи это можно сделать не менее элегантно с помощью конструкции class of TSomeClass + virtual constructor.
...
Я тут подумал, что именно приведеный вами код можно сделать через class of. А вот если бы реализации в методах CreateCodeOutputStyler и CreateCommentOutputStyler были чуть сложнее для разных языков (и главное разными!), тогда через class of было бы не все так красиво.
...
Еще раз спасибо - буду размышлять.


 
Игорь Шевченко ©   (2004-06-10 16:51) [12]

Тимохов ©   (10.06.04 16:44)


> Но, думаю, вы согласитесь с тем, что в Дельфи это можно
> сделать не менее элегантно с помощью конструкции class of
> TSomeClass + virtual constructor.


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


 
Тимохов ©   (2004-06-10 18:42) [13]


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

ну в общем то я уже с этим согласился...

Но все-таки не будете вы отрицать, что многие паттерны являются прямыми следсвиями некоторых особеностей сей?


 
iZEN ©   (2004-06-10 19:25) [14]

Смотреть здесь:
ftp://195.161.102.62/pub/books/rup/


 
iZEN ©   (2004-06-10 19:43) [15]

Немного промахнулся...
Вот оно:
ftp://195.161.102.62/pub/books/softwaredevelopment/


 
LMD ©   (2004-06-10 20:24) [16]

Тимохов ©   (10.06.04 18:42)


> Но все-таки не будете вы отрицать, что многие паттерны являются
> прямыми следсвиями некоторых особеностей сей?


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


 
iZEN ©   (2004-06-10 20:37) [17]

Программные паттерны впервые "заметили" в SmallTalk, если не ошибаюсь, потом их "перенесли" на Java и C++, оттуда естественным образом перекочевали в C#.


 
Игорь Шевченко ©   (2004-06-10 21:21) [18]

iZEN ©   (10.06.04 20:37)

Паттерны заметили в архитектуре (не программной, а строительной :)

"Хотя, строго говоря, паттерны используются в проектированииЮ они основаны на практических решениях, реализованных в основных языках объектно-ориентированного программирования типа Smalltalk и C++, а не на процедурных (Pascal, C, Ada и т.п.) или объектно-ориентированных языках с динамической типизацией (CLOS, Dylan, Self). Мы выбрали Smalltalk и C++ из прагматических соображений, поскольку чаще всего работаем с ними и поскольку они завоевывают все большую популярность".
(с) Банда четырех

Написано это в 1994-м году, насколько мне известно.


 
iZEN ©   (2004-06-10 22:01) [19]

to Игорь Шевченко ©   (10.06.04 21:21) [18].
В строительной архитектуре паттерны впервые описал Кристофер Александер (Christopher Alexander) в "A Pattern Language", Oxford University Press, 1977.
Так, для большей эрудиции.


 
Тимохов ©   (2004-06-11 12:01) [20]


> iZEN ©   (10.06.04 19:43) [15]

еще бы понять какой пользователь и пароль.


> LMD ©   (10.06.04 20:24) [16]

Дочитал вчера ссылку Игоря Шевченко.
По сему появилось некое аргументированное мнение на фразу

> потому что паттерны универсальны по своей природе и не привязаны к средствам какого-то определенного языка.

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


 
Игорь Шевченко ©   (2004-06-11 12:04) [21]

Тимохов ©   (11.06.04 12:01)


> да они конечно универсальны, но они в то же время и банальны
> - все что я (пока) прочел ясно и без паттернов - в том или
> ином виде использовалось мной


Вызывает уважение, однако.


> Поэтому у меня появилось ощущение, что смысл паттернов не
> в том, чтобы действительно помочь в проектировании (опытному
> человеку и так имхо интуитивно все ясно),


Смысл паттернов - избежать изобретения велосипеда.


> в том, чтобы дать возможность группе проетировщиков и программистов
> говорить на одном стандартизованном языке


И это тоже безусловно важно.


 
Тимохов ©   (2004-06-11 12:11) [22]


> Игорь Шевченко ©   (11.06.04 12:04) [21]


> Вызывает уважение, однако.

не надо сарказма, аднака:))
действительно многое узнал из своего проектика.


 
Игорь Шевченко ©   (2004-06-11 12:14) [23]

Тимохов ©   (11.06.04 12:11)

Мне эта...специально помечать фразы, где нет сарказма ?


 
Тимохов ©   (2004-06-11 12:18) [24]


> Мне эта...специально помечать фразы, где нет сарказма ?

если не затруднит через "//" :)))

пойду дальше размышлять - ведь не зря наверное люди такие толстые книжки пишут :)))


 
Игорь Шевченко ©   (2004-06-11 12:26) [25]


> ведь не зря наверное люди такие толстые книжки пишут


- Вы знаете, кто создал теорию относительности ?
- Эйнштейн, сэр!
- А что послужило причиной к созданию теории относительности ?
- Заработать хотелось, сэр!

(с) Всадники ниоткуда


 
Тимохов ©   (2004-06-11 12:30) [26]


> Игорь Шевченко ©   (11.06.04 12:26) [25]

примерно так я пока думаю, надеюсь, что ошибаюсь:))


 
Sandman25 ©   (2004-06-11 16:50) [27]

http://ooad.asf.ru/patterns/viewpattlist.asp?cat=0

правда, на английском. Но очень полезно.


 
Sandman25 ©   (2004-06-11 16:52) [28]

Упс, не на английском. Давно читал, уже забыл, на каком языке.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.032 c
6-1083851320
Yanis
2004-05-06 17:48
2004.06.27
mail


1-1086972333
Apocalepse
2004-06-11 20:45
2004.06.27
Тот же текстовый редактор. Теперь сохранение :-)


8-1081614563
AlexDee
2004-04-10 20:29
2004.06.27
Подкиньте нормальный учебник по DirectX у СПАСИБО


14-1086756469
Delphi5.01
2004-06-09 08:47
2004.06.27
Ustanovka trafika dsl?


8-1081769338
Черноглазов
2004-04-12 15:28
2004.06.27
Как получить видео через USB.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский