• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Передача объекта в функцию

  • Автор темы Автор темы skysun
  • Дата начала Дата начала
S

skysun

Народ, всякий раз когда надо передать объект в функцию, сталкиваюсь с проблемкой.
Как избежать модификации объекта внутри функции( ведь фактически передается ссылка).
Я в таких случаях передаю клона объекта.
А есть ли другие способы решить эту проблему?
Интерес у меня теоретический. Интересно , как другие поступают.


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

Да но это не 100% защита. Приведение типов и все на смарку.
 
Да но это не 100% защита. Приведение типов и все на смарку.
а зачем 100% защита? этим способом однозначно определяется контракт использования класса. кто ему не следует тот сам себе злой буратина.
 
а зачем 100% защита? этим способом однозначно определяется контракт использования класса. кто ему не следует тот сам себе злой буратина.

Мда. С этим согласен. Кроме того получается, что можно поступить примерно так:
Класс В агрегирует класс А и делегирует методы get класса А, тогда получается что можно без опаски передать ссылку на объект класса В
и не опасаться изменения состояния класса А.

Код:
Class A{
set();
get();
}

Class B{
А а;
get(){ a.get()}
}

так что ли?

Проблема с приведение типов устраняется.

Но все равно сложновато. В том смысле, что нада самому ...

P.S. java пытаюсь освоить.
 
Проблема с приведением конечно устраняется, но возможность похачить через рефлексию отстается. А если задаться целью можно еще несколько методов придумать. Агрегировать объект конечно вариант, но по моему оно того не стоит.

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы