Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Муки новичка, от Колина Мука (http://www.flasher.ru/forum/showthread.php?t=196887)

Jim 30.03.2013 23:38

Муки новичка, от Колина Мука
 
Начал изучать 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"

Инсайт 30.03.2013 23:58

Много букв, все не читал, но по своему опыту прочтения Мука помню было сначала непонятно что такое конструктор.

Цитата:

Сообщение от Jim (Сообщение 1127598)

public function VirtualPet (name){
}

Эта функция и называется конструктором. Она вызывается, когда вы создаете экземпляр класса VirtualPet.
(name) здесь это параметры функции. Внутри функции ими можно манипулировать как переменными.
Т.е. если вы в классе VirtualZoo напишете
Код AS3:

var pet = new VirtualPet("Stan");

А в классе VirtualPet
Код AS3:

public function VirtualPet (name){
trace(name);
}

То программа выведет "Stan".

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

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

maxkar 31.03.2013 00:07

Цитата:

"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 семантика та же. На второй страничке еще примерно нарисованно, что такое "объект" и что такое переменная.

Zebestov 31.03.2013 09:30

Название темы не отражает сути вопроса.


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

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