Показать сообщение отдельно
Старый 21.08.2014, 18:33
shmaser вне форума Посмотреть профиль Отправить личное сообщение для shmaser Найти все сообщения от shmaser
  № 1  
Ответить с цитированием
shmaser
 
Аватар для shmaser

Регистрация: Aug 2010
Сообщений: 22
По умолчанию Обращение к private свойствам между объектами одного и того же класса

Сразу пример:
Код AS3:
public class Example {
	private var variable:int;
 
	public function Example(variableArg:int) {
		variable = variableArg;
	}
	public function traceVariables(exampleArg:Example):void {
		trace(this.variable, exampleArg.variable); //выводит 1 2
		exampleArg.variable++;
		trace(this.variable, exampleArg.variable); //выводит 1 3
	}
}
Юзаем так:
Код AS3:
public class Main extends Sprite {
 
	public function Main() {
		var exampleA:Example = new Example(1);
		var exampleB:Example = new Example(2);
		exampleA.traceVariables(exampleB);
	}
}
Объекты одного и того же класса имеют полный доступ к внутренностям друг друга. Лично я лишь недавно узнал об этой "фиче". Т.е. доступ к свойствам объектов проверяется исходя из их классов, а не самих объектов. Возникает несколько вопросов: является ли это нарушением инкапсуляции? Есть ли реальное применение такого подхода, или стОит его избегать? Если объекту нужно узнать некоторую информацию о состоянии другого объекта того же класса, следует обращаться через публичный интерфейс объектов или напрямую считывать нужные переменные?

P.S. Подобное также допустимо во всех мейнстримных языках