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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
PitMagnum
3 / 3 / 0
Регистрация: 28.05.2012
Сообщений: 17
#1

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

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

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

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

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

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

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

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

Основы ООП - C++
Здраствуйте! Уже второй день пытаюсь разобраться и хорошего ответа так и не нашел. На форуме подобные вопросы видел, и википидею читал, но...

ООП, методы - C++
Такая проблема. Пишу класс, реализующий множество целых чисел. Число k принадлежит множеству, если a=1. Вот IntegerSet.h пока...

Книга по ООП Си++ - C++
Добрый вечер , мне дали задание ,написать двусвязный список на С++ с помощью ООП... Подскажите , пожалуйста , книгу или статью, по...

ООП С++ rectangle - C++
Всем привет.Возникла проблема с написанием метода,не смог найти алгоритм решения.Надеюсь на помощь) Сам метод: Метод определения...

ООП С++ прямоугольник - C++
Всем привет, помогите пожалуйста написать два конструктора, а то нигде не могу найти инфу как сделать конструктор с уже имеющейся...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.12.2012, 16:24     Парадигмы: императивная vs ООП #16
А как зовут поток принтера?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
19.12.2012, 16:37     Парадигмы: императивная vs ООП #17
Toshkarik, спасибо за исправление. Никогда особо не дружил с плюсовыми потоками :(

Цитата Сообщение от taras atavin Посмотреть сообщение
А как зовут поток принтера?
Эээ... Файл с именем LPT1, PRN или там /dev/pr0? Боюсь, это всё же ОС-специфичная вещь.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.12.2012, 16:45     Парадигмы: императивная vs ООП #18
Виндузячий дефолтный принтер.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
19.12.2012, 16:54     Парадигмы: императивная vs ООП #19
Цитата Сообщение от taras atavin Посмотреть сообщение
А как зовут поток принтера?
Что тут имеется ввиду под "принтером", и какого рода должно быть название?

Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Никогда особо не дружил с плюсовыми потоками
По большому счету, они мало чем отличаются, основное отличие это, как раз, в объектах класса streambuf и объектах классах производных от него ( filebuf в файловых потоках и stringbuf в строковых потоках ).

Добавлено через 3 минуты
taras atavin, если имеется ввиду физическое устройство принтер, для распечатки текста на бумаге, это это, как и сказал ~OhMyGodSoLong~, платформозависимое API. В самом C++ ничего нет для работы с принтером.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.12.2012, 16:54     Парадигмы: императивная vs ООП #20
Цитата Сообщение от Toshkarik Посмотреть сообщение
и какого рода должно быть название?
Идентификатор конечно. Что же ещё?
nshell32gmail
5 / 5 / 1
Регистрация: 26.11.2012
Сообщений: 19
19.12.2012, 17:07     Парадигмы: императивная vs ООП #21
Цитата Сообщение от ~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));
}
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2012, 17:18     Парадигмы: императивная vs ООП
Еще ссылки по теме:

Махинации с ооп - C++
Добавлено через 36 минут PS и да еще такой вопрос Class ss { int a; ss(int countss) { /*тут создать массив из ss */

ООП в с++ и OpenGL - C++
Пытаюсь написать код для упрощения работы с OpenGL #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;glut.h&quot; using namespace...

Материал по ООП - C++
Сейчас изучаю начало начал в с++. То есть простейшие консольные программы строю. Хотелось бы уже попробовать поработать с настоящим...

Начало ООП - C++
Привет всем! У меня началось изучение ООП и соответственно пошли классы. Первое задание - постpоить класс для pаботы с массивом. Класс...


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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.12.2012, 17:18     Парадигмы: императивная vs ООП #22
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Истина в том, что объект имеет состояние
имеет, а может и не иметь, вычисление того же синуса разными алгоритмами например, полиморфизм же
Yandex
Объявления
19.12.2012, 17:18     Парадигмы: императивная vs ООП
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru