Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

объектная оргия в ООП кратко

Лекция



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

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

"Объектная оргия" термин в программировании, описывающий типичный анти-шиблон. При объектной оргии объекты недостаточно инкапсулированы и позволяют неограниченный доступ к своим внутренним свойствам. В результате код становится трудно читаемым, потому что становится непонятно, для чего вообще предназначен объект. Интерфейс класса теряет смысл. И изменить такой класс в будущем становится практически невозможно, потому что нельзя быть уверенным, что какая-то часть приложения не обращается напрямую к свойству.

Чаще всего это выглядит как декларация свойств public, а не protected или private. И бывает вызвано "незрелым программированием" - когда программист начинает писать класс, до конца не зная, что он (класс) будет делать.

Как бороться? Проектировать и утверждать интерфейс класса до написания кода.

Последствия

Результатом объектной оргии в основном является потеря преимуществ инкапсуляции, в том числе:

  • Неограниченный доступ мешает читателю рассуждать о поведении объекта. Об этом говорит сайт https://intellect.icu . Это связано с тем, что прямой доступ к его внутреннему состоянию означает, что любая другая часть системы может манипулировать им, увеличивая объем кода для проверки и создавая средства для будущих злоупотреблений.
  • Вследствие сложности рассуждений проектирование по контракту фактически невозможно.
  • Если большая часть кода использует преимущества отсутствия инкапсуляции, результатом является трудно обслуживаемый лабиринт взаимодействий, широко известный как « крысиное гнездо» или код спагетти .
  • Первоначальный дизайн не виден из-за чрезмерно широких интерфейсов к объектам.
  • Широкие интерфейсы затрудняют повторную реализацию класса без нарушения остальной системы. Это особенно сложно, когда клиенты одного класса разрабатываются другой командой или другой организацией.

Формы

Инкапсуляцию можно ослабить несколькими способами, в том числе:

  • Объявляя внутренние члены общедоступными или предоставляя свободный доступ к данным с помощью общедоступных методов мутатора (установщика или получателя).
  • Предоставляя частный доступ. Например, см .: Модификаторы доступа Java и уровни доступности в C #
  • В C ++ с помощью некоторых из вышеперечисленных средств и объявления friendклассов или функций.

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

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

Причины

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

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

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

Многие программисты рассматривают объекты как анемичные хранилища данных и манипулируют ими, нарушая принципы сокрытия информации , инкапсуляции и проектирования по контрактам .

Решения

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

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

Из статьи мы узнали кратко, но содержательно про объектная оргия
создано: 2021-03-13
обновлено: 2021-03-13
132265



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии

Антон
12-03-2021
вот теперь я врубился точно, почему следует избегать public "И изменить такой класс в будущем становится практически невозможно, потому что нельзя быть уверенным, что какая-то часть приложения не обращается напрямую к свойству"... вернее понял, что не столько избегать, сколько в чем смысл public and protected, потому что в учебниках можно встретить лишь описание: public-можно обращаться извне, protected-нельзя или объяснения в таком же роде... А вообще - это только через опыт - "опыт, сын ошибок трудных"...
Nikita
12-03-2021
Ага, было непонятно, зачем класс, а поменяли с public на protected и сразу стало понятно, зачем этот класс придуман! :)
Стас
12-03-2021
Не так всё просто. Если свойство неоправданно задекларировано как public, то скорее всего весь класс реализован неверно с точки зрения ООП. То есть внутренними ресурсами объекта оперирует приложение, меняя его критичные свойства без его ведома. Тогда хочется сделать вывод, что объект - это скорее просто массив со значениями, а не экземпляр класса. Если просто поменять public на protected то приложение, скорее всего перестанет работать.
Dori
12-03-2021
С точки зрения ООП никто не запрещает приложению менять ресурсы объекта. Это не есть очень хорошо, но тем не менее имеет право на жизнь. Тем более в PHP, где все объекты живут секунды три-четыре, нет смысла использовать мега-паттерны с навешиванием на каждое свойство гетеров, сетеров и черта в ступе. объекты это и есть массив.. только с напиханными в него методами. Сугубо физически :) ReplyParentThread С точки зрения ООП приложению КТЕГАРИЧЕСКИ ЗАПРЕЩЕНО менять внутренние ресурсы объекта напрямую. Нет никакой связи между этим анти-шаблоном и временем жизни объектов. Но даже если на то пошло, то в подавляющем большинстве случаев в PHP используют паттерн ActiveRecord, и можно сказать, что объект "живёт" пока существует запись в базе данных, а это может быть не год и не два. Но никак не секунды. Геттеры и сеттеры не решают проблемы "Объектной оргии", они лишь переводит её в новый вид. Вы не улавливаете главной идеи анти-шаблона "Объектная оргия" - <И изменить такой класс в будущем становится практически невозможно, потому что нельзя быть уверенным, что какая-то часть приложения не обращается напрямую к свойству>
Serty
12-03-2021
Никем это не запрещено :) Нет конституции ООП, которая бы это запрещала. Более того, сокрытие ради сокрытия считалось всегда плохой практикой. Сокрытие имеет целью удобство программиста, который будет потом работать с классом, дабы предоставить ему только то, что нужно, скрывая внутреннее представление объекта. Ну, собственно, выяснить, используется ли где-то данное свойство, можно путем нехитрой операции поиска. Хотя, конечно, это не спасет от неявного обращения. Но это уж совсем зло и его надо избегать, где только это возможно. Публичные члены всегда считались плохой практикой, именно по причине объектной оргии. Да, вы правды - цель protected и private декларации - удобство программиста. Но никак не для сокрытия. Интересно как это можно сокрыть код класса от программиста? Удобство заключается в том, что программист может спокойно изменять класс, если требуется, в пределах интерфейса, не беспокоясь о том, что приложение будет работать неправильно. Вы всё ещё никак не улавливаете основной мысли. :) А по поводу поиска... :) Моё мнение - программист, который ищет точки обращения к публичным свойствам класса при помощи нехитрой операции поиска должен быть немедленно уволен. Вот именно потому, что код скрыть нельзя, особенно в PHP, все эти protected и прочие прелести теряют смысл. Ибо изобретательный программист влезет в код и сменит одну строчку... ну потом получит по голове от менеджера, конечно, но это будет потом :) Мысль-то я уловил. Я просто не вижу в этом проблемы. Интерфейс в общем-то тоже не Библия и даже не Бхагават-гита. Его тоже можно менять. А поиск для того и придумали, чтобы им пользоваться. А программист обязан быть параноиком, предполагая, что все, что может быть использовано неправильно, будет именно так и использовано. И использование protected -- не панацея. Панацея -- это использование программистов, которые понимают, что изменение свойств объекта извне -- есть зло. А обращение к тому, что не предполагает внешнего использования -- зло вдвойне. И тогда хоть все методы и свойства будут public -- проблем это не вызовет.
Филипп
12-03-2021
К слову, а что делать с magic methods? :) Да не нужно скрывать код! :) protected не для этого. Сейчас я вижу, что вы уловили главную мысль анти-шаблона. И вообще анти-шаблонов - это проблема неквалифицированных программистов, но никак не языка программирования или подходов к программированию как таковых. :) Конечно, если есть 100% уверенность в том, что public свойства не используются извне - нет необходимости делать их protected. Но пока они не protected - до ста процентов уверенность никак не дотянет :) По крайней мере у меня. Менять интерфейс - грех :) За это тоже можно "получить по голове". magic methods очень полезная вещь. И делать с ними можно много всего интересного и полезного. когда-нибудь я сделаю пост о них (magic methods)
Agentt
12-03-2021
Да, и кстати.. ActiveRecord != запись в базе данных. Это просто ее абстрактное представление. И после смерти объекта запись продолжает существовать и далее. ActiveRecord это популярный шаблон проектирования, а не абстрактное представление. Как-нибудь я сделаю. пост на эту тему. Не сейчас. ActiveRecord это бледная калька с Ruby. Очень вредная, к слову. :) Но приходится с ней жить. Если предложите что-то более подходящая я буду безмерно рад :) SQL выучить это не западло :)) Честно-честно. К чему плодить уровни абстракции? Видимо, у нас с Вами разные понятия об ActiveRecord :)
Blok
12-03-2021
Объект - это никак не массив. Объект - это экземпляр класса. А класс, что ещё более очевидно, - это никак не массив. Класс есть бизнес-логика участка памяти. :) Сугубо физически. Сугубо физически это область памяти, в которой хранятся ссылки на переменные и функции, которые принято называть свойствами и методами :)) А бизнес-логика -- это вообще маркетинговый термин какой-то, не имеющий отношения к тому, что происходит в реальных программах. Только его пихают теперь где попало, в чем я лично не вижу никакого смысла

Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Объектно-ориентированное программирование ООП

Термины: Объектно-ориентированное программирование ООП