|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.03.2012, 22:27 | #21 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
А так же, в чем смысл использовать не_вирт методы для объектов полиморфного семейства. |
|
13.03.2012, 22:51 | #22 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2_Bers
Цитата:
к примеру, есть иерархия Код:
Код:
Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 13.03.2012 в 22:55. |
|
13.03.2012, 23:26 | #23 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Я имел ввиду, для чего вообще это может быть применено.
Грубо говоря, можно рассматривать процесс разработки с двух сторон: 1. Бизнес-логика независимая, и использует движок, как инструмент для собственных нужд. По мере необходимости, она эксплуатирует возможности движка. 2. Бизнес-логика является лишь одним из компонентов движка. И движок сам толкает методы бизнес-логики. Во втором случае, очень актуальна необходимость максимально облегчить процесс создания компонента бизнес-логики. Избавить разработчика от необходимости знаний всяких подробностей движка: как, когда, и зачем он там может толкнуть методы бизнес-логики. Для этого создаётся компонент, реализующий всю гипотетическую бизнес логику. А разработчику реального компонента останется унаследоваться, и реализовать "уникальные няшки" его конкретного компонента. Однако, для этого можно применить паттерн "шаблонный метод" без виртуальных функций. А для чего может понадобится именно виртуальный полиморфизм? Я это так понял: задача не просто максимально быстро и просто построить один отдельно взятый компонент бизнес-логики. А множество различных клонов. Результатом архитектурного решения получится система компонентов-клонов, существующих, и действующих одновременно, которые контролируются из единого центра управления - из движка. |
13.03.2012, 23:34 | #24 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2_Bers
Цитата:
жду примера пс. раз уж пошла такая пьянка - что такое виртуальный полиморфизм?) я знаю только про динамический и статический
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 13.03.2012 в 23:50. |
|
14.03.2012, 00:25 | #25 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Его можно реализовывать на любых языках программирования. Даже на таких, где нет ни шаблонов, ни классов. "Шаблонный метод" решает проблему структурирования кода. Проблему автоматизации рутины. Код:
Преимущества: данное решение позволяет относительно гибко и безболезненно изменять строение уже существующего архитектурного сооружения. Если заменить один модуль другим, то другие модули этого даже не заметят. А логика работы может измениться. К тому же, двигая наиболее "завязанные" модули в конец, а наиболее "независимые" в начало, и перерабатывая серединку, за счет перераспределения ролей и ответственности, можно сократить количество модулей. И отделить "няшки" от рутины. Мной было применено для ликвидации божественных классов, путем перераспределения ролей и ответственности между модулями на позднем этапе развития. Полиморфизм, реализуемый при помощи виртуальных функций. Последний раз редактировалось Stilet; 14.03.2012 в 22:31. |
|
14.03.2012, 01:18 | #26 | |||
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2_Bers
ничего, кроме множественного наследования я не увидел. этот код не имеет ничего общего с паттерном Шаблонный Метод Цитата:
максимум, что ты мог добиться без динамического полиморфизма - реализовать паттерн Стратегия (который ошибочно можно было бы принять за Шаблонный Метод). но у тебя даже этого нет. Цитата:
пс. неужели тяжело открыть ту же википедию (если нет двух замечательных книг по паттернам) и прочитать, что делает этот паттерн? зачем нести откровенную чушь в стиле Цитата:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 14.03.2012 в 01:30. |
|||
14.03.2012, 09:02 | #27 |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Что тут у вас, ребята? Письками меряетесь? Ну ну. Здорово. Неплохо. Как дети малые ей богу.
Открытая виртуальная функция должна выполнять две вещи - предоставить интерфейс и определить детали поведения (как появилось "и" все архитекторы ПО быстро бегут удалять это "и"). Перед виртуальной функцией тогда стоят две различные задачи - признак недостаточного разделения задач. Поэтому и применяется что-то наподобие шаблонного метода. Герб Саттер "Новые сложные задачи на С++" стр.120
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
14.03.2012, 12:15 | #28 | ||
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Krok27
Цитата:
Цитата:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
||
14.03.2012, 13:09 | #29 | |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Цитата:
Знающий не говорит, говорящий не знает (С) Лао Цзы
Последний раз редактировалось Krok27; 14.03.2012 в 13:15. |
|
14.03.2012, 19:45 | #30 | ||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
1. Разрабатывать компонент системы, абстрагируясь от самой системы. 2. Влиять на поведение всей системы, изменяя поведение отдельных её компонентов, путем подмены отдельных компонентов, времени написания исходного кода. Что является реализацией паттерна "шаблонный метод". 3. Дробить существующие модули на кучку отдельных. Либо объединять их разными способами. Нет. Я называю вещи своими именами. Красная морковка - это морковка красного цвета. А виртуальный полиморфизм - это полиморфизм, реализованный при помощи виртуальных функций. Ваш К. О. Цитата:
Идея паттерна - получить возможность комфортно и безболезненно изменять поведение отдельного компонента. А вот цель паттерна - структурирование исходного кода. Дабы избежать дублирования кода, автоматизировать многие рутинные операции. Отделить компонент от остальной системы. Это повысит шансы системы на повторное использование (критично для таких вещей, как библиотеки, движки, и тп), и сделает разработку компонента более комфортной и быстрой. Соответственно, разработчику отдельного компонента останется только реализовать какие то няшки, а все остальное за него сделает многоразовый код. /зы любые паттерны в конечном счете решают проблему структуры исходного кода. Потому что все паттерны разработаны для одной глобальной цели - элегантное решение типичных проблем, связанных с архитектурой. |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
разработать интерфейс для дисков - интерфейс програмный | Notformal | Помощь студентам | 0 | 01.11.2011 22:52 |
Интерфейс | Jasper92 | Помощь студентам | 2 | 16.10.2010 12:51 |
Интерфейс | Lemo | Общие вопросы Delphi | 4 | 05.02.2009 19:01 |
Интерфейс | [Smarik] | Общие вопросы Delphi | 16 | 18.06.2008 10:37 |