|
|
| Результаты опроса: используете ли вы ооп | |||
| да |
|
238 | 86.55% |
| нет |
|
37 | 13.45% |
| Голосовавшие: 275. Вы ещё не голосовали в этом опросе | |||
|
|
Рейтинг 4.76/461:
|
|
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
|
|
Стоит ли использовать ООП?09.02.2010, 13:44. Показов 103122. Ответов 793
Метки нет (Все метки)
Здравствуйте.
Возник такой вопрос: стоит ли использовать ооп. Даже не так, когда использовать ооп? Иногда (даже чаще всего) легче написать простые функции, а не мутить с классами обектами и методами. Раздражает инкапсуляция - какой вообще ее смысл? Чтобы получить переменную класса по правилам ооп нужно создавать метод для ее чтения? когда такой подход оправдан - ведь затрачивается куча лишнего времени.
5
|
|
| 09.02.2010, 13:44 | |
|
Ответы с готовыми решениями:
793
Стоит ли использовать ООП -- часть вторая
|
| 02.01.2014, 16:34 | |||||||
|
Анти-пример (из уважаемых исходников). Не дословно, суть
![]()
0
|
|||||||
|
|
|||
| 02.01.2014, 17:44 | |||
|
Добавлено через 1 минуту
0
|
|||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
| 02.01.2014, 17:48 | |
|
Evg, я тоже так подумал, просто решил уточнить.
Большинство ОО-языков предоставляет в том или ином виде «сахар», который скрывает различие между доступом к обычному полю и к свойству. То, что в C++ такого нет (и в Java, из мейнстрима), на общую картину никак не влияет. Также для большинства языков упрощена генерация тривиальных свойств (для языков, которые не имеют специального синтаксиса свойств, это задача обычно ложится на IDE).
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 02.01.2014, 18:00 | |||
|
Добавлено через 18 секунд
0
|
|||
|
|
|
| 02.01.2014, 18:02 | |
|
Nameless One, просто на начальном уровне людям зачастую кажется, что увеличение количества букв при написании программы - это плохо. И только поработав с реально большими проектами появляется понимание, что количество букв - это мелочи, по сравнению с тем геморроем, который зачастую возникает при реализации больших проектов
1
|
|
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
||
| 02.01.2014, 19:54 | ||
|
0
|
||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||
| 02.01.2014, 20:06 | ||
|
PS. «Premature optimization is the root of all evil» © DonaldKnuth PPS. Если ты беспокоишься, что такие тривиальные операции станут узким местом в твоей программе, то посмотри в сторону C.
0
|
||
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
||
| 02.01.2014, 22:36 | ||
|
0
|
||
|
Ушел с форума
|
||
| 02.01.2014, 23:01 | ||
|
inline, auto (C++98/03) и register для современных компиляторов играют примерно такую же роль, как расстановка скобок или комментарии. Компиляторы давно уже сами в состоянии решать, где нужно встраивание, а где от него нет толку.
0
|
||
|
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
|
||
| 02.01.2014, 23:48 | ||
0
|
||
| 03.01.2014, 12:19 | |||||||||
![]() Возвращаясь к теме, возможно хороший пример private - портирование приложения с одной платформы на другую. Объявив переменную типа HWND public мы допускаем растекание нативного кода по всему приложению, и вычистить его весь будет непросто. Вообще вещь непростая, требует осмысления, сравнения неск вариантов на практике. Однако ТС торопится получить "немедленную пользу"
0
|
|||||||||
|
Ушел с форума
|
||||
| 03.01.2014, 12:25 | ||||
|
чтобы исключить побочные эффекты оптимизации. Компиляторы сейчас шибко умные. встраиваются по месту вызова, независимо от наличия inline, если только это не отладочная сборка или встраивание запрещено через опции компилятора или прагмы. Не верите - проверьте. Там есть пример, когда компилятор встроил тело функции по месту вызова без всяких inline, причем функция была определена в одной единице компоновки (obj-файл), а вызвана - в другой, что, по идее, вообще не должно было привести к ее встраиванию. По стандарту (например, C++03 7.1.2.2), inline является лишь подсказкой компилятору, что встраивание в данном случае желательно, но последнее слово все равно за ним - он может как встроить функцию, так и нет. Обратное также справедливо. Поэтому не стоит экономить на геттерах-сеттерах в надежде, что это сделает код более быстрым. Это есть "premature optimization", о чем Nameless One писал выше. Вызовы геттеров и сеттеров обычно не являются узким местом. На счет целесообразности использования геттеров-сеттеров там, где можно обойтись public. Тут я полностью согласен, что нет смысла городить огород. Ну какие accessor-ы нужны для таких тривиальных вещей, как rectangle, например ? Единственное, что приходит в голову - это проверка инвариантов (чтобы, например, левый верхний угол прямоугольника не был ниже или правее других, а тогда можно выбросить исключение), или в многопоточной среде, для атомарного изменения или считывание всех четырех полей, но такое требуется редко.
1
|
||||
|
|
||
| 03.01.2014, 14:25 | ||
|
Вообще понять, зачем нужен private - не так просто, как кажется тем, кто уже понял. Объяснения на уровне книжных (типа надо чего-то зачем-то спрятать) обычно не прокатывают, т.к. реальное понимание появится только после множественного наступления на грабли. Т.е. тратить время на написание кучи "лишнего" кода, чтобы сэкономить в будущем время на разгребание ошибок - это не так-то просто понять Я, например, хорошо понимаю недоумевание тех, кто Set/Get и private считает мусором. Но затрудняюсь объяснить, что в большинстве случаев это реально нужно
2
|
||
|
|
||
| 03.01.2014, 20:56 | ||
|
И на счёт inline. Это лишь одна из возможностей одного из языков, не более, и к ООП как таковому имеет весьма сомнительное отношение.
1
|
||
| 04.01.2014, 01:25 | |||
|
2. Засунь все это в operator*, тогда запись выглядеть будет еще лучше.
0
|
|||
| 04.01.2014, 10:30 | ||
Не должен простой утилитарный/конкретный класс быть ни "издателем" ни "подписчиком", вероятно он будет их членом. Этот аргумент "а вдруг чего случится, а у меня уже написано правильно!" столь же мало убедителен сколь часто он приводится. Если "чего случается" то весь класс "прямоугольник" оказывается недостаточным, т.е. требуется уже новая сущность.
1
|
||
| 04.01.2014, 13:59 | ||
|
1
|
||
|
|
|||
| 04.01.2014, 23:21 | |||
|
Декорировать, переопределять или как-то ещё расширять функционал можно у метода (аксессора, например), но никак не у операции присвоения члену класса.
0
|
|||
| 05.01.2014, 12:08 | ||
|
Не подходит "прямоугольник" чтобы его куда-то развивать. Хотя сам класс может быть обширным (операторы пересечения, объединения и.т.п.)
0
|
||
|
Ушел с форума
|
|
| 05.01.2014, 13:18 | |
|
Во всем должна быть какая-то середина.
С одной стороны, простая реализация "в лоб" обычно приводит к появлению негибких и труднорасширяемых компонентов, которые влекут ненужные зависимости или дублирование, в которых легко напортачить, в том числе по невнимательности. Сопровождение таких компонентов потом превращается в рутинную работу, требует дополнительного тестирования, отладки и т.д. С другой стороны, особенность проектирования в том, что нельзя наверняка сказать, где и в какой форме компонент будет нужен завтра. Поэтому бросать все силы на то, чтобы делать его максимально универсальным и расширяемым - как минимум нерационально. Тот же rectangle можно снабдить accessor-ами, подсчетом ссылок, сделать его наследником какого-нибудь CObject, получив поддержку боксинга и сериализации, добавить возможность атомарного доступа к членам, затем еще параметризировать его стратегиями исключений. Казалось бы, универсальнее некуда... Но вот однажды потребуется обеспечить для этого класса совместимый с другими языками (например, с С) интерфейс, и вдруг окажется, что все усилия по универсализации пошли даром. Ну то есть, всем этим я хотел выразить мысль, что искать разумные границы между простотой и гибкостью нужно отталкиваясь от каких-то конкретных требований самого проекта, а не просто лепить как попало, чтобы поскорее доделать и "чтобы отстали" или создавать архитектуры на ровном месте с заделом на будущее, которые потом все равно не "выстреливают". Поэтому спор о том, нужны ли accessor-ы для элементарных классов, в отрыве от конкретного контекста не имеет смысла.
0
|
|
| 05.01.2014, 13:18 | |
|
Стоит ли учить ООП в одно время с Яп Как использовать ООП в WinAvr Js class как правильно использовать ООП Когда следует использовать ООП в РНР? WITH AS стоит ли использовать Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю
Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы
Кратко. . .
|
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем
**Полевые заметки о двухнедельной совместной работе**. . .
|
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|