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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.03.2010, 12:08
u364 вне форума Посмотреть профиль Отправить личное сообщение для u364 Найти все сообщения от u364
  № 1  
Ответить с цитированием
u364

Регистрация: Mar 2010
Сообщений: 3
Question ООП - защита классов,функций и переменных.. не понимаю =(

Здравствуйте флешеры)

скорее вопрос заключается в ООП, а не в именно в AC3, но все же...
Моя беда в том, что не могу я понять зачем нужно использовать private или protected при описании чего-либо... чаще всего использую ключевое слово public и последнее время меня начало это как-то очень сильно волновать, потому что в чужом коде есть и private и protected объекты.

хелп читал:
internal (по умолчанию) Видимый для ссылок внутри того же пакета.
private - Видимый для ссылок в том же классе.
protected - Видимый для ссылок в том же классе и в производных классах.
public - Видимый для всех ссылок.

Это понятно... но для чего они защищаются? Я не могу привести такой пример, в котором необходимо пользоваться private и protected.. какая у них выгода перед public?

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

Просветите, если не трудно, очень хорошо бы было, если на примерах .
Спасибо.

Старый 19.03.2010, 12:12
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 2  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
ага...а ещё лучше везде юзать класс Object
это так...шутка.

Не хочется разводить демагогий долгих (ждём wvxvw ). Понимание необходимости придёт с опытом + без этого нельзя, если вы работает в команде
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 19.03.2010, 12:27
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 3  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Private и protected нужны для того, чтобы никто без вашего разрешения не смог что-то изменить в вашем объекте. Со временем для вас станет нормой объявлять все свойства private, и только некоторые, в качестве исключения - public. Тут должен быть жёсткий принцип: всё, что не разрешено - запрещено.
__________________
тонкий тролль, осеянный благодатью

Старый 19.03.2010, 12:30
mickfallout вне форума Посмотреть профиль Отправить личное сообщение для mickfallout Найти все сообщения от mickfallout
  № 4  
Ответить с цитированием
mickfallout
 
Аватар для mickfallout

Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
К примеру у тебя есть объект рубильник:MovieClip(мувик с двумя кадрами:рычаг поднят/опущен), у него есть свойство on:Boolean. если ты свойство on просто сделаешь public, вместо специального setter-метода ты можешь забыть что для переключения рубильника нужно не только изменить свойство on, но и перейти на другой кадр.

Старый 19.03.2010, 12:31
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 5  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Моя беда в том, что не могу я понять зачем нужно использовать private или protected при описании чего-либо... чаще всего использую ключевое слово public и последнее время меня начало это как-то очень сильно волновать, потому что в чужом коде есть и private и protected объекты.

хелп читал:
internal (по умолчанию) Видимый для ссылок внутри того же пакета.
private - Видимый для ссылок в том же классе.
protected - Видимый для ссылок в том же классе и в производных классах.
public - Видимый для всех ссылок.

Это понятно... но для чего они защищаются? Я не могу привести такой пример, в котором необходимо пользоваться private и protected.. какая у них выгода перед public?
Инкапсуляция

Цитата:
Еще я не могу понять зачем использовать геттеры и сеттеры, когда можно устанавливать значения напрямую обращаясь к переменной..
Свойство_(программирование)


Последний раз редактировалось udaaff; 19.03.2010 в 12:39.
Старый 19.03.2010, 12:46
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
Еще я не могу понять зачем использовать геттеры и сеттеры, когда можно устанавливать значения напрямую обращаясь к переменной..
1) Ты можешь установить только геттер, без сеттера - например, считать текущее действие, а ля "Ждём ответа от сервера" - при этом можешь себе гарантировать, что это свойство никто не сможет поменять извне.
Цитата:
но для чего они защищаются? Я не могу привести такой пример, в котором необходимо пользоваться private и protected.. какая у них выгода перед public?
Аналогия - "Зачем защищать внутренние органы кожной и жировой прослойкой". Ответ - чтобы внешние факторы не могли нарушить работу всего организма.
И в правду, если у тебя есть метод
Код AS3:
public function onWorkEnds(e:Event):void{
//remove everything
}
который должен вызываться только после того, как твой модуль отработает, причем конец работы определяет лишь сам модуль - зачем тебе "сдирать кожу", убирая защиту и ставя public? Через полгода ты забудешь, что это делает и будешь думать - о, это чтобы работу прервать резко! И будешь огорчен, когда всё пойдёт не так.

А вообще поставь себе FlashDevelop, там автокомплит прикольный - будешь писать private/public/protected ради автокомплита) Я кстати начинал так писать только из за этого, понимание пришло потом)

Старый 19.03.2010, 13:14
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 7  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Геттеры/ Сеттеры очень хорошая вещь:

1: в сеттере можно вставить проверку валидности данных
Код AS3:
public function set a(value:int):void
{
if(value<100)_a = value;
else throw(new Error("Invalid value on "+this.className+".a"));
}
2: в сеттере можно можно диспатчить событие об изменении (например, для MVC)
Код AS3:
public  function set a(value:int):void
{
_a = value;
dispatchEvent(new ChangeModelEvent("a"));
}
3: в геттере/сеттере можно инициировать создание объекта если он еще не создан.
Код AS3:
public  function get a():Object
{
if (!_a) _a=new Object(); 
return _a;
}
4: можно создать только геттер - тогда свойство будет "только для чтения" ( правда это не работает со сложными типами, т.к. для изменений свойств объекта достаточно ссылки на объект)

5: сеттеры позволяют выполнить некую операцию, например: при изменении width на самом деле изменяем масштабирование по scaleX

6: в геттере можно возвращать вычисляемое значение:
Код AS3:
function get square():int 
{
return _width*_height;
}
7: в геттере/ сеттере можно переопределить свойства вложенного в Композицию или в Декоратор объекта

Код AS3:
function get length():int 
{
return _innerArray.length;
}
Я настолько к ним привык, что практически все свойства у меня задаются через сеттеры/геттеры
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 19.03.2010 в 13:38.
Старый 19.03.2010, 13:45
cpu вне форума Посмотреть профиль Отправить личное сообщение для cpu Найти все сообщения от cpu
  № 8  
Ответить с цитированием
cpu

Регистрация: Mar 2010
Сообщений: 223
На 57 странице русской версии Мука есть таблица про модификаторы управления доступом переменными. Хотя бы скачайте эту книжку, там очень доходчиво про них написано. По крайней мере я понял))).

Старый 19.03.2010, 19:45
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 9  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
свойство никто не сможет поменять извне
На самом деле такие вопросы возникают из-за того что не понятно кто этот кто?

Старый 19.03.2010, 19:56
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 10  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
так пожалуйста, юзайте public, только Object или не, лучше * и код пишите в блокноте, а потом покажите результат мега-клёвого проекта
__________________
Flash Developer
Папа TDP4 Team Battle

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
private , protected , public , ООП

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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