LINUX.ORG.RU

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

 


1

1

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

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

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

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

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

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

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

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

★★

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

На пальцах ты из либы можешь одну функцию взять, а можешь все. А конечная софтина и есть конечная софтина где ты юзаешь как конечный пользователь, давай не будем пририкаться по этому поводу. Вот я дал пример, еще пример XFCE

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

Brlcad был процедурным.

Когда перестал?

/* Class 'OSLRenderer' holds global information about OSL shader system.
   These information are hidden from the calling C code */
class OSLRenderer {
vM ★★
()
Ответ на: комментарий от TDrive

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

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

https://github.com/BRL-CAD/brlcad/tree/main/src/libanalyze

первое, во что ктнулся наугад.

тут что-то вроде полей класса https://github.com/BRL-CAD/brlcad/blob/main/src/libanalyze/analyze_private.h

а в сишниках большая часть функций, которая принимает первым параметром эти структуры.

Это что тебе процедурка ????

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

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

HTML - это тупо дамп базы данных.

CSS - это что-то типа конфиг файла. При чём тут ООП?

Может у тебя своё видение ООП? Давай, рассказывай. Уже мне тут и определения (даже на англицком языке!) накидали и принципы, а своими словами объяснить никто не может…

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

ну это уже отдельные случаи враит онли кода. я про то чем отличается большой проект

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

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

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

а своими словами объяснить никто не может…

Зачем своими словами, когда есть определения?

Использование структур из данных и кода, с абстракцией характеристик доступных из внешнего кода. Это типа такое поверхностное определение. А добавленин принципов делает этот подход парадигмой.

HTML - это тупо дамп базы данных.

А как… А как же… Это же разметка текста?

vvn_black ★★★★★
()

Действительно смешнее толксов.

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

это unix-way и это законченый продукт.

Есть ещё всевозможные busybox’ы – анти-unix-way.

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

Уже мне тут и определения (даже на англицком языке!) накидали и принципы, а своими словами объяснить никто не может…

Да тебе объяснили тут уже куча человек кучу раз одно и то же.

Вот есть у тебя структуры данных. Есть отдельно набор функций для работы с этими структурами. Ты берешь и объединяешь каждую структуру данных вместе с функциями для работы с этой структурой в одну сущность «класс». И теперь у тебя не каша где все функции были свалены в кучу и фиг поймешь, какая функция с какой структурой данных работает, а все упорядочено.

Что тут сложного? И с чего ты взял что после такого объединения обязательно надо работать с данными только через функции-обертки? Да, объединение дает возможность лишать прямого доступа к данным и заставлять работать через обертки. И много чего еще интересного позволяет делать. Если это надо. А если не надо - то сделай все public и у тебя объект как обычная структура будет + набор функций для работы с ней, которые ты можешь использовать если надо.

Вопрос, который тут все должны тебе задать - это не «покажи пример крупного проекта без ООП». А - «покажи пример СВОЕГО крупного проекта без ООП». Потому что писать что ООП чушь и не нужно можно только после этого.

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

HTML - это тупо дамп базы данных. CSS - это что-то типа конфиг файла.

это оба языки программирования, НО не полные по Тьюрингу, первый для описания текстовой разметки, второй для программирования стилей, причем у него есть наследование и полиморфизм

fpastush
()
Ответ на: удаленный комментарий

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

fpastush
()

В этом примере HTML - это данные в чистом виде.

Нет.

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

Вот потому новое поколение математиков вместо фортрана сидит на R и Python-е, иногда добавляя Java. C/C++ тоже используются, но крайне редко и только от очень большой нужды. Конечно если матлаба мало или он не очень удобен.

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

HTML - это тупо дамп базы данных. CSS - это что-то типа конфиг файла.

это оба языки программирования, НО не полные по Тьюрингу, первый для описания текстовой разметки, второй для программирования стилей, причем у него есть наследование и полиморфизм

Блин, каждую неделю в фейсбуке срач на тему «является ли HTML языком программирования». Кто-то говорит что да, кто-то говорит что нет. Но при чём тут это? Это чисто данные. Сериализация дерева документа. Никакой инкапсуляции. Никакого наследования. Никакого полиморфизма. Это просто база данных XML. Не надо натягивать сову на глобус!

И в CSS нет никакой инкапсуляции. Там даже нет объектов, так как объект подразумевает данные и методов. Где там методы? И вообще это декларативный язык. Там нет передачи сообщений и прочей ереси. Можно даже спорить что там процедурно задаются «регулярное выражение» и список изменений, которые нужно применить к соответствующим элементам. Даже порядок их задания играет роль, что тоже говорит в пользу процедурного стиля.

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

Это просто база данных XML. Не надо натягивать сову на глобус!

И он старше XML на несколько лет.

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

HTML - это тупо дамп базы данных да ты точно придуриваешься но с 1 звездой

Вообще-то XML используется как формат хранения баз данных наравне с JSON. https://en.wikipedia.org/wiki/XML_database

А что означает количество звёзд? Их число пропорционально количеству комментариев?

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

Малолетний битард опять выходит на связь, а мочераторы пьют пиво и смеются. Лор торт.

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

Малолетний

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

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

мдааааа…. может тебе в МГУ на факультет вмк помочь поступить ?

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

Вообще-то XML используется как формат хранения баз данных наравне с JSON

Это не делает XML и тем более HTML базой данных.

У вас что-то с базовой терминологией. В данном случае вы почему-то ставите знак равенства между БД и форматом представления данных. Расскажите про CRUD применительно к XML/HTML/JSON?

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

Вообще-то XML используется как формат хранения баз данных наравне с JSON

Это не делает XML и тем более HTML базой данных.

Минуточку! Я писал «дамп базы данных». «Это чисто данные. Сериализация дерева документа.» а из всего этого вы придрались к словосочетанию «база данных». Блин, я уже не знаю какие слова использовать. Что вы за люди такие токсичные?

У вас что-то с базовой терминологией. В данном случае вы почему-то ставите знак равенства между БД и форматом представления данных.

Это вы, уважаемый, путаете Базу данных и СУБД.

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

Данет, подобранный пароль на старый заброшенный акк. Это норма для лора. А то что тролль это возможно. Кащенка и ему подобные развлекаются. У меня больше к мочерации претензии.

anonymous
()

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

это нет. Есть множества правил по которым играют в эту игру.

отдельный банкомат это не платёжная система.

один обьект в памяти это не ООП.

Закругляйся.

ukr_unix_user ★★★★
()

Ты почти понял аж один из принципов, но утрировал и все просрал. =(

t184256 ★★★★★
()

Расслабься. Ты ничего не понимаешь в ООП.

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

вместо фортрана сидит на R и Python-е, иногда добавляя Java. C/C++ тоже используются, но крайне редко

Следует отметить, что при программировании на современном Фортране реже требуется использовать элементы ООП, чем для C-программ, так как Фортран содержит больше встроенных абстракций.

https://keldysh.ru/papers/2002/prep70/prep2002_70.html

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

Шутка на ««всё есть объект» - вот проблема!»

«всё есть объект», а программист - молоток!
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.