• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

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

skysun

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


Заранее спасибо.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
А есть ли другие способы решить эту проблему?
есть. примерно для этого интерфейсы и придумали. высносишь все методы не изменящие состание в интерфейс и пусть код который не должен модицировать работает именно с с этим интерфесом. аналогичного результата можно добится с помощью наследования: базовый класс реализует методы не измеющие состояние, дочерний - методы изменющие
 
S

skysun

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

Да но это не 100% защита. Приведение типов и все на смарку.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Да но это не 100% защита. Приведение типов и все на смарку.
а зачем 100% защита? этим способом однозначно определяется контракт использования класса. кто ему не следует тот сам себе злой буратина.
 
S

skysun

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

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

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

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

так что ли?

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

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

P.S. java пытаюсь освоить.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Проблема с приведением конечно устраняется, но возможность похачить через рефлексию отстается. А если задаться целью можно еще несколько методов придумать. Агрегировать объект конечно вариант, но по моему оно того не стоит.

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!