Форум программистов, компьютерный форум, киберфорум
Обо всем!
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
6 / 5 / 1
Регистрация: 30.11.2013
Сообщений: 104

Зачем нужно ООП?

13.01.2014, 21:29. Показов 4736. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, столкнулся с такой проблемой (пока только постигаю азы программирования в с++), я не понимаю, зачем нужно ооп, ибо все на своем уровне я могу запрограммировать и не используя классы, это будет даже легче, чем их использовать. Будьте добры, поясните, зачем нужно ооп, в чем его преимущества? А также будьте добры, приведите пример, где я не могу без него обойтись. Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2014, 21:29
Ответы с готовыми решениями:

Зачем в ООП нужно приведение типов?
Доброго дня всем, меня интересует и вопрос, для чего нужно приведение типов, если я могу сразу создать класс нужного мне типа ? ну вот...

Зачем в .NET в 2014 г. строгая типизация? Зачем нужно писать Convert.ToInt32(), ToString(), Int32.Parse()?
По поводу преобразования. Современный препроцессор кода сам определяет, что куда преобразовывать. Если в функцию, принимающую строку,...

Зачем в php ООП ?
Здраствуйте, я тут решил узнать какой смысл в php использовать ООП, и никак немогу найти на это ответ, помоему ООП только увеличивает...

52
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.01.2014, 12:44
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ninja2 Посмотреть сообщение
Мелкий ООП, тут то и знать нечего
А что тогда в вашем понимании "крупный" ООП ?
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
14.01.2014, 12:51
Цитата Сообщение от gazlan Посмотреть сообщение
Исследовательский, я думаю :-)
Галилей, например, ни у кого не списывал. Пуанкаре тоже в чужие исходники не заглядывал.
Так от в том то и дело, какую прогу не возьми нету алгоритмов, все приходится придумывать самому, да для учебных прог есть алгоритмы там да.
А вообще наверно проги строятся по такому принципу: сначала придумываем алгоритм, потом пишим код, снова переписываем алгоритм, снова подправляем код, и так пока не получится норм прога. Просто не всегда получается тот первый алгоритм который мы придумали он будет правильный, в процессе написания кода могут быть какие нить "открытия" и мы увидим что смысл нам ити по этому нашему алгоритму, когда лучше по другому пути ити. Так что такой подход будет применяться, это я из опыта сужу и с того что нету инфы в инете.

Отут даже английский не спасет, английский да поможет когда есть инфа на английском (гугл переводчик тоже норм переводит), но когда ее нет нигде то уже все приехали - собираем нищебродские сведения, а затем уже пишем велосипед который кто то придумал и не поделился .

Добавлено через 4 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
А что тогда в вашем понимании "крупный" ООП ?
Крупный это там шаблоны проектирования разные от "банды четырех", в ООП куча разных шаблонов и каждый шаблон имеет свое название и применение.

Использование готовых классов это мелкий ООП. Что там знать то? Создал объект заюзал метод ппц ООП.

Добавлено через 1 минуту
Цитата Сообщение от 0x10 Посмотреть сообщение
Avazart, хоть вы на его вбросы не ведитесь)
У нас тут высоко интеллектуальная беседа идет, а не какие там "вбросы".
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.01.2014, 12:54
Ну так мы о чем говорим об ООП или паттернах ?
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
14.01.2014, 12:56
Цитата Сообщение от gazlan Посмотреть сообщение
Дизассемблируйте - и будет информация.
тут от еще от интересно если я строчку кода напишу с использованием РВ, у меня допустим строк 30 будет прога занимать, то что оно мне выдаст после дизасамбрирования? Наверно не 30 строк, а какой нить громадный код.
0
 Аватар для xoror
31 / 31 / 4
Регистрация: 15.12.2013
Сообщений: 147
14.01.2014, 12:58
Цитата Сообщение от Suslo Посмотреть сообщение
Зачем нужно ООП?
При увеличении объема написанного когда увеличивается сложность программы. ООП и разброс всей программы по заголовочным файлам помогают поддерживать ее сложность на одном уровне.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
14.01.2014, 12:59
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так мы о чем говорим об ООП или паттернах ?
Да об ООП, паттерны это тоже ООП.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.01.2014, 12:59
Цитата Сообщение от ninja2 Посмотреть сообщение
Да об ООП, паттерны это тоже ООП.
Паттерны на то они и паттерны проектирования что применяются при проектировании библиотек.
Хотя опять же знание их дает понимание того как работает библиотека (написанная кем то другим)

В примере который я ранее привел (тесты для оценки глазомера) я применил наследование + фабричный метод (ну и еще один момент там был)

Есть предложения по тому как это можно просто и наглядно реализовать без ООП ?
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
14.01.2014, 13:06
Цитата Сообщение от Avazart Посмотреть сообщение
Есть предложения по тому как это можно просто и наглядно реализовать без ООП ?
Можно просто для каждой фигуры функцию создать и в switch вызывать нужную функцию.

Avazart, Да все можно если заходить, создать в какой нить области видимости namespase::fugur, создать глобально нужные данные что б каждая функция имела к ним доступ и все создаем нужные функции, дальше в операторе switch вызываем нужную функцию. Это как пример. Возможно даже для небольшой такой проги будет и попроще.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.01.2014, 13:08
Цитата Сообщение от ninja2 Посмотреть сообщение
Можно просто для каждой фигуры функцию создать и в switch вызывать нужную функцию.
И чЁ это даст ?

В прямоугольнике 4 точки, а треугольнике 3 ?
Расчет погрешности рассчитывается для разных тестов по разному (расстояние/угол) ?
Прорисовка тоже самое ...
У каждой "фигуры"(теста) есть как что-то общее так и специфические нюансы.

Сколько будет ф-ций и switch?
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
14.01.2014, 13:10
Можно спокойно прогу просто создавая одни функции без ООП, и создав область видимости, а в ней глобально переменные мы можем спокойно иметь доступ к ним из любой функции и тоже скажу получиться очень удобно и даже ИМХО менее громоздко возможно.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.01.2014, 13:12
Цитата Сообщение от ninja2 Посмотреть сообщение
создать в какой нить области видимости namespase::fugur,
Нэймспейс и так используется помимо классов...

Что тут пространства помогут ?
Глобальные переменные никогда не были хорошим тоном, даже внутри пространства.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
14.01.2014, 13:12
Цитата Сообщение от ninja2 Посмотреть сообщение
создав область видимости, а в ней глобально переменные мы можем спокойно иметь доступ к ним из любой функции
И полностью потерять контроль над доступом к этим переменным.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
14.01.2014, 13:18
Цитата Сообщение от Avazart Посмотреть сообщение
И чЁ это даст ?
В прямоугольнике 4 точки, а треугольнике 3 ?
Расчет погрешности рассчитывается для разных тестов по разному (расстояние/угол) ?
Прорисовка тоже самое ...
У каждой "фигуры"(теста) есть как что-то общее так и специфические нюансы.
Сколько будет ф-ций и switch?
Да тоже самое будет что и с ООП, код будет по размеру даже менее громоздкий, создаем функции для фигур, сколько у нас будет фигур столько и функций, столько case будет в switch. Если код будет использоваться только для одной фигуры мы ее так и оставляем в самой функции фигуры, если код будет во всех фигурах использоваться выносим в отдельную функцию и вызываем уже из функций для фигур, если по разному расчитываются то мы так и оставляем в виде кода, если одинаково, то делаем в виде функции и вызываем. Прорисовываются по разному для каждого свою функцию создаем и вызываем в цикле из каждой функции свою функцию прорисовки, в любом случае ты ее перегружаешь, для каждой фигуры.

switch допустим один будет, он нужен только для выбора функции фигуры.

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Что тут пространства помогут ?
Глобальные переменные никогда не были хорошим тоном, даже внутри пространства.
Нет хороши они тем будут что не нужно будет писать f(int k , int c, double b, и т.д.), а просто запишем f();, внутри пространства ничего страшного не случится, а удобства на лицо. И возвраты из функции не нужно делать, просто сохраняем в глобальную переменную.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.01.2014, 13:23
Цитата Сообщение от ninja2 Посмотреть сообщение
просто сохраняем в глобальную переменную.
Ага здравствует "чудо"-код!
Цитата Сообщение от ninja2 Посмотреть сообщение
Да тоже самое будет что и с ООП, код будет по размеру даже менее громоздкий, создаем функции для фигур, сколько у нас будет фигур столько и функций, столько case будет в switch. Если код будет использоваться только для одной фигуры мы ее так и оставляем в самой функции фигуры, если код будет во всех фигурах использоваться выносим в отдельную функцию и вызываем уже из функций для фигур, если по разному расчитываются то мы так и оставляем в виде кода, если одинаково, то делаем в виде функции и вызываем. Прорисовываются по разному для каждого свою функцию создаем и вызываем в цикле.
switch допустим один будет, он нужен только для выбора функции фигуры.
Очень интересно, данные разные ... как ф-ции будут с ними работать ? И что нужно наизусть выучить все вариации ф-ий их параметров?

В моем же случае пользователю лишь достаточно знать об открытых методах абстрактного класса (интерфейсе)
0
 Аватар для sergei60
50 / 31 / 11
Регистрация: 10.06.2012
Сообщений: 395
14.01.2014, 13:28
Добрый день! Позвольте вставить свою копейку. Тема сложная ,противоречивая и мне кажется должна находиться не на "С++для начинающих". Мне как начинающему после прочтения всех указанных ссылок ,статей о быдлокодерах, и так далее ,честно сказать стало немного тяжело. На этом форуме для новичков должен даваться импульс к познанию, должна даваться помощь,подсказка,поддержка...а вопрос этой темы должен обсуждаться в другом месте,может быть даже в узком кругу спецов профессионалов.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.01.2014, 13:30
Цитата Сообщение от Avazart Посмотреть сообщение
В моем же случае пользователю лишь достаточно знать об открытых методах абстрактного класса (интерфейсе)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class AbstractTest
{
    public:
        // Интерфейс
        String name() const;          // имя теста
        String description() const;   // описание
        void generate(int N, const TRect& clientRect); // задание расположения, N-номер от 0..2 (три повторения теста)
        void draw(AbstractPainter* painter) const; // прорисовка
        void start();             // Начало перемешения указателя мыши  (старт теста)
        void move(TPointF P);// перемещение мыши
        void stop();              // Конец перемещения указателя мыши
 
        double error() const;
        ErrorKind errorType();
}
Это общая часть которую нужно знать на "поверхности" все остальное скрыто в конкретных классах производных от это.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
14.01.2014, 13:34
Цитата Сообщение от Avazart Посмотреть сообщение
Очень интересно, данные разные ... как ф-ции будут с ними работать ?
В моем же случае пользователю лишь достаточно знать об открытых методах абстрактного класса (интерфейсе)
Нет ну если пользователь и создатель это одно лицо, а вообще у тебя походу так оно и есть , пользователи и создатели разные лица, только в том случае когда создается какая нить либа которая будет использоваться распространятся и т.д. это создатели классов и пользователи классов им да нужен интерфейс делать и все дела. Дело в том что твоим интерфейсом воспользуется всего навсего один человек и это ТЫ, так что можно было не сильно парится на счет интерфейса.

Данные будут хранится в глобальной области видимости, пользователь за них ничего не будет знать, для каждой фигуры создать нужно в глобально области данные, затем их инициализировать рандомно инициализировать.

А интерфейс, ну если ты для других делаешь то вынеси каждую функцию отдельно в заголовочный файл и опиши что она делает, например для треугольника функция fucnction_treeangle() и все пользователь ее вызовет и начнет работать программа где нужно будет там точку поставить куда нужно, и так для каждого (он должен сам построить прогу на switch), но так как ты являешься и создателем и пользователем этого модуля, то тебе проще создать одну функцию допустим start(int) в которой будет этот swtich или как ты придумаешь сделать вызов функций я не знаю мб. через if неважно. В цикле от 1 до 7 вызовешь этот старт и для каждой функции пройдешь тест.

ООП не всегда делает легче и понятней прогу, можно спроектировать прогу без ООП и она будет легче и понятней.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.01.2014, 13:35
Цитата Сообщение от sergei60 Посмотреть сообщение
Мне как начинающему после прочтения всех указанных ссылок ,статей о быдлокодерах, и так далее ,честно сказать стало немного тяжело.
А в чем конкретно затруднения ?
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
14.01.2014, 13:37
Цитата Сообщение от Avazart Посмотреть сообщение
Это общая часть которую нужно знать на "поверхности" все остальное скрыто в конкретных классах производных от это.
Интерфейс можно любой придумать, смотря какие цели ты приследуешь, можно создать интерфейс в виде одной функции и из своей проги ее вызвать и все.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
14.01.2014, 13:40
Цитата Сообщение от ninja2 Посмотреть сообщение
Дело в том что твоим интерфейсом воспользуется всего навсего один человек и это ТЫ, так что можно было не сильно парится на счет интерфейса.
Как гласит реклама "ты не ты когда голодный" в данном случае пройдет какое-то время и тот кто писал программу позабудет детали, подобный подход даст возможность вспомнить настолько глубоко насколько это надо (например что бы добавить еще один тест, если попросит заказчик)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.01.2014, 13:40

Что такое ООП?Зачем?Почему?Где?
Ув. программисты,я немало наслышан о важности знания ООП.О том что с ним легче программировать и любой увожающий себя программист должен...

ООП(зачем нужна инициализация переменных в конструкторе Box)
package pkg1; public class Main { public static void main(String args) { BoxWeight hhh = new BoxWeight(10,20,30,40); ...

ООП: Зачем нужна таблица виртуальных методов? Она замедляет работу программы
Разве нельзя определить, метод какого класса вызывать во время компиляции?

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить?
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

Зачем нужно u--?
Как я понимаю это счетчик итераций !! но зачем он ?? #include <iostream> #include <stdio.h> #include <conio.h> using...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru