AS3 ООП примеры общих практик? - PullRequest
1 голос
/ 02 августа 2011

Я пытаюсь лучше понять структуру и организацию ООП AS3, но у меня возникают некоторые проблемы, связанные с этим. Я хочу создать несколько файлов классов, и кажется, что лучше всего не помещать все классы в один файл? Я часами искал в Интернете и мало что нашел для хороших примеров. Может быть, отдельные файлы - не самый лучший способ использования AS3, но для меня это имеет смысл только для модульности. Файлы, с которыми я играю:

  • Main.fla
  • Main.as (класс документа)
  • TestOne.as
  • TestTwo.as
  • TestThree.as
  • TestFour.as
  • TestFive.as

Я создал папку под названием classes для размещения всех файлов классов, кроме Main.as, который находится в FLA.

Все пять тестовых классов имеют одинаковый код, кроме имени файла и имени класса.

Вот как я импортирую файлы:

Main.as

package classes
{
import flash.display.MovieClip;

import classes.TestOne;
     import classes.TestTwo;
     import classes.TestThree;
     import classes.TestFour;
     import classes.TestFive;

public class Init extends MovieClip
{
    trace("This is Main Class");
    var testOne : TestOne = new TestOne;
}
}

TestOne.as

package classes
{
import flash.display.MovieClip;

public class TestOne extends MovieClip
{
    trace("This is TestOne");

    public function testing():String
    {
        return "This is the testing method";
    }
}
}

Являются ли приведенные выше примеры хорошими практиками ООП AS3? Я понимаю, что это настоящие базовые классы, но я думаю, что это должно сработать.

Я использую CS3

Ответы [ 6 ]

2 голосов
/ 02 августа 2011

Может быть, стоит взглянуть на соглашения по кодированию Flex SDK и лучшие практики .Это пошаговое краткое изложение того, как вы должны использовать ActionScript 3. Во всем разбросано много ООП, так что изучите его.Я думаю, что стоит прочитать любому новому или опытному разработчику AS3, потому что там много полезной информации.

1 голос
/ 02 августа 2011

Шаблоны проектирования ActionScript 3 также будут полезны для вас.

1 голос
/ 02 августа 2011

ООП это большой предмет, но вот хороший учебник .

0 голосов
/ 02 августа 2011

Я думаю, что вы либо сделали что-то не так, когда скопировали код в SO, либо неправильно разместили операторы trace.Вам нужно поместить trace("This is TestOne"); внутри конструктора в TestOne.as, например:

public function TestOne() {
    trace("This is TestOne");
}

То же самое относится и к коду внутри класса Init, который теперь читает:

trace("This is Main Class");
var testOne : TestOne = new TestOne;

но должно быть (обратите внимание на браслеты после нового TestOne):

public function Init() {
    trace("This is Main Class");
    var testOne : TestOne = new TestOne();
}

Что происходит при запуске SWF, так это то, что конструктор класса Init будет:

1Трассировка «Это главный класс» на вашу консоль.

2) Он создаст новый объект (то есть конструктор имени), вызвав конструктор класса TestOne.

ЕслиВы должны были добавить эту строку в конец конструктора в классе Init:

testOne.testing();

, вы должны увидеть это в консоли: «Это метод тестирования».

Если вы сейчас закомментируете строку: var testOne : TestOne = new TestOne(); и снова запустите SWF, вы получите сообщение об ошибке, сообщающее, что что-то является нулевым.Это потому, что вы пытаетесь вызвать метод testing для несуществующего объекта.

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

Редактировать:

Помните, что дублирование кода никогда не бывает полезным, поэтому, если вы обнаружите, что все классы TestOne- TestFive содержит тот же код, за исключением некоторых мелких деталей.Возможно, вам следует заменить их на один класс.

В вашем случае вы можете, например, изменить TestOne, чтобы конструктор принимал String, а затем в вашей функции testing вы могли бы просто отследить, что String,Изменив класс TestOne на следующий, вы фактически избавитесь от 4 других классов.Вы также инкапсулируете String внутри класса TestOne.

package classes {
    import flash.display.MovieClip;

    public class TestOne extends MovieClip {

        private var message : String;

        public function TestOne(myMessage:String) {
            message = myMessage;

            trace("This is TestOne");
        }

        public function testing() : String {
            return message;
        }
    }
}
0 голосов
/ 02 августа 2011

Правила ООП все еще применяются к AS31) Инкапсуляция.2) Наследование.3) Абстракция.4) Полиморфизм.Применять их или нет - это ваш выбор, но это хорошая практика.И не забывайте самое важное правило «ПОЦЕЛУЙ» (пусть это будет просто глупо)Я также хочу отметить, что в вашем коде есть ошибка

package classes
{
import flash.display.MovieClip;

public class TestOne extends MovieClip
{
    trace("This is TestOne");// this line is not inside a function and will most undoubtly error out your app.

    public function testing():String
    {
        return "This is the testing method";
    }
}
}
0 голосов
/ 02 августа 2011

Как сказал Натан, большая тема.

То, что все классы находятся в одном файле, связано с темой "видимость класса" и "модификаторы доступа".

Модификаторэто то, что написано перед ключевым словом класса.Это может быть публичным или внутренним.Внутренний означает, что только код, помещенный в один и тот же каталог (пакет) внутреннего класса, может создать его объект.Публичный означает, что любой код может создать экземпляр класса.Случайная ссылка через Google: http://flexmaster.blog.co.in/2010/05/20/action-script-use-access-modifiers-with-classes-and-class-members/

Вам разрешено иметь несколько классов в одном файле.Но тогда только один может иметь публичный модификатор.Все остальные должны быть внутренними.Если вы не укажете модификатор, класс по умолчанию будет внутренне видимым.Внутренний класс в файле нескольких классов доступен только из этого файла.

Существует еще два модификатора: защищенный и закрытый.Оба применимы только к свойствам или методам.Как продвинутый разработчик, вы даже можете определить свой собственный модификатор, используя пространства имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...