![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 2 Всего: 3 |
Видел много книг, статей, где описание паттернов идет с использованием языков Java, C++, но вот с использованием Object Pascal'e я не видел. В связи с чем назрел вопрос вопрос - на сколько сильно распространены паттерны в Delphi? Или быть может программисты Delphi вообще ими не пользуются.
-------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
Может потому что Java, C++ раз в 50 распространненее Delphi потому и примеров для них больше
|
|||
|
||||
| 1000000dollars |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 6.10.2007 Репутация: нет Всего: 8 |
Их полное название Design Patterns (Паттерны Проектирования), следовательно они относятся больше к проектированию, чем к программированию. Потому они слабо привязаны к языкам программирования, а примеры даны для иллюстрации на наиболее популярных языка программирования.
Сам я использую паттерны и реализую их на Delphi. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Вопрос абстрактный.
А то, что не видел - значит не то читал. А применяешь ты их сплошь и рядом. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Патерны это не новая технология, просто системацизация удачных решений. Многие паттерны уже реализванны в VCL, и используются автоматом.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 2 Всего: 3 |
Мог бы привести примеры? Добавлено через 7 минут и 9 секунд Есть ли книги в электронном виде, описывающие существующие типы шаблонов с использованием Delphi? -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Абстрактная фабрика. Любая, форма, все компоненты на ней, создаются реализацией этого патерна. Загрузка изображений в TImage, делаем просто LoadFromFile, создаются различные объекты в зависимости от типа изображения. Пример 2х реализаций одного паттерна. Добавлено через 3 минуты и 2 секунды Использование патерна Visitor.
Панель выступает в качестве наблюдателя и отвечает за удаление объекта + различные уведомления сообщениями. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 70 Всего: 191 |
Application - Singleton
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
TStreamAdapter - Прокси.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 2 Всего: 3 |
Пытался в нете найти книженцию (ради интереса) про паттерны именно напримере Delphi. Ни чего вразумительного не нашел.
-------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| RockClimber |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 848 Регистрация: 5.5.2006 Где: планета 013 в тен туре Репутация: нет Всего: 15 |
В русской википедии я вроде видел синглтон и абстрактную фабрику с примером на паскале. Посмотри еще в английской, может там больше примеров...
-------------------- Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
В Вики есть примеры.
http://ru.wikipedia.org/wiki/Шаблоны_проектирования http://ru.wikipedia.org/wiki/Шаблон_делегирования Добавлено через 12 минут и 44 секунды Простейший пример - SaveToStream Классический метод, которому пофигу, какой стрим ему подадут. Организован типовой сценарий - дай стрим, а я в него сохраню. Бери любой стрим или придумывай свой - оно всё равно работает. Паттерны - вообще такая штука, что под неё половина ООП подходит. Я бы даже не стал выводить это в отдельное понятие, ибо очень оно расплывчатое, общее и абстрактное. Суть проста - пишем для чего-то с задумкой, чтоб работало с подобным. Если я назначаю Caption контролу, то мне всё равно, что это за контрол. Я просто это делаю, а остальное не моя забота. Не понравилось - просто заменю контрол - отработает. Это лего - детальки взаимозаменяемы. Один принцип годится для разных деталек. И ты можешь не только менять детальки, но и делать свои, если они поддерживают тот же принцип. По сути - это просто архитектура. Точнее один из её стандартов, который давно вписан в неё, как аксиома. |
|||
|
||||
| X-Vlad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 570 Регистрация: 10.4.2002 Где: Украина, Львов Репутация: 1 Всего: 5 |
После того как ты создаешь проект и бросаешь на него контролы - у тебя уже используется паттерны. Дельфи автоматом реализует множество патернов, ло которых девелоппер недогадывается. Прочитай несколько книг по патернам (не смотри на код(если ты его непонимаешь), смотри на UML диаграммы, блок схемы). Все девелопперы на Дельфи используют патерны, просто много из них даже незнают что такое паттерн и их типы Был случай спрашивали нового девлопера который устраивался в большую кантору "что зделает программа после оператора except", варианты ответа: остановит выполнение, продолжит выполнение кода ниже... З.Ы. Э. Гамма Р. Хелм Р. Джонсон Дж. Влиссидес, Приемы обьектно-ориентированого проектирования. Патерны проектирования. Санкт-Петербург 2001 Это сообщение отредактировал(а) X-Vlad - 14.3.2009, 15:40 |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 16 Всего: 160 |
Читаем GoF (Gang of Four, Банда Четырёх Ещё ссылки по теме:
Это сообщение отредактировал(а) kemiisto - 14.3.2009, 16:09 -------------------- |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
На rsdn вроде было достаточно много статей посвящённых реализации паттернов именно на Delphi.
Но многие из них, на мой взгляд, какие-то надуманные. Добавлено через 14 минут и 35 секунд Вот ещё ссылки: Расширение возможностей паттерна Command Практика применения паттернов проектирования |
|||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 2 Всего: 3 |
Угу,хорошо
-------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| pompei |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.9.2007 Репутация: 2 Всего: 6 |
Вы как-то не правильно относитесь к понятию паттернов. Паттерн - это ни нечто новое, созданное каким-то вумным гением, и теперь если ты крутой чувак, то тоже должен использовать паттерны, а потом хвастаться этим.
Если Вы написали хоть одну программу, то вы уже реализовали какой-нибудь паттерн. Паттерн - это метод решения задачи (в программировании). Паттерны придумали, чтобы систематизировать то, что делают программисты. Ещё - знание паттернов позволяет быстро объяснить то, что вы написали намедни. Также знание паттернов очень полезно при проектировании реализации (но для проектирования самомй системы знание паттернов не нужно). --------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап. |
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
А каким образом в таком случае задокументировать паттерн, для многократного использования? И как использовать паттерны, которые уже имеются в среде Delphi?
Если можно, конкретные примеры: вот так используем в проекте, вот так заносим в среду. |
|||
|
||||
| pompei |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.9.2007 Репутация: 2 Всего: 6 |
Паттерн не нужно документировать. Паттерн - не программа. Чтобы что-то использовать многократно, нужно, вначале это написать, а потом, например, оформить это в виде библиотеки (.dll, .jar, .so и пр.) и использовать это многократно (а можно просто в исходных кодах использовать многократно).
Просто создав новый проект и запустив его Вы уже кучу паттернов использовали.
Например есть задача, в которой пользователь должен вызывать много разных функций в произвольной последовательности. Эту задачу можно например решить с помощью паттерна "Консоль" - есть некоторая строка ввода, пользователь вводит команду (которая запускает ту или иную функцию), нажимает 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 --------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап. |
||||||
|
|||||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
В ModelMaker 10 реализовано много шаблонов паттернов, можно применятьдаже к уже существующему коду . Реалиализация вменяемая. Раньше бы некоторые шаблоны было бы влом реализовывать, а тут одно нажатие и готово.
|
|||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 2 Всего: 3 |
генератор кода хреновый у него, правда юзал ModelMaker (не помню какая у него версия была), который поставлялся с Delphi7. Мож за эти годы что поменялось -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
||||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 2 Всего: 3 |
-------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |