LINUX.ORG.RU

Моё понимание ООП

 


1

1

Мою прошлую тему загадили и утопили в молоке, завалили вопросами типа «а что ты понимаешь под ООП». И жалуются что я не отвечаю. Но не на все вопросы есть простые ответы. «Один дурак может задать столько вопросов, что сто мудрецов не смогут ответить!». И всё же я попробую представить своё видение.

Если взять просто данные, хранящиеся в структурах, то их можно сравнить с бухгалтерскими счётами: ты можешь сам прочитать данные, можешь сам изменить их, можешь переписать их себе в блокнот, можешь положить на хранение в ящик или передать их другому.

Объект - это как банкомат. Это - чёрный ящик, который надо подключить в сеть, подключить в интернет, при чём ты не знаешь сколько киловатт энергии он потребляет, сколько траффика он жрёт, сколько других людей и банкоматов влияют работу этого, ты не знаешь сколько данных он хранит. Он полностью сам решает, принимать ли твою банковскую карту или нет. Он может снимать зависящее от инфляции количество денег при запросе на выдачу состояния счёта. Он может быть устаревший или усовершенствованный, где функции могут иметь странные побочные эффекты. Он может вставить в выписку счёта рекламу. Да мало ли что ещё. Это - посредник со всеми вытекающими последствиями. Даже если ты пишешь его сам, используя его в разных проектах, ты можешь наделать изменений, которые могут неявно повлиять и на старые проекты побочными эффектами, либо потерей точности при дополнительный преобразованиях и т.д.

Вобщем, в первом случае модель, где ты контролируешь объём памяти, занимаемый данными, их формат (например, целый или с точкой) ты хранишь их в своей комнате и сам решаешь, делиться этими данными или нет. Это всё возможно из-за того что у тебя есть дополнительные знания (контекст), которые нигде в системе не хранятся. Твои функции, работающие с этими данными, предполагают что данные хранятся в том или ином формате и это позволяет избежать лишних преобразований, а так же необходимость в каждом объекте хранить лишние метаданные.

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

Сразу хочу отметить, что я не против банкоматов, они не идеальны, но пока безналичный расчёт не везде принимают, приходится ими пользоваться. Проблема ООП в том, что в нём всё является таким «банкоматом» и везде принимается только нал. Любому очевидно, что когда имеешь дело с банкоматами, ты не можешь ничего оптимизировать.

ООП - это такая модель, в которой «всё является объектом», то есть данные заворачиваются в объект и вместо естественного для вычислительной машины хода обработки данных «данные на входе -> данные на выходе», твой код имеет дело с интерфейсами, т.е. идёт общение с «чёрным ящиком», который «сам знает что делать».

Простой пример: веб-браузер HTML+CSS+Javascript В этом примере HTML - это данные в чистом виде. Они не «знают» как себя отобразить. CSS - тоже данные. Это не объекты. И есть Javascript код, который имеет полный доступ к дереву документа. И когда ты пишешь веб-браузер, у тебя данные на входе - веб страница на выходе - это информационн-ориентированный подход (Data-oriented), в центре которого данные, а не объекты. Сохраняя страницу в формате .pdf ты тоже создаёшь данные на выходе. Эти данные можно отправить в другую программу для дальнейшей обработки. Это как инструмент.

★★

Последнее исправление: svyatozar (всего исправлений: 4)
Ответ на: комментарий от hateWin

А все вместе — ООП. Пример с старыми и новыми проектами и побочными эффектами показывает, что ты не до конца понял, зачем нужно ООП.

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

svyatozar ★★
() автор топика
Ответ на: комментарий от TDrive

Да и вообще, ни гарвардская, ни манчестерская архитектуры ЭВМ не тянут.

vM ★★
()

Ты подходишь к объекту «Банкомат», даешь ему объект «Карточка», банкомат считывает нужные ему свойства объекта «Карточка» и выдает тебе объект «Деньги».

Если тебе нужны свойства объекта «Деньги», то тебе нужен объект «Весы», объект «Штангенциркуль» и, возможно, объект «Ультрафиолетовая лампа».

Казалось бы, все просто как два пальца об асфальт. Но тебя такое положение дел не устраивает. Тебе нужно чтобы приехал мусоровоз, вывалил на тебя тонну хлама с ближайшей свалки ой, простите, информации, в которой ты долго и с упоением будешь искать то, что тебе нужно в данный момент. Полная свобода действий прилагается. Хочешь - меряй консервные банки штангенциркулем, хочешь - взвешивай тухлые рыбьи головы, хочешь ищи деньги, кхм, ультрафиолетовой лампой.

Я все правильно понял?

qtm ★★★
()
Ответ на: комментарий от hateWin

Брейнфак полон по Тьюрингу. Напиши на брейнфаке браузер.

Да, но его в ВУЗах не навязывают. Пока что.

svyatozar ★★
() автор топика
Ответ на: комментарий от svyatozar

Ну, твою мать, я тебе уже дважды объяснил. Что в словосочетании «способ композиции кода» тебе не понятно? Ты просто пытаешься срач высосать из ничего, или ты действительно непроходимый?

Код становится чище и понятней. А тебе русский язык для начала следует научиться понимать, потом уже до кода доберёшься и об ООП рассуждать будешь.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от vM

Сейчас речь не об этом. ТС не понял смысла ООП, потом смешал в кучу полноту по Тьюрингу (то есть, понятие, описывающие КЛАСС вычислительных задач, которые может решать язык) и принципы композиции кода.

hateWin ★☆
()
Ответ на: комментарий от svyatozar

Предложи хорошую аналогию.

Лучше без, потому что нет хороших.

Я не считаю ООП хорошей идеей.

Ну и «отрасль» с тобой солидарна. Все используют ООП как надстройку для структурирования кода и не особо переживают.

vvn_black ★★★★★
()
Ответ на: комментарий от fernandos

ООП — парадигма программирования, в основе которой лежит объект, метод компоновки данных и подпрограмм.

Ну вот. А кто-то говорит «Инкапсуляция, наследование, полиморфизм». А другой вообще, (пардонэ мон франсэ): «OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.»

И кому из вас верить? Кстати, что такое «late-binding of all things»?

svyatozar ★★
() автор топика
Ответ на: комментарий от svyatozar

Да ты даже перевести не удосужился! Очень мило.

Не можешь перевести - значит тебе к дену73, попроси у него себе русское ооп с банкоматами и моделями.

кто из вас прав?

Кто прав - изобретатель ООП или иксперд с лора? О чём тут думать, конечно иксперд!

pinus_nigra
()
Ответ на: комментарий от WitcherGeralt

ТС не осилил в прошлом треде прочесть сообщения, это для него сложно.

fernandos ★★★
()
Ответ на: комментарий от fernandos

Не отделяете определение от принципов?

Это всё демагогия. Принципы, определение… По факту мы имеем дело с классами и объектами. Ни в принципах, ни в данных другими уважаемыми собеседниками определениях этот момент не раскрывается.

svyatozar ★★
() автор топика
Ответ на: комментарий от WitcherGeralt

Сейчас его уже очень сложно будет найти. Анонимус, которому я отвечал, как раз самую суть уже продемонстрировал.

У меня уважаемый товарищ анонимус в игноре.

svyatozar ★★
() автор топика
Ответ на: комментарий от svyatozar

Это всё демагогия. Принципы, определение…

Твою ж дивизию... То есть, договоренность и ясность в терминах, которые мы используем в ходе срача дискуссии — это демагогия, а наделение этих терминов своим, никому неизвестным смыслом — честная дискуссия в духе древнегреческих философских школ?

hateWin ★☆
()
Последнее исправление: hateWin (всего исправлений: 1)
Ответ на: комментарий от svyatozar

Это всё демагогия

Нет, это аспекты.

По факту мы имеем дело с классами и объектами

А потом ещё и с файлами, в них тоже проблема?

fernandos ★★★
()
Ответ на: комментарий от WitcherGeralt

Ледник слишком быстро растаял.

vM ★★
()
Ответ на: комментарий от fernandos

По факту мы имеем дело с классами и объектами

А потом ещё и с файлами, в них тоже проблема?

Классы - это большая проблема, так как нет однозначного принципа группировки структур в классы. Кроме того, эта группировка создаёт проблему разрежённого хранения данных. Я же об этом постоянно твержу.

Есть ООП и есть его критика. И об этом много говорят последнее время в англоязычной среде. А в русскоязычной нет. И напрасно. Вот что я пытаюсь донести!

svyatozar ★★
() автор топика
Ответ на: комментарий от WitcherGeralt

Жаль, люблю почитать всяких фриков на хабре. То фреймворк на сплошных eval построят, то цмс в phar запихнут.

qtm ★★★
()
Ответ на: комментарий от WitcherGeralt

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

Silerus ★★★★
()

«Один дурак может задатьсоздать столько вопросовтем, что сто мудрецов не смогут ответитьоткомментить!»

Fixed. Не благодари.

dimgel ★★★★★
()
Ответ на: комментарий от svyatozar

Классы - это большая проблема, так как нет однозначного принципа группировки структур в классы.

И почему это проблема?

Кроме того, эта группировка создаёт проблему разрежённого хранения данных. Я же об этом постоянно твержу.

Но ты не говоришь почему это проблемы? Просто потому что тебе так показалось?

TDrive ★★★★★
()

Блин чувак, если ты не любишь в ООП просто забей на него болт и не вспоминай что такой подход в принципе существует и всё.

Ты так сложно расписал что я ничего не понял. ООП это банально подход организации данных и механизмы описания доступа к ним и всё. Всё остальное это как получится реализовать то и будет. Везде по разному.

Вот чес слово, если у тебя от ООП горит просто забей на него болт и всё =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от svyatozar

Классы - это большая проблема, так как нет однозначного принципа группировки структур в классы. Кроме того, эта группировка создаёт проблему разрежённого хранения данных.

Решайте, выбирайте, оценивая результат. Или откажитесь от использования классов. Кто заставляет?

vM ★★
()
Ответ на: комментарий от svyatozar

Классы - это большая проблема, так как нет однозначного принципа группировки структур в классы

Потому что классы решают разные задачи. Где тут проблема?

Кроме того, эта группировка создаёт проблему разрежённого хранения данных

Храните всё в глобальной области видимости. С другой стороны, это глупый подход, но вы можете продолжать играться в выдуманные проблемы.

Вот что я пытаюсь донести

Да нет, вы пока чушь несёте, выкладывая темы «как я не понимаю ооп» или «ооп — зло».

fernandos ★★★
()
Ответ на: комментарий от svyatozar

Вот что я пытаюсь донести!

Уважаемый, запомните главное правило программирования: «нет кода - нет проблемы». Все что вы там представляете, существует только в вашей голове. Проблемы какие-то… Код то где? Ради чего столько болтовни?

qaqa ★★
()
Ответ на: комментарий от qaqa

Чтобы создать текст – одну из основ современной гуманитарной культуры.

vM ★★
()
Ответ на: комментарий от LINUX-ORG-RU

Блин чувак, если ты не любишь в ООП просто забей на него болт и не вспоминай что такой подход в принципе существует и всё.

Допейшу: Но знай что внутри HTML & CSS - ООП !

superuser ★★★★☆
()
Ответ на: комментарий от WitcherGeralt

Справедливости ради, не так уж и смешно. В том плане, что некоторые люди в силу сторонних причин не имеют возможности сменить место работы, а там вот такое. Я этот пример-то не с первого раза нашкрябал.

anonymous
()
Ответ на: комментарий от svyatozar

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

Его дают потому, что рынок этого требует, потому что любой проект. который переваливает за 1000 строк кода уже требует порядка, а ООП - это пока единственный способ навести этот порядок. И как ты до сих не пор не поймешь, что это АБСТРАКЦИЯ и ПРИНЦИП, а не конкретная реализация в конкретного языка и конкретного компилятора.

Да и в конце концов покажи реальный проект где нет ОО принципа. Ну и естественно не в 1000 строк когда а намного больше.

fpastush
()
Ответ на: комментарий от LINUX-ORG-RU

Он тут про них пейсал, но то-ли ни фига не понимает, то-ли придуривается
Upd.: да он тут с 2003, наверняка придуривается
Upd2.: или так и есть :) ?

superuser ★★★★☆
()
Последнее исправление: superuser (всего исправлений: 3)

Вот, например, я недавно ковырял код nginx. Так там сплошной Объектно ориентированый принцип, там нет линейности. Там реальная многоуровневая вертикальная интеграция. Хоть и написано все на Си

https://github.com/nginx/nginx

fpastush
()

Мог бы сразу в Talks создавать. А то сейчас придет шома и полетит твой тред на удаление.

byko3y ★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Пусть для начала ЛОР выпилит. Движок-то на скале с джавой написан.

hateWin ★☆
()
Ответ на: комментарий от fpastush

ну пусть будет минимум 5К строк, это неважно, речь идет об образном критерии

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

TDrive ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.