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

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

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

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

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

793
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
07.08.2016, 18:56
Студворк — интернет-сервис помощи студентам
Очень часто иерархия данных отличается от иерархии действий над ними. Поэтому классическое ООП в виде "поместим в один класс данные и действия над ними" плохо подходит. Но можно всё-равно использовать ООП, если разнести данные и действия по разным классам.
Данные без методов - это структуры. Есть и почти во всех ЯП. А действия - это тоже данные, только другого типа. Поэтому часто нет большой разницы использовать ООП или нет.

Добавлено через 11 минут
Цитата Сообщение от snake32 Посмотреть сообщение
Я не знаю как там дела обстоят в Яве, но на делфях, да и в с++ достаточно было сделать метод add виртуальным и только его перегрузить в наследнике. Тогда бы и ошибки не было.
Нет.
Это зависит от того, как написаны методы add и addAll. Например, можно написать метод addInternal и вызывать его в обоих методах add и addAll. Тогда перегрузка add не будет влиять на работу addAll.
0
 Аватар для snake32
3583 / 1713 / 236
Регистрация: 26.02.2009
Сообщений: 8,653
Записей в блоге: 6
07.08.2016, 20:21
Цитата Сообщение от Shamil1 Посмотреть сообщение
Нет.
Это зависит от того, как написаны методы add и addAll.
Нет, я не про это. Методы изначально были криво написаны, а потом был написан класс наследник учитывающий кривизну родителя. Только после этого до автора наконец-таки дошло, что, по-хорошему, надо переписать класс родитель. И естественно, наследник не ожидал такого поведения и поплыл. И кто виноват по мнению автора? Конечно ООП! Кто ж ещё?
По аналогии перевожу на ФП: Алгоритм некой процедуры зависит от выполнения некой ф-ии. Тут меня осенило что неплохо бы переписать код ф-ии. После дебага выясняется что процедура глючит из-за "новой" ф-ии. И вместо того чтобы признать свою глупость я завожу блог и пишу всем как ужасен ФП.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
10.08.2016, 09:50
Цитата Сообщение от _Ivana Посмотреть сообщение
Начитавшись Алана Кея, пребываю в заблуждении, что наследование - необязательный атрибут ООП, а переиспользование можно достичь и другими способами.
ООП без наследования - это КОП (компонент-ориентированное программирование). И классы при таком подходе ничем не отличаются от модулей.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
14.08.2016, 11:15
Цитата Сообщение от Shamil1 Посмотреть сообщение
ООП без наследования - это КОП (компонент-ориентированное программирование).
Щаз без наследования. Если оно там реализовано не совсем так то это не значит что его там нет. Просто агрегация классов динамическая а не статическая.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
14.08.2016, 17:24
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Щаз без наследования. Если оно там реализовано не совсем так то это не значит что его там нет. Просто агрегация классов динамическая а не статическая.
Агрегация - это не наследование.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
14.08.2016, 17:36
Цитата Сообщение от Shamil1 Посмотреть сообщение
Агрегация - это не наследование
имеется в виду агрегация виртуальных методов. В реализации ООП в С++ агрегация VMT статическая. В КОП динамическая. Эти два подхода кстати можно прекрасно сочетать
Цитата Сообщение от Shamil1 Посмотреть сообщение
Агрегация - это не наследование.
А если подразумеваете под агрегацией оборачивание методов приватных полей типов функциональность которых расширяется то это только лишний мозготрах и не более. Все проблемы тонких базовых классов от кривого проектирования архитектуры. От замены наследования оборачиванием полей ничего в лучшую сторону не изменится только в худшую. Класс как зависел от функционала базовых кирпичиков так и будет зависеть, и ничего с эти не поделаешь. Просто абстракции надо уметь выделять и по полочкам раскладывать правильно. Это умение кстати и называется высокая квалификация, вернее один из компонентов этого понятия.
.
1
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
14.08.2016, 18:17
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
имеется в виду агрегация виртуальных методов. В реализации ООП в С++ агрегация VMT статическая. В КОП динамическая.
Вы говорите на каком-то другом языке, поэтому я не понимаю Вашей терминологии. И судя по Вашему ответу, Вы не понимаете, о чём говорю я.

В частности, как мне сообщил Гугл, Вы - единственный человек в интернете, который использует термин "агрегация виртуальных методов". Откуда мне знать, что это такое?
Что такое "агрегация таблиц виртуальных методов в с++" я даже представить себе не могу. И я уверен на 90%, что под термином "компонент-ориентированное программирование" Вы тоже понимаете что-нибудь своё.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А если подразумеваете под агрегацией оборачивание методов приватных полей типов функциональность которых расширяется
Под "агрегацией" я подразумеваю "агрегацию" и ничего другого (один компонент/класс включается в другой компонент/класс). В КОП нет ни полей, ни типов.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Все проблемы тонких базовых классов от кривого проектирования архитектуры. От замены наследования оборачиванием полей ничего в лучшую сторону не изменится только в худшую. Класс как зависел от функционала базовых кирпичиков так и будет зависеть, и ничего с эти не поделаешь.
Какое отношение Всё это имеет к моему утверждению "агрегация - это не наследование"?

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Просто абстракции надо уметь выделять и по полочкам раскладывать правильно.
Согласен, это нужно уметь.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
14.08.2016, 18:43
Цитата Сообщение от Shamil1 Посмотреть сообщение
Под "агрегацией" я подразумеваю "агрегацию" и ничего другого (один компонент/класс включается в другой компонент/класс).
Виртуальный метод это таой же компонент и он точно так же кудато включается. И это куда-то называется VMT которая может быть как внешняя так и внутренняя.
Цитата Сообщение от Shamil1 Посмотреть сообщение
"агрегация - это не наследование"
Наследование это не только
C++
1
class Derived:public Base
это только одна из возможных реализаций. Наследование это расширение функционала, фактически специализация (конкретизация) более высокой абстракции. И реализовано оно может быть по разному, в т.ч. и путем "один компонент/класс включается в другой компонент/класс" . но суть от этого не меняется.
Цитата Сообщение от Shamil1 Посмотреть сообщение
В КОП нет ни полей, ни типов.
Есть интерфейсы и свойства. но это всего лишь детали реализации динамического связывания и не более.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
14.08.2016, 19:19
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Наследование это расширение функционала, фактически специализация (конкретизация) более высокой абстракции. И реализовано оно может быть по разному, в т.ч. и путем "один компонент/класс включается в другой компонент/класс"
Когда я писал своё сообщение, я в использовал термин "наследование" в общепринятом в информатике смысле. К придуманному Вами термину мои высказывания не имеют отношения и могут не подходить. Споры о терминологии считаю бессмысленными.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
14.08.2016, 19:24
Цитата Сообщение от Shamil1 Посмотреть сообщение
я в использовал термин "наследование" в общепринятом в информатике смысле
Скажем так - в реалиях его нативной реализации в языках со статической агрегацией VMT, но не в информатике и даже не в теории ООП. А общепринятый смысл именно и есть специализация более высокой абстракции
1
Заблокирован
08.02.2017, 19:23
Shamil1, Вам все верно указали. Это не терминологические разногласия, что-то Вы чуть что сразу за эту мантру прячетесь. Подкласс -- специализация надкласса, иначе у Вас не классы, а говнокод. Например, женщина -- специализация класса человек. Иерархия выстраивается от общего к частному. Можете привести пример, когда это не так, и когда это обоснованно?
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
08.02.2017, 21:47
Цитата Сообщение от asmquest Посмотреть сообщение
Можете привести пример, когда это не так, и когда это обоснованно?
Зачем?
Во-первых, Вы всё равно будете возражать, не зависимо от того, что я напишу.
Во-вторых, я писал про одно (является ли включение наследованием), а Вы пытаетесь увести в другую плоскость (как выстраивается иерархия).
В-третьих, Вы придумываете определения, а ссылку на учебник, их содержащий, дать отказываетесь. Вот и сейчас Вы написали "специализация", и бесполезно пытаться угадывать, что Вы под этим подразумеваете.
0
Заблокирован
08.02.2017, 21:53
Shamil1,
Цитата Сообщение от Shamil1 Посмотреть сообщение
Во-первых, Вы всё равно будете возражать, не зависимо от того, что я напишу.
Нет, мне реально интересно, может ли такое дать реальный профит хоть в чем нибудь. Я не настаиваю на своем утверждении, возможно ошибаюсь.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Вот и сейчас Вы написали "специализация", и бесполезно пытаться угадывать, что Вы под этим подразумеваете.
Этот термин не может трактоваться по-разному, он однозначен.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
08.02.2017, 22:24
Цитата Сообщение от asmquest Посмотреть сообщение
мне реально интересно, может ли такое
Вы начали с утверждения "Вам все верно указали". Обоснуйте. А если Вам интересно порассуждать на другую тему, то создайте отдельный топик.

Цитата Сообщение от asmquest Посмотреть сообщение
Этот термин не может трактоваться по-разному, он однозначен.
Как показывает опыт, с Вами что угодно может трактоваться по-разному. И судя по тому, что Вы написали, Вы трактуете его не так, как я.
0
Заблокирован
08.02.2017, 22:37
Shamil1, как обычно, Вы не отвечаете за свои слова, ясно.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
08.02.2017, 22:48
asmquest,
Вы не привели ни одного аргумента против того, что я написал. А если Вам просто не с кем поговорить, то решайте эту проблему без моего участия.
0
Заблокирован
08.02.2017, 23:01
Shamil1, да, если кто-то заявляет что-то вроде: "цианистый калий полезен для здоровья", тут трудно найти контраргумент
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
08.02.2017, 23:09
Цитата Сообщение от asmquest Посмотреть сообщение
тут трудно найти контраргумент
Очевидные вещи называются очевидными именно потому, что они очень легко доказываются.
0
Заблокирован
08.02.2017, 23:13
Цитата Сообщение от Shamil1 Посмотреть сообщение
Очевидные вещи называются очевидными именно потому, что они очень легко доказываются.
опять же, непонятно откуда вы берете это, но в математике и логике все с точностью до наоборот.
0
Evg
09.02.2017, 12:50

Не по теме:

asmquest, а ты попробуй создай отдельную тему с каким-нибудь вопросом по Си++ (или ООП), в котором бы фигурировал термин "специализация класса". А далее по количеству вопросов вида "что ты имел в виду под специализацией класса" оценивай свою правоту

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2017, 12:50

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


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

Или воспользуйтесь поиском по форуму:
540
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
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
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru