Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
3 / 3 / 0
Регистрация: 28.05.2012
Сообщений: 23
1

Парадигмы: императивная vs ООП

19.12.2012, 00:08. Показов 2703. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, форумчане. Меня мучает проблема, можно так сказать, эстетически-идеологического характера. Суть заключается в следующем:

Концепция разделения данных и управления данными ООП дает большие преимущества - по крайней мере если алгоритмы имеют сложную структуру, то классы не дают превратиться в кашу из данных и обработчиков этих данных, что может случиться, если использовать императивный стиль программирования. С другой стороны ООП заточен на представление всего и вся в виде объектов. И во многих случаях это естественно и правильно. Например при написании персонажей в игре. Поскольку персонаж - это без сомнения объект.

Но беда в том, что не всегда что-то стойко ассоциируется с объектом. Например у меня есть модуль, который грубо говоря содержит 3 основных функции: шифрование по ГОСТ 28147-89 в режиме простой замены, шифрование по ГОСТ 28147-89 в режиме гаммирования и хеш-функция по ГОСТ 34.11-94. Последние две функции используют первую для своих вычислений. Есть еще вспомогательные функции. А еще есть данные, которые кое как распиханы по функциям. И я явственно вижу, что применив ООП парадигму, я смогу улучшить этот модуль - сформируется четкий интерфейс, данные будут размещены в одном месте, а следовательно, не будет всего этого дрочерства с передачей кучи параметров от одной функции к другой.

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

C++
1
2
Math mth;
x = mth.sin(y);
Нет стойкой ассоциации с объектом. Шифратор.вычислиХешФункцию("in god we trust"), Сортировщик.отсортируйМассив(arr) - все это как-то глупо и неестественно. Вот и спрашивается - как можно сделать элегантно - чтоб и данные с функциями не мешать, и чтоб потом как простые функции вызывать можно было? Есть, конечно, функторы, но объект все равно нужно где-то создать. Еще можно данные вынести в глобальную область - но мне всегда твердили, что глобальные переменные - это зло. Где истина?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2012, 00:08
Ответы с готовыми решениями:

Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше?
Доброго времени суток товарищи Столкнулся с такой ситуацией: куда двигаться дальше? Основы Java...

Парадигмы программирования
процедурное программирования импиративное ООП все это Парадигмы программирование? если да все...

Парадигмы программирования
Что правильно? "Выделяют три основные парадигмы программирования: процедурное программирование...

Парадигмы программирования с#
Добрый день, в поиске литературы и информации парадигмы программирования с#. Толков го ничего не...

21
5 / 5 / 5
Регистрация: 26.11.2012
Сообщений: 19
19.12.2012, 17:07 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
А если потребуется несколько состояний одновременно хранить?
статический массив,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class alg{
private:
const int state_count = 5;
int state[state_count];
public:
void setState(int state, int value)
{
///...
this->state[state] = value; 
///...
}
int getState(int state)
{
///...
return this->state[state];
///...
}
};

или флаги состояний, если состояния булевые.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class abc{
private:
int mask;
public:
abc():mask(0) {}
void setState(int state, bool value)
{
//...
if (value)
mask |= 1<<(state-1);
else
mask -= 1<<(state-1);
//...
}
bool getState(int state)
{
return (mask && (state-1));
}
};
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.12.2012, 17:18 22
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Истина в том, что объект имеет состояние
имеет, а может и не иметь, вычисление того же синуса разными алгоритмами например, полиморфизм же
0
19.12.2012, 17:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2012, 17:18
Помогаю со студенческими работами здесь

Парадигмы текстового редактора
У текстовых редакторов существует 2 парадигмы (может быть слово неправильное и неточное, но ничего...

Какие существуют парадигмы программирования?
Какие существуют парадигмы программирования и в чем их особенности? функциональное, модульное,...

Лучший язык для распределенной парадигмы
Хочу написать пару программ на таком. Какой посоветуете ? (Язык, содержащий специальные конструкции...

Профессиональный рост и смена парадигмы проф. ориентации
Всем привет Хочу в этой теме затронуть такой казалось бы избитый вопрос как &quot;образование для IT...


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

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