|
3 / 3 / 0
Регистрация: 28.05.2012
Сообщений: 23
|
||||||
Парадигмы: императивная vs ООП19.12.2012, 00:08. Показов 3162. Ответов 21
Метки нет (Все метки)
Здравствуйте, форумчане. Меня мучает проблема, можно так сказать, эстетически-идеологического характера. Суть заключается в следующем:
Концепция разделения данных и управления данными ООП дает большие преимущества - по крайней мере если алгоритмы имеют сложную структуру, то классы не дают превратиться в кашу из данных и обработчиков этих данных, что может случиться, если использовать императивный стиль программирования. С другой стороны ООП заточен на представление всего и вся в виде объектов. И во многих случаях это естественно и правильно. Например при написании персонажей в игре. Поскольку персонаж - это без сомнения объект. Но беда в том, что не всегда что-то стойко ассоциируется с объектом. Например у меня есть модуль, который грубо говоря содержит 3 основных функции: шифрование по ГОСТ 28147-89 в режиме простой замены, шифрование по ГОСТ 28147-89 в режиме гаммирования и хеш-функция по ГОСТ 34.11-94. Последние две функции используют первую для своих вычислений. Есть еще вспомогательные функции. А еще есть данные, которые кое как распиханы по функциям. И я явственно вижу, что применив ООП парадигму, я смогу улучшить этот модуль - сформируется четкий интерфейс, данные будут размещены в одном месте, а следовательно, не будет всего этого дрочерства с передачей кучи параметров от одной функции к другой. С другой стороны я понимаю, что обрамив все в класс или несколько классов, я обречен на вызов этих функций сугубо через объекты, которые мне предварительно нужно создать перед использованием. Но это было бы так же глупо, как если бы я захотел вычислить синус и мне пришлось бы написать:
0
|
||||||
| 19.12.2012, 00:08 | |
|
Ответы с готовыми решениями:
21
Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше? Парадигмы программирования Парадигмы программирования |
|
|
|||||||||||||
| 19.12.2012, 00:33 | |||||||||||||
Добавлено через 2 минуты Главное в этом всю картину объять и понять что действительно нужно пользователю и как все сгруппировать.
0
|
|||||||||||||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||
| 19.12.2012, 01:50 | ||
|
С хеш-функцией то же самое. Если это вычислиМнеMD5(), то у неё нет состояния. Если же это объект "вычислитель хеш-функций", то у него есть состояние: текущий алгоритм, по которому он вычисляет хеш-функцию. Но его можно превратить в функцию, которая не имеет состояния, если она будет принимать этот алгоритм как аргумент. Соответственно, можно и наоборот: сделать объект, который будет хранить это состояние у себя, а его метод будет подсовывать это состояние stateless-функции.
0
|
||
|
5 / 5 / 5
Регистрация: 26.11.2012
Сообщений: 19
|
|
| 19.12.2012, 02:11 | |
|
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 19.12.2012, 02:30 | |
|
А если потребуется несколько состояний одновременно хранить?
0
|
|
| 19.12.2012, 03:38 | |
|
Не по теме: Императивная парадигма является противоположностью декларативной, но не объектной.
0
|
|
|
3 / 3 / 0
Регистрация: 28.05.2012
Сообщений: 23
|
||||||||
| 19.12.2012, 07:27 [ТС] | ||||||||
|
Блин, а про статические методы я и не подумал совсем.. спасибо, такая концепция меня вполне устраивает.
~OhMyGodSoLong~, а разве несколько состояний нельзя хранить нельзя хранить в нескольких статических переменных? Ну, естественно, если это две разные категории состояния. Если нужно хранить несколько состояний одной категории, то если я все правильно понял, это возможно только при двух объектах с разными состояниями. Но здесь-то и противоречий в таком случае не возникает - объект сам собой напрашивается. Меня еще один вопрос интересует - операторы cin и cout являются по сути классовыми объектами. А где они создаются?
0
|
||||||||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||
| 19.12.2012, 09:11 | ||
|
0
|
||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||||
| 19.12.2012, 15:37 | ||||||||
0
|
||||||||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||
| 19.12.2012, 15:49 | ||
|
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 19.12.2012, 15:53 | |
|
ОО - часть императивной: императивное программирование - это написание текстов, указывающих, что, как и с чем надо сделать, но не что в результате получить, а ООП - это написание текстов, указывающих, что, как и с чем надо сделать + декомпозиция задачи на основе типов данных + объединение подпрограмм с типами данных, ими обрабатываемыми + объединение свойств целого в единую сущность. По самой ОО из этого следует, что ОО - прямой потомок императивной парадигмы.
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|||||||
| 19.12.2012, 16:01 | |||||||
|
Герц, Пожалуйста:
0
|
|||||||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|||||||
| 19.12.2012, 16:12 | |||||||
0
|
|||||||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
| 19.12.2012, 16:21 | ||||||
1
|
||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 19.12.2012, 16:24 | |
|
А как зовут поток принтера?
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||
| 19.12.2012, 16:37 | ||
|
Toshkarik, спасибо за исправление. Никогда особо не дружил с плюсовыми потоками :(
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 19.12.2012, 16:45 | |
|
Виндузячий дефолтный принтер.
0
|
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|||
| 19.12.2012, 16:54 | |||
|
Добавлено через 3 минуты taras atavin, если имеется ввиду физическое устройство принтер, для распечатки текста на бумаге, это это, как и сказал ~OhMyGodSoLong~, платформозависимое API. В самом C++ ничего нет для работы с принтером.
0
|
|||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 19.12.2012, 16:54 | |
|
0
|
|
| 19.12.2012, 16:54 | |
|
Помогаю со студенческими работами здесь
20
Парадигмы программирования с# Парадигмы текстового редактора Какие существуют парадигмы программирования? Лучший язык для распределенной парадигмы Профессиональный рост и смена парадигмы проф. ориентации Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|