конкретные вопросы о сфере действия и свойствах в ActionScript 3 - PullRequest
1 голос
/ 26 июля 2011

Я уже некоторое время борюсь с AS3, и я работаю над простым приложением, использующим только ActionScript и комбо FlashDevelop / flex-compiler. Я наткнулся на небольшую стену в моем понимании ООП, и мне интересно, сможет ли кто-нибудь указать мне правильное направление. Я действительно прочитал несколько книг и провел много часов, читая онлайн-уроки и т. Д., Но что-то просто не щелкает!

Что меня озадачивает, так это то, что когда что-то объявляется «общедоступным», согласно тому, что я прочитал, оно становится доступным в любом месте приложения (и поэтому должно использоваться с осторожностью!) Однако, когда я пытаюсь использовать общедоступные свойства и методы в моей программе, они определенно не доступны нигде, кроме как от класса / объекта, который их создал.

Это приводит меня к выводу, что даже если объекты (другого класса) создаются из одного и того же (скажем, «основного») класса, они вообще не могут общаться друг с другом, даже через открытые члены.

Если так, то достаточно справедливо, но я, честно говоря, нигде не видел, чтобы это правильно объяснили. Если говорить более конкретно, как разные объекты взаимодействуют с другими? и что на самом деле означает Public, если он работает только через прямую композиционную иерархию? Если нужно писать приложения, основанные только на связи между классом композитора и его собственными объектами (и, по-видимому, использовать события для всего остального?) - не слишком ли это ограничительно?

Я уверен, что это основные вещи ООП, поэтому мои извинения заранее!

Любые быстрые советы или ссылки будут очень полезны.

Ответы [ 2 ]

0 голосов
/ 29 июля 2011

@ Ответ Йенса (заявление об отказе: я снял) кажется полностью правильным.

Однако я не уверен, что он отвечает на ваш вопрос очень прямо, поэтому я добавлю немного сюда.

Свойство public - это свойство этого класса instance , которое доступно для использования другими объектами (функция: вызов, переменная: доступ и т. Д.). Однако, чтобы использовать их, вы должны иметь ссылку (как очень простой указатель, если это поможет?) На этот экземпляр объекта. Объект, который создает (создает, новый ...) этот объект, может взять эту ссылку, присвоив ее переменной этого типа класса.

// Reference is now stored in 's'
public ExampleClass s = new ExampleClass();

Если вы хотите, у вас есть возможность создать статическое свойство, которое доступно, просто зная имя class . Это свойство будет общим для всех экземпляров этого класса, и любой внешний класс может ссылаться на него (предполагая, что это public static ), ссылаясь на имя класса.

A public свойство ссылается на ссылку, которую вы сохранили.

//public property access
s.foo
s.bar(var)

Статическое свойство ссылается на имя класса.

//static property access
ExampleClass.foo
ExampleClass.bar(var)

Как только вы создали экземпляр и сохранили ссылку на объект, вы можете передавать его по своему усмотрению. Приведенный ниже объект типа OtherExampleClass получит ссылку на 's' в своем конструкторе и должен будет сохранить его в своей локальной переменной, чтобы сохранить ссылку.

public OtherExampleClass s2 = new OtherExampleClass(s);
0 голосов
/ 29 июля 2011

Есть разные темы, которые вы затрагиваете в своем вопросе.Позвольте мне уточнить:

  • Что означает модификатор public?
  • Как экземпляры одного класса могут общаться друг с другом?

-

1.

В ООП вы организуете свой код с помощью объектов.Объект должен быть создан для обеспечения его функциональности.Место, где вы создаете экземпляр объекта, может рассматриваться как «контекст».Во Flash контекст может быть первым кадром, в чистом фильме AS3 это может быть основной класс, во Flex это может быть основной файл mxml.На самом деле, контекст тоже всегда объект.Модификатор класса вашего объекта public class MyClass сообщает вашему контексту, разрешено ли создавать экземпляр объекта или нет.Если установлено значение internal, контекст должен находиться в том же каталоге, что и класс объекта.В противном случае не разрешается создавать новый объект класса.Private или protected не являются допустимыми модификаторами класса.Public class ... означает, что любой контекст может создавать объект этого класса.Далее: Эти модификаторы контролируют не только создание экземпляров, но и видимость типа.Если установлено значение internal, вы не можете использовать выражение типа var obj : InternalType в контексте, который не находится в том же каталоге, что и тип Internal.

Как насчет методов и свойств?Даже если вашему контексту разрешен доступ к типу, некоторые свойства и методы могут быть ограничены internal/protected/private var/method, и вы, возможно, не сможете их вызвать.

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

  1. Не путайте с модификаторами и глобальными свойствами.Модификатор только сообщает вам, разрешено ли контексту видеть тип или метод.Глобальная переменная доступна по всему коду.Таким образом, даже если класс объявлен как открытый, экземпляры этого класса по умолчанию не знают друг друга.Вы можете сообщить им следующее:

    • , сохраняя экземпляры в глобальных переменных
    • , предоставляя установщик, такой как set obj1(obj1 : OBJ1) : void, где каждый объект должен хранить ссылку в переменной экземпляра
    • передача объекта в качестве аргументов метода: doSomething(obj1 : OBJ1)

Надеюсь, это поможет вам лучше понять ООП.Я с удовольствием отвечу на ваши вопросы.

Йенс

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