LINUX.ORG.RU

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

 


1

1

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

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

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

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

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

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

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

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

★★

Последнее исправление: svyatozar (всего исправлений: 4)

Тред -

Бред сивой кобылы и гнедых жеребцов
anonymous
()
Ответ на: комментарий от anonymous

И эшо

Объект это не выключатель.
В частном случае он может быть и выключателем … У ТС объект

ВЫКЛЮЧАТЕЛЬ
anonymous
()

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

Теперь создавайте тред - «Использование объектов в программах».
Это вселенная, а не «выключатель».

Объект ведь может содержать контекст, который может изменяться процедурами …
Т.е. еще раз

Объект это не гвоздь
anonymous
()
Ответ на: комментарий от anonymous

У них ООП такой, бывает и другой …

П ( Проектирование )

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

ООА, ООД…

Понятно, что шутка.
Продолжим

ООА - объектно-ориентированная архитектура

Вроде неплохо …
Нужно пяток книг написать.

anonymous
()

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

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

Он полностью сам решает, принимать ли твою банковскую карту или нет.

Да, он может содержать сложную логику. Но решает не он, а программист.

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

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

vlad9486
()
Последнее исправление: vlad9486 (всего исправлений: 2)
Ответ на: комментарий от vvn_black

В литературе частенько можно встретить маркетинговое plain text database относительно xml и всего того огорода вокруг него который нагородили для него и во славу его обслуживания (xquery, xpath, etc). Дальше конечно поясняется что по факту это скорее клей для передачи данных между базами, но до этого места этот очередной вайтишник не добрался, так как уже имел свое мнение из первых двух абзацев что он осилил прочитать.

anonymous
()

Они не «знают» как себя отобразить.

Это единственно правильное решение. Объекты не должны все уметь. Для это есть сервисы-классы, которые выполняют строго определенную бизнес-логику согласно SRP. Все остальное это антипаттерны.

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

А вот это как раз ТС и не хочет понимать, он говорит, что так думают только сектанты

fpastush
()

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

Пацаны, вы все

ДУРАКИ
anonymous
()

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

И да, то что пишешь про html не является правдой не разу. Даже если не брать современный веб, где уже давно всё на компонентах и данные смешаны с представлением максимально, стили используются в основном только для того, чтобы по разному подстраивать отображение. Так вот даже раньше, html не был данными, а почти всегда был частью пусть простого, но приложения. А уж статические сайты всегда верстались так, что они точно знали как себя отобразить. Строго говоря, html куда ближе к инструментам вёртки газет, чем тебе кажется. В общем найти уже работу.

ixrws ★★★
()

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

Какая-то демагогия. Черный ящик появляется не от ООП, а от естественного разделения труда, точно так же в процедурном модуле есть интерфейсные функции и есть внутренние детали реализации, это такой же черный ящик с т.з. пользователя кода.

Аналогия с банкоматом ложна, т.к. сравнивается готовая техническая система с отдельными классами ООП.

seiken ★★★★★
()

автор во всём прав. Набежала куча деток, которые решили что то чему их научили в скилбокс это и есть ООП. И не зря же они все накопления/всю прожитую жизнь потратили на какой-то кусок кала. А что это? Они не скажут - сам потрать столько времени/денег. Какое же убожество…

anonymous
()

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

Это когда объекты, не зависят от субъектов. Например, твой (субъекта) личный мобильник (объект) не принадлежит тебе, и твоему соседу, и товарищу маёру (наверное, у всякого правила есть исключения).

anonymous
()

Тред и тему не читал, скажите, ОП это анонiмус, который тяжело болел ковидом, и от интоксикации забыл ООП?

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

ОП это анонiмус, который тяжело болел ковидом, и от интоксикации забыл ООП?

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

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

он тут один из старший и над всеми издевается, думает все дураки, но нет, и я не за бан, юмор понимаю

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

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

Объект ведь может содержать контекст, который может изменяться процедурами …

Методами, Вован. В оопэ это методы.

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

Это просто пример того, что цвета — лишь условности.

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

автору. Тонкий тролль однако. Второй тред уже подрывает пуканы местной публике.

Не знаю, мне показалось, что одни только клоуны отписались в теме… И никто из них не смог сформулировать своими словами что такое ООП. Если они и есть «местная публика», то я явно не туда попал…

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

никто из них не смог сформулировать своими словами что такое ООП.

не говоря уже об анализе, проектировании и дизайне.

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

Зачем описывать что-то своими словами, если есть вполне определенные люди которые придумали и ввели парадигму ооп? Смысл от твоих «своими словами» фантазий, основанных на домыслах? Тем более что ты ничего «своими словами» не описал, а навыдумывал кривых аналогий, посредством которых выражаешь кашу в твоей голове.

Цитируй людей, которые придумали ООП и попробуй противопоставить им свои суждения, тогда эта тема может и будет иметь какой-то смысл. А пока скулежка какая-то унылая.

anonymous
()

Объект - […] - чёрный ящик

Чушь какая-то. Дальше не читал. Спорить лень.

mord0d ★★★★★
()

ОПП это просто логическое разделение данных объекта и логическое разделение поведения объекта. Ключевое слово логическое. На самом деле всё. Всё остальное накрутили вумные дяденьки в вумных книжках ради хайпа и ради того, чтоб поставить жирную линию между процедурным и объектным стилем. И за этим жиром иногда забывают о логике и отсюда весь гнев на ооп. Логика определяет чёикак, а не парадигмы и убогие шаблоны проектирования. Как только это понимаешь сразу весь ооп принимается на ура ибо он удобен ибо логичен.

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

вполне определенные люди которые придумали и ввели парадигму ооп?

Сбросим этих дяденек и тётенек с парохода современности и отринем все эти парадигмы ради простой и понятной архитектурной логики. :D :D :D :D :D

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

ОПП это просто логическое разделение данных объекта и логическое разделение поведения объекта. Ключевое слово логическое. На самом деле всё. Всё остальное накрутили вумные дяденьки в вумных книжках ради хайпа и ради того, чтоб поставить жирную линию между процедурным и объектным стилем. И за этим жиром иногда забывают о логике и отсюда весь гнев на ооп. Логика определяет чёикак, а не парадигмы и убогие шаблоны проектирования. Как только это понимаешь сразу весь ооп принимается на ура ибо он удобен ибо логичен.

ООП ни разу не логичен. Есть много литературы на эту тему. Часто приводится пример: квадрат - это прямоугольник. Есть смысл сделать класс квадрат потомком класса прямоугольник, следуя принципам геометрии. Но тогда функция изменения ширины либо будет квадрат делать прямоугольником, либо в квадрате будет давать побочный эффект (так же изменять и длину).

А на практике получаются объекты с незадействованными свойствами и функциями, и со специальными функциями, например set_side(). То eсть, set_width() и set_height() ничего не меняют, а нужно использовать функцию set_side().

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

Ну, я не погромист, но считаю, что можно не стесняться и просто процедуры использовать.

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

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

WitcherGeralt ★★
()

Объект это экземпляр класса, класс это разновидность данных с типом структуры (записи) допускающая абстракцию наследования.

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

Когда ООП непонятно, лучше изучать примеры с возможностью запуска. Классика: demos-примеры из borland pascal 6+, c++ 3+

Основная проблема ООП, как впрочем и других крутых технологий - барьеры неосиляторства.

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

Барьеры как раз из-за таких вот бессмысленных определений, как ты дал, и появляются.

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

Нет бы сказать, что это просто способ организации кода такой. Читатель задумается и пойдёт искать альтернативные способы организации кода. Ничего внятного не найдёт и осознает, что ООП есть тру.

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

Ты действительно не слышал про модификаторы доступа? Методы set_width и set_length могут быть приватными.

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

Кто бы говорил. Человек, который берется критиковать ооп, не зная про модификаторы доступа и полиморфизм, называет оппонентов клоунами.

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

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

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

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

svyatozar, попробуй Метапрог: Метапрог-прототип 42

Визуальная среда программирования, в активной разработке. Если что непонятно - обращайся в Метапрог онлайн, если и он не работает по каким-то причинам - пиши в тред на ЛОРе.

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

Где хамство? И цели такой не было, и даже не вижу, что можно было воспринять как хамство в твою сторону. Слово «ахинея» так зацепило?

Позицию, как мне кажется, я в полной мере аргуметировал. Целую пару абзацев накропал.

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

Визуальная среда программирования

В ней можно создавать компоненты, наподобие виджетов?

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

Причём напыщенные дебилы пудрят мозги всем окружающим, и они (окружающие) так же как ты начинают

На случай, если ты не распарсил, напыщеным дебилом я назвал не тебя. Ты — такая же как и все мы жертва напыщеных дебилов, которые навязали тебе свою парадигму. И теперь вместо донесения сути простыми словами ты пользуешься их новоязом.

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

Уже можно собирать графические интерфейсы из виджетов. Сейчас делаю визуальный просмотрщик структуры типов на Метапроге (начало создания Метапрога «на самом себе»).

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