Модераторы: Се ля ви
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Известные алгоритмы для разных объектов, общий интерфейс для любых видов объектов 
:(
    Опции темы
Franzis
  Дата 2.4.2011, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Для решения некоторой задачи нужно спроектировать некоторую архитектуру классов. Для объектов (которые будут представляться массивом содержащие в себе другие объекты, которые могут быть представлены в разном виде в зависимости от задачи) можно будет реализовать различные алгоритмы с известным поведением, но с неизвестной внутренней обработкой. Т.е. для одного вида объектов можно будет использовать только его алгоритмы, а другие нельзя, но поведение одинаковое. Над объектами будут работать несколько алгоритмов(его типа) в цикле. 

Каким образом можно избежать применение неверного алгоритма, которые не подходит к выбранному объекту?

Изучив паттерны, более близким оказался паттерн Strategy, но там создаются алгоритмы для определенного типа данных и значит можно будет легко менять один алгоритм на другой.

P.S. хотелось бы составить более общий интерфейс, чтобы можно было в будущем расширять приложение новыми классами.

Спасибо.
PM MAIL   Вверх
Franzis
  Дата 2.4.2011, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Примерно такой получился вариант. Есть некоторые данные которые могут представляться в разных формах - это Data и OtherForm. Трансформация из одной формы в другую делается с помощью Translyator. Есть различные алгоритмы AlgoType1, 2, 3, ... . Эти алгоритмы зависят от вида представленных данных и им требуется либо переводить в одну форму из другой либо наоборот. В алгоритмы могут быть переданы данные в виде массива. Все эти алгоритмы будут вызываться главной программой в определенном порядке. В будущем какой-то из алгоритмов может быть изменен, а также могут поменяться сами данные. 

Можно добиться в таком случае изменяемой или расширяемой структуры, чтобы главная программа по возможности не менялась?

user posted image

Это сообщение отредактировал(а) Franzis - 2.4.2011, 16:55
PM MAIL   Вверх
mes
Дата 5.4.2011, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Franzis @  2.4.2011,  11:04 Найти цитируемый пост)
 применение неверного алгоритма, которые не подходит к выбранному объекту?

см. замыкание (closure)





--------------------
PM MAIL WWW   Вверх
Franzis
  Дата 6.4.2011, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



mes, если это то Замыкание (программирование), то как тогда менять объекты алгоритмов во время выполнения, если анонимные классы пишутся заранее? Или я что-то не понимаю?
PM MAIL   Вверх
mes
Дата 7.4.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Franzis @  6.4.2011,  19:48 Найти цитируемый пост)
, если это то Замыкание (программирование), 

не совсем, это частный случай для процедур.. 

Цитата(Franzis @  6.4.2011,  19:48 Найти цитируемый пост)
 то как тогда менять объекты алгоритмов во время выполнения, 

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



--------------------
PM MAIL WWW   Вверх
mes
Дата 7.4.2011, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



перечитал задание, видать в первый раз не до конца понял что требовалось.. 
подумал, что нужно проассоцировать объект с нужным ему алгоритмом..
а тут вроде Вы хотите применить любой алгоритм, к любому объекту множества.. 
т.е. хотите имея базовые классы/интерфейсы применить друг другу.. 
тогда если иерархия конечна, то поможет двойная диспатчеризация.. 
в более сложных нужнен идентификатор типа и таблица соответсвий..

Добавлено через 3 минуты и 20 секунд
было б хорошо, если бы еще раз сформулировали задачу, и желательно с примером..




--------------------
PM MAIL WWW   Вверх
Franzis
Дата 9.4.2011, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Есть программа которая обрабатывает эти данные:

Код

class Program {
    void exec() {
        algo1Aa.do(arrayData);
        algo2Aa.do(arrayData);
    }
};


Код

class Algo1Aa {
    void do(ArrayData){
        // Делаем что-то с данными
    }
};


Аналогично и для Algo2Aa, но производятся уже другие действия. 

В будущем может появиться реализация лучше и можно реализовать Algo1Ab и легко заменить в основной программе. Тут проблем нет.

Код

class Program{
    void exec(){
        algo1Ab.do(arrayData);
        algo2Aa.do(arrayData);
    }
};


Но может появиться алгоритм, которые еще лучше работает, но уже, например, не со словами, а со структурой. Получается нужно будет реализовать свои алгоритмы Algo1Ba и Algo2Ba.

Значит, такое уже не будет работать, т.к. они работают с разными данными
Код

class Program{
    void exec(){
        algo1Ba.do(arrayData);
        algo2Aa.do(arrayData);
    }
};

А нужно algo1Ba и algo2Ba.

Есть одна мысль использовать исключения при неверном использовании алгоритма. Корректно это с точки зрения проектирования или можно пойти другим путем?
PM MAIL   Вверх
mes
Дата 10.4.2011, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



сорри, но объяснение слишком путано и не дает точки опоры, чтоб понять модель которую Вы описываете,
а в таких условиях слишком много вариантов, чтоб выбрать из него подходящий.. 



--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Системный анализ, проектирование и UML"
Се ля ви

Форум "Системный анализ, проектирование и UML" предназначен для обсуждения вопросов, так или иначе связанных с этапами жизненного цикла автоматизированных (программных, информационных, автоматических) систем:

• предпроектные обследования объектов автоматизации;

• разработка концепции создания систем;

• моделирование бизнес-процессов (в т.ч. на UML);

• проектирование архитектуры систем;

• управление проектами;

• управление качеством;

• CASE-средства;

• реинжиниринг.


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

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


 




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


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

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