Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> На сколько актуально использование паттернов, в Delphi 
:(
    Опции темы
Delphist
  Дата 11.3.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Видел много книг, статей, где описание паттернов идет с использованием языков Java, C++, но вот с использованием Object Pascal'e я не видел. В связи с чем назрел вопрос вопрос - на сколько сильно распространены паттерны в Delphi? Или быть может программисты Delphi вообще ими не пользуются. 


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
cemick
Дата 11.3.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Может потому что Java, C++ раз в 50 распространненее Delphi потому и примеров для них больше smile 
PM MAIL WWW   Вверх
1000000dollars
Дата 11.3.2009, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 6.10.2007

Репутация: нет
Всего: 8



Их полное название Design Patterns (Паттерны Проектирования), следовательно они относятся больше к проектированию, чем к программированию. Потому они слабо привязаны к языкам программирования, а примеры даны для иллюстрации на наиболее популярных языка программирования.

Сам я использую паттерны и реализую их на Delphi.
PM MAIL   Вверх
Snowy
Дата 11.3.2009, 13:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вопрос абстрактный.
А то, что не видел - значит не то читал.
А применяешь ты их сплошь и рядом.
PM MAIL   Вверх
Alexeis
Дата 11.3.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Патерны это не новая технология, просто системацизация удачных решений. Многие паттерны уже реализванны в VCL, и используются автоматом.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Delphist
  Дата 11.3.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(Alexeis @  11.3.2009,  14:56 Найти цитируемый пост)
Многие паттерны уже реализванны в VCL, и используются атоматом. 

Мог бы привести примеры?

Добавлено через 7 минут и 9 секунд
Есть ли книги в электронном виде, описывающие существующие типы шаблонов с использованием Delphi?


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Alexeis
Дата 11.3.2009, 14:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Delphist @  11.3.2009,  13:00 Найти цитируемый пост)
Мог бы привести примеры?

  Абстрактная фабрика. Любая, форма, все компоненты на ней, создаются реализацией этого патерна. Загрузка изображений в TImage, делаем просто LoadFromFile, создаются различные объекты в зависимости от типа изображения. Пример 2х реализаций одного паттерна.

Добавлено через 3 минуты и 2 секунды
  Использование патерна Visitor. 
Код

  Button := TButton.Create(Panel1);
  Button.Parent := Panel1;

Панель выступает в качестве наблюдателя и отвечает за удаление объекта + различные уведомления сообщениями. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rrader
Дата 11.3.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Application - Singleton smile


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Alexeis
Дата 11.3.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



TStreamAdapter - Прокси.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Delphist
  Дата 13.3.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Пытался в нете найти книженцию (ради интереса) про паттерны именно напримере Delphi. Ни чего вразумительного не нашел.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
RockClimber
Дата 13.3.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



В русской википедии я вроде видел синглтон и абстрактную фабрику с примером на паскале. Посмотри еще в английской, может там больше примеров...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Snowy
Дата 13.3.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



В Вики есть примеры.
http://ru.wikipedia.org/wiki/Шаблоны_проектирования
http://ru.wikipedia.org/wiki/Шаблон_делегирования

Добавлено через 12 минут и 44 секунды
Простейший пример - SaveToStream
Классический метод, которому пофигу, какой стрим ему подадут.
Организован типовой сценарий - дай стрим, а я в него сохраню.
Бери любой стрим или придумывай свой - оно всё равно работает.
Паттерны - вообще такая штука, что под неё половина ООП подходит.
Я бы даже не стал выводить это в отдельное понятие, ибо очень оно расплывчатое, общее и абстрактное.

Суть проста - пишем для чего-то с задумкой, чтоб работало с подобным.

Если я назначаю Caption контролу, то мне всё равно, что это за контрол.
Я просто это делаю, а остальное не моя забота.
Не понравилось - просто заменю контрол - отработает.
Это лего - детальки взаимозаменяемы. Один принцип годится для разных деталек.
И ты можешь не только менять детальки, но и делать свои, если они поддерживают тот же принцип.
По сути - это просто архитектура. Точнее один из её стандартов, который давно вписан в неё, как аксиома.
PM MAIL   Вверх
X-Vlad
Дата 14.3.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: 1
Всего: 5



Цитата

В связи с чем назрел вопрос вопрос - на сколько сильно распространены паттерны в Delphi? Или быть может программисты Delphi вообще ими не пользуются. 


После того как ты создаешь проект и бросаешь на него контролы - у тебя уже используется паттерны. Дельфи автоматом реализует множество патернов, ло которых девелоппер недогадывается. Прочитай несколько книг по патернам (не смотри на код(если ты его непонимаешь), смотри на UML диаграммы, блок схемы). Все девелопперы на Дельфи используют патерны, просто много из них даже незнают что такое паттерн и их типы smile))) Им главное begin... end... if....else... try...except...end и т.д.

Был случай спрашивали нового девлопера который устраивался в большую кантору "что зделает программа после оператора except", варианты ответа: остановит выполнение, продолжит выполнение кода ниже...


З.Ы. Э. Гамма   Р. Хелм   Р. Джонсон   Дж. Влиссидес, Приемы обьектно-ориентированого проектирования. Патерны проектирования. Санкт-Петербург 2001


Это сообщение отредактировал(а) X-Vlad - 14.3.2009, 15:40


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
kemiisto
Дата 14.3.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 16
Всего: 160



Цитата(X-Vlad @  14.3.2009,  13:28 Найти цитируемый пост)
З.Ы. Э. Гамма   Р. Хелм   Р. Джонсон   Дж. Влиссидес, Приемы обьектно-ориентированого проектирования. Патерны проектирования. Санкт-Петербург 2001

Читаем GoF (Gang of Four, Банда Четырёх smile , так часто называют авторов вышеуказанной книги), если возникают проблемы с переносом C++ -> Delphi, бежим, например, сюда.

Ещё ссылки по теме:P.S. Сам буду этим летом "копать" паттерны... smile 

Это сообщение отредактировал(а) kemiisto - 14.3.2009, 16:09


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Bose
Дата 14.3.2009, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



На rsdn вроде было достаточно много статей посвящённых реализации паттернов именно на Delphi.
Но многие из них, на мой взгляд, какие-то надуманные.

Добавлено через 14 минут и 35 секунд
Вот ещё ссылки:
Расширение возможностей паттерна Command
Практика применения паттернов проектирования

PM MAIL WWW Skype   Вверх
Delphist
Дата 16.3.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Угу,хорошо


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
pompei
Дата 16.3.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.9.2007

Репутация: 2
Всего: 6



Вы как-то не правильно относитесь к понятию паттернов. Паттерн - это ни нечто новое, созданное каким-то вумным гением, и теперь если ты крутой чувак, то тоже должен использовать паттерны, а потом хвастаться этим.

Если Вы написали хоть одну программу, то вы уже реализовали какой-нибудь паттерн.

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

Ещё - знание паттернов позволяет быстро объяснить то, что вы написали намедни. Также знание паттернов очень полезно при проектировании реализации (но для проектирования самомй системы знание паттернов не нужно).
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
Rohoss
Дата 17.3.2009, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



А каким образом в таком случае задокументировать паттерн, для многократного использования? И как использовать паттерны, которые уже имеются в среде Delphi?
Если можно, конкретные примеры: вот так используем в проекте, вот так заносим в среду.



--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
pompei
Дата 17.3.2009, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.9.2007

Репутация: 2
Всего: 6



Цитата(Rohoss @ 17.3.2009,  01:51)
А каким образом в таком случае задокументировать паттерн, для многократного использования? 

Паттерн не нужно документировать. Паттерн - не программа. Чтобы что-то использовать многократно, нужно, вначале это написать, а потом, например, оформить это в виде библиотеки (.dll, .jar, .so и пр.) и использовать это многократно (а можно просто в исходных кодах использовать многократно).

Цитата(Rohoss @ 17.3.2009,  01:51)
И как использовать паттерны, которые уже имеются в среде Delphi?

Просто создав новый проект и запустив его Вы уже кучу паттернов использовали. 


Цитата(Rohoss @ 17.3.2009,  01:51)
Если можно, конкретные примеры: вот так используем в проекте, вот так заносим в среду.

Например есть задача, в которой пользователь должен вызывать много разных функций в произвольной последовательности. 

Эту задачу можно например решить с помощью паттерна "Консоль" - есть некоторая строка ввода, пользователь вводит команду (которая запускает ту или иную функцию), нажимает Enter - и соответствующая функция выполняется.

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

Ну а теперь более "низменные" паттерны:

"Одиночка" (синглтон, singleton) - это всего лишь когда Вы ввели ограничение на количество инстанций данного класса (чтобы количество инстанций == 1). А как Вы это сделали - либо "устно" соблюдаете ограничение, либо воспользовлись какими-нибудь конструкциями языка, на котором пишите, либо воспользовались какой-нибудь библиотекой - суть остаётся прежней.

Когда у какой-то сущьности в программе есть несколько режимов, например при нарезании болванки - есть режим нарезания, и есть режим верификации.
Тогда можно воспользоваться одним из двух паттернов:

"Состояние" (state) - это когда все режимы обслуживаются одним классом, и какой на данный момент режим определяется значением какого-нибудь поля в этом классе, скорей всего тип этого поля будет либо int либо какой-нибудь enum - хотя можно использовать что угодно.

"Стратегия" (strategy) - это когда отличительный функционал какого-нибудь режима выделяется в отдельный класс, т.е. для каждого режима создаётся отдельный класс, притом эти классы должы иметь общий интерфейс использования (некий общий набор методов или реализовывать какой-нибудь интерфейс если позволяет используемый язык программирования). Ну и в общем классе есть ссылка на один из этих классов - если значение ссылки меняется, то какбы меняется и режим.
Достоинство данного подхода программирования (читай паттерна) является то, что исчезают switch-операторы.

* * *

"Фабричный метод" (factory method) - это когда Вы объект создаете не с помощью конструктора, а с помощью некого статистического метода. В Object Pascal-е, как я понимаю, конструкторы оформлены в виде фабричных методов. Поэтому в Object Pascal-е, если Вы создавали хотя-бы один объект, или придумали хотя-бы один класс и использовали его, то Вы уже пользовались фабричным методом.

"Фабрика" (factory) - это класс, который служит для создания объектов других классов. Обычно "фабрика" - "синглтон", хотя это совершенно не обязательно. 

"Строитель" (builder) - это почти тоже самое, что и фабрика. Строитель от фабрики отличается тем, что он создает много объектов (строит иерархию объектов). Ещё одним ярким отличием строителя от фабрики является то, что строитель может создавать объект не сразу, а постепенно - вначале вызываем какой-нибудь инициализирующий метод, потом какие-нибудь настраивающие методы, потом можно воспользоваться методами для получения ссылок на построенные объекты (чтобы наконец воспользоваться этими объектами), ну а потом наверное надо вызвать метод, который все это дело очищает. 
Короче строитель - это супер-пупер навороченная фабрика.

"Конструктор" (constructor) - это конструктор. (тупо зато верно)
"Деструктор" (destructor) - это деструктор. (тупо зато верно)
Практически во всех ООП-языках предыдущие два паттерна встроены прямо в язык.

"Фассад" (fassade) - это наверное самый первый паттерн, который использовали программисты с начала эры информационной революции (когда ещё понятия паттерн и в помине небыло). Фассад - это просто набор функций, для доступа к каким-либо ресурсам.
Например в Java доступ к синусам и косинусам оформлен с помощью фассадного класса Math - в нем куча статических методов типа sin, cos, log, tan и пр.

Ну а остальные паттерны читайте in вумной литературе.


Это сообщение отредактировал(а) pompei - 17.3.2009, 06:48
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
cemick
Дата 20.3.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 6



В ModelMaker 10  реализовано много шаблонов паттернов, можно применятьдаже к уже существующему коду . Реалиализация вменяемая. Раньше бы некоторые шаблоны было бы влом реализовывать, а тут одно нажатие и готово.
PM MAIL WWW   Вверх
Delphist
Дата 20.3.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(cemick @  20.3.2009,  15:32 Найти цитируемый пост)
ModelMaker 10

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


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
cemick
Дата 20.3.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Цитата(Delphist @  20.3.2009,  14:46 Найти цитируемый пост)
генератор кода хреновый у него,

Это как это???? 

да и альтернатив для семерки нет

Это сообщение отредактировал(а) cemick - 20.3.2009, 14:58
PM MAIL WWW   Вверх
Delphist
Дата 20.3.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(cemick @  20.3.2009,  15:57 Найти цитируемый пост)
Это как это???? 

не понравился он мне


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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