Форум программистов, компьютерный форум, киберфорум
Наши страницы

ООП и паттерны

Войти
Регистрация
Восстановить пароль
Результаты опроса: используете ли вы ооп
да 221 87.35%
нет 32 12.65%
Голосовавшие: 253. Вы ещё не голосовали в этом опросе

 
 
@KOT@
81 / 39 / 2
Регистрация: 29.01.2010
Сообщений: 386
#1

Стоит ли использовать ООП? - ООП и паттерны

09.02.2010, 13:44. Просмотров 57438. Ответов 718
Метки нет (Все метки)

Здравствуйте.
Возник такой вопрос: стоит ли использовать ооп. Даже не так, когда использовать ооп?
Иногда (даже чаще всего) легче написать простые функции, а не мутить с классами обектами и методами.
Раздражает инкапсуляция - какой вообще ее смысл? Чтобы получить переменную класса по правилам ооп нужно создавать метод для ее чтения? когда такой подход оправдан - ведь затрачивается куча лишнего времени.
5
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2010, 13:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стоит ли использовать ООП? (ООП и паттерны):

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

ООП ради ООП - ООП и паттерны
Доброго времени суток! Есть к примеру класс Cat который реализует интерфейс Movable, инкапсулирует цвет, и прочее. Имеет ли смысл...

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

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

Стоит ли использовать this? - Java SE
Здравствуйте, когда стоит использовать this, а когда нет? Например у меня есть код, тут нужны this или они просто захламляют его и можно...

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

718
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
09.02.2010, 14:00 #2
А что говорит Б.Страуструп. по этому поводу?

Добавлено через 2 минуты
//--------------------------------------------
а не мутить с классами обектами и методами.
//--------------------------------------------

Добавлено через 3 минуты
инкапсуляция - какой вообще ее смысл?
Тогда можно и не использовать функции.
0
@KOT@
81 / 39 / 2
Регистрация: 29.01.2010
Сообщений: 386
09.02.2010, 14:03  [ТС] #3
Цитата Сообщение от Genius Ignat Посмотреть сообщение
А что говорит Б.Страуструп. по этому поводу?
Не знаю что говорит Страуструп. Я хочу знать мнение других программистов. Может я чего-то не понимаю в программировании?

Добавлено через 2 минуты
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Тогда можно и не использовать функции.
Функции можно и нужно использовать практически всегда. Даже всегда. В с++ и си-шарп без функций программировать вообще невозможно. Но программировать без ооп можно.
И меня интересует КОГДА удобнее использовать ооп, а когда обойтись обычными функциями.
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
09.02.2010, 14:06 #4
классы и объекты способствуют моделированию реальных понятий, в более наглядном
виде не желе структуры и функции.

Добавлено через 2 минуты
Наследование используется для реализации взаимосвязных понятий.
Взаимосвязь выстроена в виде иерархии.
0
@KOT@
81 / 39 / 2
Регистрация: 29.01.2010
Сообщений: 386
09.02.2010, 14:14  [ТС] #5
Цитата Сообщение от Genius Ignat Посмотреть сообщение
классы и объекты способствуют моделированию реальных понятий, в более наглядном
виде не желе структуры и функции.

Добавлено через 2 минуты
Наследование используется для реализации взаимосвязных понятий.
Взаимосвязь выстроена в виде иерархии.
Это я понимаю. НО: оправданы ли усилия на создание классов и обеспечение инкапсуляции и сокрытия данных и когда они оправданы
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
09.02.2010, 14:38 #6
Посмотри на иерархию классов библиотеки MFC, тогда поймешь зачем ООП.
Для большого проекта в котором много взаимосвязных нитей лучше использовать ООП.

Добавлено через 3 минуты
Для больших проектов ООП это норм и оправдано.

Добавлено через 2 минуты
обеспечение инкапсуляции и сокрытия данных
//---------------------------------------------
А ты знаешь что глобальность не есть хорошо.

Добавлено через 8 минут
Если проект включает все то, что не как не взаимодействует между собой лучше применять процедурный подход.
ООП в данном случае в полной своей мере, не применимо к данной задаче.
Зачем изобретать иерархию, когда её даже и не видно логически.

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

Добавлено через 3 минуты
так методы и данные классов могут наследоваться
Причём что наследовать надо , определяет программист.
0
darkAngel
Технофашист
217 / 200 / 4
Регистрация: 11.03.2009
Сообщений: 883
09.02.2010, 21:45 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
И меня интересует КОГДА удобнее использовать ооп, а когда обойтись обычными функциями.[/
Я хочу знать мнение других программистов
Смотри, допустим ты создаёшь объект Цветочек. Ну ты описывашь какие-то данные (цвет, вид, количество лепестков и т.д.). Ты прописываешь ему функции (ну фотосинтез , размножение).

И если тебе нужен для работы всего один цветок , тебе хватит вполне несколько переменных для описания свойств и несколько функций. И тут тебе можно не заморачиваться на класс.
Но если, тебе нужно не 1 цветочек, а 10 , то представь, тебе нужно будет прописать уже не несколько переменных, а несколько умноженное на 10. А если нужно 100 цветков, ты представь сколько тебе переменных надо прописать? Прописать ладно, а какой хаус будет, у тебя только сотни строчек кода уйдёт на это.

А теперь прредставь, чтобы вызывать функции для каждого цветочка, тебе нужно прописывать передеваемые в функцию параметры вручную для каждого цветочка. А если их будет не 100 а 1000?
8
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,485
09.02.2010, 21:50 #8
ООП не сразу приходит в голову. Я вообще вначале классы использовал как сборник функций и не более))))) Однако применение ООП там где оно нужно повышает наглядность кода в разы, а так же повышает удобство его написания. И многое другое... Стоит пользоваться! Но все зависит конечно от конкретной ситуации, иногда есть такие что это просто излишне

Кстати хороший пример ООП - string) Мы абстрагируемся от реальных данных (как я понимаю это называется инкапсулирование) скрывая их внутри. Мы знать не знаем про массив символов. И тут же можно удобно делать выделение памяти в конструкторе и удаление в деструкторе.
5
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
09.02.2010, 22:00 #9
darkAngel:
Мысль не точна. Но всё равно тебе спасибо за рвение помочь.

Добавлено через 3 минуты
darkAngel:
Всё что ты сказал уложиться в малое количество строк, это следует логически из твоего высказывания.
Если хочешь я напишу на C++ всё что ты сказал. И ты удивишься.
0
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,485
09.02.2010, 22:11 #10
Если хочешь я напишу на C++ всё что ты сказал. И ты удивишься.
Кстати помоему в этом и есть идеалогия (одна из) C++ что она не навязывает конкретной парадигмы программирования, она просто предлагает инстумент. А вопрос @KOT@ звучит по логике в виде "стоит ли использовать перфоратор или плоскогубцы? когда лучше использовать плоскогубцы. раздражает что перфоратор делает большие дыры". Прошу не анализировать пример, он для шутки

Чтобы получить переменную класса по правилам ооп нужно создавать метод для ее чтения? когда такой подход оправдан - ведь затрачивается куча лишнего времени
Все не так вы воспринимаете. Объект это реальная сущность класса. Т.е. класс это схема по которой компилятор скомпанует данные. Потеря производительности пустяковая. Наоборот кое где можно выиграть очень многое. А самое главно выиграть свое время и долголетие мозга

ps. В ООП просто надо войти. Вначале оно кажется бредом - по себе знал. А потом не оторвешь и даже где оно не нужно будешь делать...
1
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
09.02.2010, 22:16 #11
Я в своем в стиле про рекламирую COM:
@KOT@:
Если хочешь создавать эффективные и легко модифицируем не монолитные приложения,
используй технологию COM.
В разделе COM & OLE я выложил очень хорошую книгу про технологию COM.
0
Evg
Эксперт CАвтор FAQ
18459 / 6509 / 455
Регистрация: 30.03.2009
Сообщений: 18,176
Записей в блоге: 29
09.02.2010, 22:58 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
@KOT@, у меня есть дикое подозрение, что даже если тебе разжуют вопрос и разложат по полочкам, то ты всё равно не поймёшь. Как и большинство начинающих, которые задаются этим вопросом. Замечу для отвечающих, что кот спрашивает именно про ООП. Пример с цветочками не канает, поскольку там можно обойтись обычными структурами Си (что совсем не есть ООП). Так или иначе вопрос попадает в ту категорию, когда человек в какой-то момент сам себе ответит на этот вопрос. Т.е. со временем придёт именно практическое понимание, чем объектное программирование отличается от необъектного (а не теоретическое описание из книг с модными словами "инкапсуляция" или типа "полиморфизм"). Одно могу сказать точно: на маленьких программах какой-то особенной необходимости в ООП нет
4
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
09.02.2010, 23:03 #13
Evg:
Однозначно.
0
darkAngel
Технофашист
217 / 200 / 4
Регистрация: 11.03.2009
Сообщений: 883
10.02.2010, 00:03 #14
Всё что ты сказал уложиться в малое количество строк, это следует логически из твоего высказывания
ну да, если использовать массивы. но я немного другое имел в виду.

Evg,Genius Ignat, я имел в виду то, что для каждого цветочка нужно в функцию передвать допольнительные параметри, в то время как в объектах класса это сделает за тебя сам объект. Ну, например, указатель на вершину стека. Для каждого стека свой указатель, и для каждого стека нужно передавать в функцию этот указатель на вершину. (за исключением использования глобальных переменных).
В то время как в объекте может спокойно сидеть этот указатель и программист избовляется от данной заботы.
0
Evg
Эксперт CАвтор FAQ
18459 / 6509 / 455
Регистрация: 30.03.2009
Сообщений: 18,176
Записей в блоге: 29
10.02.2010, 00:14 #15
darkAngel, то, что ты описал - это НЕ есть ООП (а точнее так: ООП далеко не только это). Это всего лишь техническая реализация языка Си++. Формально - да, это инкапсуляция

Вариант на Си++

C++
1
2
3
4
5
6
7
8
9
10
class Flower
{
  ...
  void Func (void);
  ...
}
 
...
Flower f;
f.Func();
эквивалентен варианту на Си

C
1
2
3
4
5
6
7
8
9
10
struct Flower
{
  ...
};
 
void Func (struct Flower *this);
 
...
Flower f;
Func (&f);
Из постановки вопроса я так понял, что КОТ сие отличие понимает. Он не понимает ЗАЧЕМ это нужно, когда можно без этого. Или я не так понял его непонятки
1
10.02.2010, 00:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2010, 00:14
Привет! Вот еще темы с ответами:

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

Стоит ли использовать AJAX - jQuery
Здравствуйте. Выгодно ли делать динамическую подгрузку страницы с помощью AJAX если речь идёт о относительно больших размерах данных?...

Стоит ли использовать Vector - Java SE
>Vector ух ты, давно я этого зверька не видел. Думал вымерли все. Нельзя использовать вектор Перемещено из...

Стоит ли использовать фреймы? - Delphi
Здравствуйте, столкнулся с такой проблемой : Есть главная форма с кнопками (рис 1) при нажатии на кнопки в правой части формы должны...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.