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

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

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

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

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

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

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

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

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

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

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

21
5 / 5 / 5
Регистрация: 26.11.2012
Сообщений: 19
19.12.2012, 17:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ~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
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.12.2012, 17:18
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Истина в том, что объект имеет состояние
имеет, а может и не иметь, вычисление того же синуса разными алгоритмами например, полиморфизм же
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.12.2012, 17:18

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru