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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 30.03.2013, 23:38
Jim вне форума Посмотреть профиль Отправить личное сообщение для Jim Найти все сообщения от Jim
  № 1  
Jim
 
Аватар для Jim

Регистрация: Mar 2013
Адрес: Black Sea cost
Сообщений: 30
Question Муки новичка, от Колина Мука

Начал изучать AS3 по книге Колина Мука.
В этом деле я начинаю абсолютно с нуля, не имея за собой никакого опыта в программировании. И, не знаю, у всех ли новичков, кто начинал с Мука, воспринималось так же, но для меня - книга дотошно оперирует кучами разных терминов. Большими кучами! Не дает сопоставить между собой элементарное, постоянно в этих терминах запутывая; не позволяя сосредоточится на том, что, собственно, сам-то код делает!.

Поэтому, перечитывая по 5 раз (не преувеличиваю), одни и те же страницы, еле дополз дошел до 84'й...

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

Сейчас такое дерево каталогов с файлами:
Код:
╚ virtualzoo
   ╚ src
      ╚ zoo
         ╠ VirtualZoo.as
         ╚ VirtualPet.as

VirtualZoo.as
Код AS3:
package zoo {
	public class VirtualZoo{
		public function VirtualZoo ( ) { 
			var pet = new VirtualPet("Stan"); 
		}
	}
}
package zoo { -- Здесь мы указываем имя пакета и подчеркиваем имя поддериктории (по правилам компилятора), в которой этот as-файл расположен.

public class VirtualZoo{ -- Затем создаем класс, внутри этого пакета.
"public" - в этом месте это, своего рода, тоже стандарт компилятора, дает понять, что этот класс - основной в "zoo". Оно и понятно - "public" в принципе делает класс доступным за пределами дериктории, в которой находится.
"class" - задает класс
"VirtualZoo" - несет имя точно совпадающее с регистром букв файла VirtualZoo.as (так нужно описывать каждый класс, если я правильно понял)

public function VirtualZoo ( ) { -- Описываем функцию.
"public" - опять же делает функцию общедоступной, даже ЗА пределами директории "zoo",
"function" - описывает функцию,
"VirtualZoo" - так мы назвали функцию... судя по всему, могли назвать как угодно, на совпадения с именами файла и основного класса это никак не влияет и какой-нибудь "главной" функцию не делает.

var pet = new VirtualPet("Stan"); -- задаем значение функции, описанной в VirtualPet.as.
"var" - мы задаем новую переменную
"pet" - даем переменной имя
"new" - указываем, что она новая (тут не понял, зачем, естественно, они все новые, объясните, пожалуйста)
"VirtualPet("Stan")" - присваиваем значение name для функции VirtualPet, созданной в VirtualPet.as... судя по всему...




VirtualPet.as
Код AS3:
package zoo { 
	internal class VirtualPet{
		internal var petName;
 
		public function VirtualPet (name){
		this.petName = name;
		}
	}
}
package zoo { -- тоже, что и в предыдущий раз. Задаем имя пакета, соответствуя директории "zoo", чтобы в дальнейшем можно было вызвать через точку

internal class VirtualPet{ -- здесь мы прописываем класс уже "internal", давая понять, что это не основной класс и за пределами "zoo" он вызываться ничем не будет! Только внутренними классами.

internal var petName; -- задаем переменную petName. Не совсем понял, почему internal. Судя по всему, потому, что планируем использовать ее в другом классе. однако тоже в пределах "zoo"

public function VirtualPet (name){ -- объявляем функцию VirtualPet
"public" - доступна везде
"function" - описывает, что мы делаем функцию
"VirtualPet (name)" - функция называется VirtualPet, а ее значение мы называем "name" (или это одно из значений, которое можно дать функции, не знаю, запутался)

this.petName = name; -- ...
"this" - книга говорит, что мы указываем на какой-то создаваемый экземпляр класса VirtualPet... затем говорит, что имелось ввиду, что мы указываем на создаваемый объект... какой объект и что имеет ввиду под этим объектом, не говорит. Функция - наш создаваемый объект? Или значение name... или класс имеется ввиду.
"petName" - обращение к переменной petName, которую мы создали.
"name;" - присваиваем petName значение name. А name'ом у нас является, вроде как "Stan". то есть теперь petName содержит слово "Stan"


Последний раз редактировалось Jim; 31.03.2013 в 00:29.
Старый 30.03.2013, 23:58
Инсайт вне форума Посмотреть профиль Отправить личное сообщение для Инсайт Найти все сообщения от Инсайт
  № 2  
Инсайт

Регистрация: Dec 2012
Адрес: Ростов-на-Дону
Сообщений: 13
Много букв, все не читал, но по своему опыту прочтения Мука помню было сначала непонятно что такое конструктор.

Цитата:
Сообщение от Jim Посмотреть сообщение

public function VirtualPet (name){
}
Эта функция и называется конструктором. Она вызывается, когда вы создаете экземпляр класса VirtualPet.
(name) здесь это параметры функции. Внутри функции ими можно манипулировать как переменными.
Т.е. если вы в классе VirtualZoo напишете
Код AS3:
var pet = new VirtualPet("Stan");
А в классе VirtualPet
Код AS3:
public function VirtualPet (name){
trace(name);
}
То программа выведет "Stan".

слово 'new' - это не новая переменная, а создание нового экземпляра класса.

В общем мне тоже по началу много было непонятно, поэтому совет такой - читайте дальше Даже если что то пока не совсем ясно. Про конструктор станет понятней в главе про наследование

Старый 31.03.2013, 00:07
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 3  
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
"VirtualZoo" - так мы назвали функцию... судя по всему, могли назвать как угодно, на совпадения с именами файла и основного класса это никак не влияет и какой-нибудь "главной" функцию не делает.
Нет, не все так просто. Если имя функции совпадает с именем класса, это не просто функция. Это конструктор, специальная функция. Вручную ее вызвать нельзя, она вызывается при создании нового экземпляра. "Экземпляр объекта" - такая область в памяти, упрощенно говоря. У него (лично у него) есть все переменные, объявленные на уровне класса. Можно создать несколько экземпляров (instances) одного класса, у каждого будет по своей переменной. Конструктор в AS3 должен быть public, это требование языка.

Цитата:
new" - указываем, что она новая (тут не понял, зачем, естественно, они все новые, объясните, пожалуйста)
Это не переменная новая. Это создается новый объект. У этого объекта есть своя переменная petName. Можно создавать новые объекты, не присваивая их переменной. Можно присваивать значения, не создавая объектов.
Код AS3:
var pet = new VirtualPet("Stan"); 
val samePet = pet;
Вот в данном случае samePet и pet "указывают" на один и тот же объект. Этим экземпляром можно "управлять" через любую из этих двух переменных. Причем переменные именно "указывают". При присванивании samePet другого объекта (ну например, samePet = new VirtualPet("Not Stan"), она просто будет указывать на другой объект, а "Stan" продолжить существовать дальше, пока на него будет кто-то указывать.

Цитата:
"VirtualPet (name)" - функция называется VirtualPet, а ее значение мы называем "name" (или это одно из значений, которое можно дать функции, не знаю, запутался)
Это не значения. Это парметры функции. Конкретно name называется "формальным параметром". Это нечто, что будет передано в фунцкию во время выполнения программы. А вот в вызове "Stan" называется фактическим параметром. Да, вы правильно понимаете, что во время выполнения конструктора name будет установлено в "Stan".

Цитата:
"this" - книга говорит, что мы указываем на какой-то создаваемый экземпляр класса VirtualPet... затем говорит, что имелось ввиду, что мы указываем на создаваемый объект... какой объект и что имеет ввиду под этим объектом, не говорит. Функция - наш создаваемый объект? Или значение name... или класс имеется ввиду.
Объект - это экземпляр класса (VirtualPet), которые создается оператором new. Во время выполнения конструктора объект уже выделен, у него есть своие переменные (та же petName), но они еще не иницализированы. У другого объекта (если сделать еще один new VirtualPet) будет своя (независимая от первого) переменная petName (изменяться значения бдуту по-разному).

В остальном более-менее правильно.

Добавлено через 6 минут
Если дружите с английским, посмотрите еще это и это. Там про java, но у AS3 семантика та же. На второй страничке еще примерно нарисованно, что такое "объект" и что такое переменная.

Старый 31.03.2013, 09:30
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 4  
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Название темы не отражает сути вопроса.
__________________
Поймай яблоко 2!

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

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

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


 


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


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