Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Psycho Tiger

Оценить эту запись

Доступ к private полю такого же, как ты

Запись от Psycho Tiger размещена 14.09.2010 в 13:40
Обновил(-а) Psycho Tiger 14.09.2010 в 16:01

Представим себе ситуацию: создали класс и объявили в нём приватное свойство, в которое записали супер-секретный шифр и объявили в нём ссылку на экземпляр того же самого класса.
Создали, связали.
Код AS3:
package  
{
	import flash.display.Sprite;
	public class SomeBaseClass extends Sprite
	{
		public function SomeBaseClass() 
		{
			super();
			var e1:Class1 = new Class1();
			var e2:Class1 = new Class1();
			e1.link = e2;
		}
	}
}
Код AS3:
package  
{
	public class Class1
	{
		private var secretField:String = "I`m your secret";
		public var link:Class1;
		public function Class1() 
		{
		}
	}
}
Вопрос на засыпку: может ли один экземпляр узнать секретный код другого экземпляра?
Я думал, что нет и приватное поле будет скрыто отовсюду.
Приватное поле - поле, доступное только этому классу и никакому другому.
Всю флеш-жизнь верил, что речь идёт об экземпляре класса. Оказалось - о классе в целом.

Если мы объявим в супер-секретном-классе метод с трейсом информации о секретном-коде другого экземепляра по ссылке:
Код AS3:
		public function askYourFriend():void {
			trace(link.secretField);
		}
И вызовем:
Код AS3:
e1.askYourFriend();
То вполне себе получим адекватный ответ:
Цитата:
I`m your secret
Вывод: инкапсуляции между двумя экземплярами одного класса нет.
В C говорят, что это классы-друзья, ну и логично что класс друг сам себе.
Всего комментариев 13

Комментарии

Старый 14.09.2010 14:29 iNils вне форума
iNils
 
Аватар для iNils
Не понял, о чем тема?

PS. А в чем смысл н-го количества пустых строк? Вместо того, чтобы окинуть все одним взором, приходится постоянно скроллировать.
Старый 14.09.2010 14:50 switcher! вне форума
switcher!
да, разрозненность кода сильно мешает восприятию написанного.

А в целом, доступность private у всех экземпляров - это большой плюс. Время от времени приходится вызывать "чужой" приватный метод.
Особенно это ценно для построения иерархий.
Старый 14.09.2010 15:02 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
В том, что оказывается к приватному полю класса можно обратиться. Но только из другого экземпляра того же класса.

До этого момента я думал что приватные поля - они совсем приватные, даже для других экземпляров.
Старый 14.09.2010 15:19 iNils вне форума
iNils
 
Аватар для iNils
Из хелпа
Цитата:
Показывает, что переменная, константа или метод доступны только для класса, который объявляет или определяет их
Старый 14.09.2010 15:28 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
В статье я написал примерно то же самое, но в голове это проецировалось как экземпляр класса. Несколько коллег сказали, что думали так же как и я, поэтому я решил быстренько написать эту статью: в голове уложится лучше и вполне возможно у кого то тоже уберёт это недоразумение.
Старый 14.09.2010 15:40 iNils вне форума
iNils
 
Аватар для iNils
Мне что не нравится. Что нет нормального вступления, да и итог хромает. Смысл размазан по тексту и чтобы понять о чем пойдет речь, нужно весь прочитать и посмотреть примеры (еще хуже, когда нужно этот пример еще и компилировать самому), даже если читатель уже в курсе. Основа текст - код лишь подкрепление для тех, кто хочет сам проверить. Это как бы пожелание.
Обновил(-а) iNils 14.09.2010 в 15:55
Старый 14.09.2010 15:46 i.o. вне форума
i.o.
 
Аватар для i.o.
Psycho Tiger, видать под эйфорией - 2 новых поста в блоге и в каждый въезжать нужно ))
Старый 14.09.2010 15:48 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Окей, подправлю сейчас.
i.o.: в 4 раз переделываю паззл, всё время новые "пожелания". Расслабляюсь, пиша (как слово правильно это пишется? =D) сюда.
Старый 14.09.2010 15:51 i.o. вне форума
i.o.
 
Аватар для i.o.
Цитата:
пиша (как слово правильно это пишется? =D)
Данное слово не употребляется в такой форме. Нужно применять во фразе, типа "пока пишу сюда" или "в то время как пишу сюда" и т.д ))
Старый 14.09.2010 16:16 krolser вне форума
krolser
 
Аватар для krolser
Аналогично работает и в Java. И в этом поведении нет ничего опасного. Ведь кроме вас, автора данного класса, никто не может получить доступ к private полю. Если вы унаследуетесь от данного класса, то вы потеряете возможность "подглядывать"
Старый 14.09.2010 16:35 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
krolser, я ведь не говорил что это плохо и всё в этом духе. Конкретно мне это развязывает руки, делаю поля приватными вместо internal. Захотел вот поделится.)
Старый 20.09.2010 23:09 expl вне форума
expl
Это в написании метода clone() помогает
Старый 20.09.2010 23:52 dimarik вне форума
dimarik
 
Аватар для dimarik
Прошу прощения, но статья стилистически не понравилась.
 

 


Часовой пояс GMT +4, время: 21:13.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.