Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Результаты опроса: используете ли вы ооп
да 238 86.55%
нет 37 13.45%
Голосовавшие: 275. Вы ещё не голосовали в этом опросе

 
 
Рейтинг 4.76/461: Рейтинг темы: голосов - 461, средняя оценка - 4.76
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386

Стоит ли использовать ООП?

09.02.2010, 13:44. Показов 103143. Ответов 793
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Возник такой вопрос: стоит ли использовать ооп. Даже не так, когда использовать ооп?
Иногда (даже чаще всего) легче написать простые функции, а не мутить с классами обектами и методами.
Раздражает инкапсуляция - какой вообще ее смысл? Чтобы получить переменную класса по правилам ооп нужно создавать метод для ее чтения? когда такой подход оправдан - ведь затрачивается куча лишнего времени.
5
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2010, 13:44
Ответы с готовыми решениями:

Стоит ли использовать ООП -- часть вторая
У людей задающих подобные вопросы не все в порядке с пониманием ООП. Например, в параллельной теме человек интересуется: На самом...

Какие РЕАЛЬНО есть причины НЕ использовать ООП?
Появился такой вопрос. Все мы знаем о шумихе вокруг ООП, спорной идее наследования, других невнятных идей которых можно добиться...

Где стоит использовать bootstrap и стоит ли вообще использовать CSS фреймворки?
Здравствуйте. Лично я ужасаюсь ковырять стили, когда к сайту подключен bootstrap и мало понимаю, чем он хорош вообще. В данной теме я бы...

793
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
15.07.2017, 02:52
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TRam_ Посмотреть сообщение
И что ООП в первом (грубом) приближении являет собой работу с указателями на функции, записанными внутрь аргумента, и которым этот самый аргумент передаётся.
Нет. ООП — это SOLID.
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
15.07.2017, 11:55
Цитата Сообщение от TRam_ Посмотреть сообщение
Первое можно приближённо представить в виде
нарисовать(квадрат, способ_рисования_квадрата() ), стереть(круг, способ_стирания_круга()) и т.п. Причём функция "способа" объявляется не где-то там в массиве возможных способов (массиве указателей на функции), а непосредственно в блоке бывшей структуры, а ныне - класса. С возможностью автоматически перенаправлять на аналогичные по действию функции, написанные для подобных объектов.
Так это можно и без ооп сделать.
Цитата Сообщение от TRam_ Посмотреть сообщение
В ООП реализация непосредственно встраивается в суть аргумента, в то время как без ООП аргумент и реализация существуют независимо.
В любом ЯП есть модульность, а классы в ооп это и есть модули с большими возможностями сокрытия информации. Однако наследование и полиморфизм всё портит.
Думаете на на "безоопном" си невозможно пользоваться паттернами проектирования? Использовать высокоуровневые абстракции? Применять модульность? Вы заблуждаетесь, ибо это можно делать без всякой виртуальщины, конструкторщины и деструкторщины.
Короче - без их тормозов.
Цитата Сообщение от korvin_ Посмотреть сообщение
Обычной программирование, управляемое данными.
А без этого программа становится "глупая" и соответственно "тормознутая". Это то, что я называю "умная программа", так как она изначально "знает" определённые вещи, и ей не приходится этим вещам учиться на каждом новом шагу.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
15.07.2017, 12:48
Цитата Сообщение от CoderHuligan Посмотреть сообщение
А без этого программа становится "глупая" и соответственно "тормознутая"
Только в твоих влажных фантазиях.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
09.08.2017, 16:44
Цитата Сообщение от MolodoyCoder Посмотреть сообщение
Напишите тогда кратко в чем глобальная и основная разница между ооп и процедурным программированием
ООП это способ группировки функций по применимости к наборам данных. Ну это чисто технически.
А в общем - ООП это методика проектирования программного обеспечения основанная на моделировании сущностей предметной области. процедурное/функциональное программирование - это программирование с абсолютным отсутствием какой либо методики.
1
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
10.08.2017, 23:55
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Вы заблуждаетесь, ибо это можно делать без всякой виртуальщины, конструкторщины и деструкторщины
Для этого придется виртуальщину конструкторщину и деструкторщину делать ручками вместо компилятора. Не нужно путать методологию с механизмом ее поддержки компилятором. Если для выполнения определенных задач нужно определенное количество тактов процессора, то меньшим никак обойтись не удастся. При этом компилятор снизит накладные расходы до минимальных с гораздо большей вероятностью чем человек. Поэтому все эти вручную в лучшем случае чреваты гораздо большим по размеру и гораздо менее читабельным кодом.

Добавлено через 18 минут
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Короче - без их тормозов.
Каких тормозов? Инстанс все равно придется инициализировать и финализировать. Потратить на это тактов меньше чем нужно все равно не удастся. Ну а что касается сказок о тормознутости виртуальщины, то в общем случае виртуальщина быстрее свича. В лучшем для свича случае одинакова со свичем. При этом локальность данных при размере инстанса больше 32 байт до одного места, при размере более 64 байт вообще никакой рояли не играет, это даже если не брать во внимание вангователь предкеширования. А вот локальность машинного кота размер играет и еще какой. Если кот полностью в L2 влазит в следствие виртуальщины то мышей ловить будет. А жирный кот статического полиморфизма как раз и будет тормозить при переходах. Напомню любой long jump сбрасывает L1. Соответсвенно ожирение машинного кота путем комбинаторного взрыва к которому ведет статический полиморфизм и дает тормознутость.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
11.08.2017, 11:50
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
процедурное/функциональное программирование - это программирование с абсолютным отсутствием какой либо методики.
Есть автоматное программирование, например. Что касается функционального,, то есть методология, которая основана на алгорифмах Маркова(язык Рефал).
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ну а что касается сказок о тормознутости виртуальщины, то в общем случае виртуальщина быстрее свича.
Можно(и нужно) обойтись и без свича. А если так то мой код улетит в космос...
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.08.2017, 13:14
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Можно(и нужно) обойтись и без свича. А если так то мой код улетит в космос...
Indirect call будет в любом случае. Тормознутым считается не сам Indirect Call а vmt lookup. Но какой либо lookup всер равно будет, без него indirect call не имеет смысла. При этом VMT достаточно компактны чтобы полностью жить в кеше. При инстансах же больше 32 байт локальность данных самих инстансов уже никакого значения не имеет.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Есть автоматное программирование, например.
Ото точно тормоза без виртуальщины будут. Мало того апологеты автоматного программирования просто очень неаброзованные люди которые не понимают что любая программа реализует конечный автомат. Просто не везде это явно видно в следствие сокрытия деталей реализации автомата обеспечивающего возможность использования на порядок более высокоуровневых абстракций.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
12.08.2017, 13:49
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Но какой либо lookup всер равно будет, без него indirect call не имеет смысла.
Вот от этого lookupа, можно(и нужно) избавляться. Никакого lookupа быть не должно. Нигде. Никогда.. Примем за цель.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ото точно тормоза без виртуальщины будут.
Ну, да, ну да...
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Мало того апологеты автоматного программирования просто очень неаброзованные люди которые не понимают что любая программа реализует конечный автомат.
Любая программа ЯВНО использует понятие СОСТОЯНИЕ? Как ПАРАМЕТР? Отнюдь нет, отвечу я за вас.
А автоматное использует этот параметр, как основу, на которой зиждется вся структура программы. И таковая абстрактная сущность, я вам скажу, гораздо ближе к реальному миру, чем мышление в терминах обьектов.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Просто не везде это явно видно в следствие сокрытия деталей реализации автомата обеспечивающего возможность использования на порядок более высокоуровневых абстракций.
Ага. Вот в соседней темке кое-кто на днях распинался, что ваша модульность типа это и есть наше ООП. И вы туда же. Выходит теперь что любая программа реализующая конечный автомат есть ваше ооп? Типа есть таблица виртуальных функций, которая тайно его реализует? Чушь, ибо, отсутствует явное определения такой абстрактной вещи, как состояние. А без этого любая таблица есть просто набор данных.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
12.08.2017, 13:58
Цитата Сообщение от CoderHuligan Посмотреть сообщение
реализующая конечный автомат есть ваше ооп?
Гради Буч "Object-Oriented Analysis and Design with Application". Объекты могут быть реализованы через конечные автоматы.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
как состояние
Объект состоит из состояния и поведения.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.08.2017, 14:14
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Вот от этого lookupа, можно(и нужно) избавляться. Никакого lookupа быть не должно. Нигде. Никогда.. Примем за цель.
Будет жирный жирный невменяемо запутанный кот. Кстати так о птичках даже свич через lookup работает.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Чушь, ибо, отсутствует явное определения такой абстрактной вещи, как состояние. А без этого любая таблица есть просто набор данных.
НАбор переходов это тоже набор данных. Кстати в соответствии со вторым принципом фон Неймана в общем то код и данные не имеют между собой никакой разницы.
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Выходит теперь что любая программа реализующая конечный автомат есть ваше ооп?
Не любая а грамотно спроектированная. Начнем с простого факта. Автомат реализующий ту же функциональность что и пара автоматов имеющих n и m состояний будет иметь n*m состояний в то время как пара n+m состояний. Соответсвенно разделение автомата на наборы подавтоматов резко упрощают программу и повышают ее надежность. Так вот именно огромные возможности такого разделения на подавтоматы и группировки подавтоматов и дает ООП, при этом оставляя возможности повторного использования подавтоматов в других местах. Собственно говоря все паттерны это способы уменьшения количества состояний автомата.

Добавлено через 13 минут
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Любая программа ЯВНО использует понятие СОСТОЯНИЕ?
Любая. Хотя бы потому что CPU это конечный автомат с состояниями которого программа работает. Вообще CPU это фактически УМТ а программа это правила специализированной МТ.

Добавлено через 1 минуту
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Объект состоит из состояния и поведения.
То бишь хранит текущее состояние и имеет набор правил перехода из одного состояния в другое.
0
Заблокирован
12.08.2017, 14:18
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
То бишь хранит текущее состояние и имеет набор правил перехода из одного состояния в другое.
ничего подобного. Во первых, переходы не только в объекте, но и в среде, во вторых изменения могут быть недетерминированы(например -- время имеет значение)
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
12.08.2017, 14:21
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Гради Буч "Object-Oriented Analysis and Design with Application". Объекты могут быть реализованы через конечные автоматы.
Да я в курсе, книжка имеецца.. Просто почти НИКТО их не реализует через КА.
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Объект состоит из состояния и поведения.
Автомат состоит из состоянИЙ и переходов между ними. Поведение реализуется внешним интерфейсом автомата. Обьекты могут быть реализованы как автоматы, но это всё не то..
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Будет жирный жирный невменяемо запутанный кот. Кстати так о птичках даже свич через lookup работает.
Видимо мы о разном. Я о табличных методах. И о прямом доступе к ячейкам таблиц, вместо линейного поиска. См. книжку "С.Макконелл. Совершенный код", где логика реализуется путём прямого обращения к ячейкам таблиц. Так кстати, работают сами процесоры, микропрограммы которых зашиты в логическую матрицу. Вобоще, слово МАТРИЦА мне что-то навевает такое по настоящему виртуальное, компьютерное...
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Соответсвенно разделение автомата на наборы подавтоматов резко упрощают программу и повышают ее надежность. Так вот именно огромные возможности такого разделения на подавтоматы и группировки подавтоматов и дает ООП,
Может быть и даёт. Но ведь, можно распределять функции не по классам, а по модулям, имеющим внутреннюю логическую связность.
0
Заблокирован
12.08.2017, 14:22
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Гради Буч "Object-Oriented Analysis and Design with Application". Объекты могут быть реализованы через конечные автоматы.
он ошибся.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.08.2017, 14:24
Цитата Сообщение от strategyquest Посмотреть сообщение
Во первых, переходы не только в объекте, но и в среде, во вторых изменения могут быть недетерминированы(например -- время имеет значение)
Ну во первых среда средой а автомат автоматом. Во вторых там где время имеет значение используется понятие таймфрейм - т.е. такой промежуток времени который значения не имеет и автомат при обработке данных должен уложится в этот лимит времени (реалтайм системы).
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
12.08.2017, 14:24
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Любая. Хотя бы потому что CPU это конечный автомат с состояниями которого программа работает.
Вот не надо притягивать за уши чпу. Состояние не должно быть скрыто от программиста.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.08.2017, 14:26
Цитата Сообщение от strategyquest Посмотреть сообщение
он ошибся.
Нет, oн абсолютно прав. Потому что CPU это конечный автомат.

Добавлено через 1 минуту
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Состояние не должно быть скрыто от программиста.
Программисту явно нужны только те состояния которые он обрабатывает явно. Иначе будет каша.
0
Заблокирован
12.08.2017, 14:30
Fulcrum_013, в автомате вообще нет времени в обычном понимании, там за единицу времени берется шаг вычисления(такт), это "время" ортогонально внешнему. Там нет времени, а следовательно, нет и временного арбитража

Добавлено через 2 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Нет, oн абсолютно прав
https://en.wikipedia.org/wiki/... omputation
https://en.wikipedia.org/wiki/... eterminism
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.08.2017, 14:43
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Но ведь, можно распределять функции не по классам, а по модулям, имеющим внутреннюю логическую связность.
ООП не только группировкой функций занимается но и группировкой данных. Если для реализации автомата нужно несколько копий какого либо подавтомата то без ООП становится тяжко.
Ну а вообще представте такую широко распространенную задачу. Имеется автомат умеющий обрабатывать данные в алфавите A. Но данные имеются в алфавитах B,C,D,E и т.д. Как их обработать исходным автоматом добавляя минимум состояний? Очевидно что для этого необходимо сделать набор автоматов для B,C,D,E с системой переходов между состояниями аналогичными A но выполняющими их для алфавитов B,C,D,E, и кждому набору данных добавить состояние каким именно автоматом-обработчиком их обрабатывать. Именно эту задачу и решает ООП

Добавлено через 8 минут
Цитата Сообщение от strategyquest Посмотреть сообщение
в автомате вообще нет времени в обычном понимании,
Автомат в сферическом вакууме (без привязки к реальному времени) вообще штука бессмысленная.
Цитата Сообщение от strategyquest Посмотреть сообщение
там за единицу времени берется шаг вычисления(такт),
Такт понятие растяжимое. Хотя бы потому что в реальности имеет место быть иерархия автоматов, в которой более нижестоящий автомат обрабатывает правила более высоко стоящего. Посему один такт вышестоящего автомата может требовать разного количества тактов нижестоящего.
0
Заблокирован
12.08.2017, 14:49
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Автомат в сферическом вакууме (без привязки к реальному времени) вообще штука бессмысленная.
Именно таковым он и является, там нет никакой привязки. Автомат -- это понятие из математики. Возможно Вы путаете с автоматом выдачи газировки, если что -- я не про него

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Такт понятие растяжимое. Хотя бы потому что в реальности имеет место быть иерархия автоматов, в которой более нижестоящий автомат обрабатывает правила более высоко стоящего. Посему один такт вышестоящего автомата может требовать разного количества тактов нижестоящего.
Это Вы уже про какую то изобретенную лично Вами систему автоматов, мне тут нечего возразить
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
12.08.2017, 14:59
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ну а вообще представте такую широко распространенную задачу. Имеется автомат умеющий обрабатывать данные в алфавите A. Но данные имеются в алфавитах B,C,D,E и т.д. Как их обработать исходным автоматом добавляя минимум состояний?
Я просто осуществил бы головной автомат, который будет реализовывать логику выбора между алфавитами, обработка которых была бы реализована путём соответствующих автоматов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2017, 14:59

Стоит ли учить ООП в одно время с Яп
Добрый день! Начал активно изучать c#. Читаю Шилдта в свободное от учебы время и стараюсь практиковаться и всё выходит пока нормально. Но...

Как использовать ООП в WinAvr
Класс я создал. А вот объект класса создать не получается! Полазив по интернету выяснил что оператор new не поддерживается компилятором! ...

Js class как правильно использовать ООП
Накидал вот такой простенький код, авторизация проходит, data.Access_token существует, но в this.Access_token почему то не сохраняется, не...

Когда следует использовать ООП в РНР?
Когда стоит учить ооп в РНР, если новичок в РНР? Стоит ли писать весь код в стиле ооп ?

WITH AS стоит ли использовать
Использую СУБД Postgresql, есть запрос SELECT * FROM Table1 WHERE Filed1 IN (SELECT Fileld1 FROM Table2 WHERE Fileld2='A' AND...


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

Или воспользуйтесь поиском по форуму:
580
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru