Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

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

 
Тимохов ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.035 c
3-1086260051
Jaxtor
2004-06-03 14:54
2004.06.27
Типы полей набора данных из хранимой процедуры


6-1083718856
K
2004-05-05 05:00
2004.06.27
WinSock


3-1085857779
DIS
2004-05-29 23:09
2004.06.27
в запросе условие WHERE


1-1086913022
antonn
2004-06-11 04:17
2004.06.27
Не выключается комп


3-1085580374
Opilki_Inside
2004-05-26 18:06
2004.06.27
Сложный отчет в формате RTF