ООП наоборот?
Запись от CoderHuligan размещена 04.07.2024 в 09:23
Показов 4707
Комментарии 89
|
Я бы не стал писать этот пост в своем блоге, если бы не нуждался в некой обратной связи. Постараюсь быть краток. Я не против ООП. Вернее: я согласен что объектная парадигма внесла новый уровень в искусство программирования. Согласен, что мыслить в категориях объектов это более естественно, чем в категориях действий. Ведь действия (функции) всегда функции какого-либо объекта, который первичен. Не может быть действия без объекта, который это действие выполняет или над которым выполняется действие каким либо объектом. То есть объекты выполняют действия над такими же объектами. И в языках человеческих подлежащее первичнее сказуемого, существительное первичнее глагола: Мама мыла раму, естественнее чем: мыла мама раму. Для человеческого ума. Вот почему конструкция: имя_объекта.действие - гораздо естественнее, чем конструкция: действие(имя_объекта). Это действительно так, согласен. Преимущество еще и в том, что вместо: мыла_раму(мама) мы пишем мама.мыла_раму, соответственно вместо имени мыла_раму, мы имеем более короткое мама, и так для всех действий (методов). А это намного сокращает опасность конфликта имен. А теперь о недостатках традиционной реализации объектной парадигмы. 1. вместо того, чтобы эволюционно развивать процедурную парадигму в процедурных языках, пошли по пути революционному: путем по сути ломки процедурной парадигмы. То есть, взяли данные в виде структур и функции и запихали всё в одну коробку, назвав этого получившегося монстра "классом". И вот здесь я считаю, что данные должны быть просто данными, а функции просто функциями, и их нельзя было пихать в одну коробку. Так как в си-подобных языках не было четкого понятия "модуля", класс подменил собой модуль, но не полностью. Так как класс по сути не может являться модулем - это совершенно разные понятия. К чему это привело? К невозможности манипулировать данными как простыми данными. Надо всегда помнить, что данные могут передаваться по сети, могут сохраняться на диск и т.д., но объекты вы на не сможете сохранить на диск, без дополнительных выкрутасов. То есть объект в ООП это НЕ ДАННЫЕ. Это надо запомнить. Не правда ли - парадоксальный вывод? Но это так. Я даже не знаю как назвать этого получившегося монстра, а вернее генетического урода, по сути химеру. То есть взяли и скрестили две совершенно разные сущности: данные и функции. Логика была такая: почему бы не скрестить вместе функции, и данные, которые по типам связанны с друг другом? Ведь функции у нас типизированные, заточены на определенный тип данных. Но, однако, забыли, что для этого существует понятия модуля, где эти разные сущности и должны обитать. Создали проблему, потом начали разгребать и как то с этим существовать. То есть чтобы общаться с генетическими уродами нужен особый подход или язык. Такой язык был создан. Так возникла объектная терминология, а вокруг неё свой особый круг посвященных жрецов.. Я считаю, что процедурные языки имеют потенциал для расширения в объектном направлении не ломая структуру процедурного кода. То есть предлагается не революционный подход, а эволюционный. Это похоже на Процедурно-Параметрическую парадигму, продвигаемую профессором Легаловым, которую он осуществил в языках O2M и Пифагор. Это прямой конкурент ООП. Я предлагаю нечто другое, но также параметрическое. И вот о этом то и хотелось поговорить. Если в O2M функции реализуют действия, а аргументы функций параметризуют возможные варианты обработки разных типов, то я предлагаю исходить не из действия, что вторично, а первичным сделать имя объекта, которое является именем некой объектной функции. Эта функция не простая. Во первых она не называется процедурой или функцией, она определяется как объект:
Переключение методов осуществляется как и в ООП через внутреннюю таблицу методов через указатели на функции. Конструкция object может возвращать то возвращаемое значение, которое возвращает конкретный метод. То есть может возвращать значения разных типов. Конструкторы/деструкторы осуществляются также через методы. Например создаем объект "мама":
Далее:
наследование методов других объектов вполне возможно также осуществить. при этом язык остается достаточно простым и понятным. То есть мы тут не создаем никаких химер. | |||||||||||||||
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 89
Комментарии
-
Вообще говоря выбор ООП не ООП это вообще разговор другого рода. Например я пишу свой проект на PHP. Ну там применение ООП как бы грубо говоря "меньше профитов дает", хотя бы потому, что в общем случае php скрипт это 30 секунд работы и все долой из памяти
Главное у другом: лично мне так понятнее. И это важно - это снижает стоимость разработки. Для вас вполне возможно понятнее функциональное.
На самом деле историю со станком и с деталями в обоих парадигмах можно грамотно спроектировать.
Самое глупое это слепо следовать на всех задачах строго одной парадигме просто потому, что "считается кошерной".
Т.е. важно понимание, умение пользоваться и проектировать.Запись от voral размещена 08.07.2024 в 15:23
-
Запись от CoderHuligan размещена 08.07.2024 в 15:49
-
По этому я и добавил "в общем случае". Нюансы есть в этом направлении.
Сообщение от CoderHuligan
Это зависит не от парадигмы, а от спроектировавшего/написавшего конкретный код.
Сообщение от CoderHuligan
Запись от voral размещена 08.07.2024 в 15:53
-
Запись от CoderHuligan размещена 08.07.2024 в 16:09
-
Это только для вас.Запись от voral размещена 08.07.2024 в 16:11
-
1. не нужно его вам понимать!
Сообщение от CoderHuligan
2. есть интерфейс - юзайте класс только через интерфейс.
3. тестировщик должен понимать какие данные будут входить на вход, и что должно выходить на выход. ВСЁ!
4. тестировщик это ЭЛИТНЫЙ пользователь того класса, работу которого он тестирует.
5. тестировщику фиолетово, как там внутри класса всё работает.
внутри класса может быть куча процедур с приватным модификатором,
до которых дело есть только у разраба этого класса и НИКОМУ больше!Запись от XLAT размещена 08.07.2024 в 18:15
-
Тестировать систему легче тогда, когда в нашей комнате все лежит на своих местах, а не разбросано. Если один носок валяется в углу, второй на полке, то разобраться невозможно. У вас объект это распределенная система. Должен быть определенный порядок. Данные в одном месте, обработка ошибок в одном месте, функции в одном месте. Тогда в комнате порядок, в ней приятно жить, глаз радуется.
Порядок против хаоса. Порядок это хорошо.Запись от CoderHuligan размещена 09.07.2024 в 14:01
-
говорите все же за себя.
Сообщение от CoderHuligan
ООП прекрасно все позволяет организовать. Если вы не умеете сделать все организованно - то вам стоит подучиться в этом плане. Виной тут не ООП, а ваши навыки.
У нас все упорядочено. Если все разбросано - это значит безграмотный архитектор был на проекте.Запись от voral размещена 09.07.2024 в 14:03
-
Точно так же процедурный подход ни как не спасает от беспорядка. Более того - беспорядок там "легче" достигается.Запись от voral размещена 09.07.2024 в 14:05

Главное у другом: лично мне так понятнее. И это важно - это снижает стоимость разработки. Для вас вполне возможно понятнее функциональное.

