Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Результаты опроса: используете ли вы ооп
да 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. Показов 103221. Ответов 793
Метки нет (Все метки)

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

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

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

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

793
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
01.04.2018, 16:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А алгоритмы по любому завязаны на структуру данных которые они обрабатывают.
Абстрактно завязаны, ибо сам алгоритм есть абстрактная сущность, но которую можно выразить математически(множества состояний, сложность и т.д. ).
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
ООП позволяет именно обойти жесткие завязки на данные заменив их завязками на абстрактные методы.
Которые жёстко привязаны к своим классам?
Тогда методы уже не будут абстрактны. Они же стали составной частью класса.
Абстрактный метод может работать с любой сущностью, на которую завязан абстрактно. В этом его сила.
Что такое абстракция? Это всего лишь заключение в одно обозначение некоего конгломерата функций, которые в свою очередь являются абстрактными обозначениями более мелких действий. Именно действий, а не данных!
Данные - сами по себе! Каждый тип данных самодостаточен сам по себе, поэтому его нельзя ни от кого наследовать.
ООП позиционировался как отображение окружающего нас мира. В мире есть (якобы) отдельные обьекты, которые (как бы) самостоятельно функционируют. Однако не принимается во внимание, что обьекты, являются потоком энергии, действия, а не статики. Там во всём одно лишь действие, - нет там статичных обьектов, которые можно было бы назвать статичными данными. Абстрактно наследуются действия, причём от действий же.. Наивысшая функция - точка, это - человек, последнее слово программы.. Данные скрыты, глубоко скрыты. Данные принадлежат всем. Данные - элементарные типы. Данные - вещество, функции - энергия. Энергия всегда выше данных, абстрактнее их, ибо данные сами по себе тоже производные этой энергии на самом низшем уровне.
Чем большее количество кода будет исполнятся под единственым обозначением, тем абстрактнее действие. Самое главное - отрешиться от низкоуровневых вещей, когда они уже обёрнуты в абстрактные оболочки, и функционировать уже там, на высшем уровне. Наращивание слоёв абстракций и есть функциональное программирование, а не то, чем его считают ныне. А в ООП всё вывернуто наизнанку мира..
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.04.2018, 16:36
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Наращивание слоёв абстракций и есть функциональное программирование, а не то, чем его считают ныне.
Чем больше слоев тем больше говна. Абстракция должна не наращиваться а конкретизироваться по определению абстракции. Т.е. в конечном итоге это механизм не зависимый от других механизмов используемых сущностью.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
01.04.2018, 16:43
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ну это как бы проблемы не ООП а этих псевдопрограммистов.
Скоро, кстати, в вашем любимом c++ будут удалены указатели, вот тогда наверно псевдопрограммистов станет в разы больше, что конечно хорошо, с точки зрения конкуренции, ибо низкоуровневые специалисты будут востребованы как никогда..https://habrahabr.ru/post/352570/#habracut

Добавлено через 2 минуты
Ой, забыл что сегодня 1 апреля.. Ну нехай живе
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.04.2018, 16:46
CoderHuligan, Главный вредитель в С++ - коммитет. Это с самого начала ясно было.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
01.04.2018, 17:07
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Абстракция должна не наращиваться а конкретизироваться по определению абстракции.
Догма объектников.
Конкретизирование по определению ограничено своей сущностью, например классом. Поэтому такие обьекты не могут развиваться и свободно изменятся. "Сокрытие данных" некогда было обьявлено архиважнецкой вещью, и по всей видимости, нанесло индустрии непоправимый вред. Сокрывать нужно не данные, а функции, которые должны быть чёрными ящиками для других клиентов, но каждая функция должна заботиться не только о том, что у неё имеется на входе, но и о том, КУДА (не КОМУ) она отдаёт свой выхлоп. Принцип - ты мне, я - тебе. Так в природе принято. Там всё функционирует на взаимном узнавании, ибо если было бы иначе, вирусы уже давно погубили бы всё живое.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
01.04.2018, 17:13
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
В нормальной команде у каждого достаточно квалификации чтобы спроектировать и реализовать всю систему с нуля в одиночку.
Команда создаёт Программный Продукт. Если этот ПП предусматривает наличие ГУИ, то это ГУИ должен нарисовать кто-то из команды. Если ПП объёмный, то ГУИ может содержать сотни экранных форм.
Впрочем, если Вам нравится, можете продолжать раскрашивать кнопки в интерфейсе.


Остальные Ваши реплики либо сильно расходятся с реальностью, либо не имеют отношения к тому, что я писал. Поэтому отвечать на них (сразу на все) не вижу смысла. Но, если Вам интересно, могу ответить, но только по очереди. Выбирайте любую, и я попытаюсь объяснить Вам, что с ней не так. Потом следующую... и так далее.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,123
Записей в блоге: 2
01.04.2018, 17:44
Цитата Сообщение от Shamil1 Посмотреть сообщение
Проще время от времени проводить масштабный рефакторинг отдельных подсистем.
Вот я его и провожу с прошлого августа - ох и тяжелая эта работа из болота тянуть бегемота Кода примерно с .. ну хз, более тысячи только .cpp файлов, причем самописных (с либками-то любой скажет что у него мульен строк). Коду более 20 лет, написан в суровом процедурном стиле, на классы - болт, а уж о константности остается только мечтать. Ну ясно что критиковать - много ума не надо, но не стоит забывать что этот код свои 20 (с гаком) лет работал. Какие проблемы я бы выделил

- недостаток "классовости" - да, есть такое дело. Ф-ции с 10 и даже 15 аргументами - дело рядовое, пользоваться ими весьма неудобно. Но дело не только в том что "нет классов", а может и "не столько". Другие вещи не менее важны, и на них уходит по крайней мере не меньше времени. С др стороны многое в тупеньком "процедурном стиле" пашет весьма удачно и лепить там классы неуместно
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
01.04.2018, 18:42
Цитата Сообщение от Igor3D Посмотреть сообщение
Вот я его и провожу с прошлого августа
Сторонние продукты, типа ReSharper, используете?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.04.2018, 18:57
Цитата Сообщение от CoderHuligan Посмотреть сообщение
но и о том, КУДА (не КОМУ) она отдаёт свой выхлоп
Вообщет то функции противопоказано занть что творится за ее пределами. В том числе и куда пойдет ее выхлоп. Ее дело генерить выхлоп из входа.

Добавлено через 1 минуту
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Конкретизирование по определению ограничено своей сущностью, например классом. Поэтому такие обьекты не могут развиваться и свободно изменятся.
Во первых найдите 10 отличий между классом и объектом.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
01.04.2018, 20:29
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вообщет то функции противопоказано занть что творится за ее пределами. В том числе и куда пойдет ее выхлоп. Ее дело генерить выхлоп из входа.
Представьте себе ситуацию.
Имеем функцию, которая принимает на вход тип указателя на динамическую строку, неважно какого устройства. Функция возвращает новую реаллоцированную строку, и при необходимости что-то туда записывает.
Возникает вопрос: если функция возвратит новый указатель на новую строку обычным образом(положит его в регистр EAX к примеру, в зависимости от платформы и соглашений) , то что делать с прежним входным указателем, если принимающая сторона не удосужится положить новый указатель в старый? А? Правильно - возникнет висячий указатель, как это ОЧЕНЬ часто бывает.. Поэтому, правильней и намного, передавать функции не просто указатель, а указатель на указатель, и возвращать его разыменовывая в функции. А кодом возврата возвращать ошибку либо успех! В этом случае никаких висячих ссылок не образуется, ибо функция "ложит" новый адрес в тот указатель, который получила на входе. Она это делает САМА, поэтому она в курсе КУДА отправляет выходной параметр!!
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.04.2018, 20:40
CoderHuligan, Эта проблема элементарно решается рефкаунтингом буфера. при этом никаких указателей на указатель. буфер просто устроен так что рефкаунт лежит по отрицательному смещению. Передаются при этом не сами указатели а объекты-холдеры по значению которые содержат указатель на буфер и осуществляют рефкаунтинг. Все.Никаких проблем в этом плане нет и никогда не было. Мораль сей и всех остальных басней про указатели такова- чтобы указатели были безопасными, умными должны быть объекты которые их используют, а не сами указатели, а тем более не функции, у которых даже знание куда отправить выходной параметр никак не решает того вопроса что ссылаться на этот же буфер может еще неизвестно сколько указателей..
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
02.04.2018, 11:12
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Передаются при этом не сами указатели а объекты-холдеры по значению которые содержат указатель на буфер и осуществляют рефкаунтинг. Все.Никаких проблем в этом плане нет и никогда не было.
В курсе. Так реализуют большинство, но это не очень хорошо. Используют указатели на структуру, а указатель на буфер лежит в другом месте, и выделять память надо ещё и под структуру. Во всех подобных реализаций возвращаются указатели на базовую структуру. При этом никто не заботится висячих входных парамерах. Буфер с хедером должны разделять один буфер. А функции должны изменять указатели в своём теле.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
не функции, у которых даже знание куда отправить выходной параметр никак не решает того вопроса что ссылаться на этот же буфер может еще неизвестно сколько указателей..
Такого как раз не может быть если есть указатели на указатели. Только функции имеют право разыменования, но не клиенты, которые пользуются ссылками не на сам буфер, а на указатель на буфер.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
02.04.2018, 14:44
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Имеем функцию, которая принимает на вход тип указателя на динамическую строку, неважно какого устройства. Функция возвращает новую реаллоцированную строку, и при необходимости что-то туда записывает.
Возникает вопрос: если функция возвратит новый указатель на новую строку обычным образом(положит его в регистр EAX к примеру, в зависимости от платформы и соглашений) , то что делать с прежним входным указателем, если принимающая сторона не удосужится положить новый указатель в старый?
Зависит от того, какую задачу выполняет функция.
Если функция создаёт новую строку, то пусть вызывающая сторона думает, что делать со старым и новым указателями.
Если функция изменяет строку, то передавать в неё нужно не указатель, а адрес указателя.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
02.04.2018, 20:14
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если функция создаёт новую строку, то пусть вызывающая сторона думает, что делать со старым и новым указателями.
Вызывающей стороне вообще не нужно думать об указателях. Ей важно получить результат. Вся низкоуровневая механика должна быть скрыта.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если функция изменяет строку, то передавать в неё нужно не указатель, а адрес указателя.
Я об этом и талдычу. В теле функции происходит замена адреса, а не вне её. Только тогда код будет безопасен.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
02.04.2018, 20:23
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Вызывающей стороне вообще не нужно думать об указателях.
Вызываемая функция не может удалять строку-параметр, так как не знает, нужна ли она вызывающей стороне. "Создаёт новую" - не значит "создаёт новую вместо старой" (это был бы вариант "изменяет строку").
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
06.04.2018, 13:56
CoderHuligan, Shamil1, один раз пишем шаблонный класс "динамический буффер" который сам думает о указателях. А дальше делаем на нем строки массивы и че там еще с динамическими буферами душа пожелает. И никто из них уже не думает что с буфером и когда делать. думают максимум над семантикой - у кого COW у кого семантика указателя (это с двойным указателем под капотом) и т.д. А те кто пользуют оные строки массивы и т.д. уже вообще ни о чем не думают кроме своей задачи.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
06.04.2018, 14:42
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
один раз пишем шаблонный класс "динамический буффер" который сам думает о указателях.
Тут ведь вот какая незадача: я лично не пишу на с++.. Я делаю это проще:
C
1
2
3
4
dms_tpchar s = NULL;
dms_assign(&s, "Hello");
dms_add(&s, "world!");//Hello world! 
dms_replacepart(&s, 1, 5, "Goodbye"); // замена с 1 позиции 5 элементов - Goodbye world!
Это из моей библиотеки, которая находится в разработке(уже реализовано 18 функций). Вся низкоуровневая логика скрыта внутри функций, в том числе все проверки, работа с указателями, выделения памяти. Функции возвращают код ошибки или не ошибки.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
06.04.2018, 14:45
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Shamil1, один раз пишем шаблонный класс "динамический буффер" который сам думает о указателях.
Я отвечал на более общий вопрос, когда речь ещё не шла о буферах.

Что касается функций, которым нужен буфер, то я не вижу общего решения. Зависит от зачем, когда, где и сколько. Но в любом случае, такой функции требуется "обёртка", чтобы посторонняя логика не выплёскивалась в код.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
06.04.2018, 16:46
В функциях скрыта и логика проверки с какими строками она работает - с сишными строками или с dms строками.

Добавлено через 1 час 44 минуты
Как видно, в функцию передаётся адрес указателя, то есть образуется косвенность вызова, а это позволяет в функции изменить указатель. dms строки имеют magic-поле, по которому можно определить отличие от сишной строки. Magic-поля довольно обычны в структурах, которые описывают различные типы файлов, однако применительно к динамическим строкам, я такого не встречал. Это очень удобно, хотя и увеличивает длину строки, но кто сейчас думает об экономии 4 лишних байтов?

Добавлено через 15 минут
Не требуется никаких классов тем более шаблонных, чтобы сделать простейшую вещь. Всё определяется соглашениями, и этого достаточно.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
06.04.2018, 16:55
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Это очень удобно
Ещё удобней везде в системе использовать один и тот же формат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.04.2018, 16:55

Стоит ли учить ООП в одно время с Яп
Добрый день! Начал активно изучать 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...


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

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