Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
1

Каким путем пойти: дублирование, делегация или наследование?

18.02.2014, 20:22. Показов 829. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Стоит задача реализации нескольких алгоритмов для шифрации и дешифрации. Стою я между выбором из той самой "святой троицы". Почему встал такой вопрос? А вот так уж случилось, что коды реализации алгоритмов шифрации и дешифрации различаются лишь одной-двумя строчками. Например:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void encrypt() throws EncryptionException {
    EncryptionKeyIterator keyIteartor = new EncryptionKeyIterator(key);
    try {
        int currentCharCode;
        while ((currentCharCode = in.read()) != -1) {
            char current = (char) currentCharCode;
            char keyChar = keyIteartor.getNext();
            char encrypted = table.getEncryptedCharacter(keyChar, current);
            out.write((int)encrypted);
        }
    } catch (IOException e) {
        throw new EncryptionException(e.getMessage());
    }
}
// для алгоритма дешифрации строчка №8 выглядит чутку иначе:
// char decrypted = table.getDecryptedCharacter(keyChar, current);

Таким образом, получается, что для алгоритма дешифрации почти весь код дублируется.
Думал я сделать абстрактный метод char getCharacter(char key, char source), для переопределения оного в сабкласах шифратора и дешифратора, но мне кажется, что это не самый хорший ваиант: фактически правильных реализаций этого метода может быть только две, а сабкласов-то можно наплодить тысячи!

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

Ну и третий (а точнее первый - с него все началось) - это дублирование.

В общем интересно узнать, кто каким путем (и почему) пошел бы. Любые предложения по теме приветствутся.
Зранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2014, 20:22
Ответы с готовыми решениями:

Каким путем пойти при создании матрицы?
Хай алл! Подскажите плиз каким путем мне пойти. Вот пересел на асп.нет 2 недели назад, сцуко...

Есть gtx 660, каким путем пойти?
задачка у меня такая: есть компьютер четырехъядерный i5 3ггц - с одной видеокартой gtx 660...

Каким образом эффективно выучить C# и пойти работать в эту сферу
Ребят! Подскажите пожалуйста. С программированием знаком давно. изучал pascal, delphi, немного...

Дублирование базы , или дублирование информациии
Доброго времени суток ! Поставлена задача: мне нужно либо при изменении или добавлении данных...

1
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
19.02.2014, 12:14 2
Я бы сделал enum с двумя элементами - encrypt и decrypt. Определил бы у них метод char getCharacter(char key, char source). И передавал бы в метод (де-)шифрования нужный элемент enum. А метод бы вообще оставил один, нечего код дублировать.
0
19.02.2014, 12:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2014, 12:14
Помогаю со студенческими работами здесь

Убрать дублирование кода через наследование
Добрый день. Есть два почти одинаковых класса со статическим членами: class First { public: ...

Каким путем идти дальше...
Доброго времени суток, гугу SEO оптимизации! На данный момент работаю над первым, и можно...

Каким способом можно изменить дублирование id товара, если их несколько одинаковых добавилось, а удалить надо 1
const Cart = (props) => { debugger let elementsCart = props.cart.cart.map((c) => { ...

Куда пойти ПИ или КЗОИ
Мне в этом году нужно поступать в универ, но я не могу определиться куда пойти на ПИ (програмная...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru