Форум программистов, компьютерный форум CyberForum.ru

Наследование интерфейса схожих классов (архитектура) - C++

Восстановить пароль Регистрация
 
Oryel
11 / 1 / 0
Регистрация: 02.10.2015
Сообщений: 80
22.09.2016, 10:53     Наследование интерфейса схожих классов (архитектура) #1
Имеется класс абстрактных операций. В нем есть чисто виртуальный метод operate( AbstractObj * )
C++
1
2
3
4
class Abstractperation{
public:
     virtual int operate( AbstractObj * ) = 0;
};
От него наследуются три класса. Вопрос такой. Есть операция, в которой нужно передать сверху еще дополнительный параметр - строку
C++
1
int operate( AbstractObj *, const std::string & )
Как в таком случае унаследовать интерфейс? Как преобразовать ? Логически все классы - потомки операции. Разница в том, что часть операций из серии read а часть write...как лучше поступить в плане архитектуры и интерфейса ?

Не по теме:


Случайно имя темы задал не так, как исправить не знаю. Модератор сорри.

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2016, 10:53     Наследование интерфейса схожих классов (архитектура)
Посмотрите здесь:

Система классов визуального интерфейса C++
Наследование классов C++
наследование классов C++
C++ Наследование классов
C++ Наследование классов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,223
22.09.2016, 11:00     Наследование интерфейса схожих классов (архитектура) #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Oryel, так реализуйте паттерн Command - в конструктор будешь передавать каждому нужные параметры, а у всех будет лишь void execute()
gru74ik
22.09.2016, 11:01
  #3

Не по теме:

Цитата Сообщение от Oryel Посмотреть сообщение
Случайно имя темы задал не так, как исправить не знаю. Модератор сорри.
Через форму подачи жалобы решил вопрос - всё правильно сделал. Название исправлено. Редко встретишь такую сознательность. Респект.

Oryel
11 / 1 / 0
Регистрация: 02.10.2015
Сообщений: 80
22.09.2016, 11:21  [ТС]     Наследование интерфейса схожих классов (архитектура) #4
Я реализовал паттерн, как раз чтобы сделать легче задаю вопрос. Просто вопрос в чем. Я не могу понять как красиво объединить команды, которым нужно только указатель на объект и которым нужно еще вдовесок строку передать... вот пример UML. Есть операции SetValue . .Как его в данную архитектуру вписать?

1) Могу в сразу заменить все на operate( AbstractObj *, const std::string & ), наверное только еще по умолчанию значение строки сделать. А в нужных командах использовать строку, в ненужных игнорировать
2) Могу перегрузить operate, а в ненужных классах пустышку сделать и тп.

Только звучит костыльно это все...вот и интересует как сделать сразу и хорошо?
Миниатюры
Наследование интерфейса схожих классов (архитектура)  
Oryel
11 / 1 / 0
Регистрация: 02.10.2015
Сообщений: 80
22.09.2016, 11:57  [ТС]     Наследование интерфейса схожих классов (архитектура) #5
в конструктор будешь передавать каждому нужные параметры
Честно, не понял.
В чей конструктор?
Операции работают с строкой (класс свой AbstractString, создаются они через фабричный метод). Операции Выдают ее значение или преобразуют в другую форму. Но если надо изменить значение строки? Решил добавить класс setValue. По логике - это тоже операция. Вот е к сущности операций и приплел. Застрял на том, что банально не знаю , как лучше поступить, чтобы ее красиво использовать.

Добавлено через 1 минуту
Сорри и тебе....перепутал паттерн стратегия и команда. Попробую. Спасибо за совет

Добавлено через 26 минут
Если будут другие хорошие мысли пишите.
Пока, что попробую паттерн команда разобрать и реализовать
Mr.X
Эксперт С++
 Аватар для Mr.X
2796 / 1572 / 246
Регистрация: 03.05.2010
Сообщений: 3,649
22.09.2016, 12:45     Наследование интерфейса схожих классов (архитектура) #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Oryel Посмотреть сообщение
Как в таком случае унаследовать интерфейс?
А что мешает в классе
Цитата Сообщение от Oryel Посмотреть сообщение
Abstractperation
перегрузить функцию
Цитата Сообщение от Oryel Посмотреть сообщение
operate
с двумя аргументами?
Oryel
11 / 1 / 0
Регистрация: 02.10.2015
Сообщений: 80
22.09.2016, 15:38  [ТС]     Наследование интерфейса схожих классов (архитектура) #7
Цитата Сообщение от Oryel Посмотреть сообщение
2) Могу перегрузить operate, а в ненужных классах пустышку сделать и тп.
Я написал об этой идее выше.

Просто хочется знать какой вариант оптимален и т.п. Хотя это просто задания для самоконтроля, хочется выполнить го максимально осознанно и эффективно, а не для галки.

Кстати при перегрузке оператора, она будет чисто виртуальной, значит придется ее переопределять во всех потомках. А в потомках , где он не нужен просто его объявить и сделать "заглушкой"?
hoggy
5030 / 2113 / 403
Регистрация: 15.11.2014
Сообщений: 4,798
Завершенные тесты: 1
22.09.2016, 18:15     Наследование интерфейса схожих классов (архитектура) #8
Цитата Сообщение от Oryel Посмотреть сообщение
Честно, не понял.
В чей конструктор?
http://cpp-reference.ru/patterns/beh...terns/command/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2016, 08:45     Наследование интерфейса схожих классов (архитектура)
Еще ссылки по теме:

Наследование классов C++
C++ Наследование переменных от интерфейса
C++ Наследование классов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Oryel
11 / 1 / 0
Регистрация: 02.10.2015
Сообщений: 80
23.09.2016, 08:45  [ТС]     Наследование интерфейса схожих классов (архитектура) #9
Цитата Сообщение от Oryel Посмотреть сообщение
Сорри и тебе....перепутал паттерн стратегия и команда. Попробую. Спасибо за совет
Подумал, что про стратегию( т.е. не команду ) идет речь, отсюда и вопрос. А так, гуглом пользоваться умею + наличие книги о паттернах.
Yandex
Объявления
23.09.2016, 08:45     Наследование интерфейса схожих классов (архитектура)
Ответ Создать тему
Опции темы

Текущее время: 07:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru