![]() |
Модераторы: Се ля ви |
![]() ![]() ![]() |
|
Franzis |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.2.2011 Репутация: нет Всего: 1 |
Для решения некоторой задачи нужно спроектировать некоторую архитектуру классов. Для объектов (которые будут представляться массивом содержащие в себе другие объекты, которые могут быть представлены в разном виде в зависимости от задачи) можно будет реализовать различные алгоритмы с известным поведением, но с неизвестной внутренней обработкой. Т.е. для одного вида объектов можно будет использовать только его алгоритмы, а другие нельзя, но поведение одинаковое. Над объектами будут работать несколько алгоритмов(его типа) в цикле.
Каким образом можно избежать применение неверного алгоритма, которые не подходит к выбранному объекту? Изучив паттерны, более близким оказался паттерн Strategy, но там создаются алгоритмы для определенного типа данных и значит можно будет легко менять один алгоритм на другой. P.S. хотелось бы составить более общий интерфейс, чтобы можно было в будущем расширять приложение новыми классами. Спасибо. |
|||
|
||||
Franzis |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.2.2011 Репутация: нет Всего: 1 |
Примерно такой получился вариант. Есть некоторые данные которые могут представляться в разных формах - это Data и OtherForm. Трансформация из одной формы в другую делается с помощью Translyator. Есть различные алгоритмы AlgoType1, 2, 3, ... . Эти алгоритмы зависят от вида представленных данных и им требуется либо переводить в одну форму из другой либо наоборот. В алгоритмы могут быть переданы данные в виде массива. Все эти алгоритмы будут вызываться главной программой в определенном порядке. В будущем какой-то из алгоритмов может быть изменен, а также могут поменяться сами данные.
Можно добиться в таком случае изменяемой или расширяемой структуры, чтобы главная программа по возможности не менялась? ![]() Это сообщение отредактировал(а) Franzis - 2.4.2011, 16:55 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: нет Всего: 250 |
||||
|
||||
Franzis |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.2.2011 Репутация: нет Всего: 1 |
mes, если это то Замыкание (программирование), то как тогда менять объекты алгоритмов во время выполнения, если анонимные классы пишутся заранее? Или я что-то не понимаю?
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: нет Всего: 250 |
не совсем, это частный случай для процедур.. алгоритм меняется вместе с объектом.. в этом и суть замыкания.. что связка всегда полноценна... при этом можно связывать не с одним алгоритмом, а с группой, тогда можно выбирать один из связанных, а также связывать не с объектом, а с креаторной функцией.. что лучше подойдет зависит от контекста задачи.. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: нет Всего: 250 |
перечитал задание, видать в первый раз не до конца понял что требовалось..
подумал, что нужно проассоцировать объект с нужным ему алгоритмом.. а тут вроде Вы хотите применить любой алгоритм, к любому объекту множества.. т.е. хотите имея базовые классы/интерфейсы применить друг другу.. тогда если иерархия конечна, то поможет двойная диспатчеризация.. в более сложных нужнен идентификатор типа и таблица соответсвий.. Добавлено через 3 минуты и 20 секунд было б хорошо, если бы еще раз сформулировали задачу, и желательно с примером.. |
|||
|
||||
Franzis |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.2.2011 Репутация: нет Всего: 1 |
В программе присутствуют данные, которые могут представлять из себя массив чисел, строку или сложную структуру. Но их обработка сложна в их обычном виде. Если их перевести в другой вид, например, бинарный, отдельные слова или в простую структуру, то можно легко обработать на конвейере алгоритмов. При этом нужен механизм перевода в один вид из другого и наоборот.
Есть программа которая обрабатывает эти данные:
Аналогично и для Algo2Aa, но производятся уже другие действия. В будущем может появиться реализация лучше и можно реализовать Algo1Ab и легко заменить в основной программе. Тут проблем нет.
Но может появиться алгоритм, которые еще лучше работает, но уже, например, не со словами, а со структурой. Получается нужно будет реализовать свои алгоритмы Algo1Ba и Algo2Ba. Значит, такое уже не будет работать, т.к. они работают с разными данными
А нужно algo1Ba и algo2Ba. Есть одна мысль использовать исключения при неверном использовании алгоритма. Корректно это с точки зрения проектирования или можно пойти другим путем? |
||||||||
|
|||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: нет Всего: 250 |
сорри, но объяснение слишком путано и не дает точки опоры, чтоб понять модель которую Вы описываете,
а в таких условиях слишком много вариантов, чтоб выбрать из него подходящий.. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Системный анализ, проектирование и UML" | |
|
Форум "Системный анализ, проектирование и UML" предназначен для обсуждения вопросов, так или иначе связанных с этапами жизненного цикла автоматизированных (программных, информационных, автоматических) систем: • предпроектные обследования объектов автоматизации; • разработка концепции создания систем; • моделирование бизнес-процессов (в т.ч. на UML); • проектирование архитектуры систем; • управление проектами; • управление качеством; • CASE-средства; • реинжиниринг. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Системный анализ, проектирование и UML | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |