В чем разница между Java, C ++ и ActionScript3.0 в отношении ООП? - PullRequest
0 голосов
/ 27 мая 2009

В чистом контексте программирования (например, структурном и ООП), какие основные различия вы обнаруживаете (или должны быть осторожны, чтобы не путать) между Java / C ++ и ActionScript? Любые другие заметные или важные различия также приветствуются.

Ответы [ 5 ]

1 голос
/ 27 мая 2009

ActionScript 3.0 наиболее определенно ближе к Java, чем к C ++, если говорить о возможностях: он поддерживает интерфейсы, одиночное наследование и метаданные. Это отличается от обоих в синтаксисе, хотя. Самое большое различие для меня при переходе от стиля C / C ++ / Java к ActionScript - это определение переменных. В C, чтобы объявить int, вы должны сделать следующее:

int x = 0;

В то время как в ActionScript 3 это будет сделано так:

var x : int = 0;

Требуется переменная, а тип указывается после двоеточия.

Аналогичные изменения необходимы для функций. В С:

void foo(int x) { //yeah }

А в ActionScript 3:

function foo(x: int) : void { //yeah }

ActionScript 3 также поддерживает метаданные посредством использования скобочных операторов []. Наиболее распространенные метаданные, которые вы, вероятно, будете использовать, это Bindable, который позволяет привязать переменную после объявления Bindable к компоненту, который автоматически обновляется при изменении переменной.

[Bindable]
var x : int = 0;

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

Редактировать: Только что вспомнил пару вещей: в ActionScript 3 нет перегрузки конструктора. Вы застряли с конструктором по умолчанию. Если вы хотите добавить дополнительные параметры, вы должны сделать это так:

class Foo
{
  public function Foo( x : number, y : int = 3, z : string = "default") : void 
  { //stuff here }
}

В приведенном выше примере x требуется, но оба значения y и z являются необязательными и будут иметь значения по умолчанию 3 и «по умолчанию» соответственно.

Что касается вашего вопроса о классах объектов, здесь - хорошая статья, детализирующая различия между Java и AS3.

Это объяснит, что такое объекты класса - по сути, каждое объявление класса является экземпляром класса Class. Это немного сбивает с толку, но когда вы приступите к этому, это не изменит того, как вы программируете или как AS3 выполняет OO. AS3 OO очень близко к Java OO.

0 голосов
/ 28 мая 2009

Классы в ActionScript 3 на самом деле являются «объектами» класса, то есть являются экземплярами класса Class, производного от Object. Смотрите здесь:

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Class.html

А здесь:

http://www.adobe.com/devnet/actionscript/articles/actionscript3_overview.html

И некоторые действительно интересные детали здесь:

http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000069.html

CookieOfFortune верен в том смысле, что практические последствия получения классов из объекта Object (с точки зрения повседневного кодирования) минимальны - вы создаете экземпляры ваших классов почти так же, как в Java:

// Java
MyClass myClass = new MyClass();

// AS3
var myClass:MyClass = new MyClass();

// Or if you prefer a more loosely typed approach
var myClass = new MyClass();

Но за кулисами ActionScript основан на стандарте ECMAScript 3, так что на самом деле он больше похож на расширенный набор JavaScript - он слабо типизирован (хотя может быть строго скомпилирован), ориентирован на прототип (даже если он абстрагирован от разработчик: «Класс сам объявляет прототип»), он поддерживает как функциональные, так и объектно-ориентированные парадигмы (ура, замыкания!) и так далее. Это ощущается как Java во многих отношениях, но это действительно больше похоже на JavaScript. Так что, если бы C ++ был направо, Java находился посередине, а JavaScript был слева, концептуальное сходство между ними могло бы выглядеть примерно так:

-----------------------------------------------------------------------------
 ^       ^                       ^                                         ^
 JS     AS3                     Java                                      C++

... не то чтобы это ужасно полезная модель, обязательно. ;)

HoorayImHelping прав, хотя - определенно есть некоторые неприятности. Мало того, что нет никакой перегрузки конструктора, нет никакой перегрузки метода любого вида. Все события имеют строковую идентификацию, что может создать всевозможные проблемы, если вы не будете осторожны. Нет такого понятия, как перечисление ActionScript. У него нет понятия абстрактных классов. Список можно продолжить.

Но там, где он терпит неудачу в этих департаментах, он отличается гибкостью. Итак, вот оно. Вряд ли что-то вроде C ++, чем-то похоже на Java, но на самом деле больше похоже на расширенный набор JavaScript. Надеюсь, это поможет!

0 голосов
/ 28 мая 2009

вы действительно должны проверить эти сообщения. В нем подробно обсуждается, как перейти с Java на Actionscript.

http://www.javaworld.com/javaworld/jw-02-2009/jw-02-actionscript1.html?page=1

http://www.javaworld.com/javaworld/jw-03-2009/jw-03-actionscript2.html?page=1

здесь не упоминается C ++, но определенность стоит посмотреть.

0 голосов
/ 27 мая 2009

Классы и иерархии классов «подделаны» в AS3. AS3 ближе к Javascript (который на самом деле не имеет понятия о классах) и работает с объектами на основе прототипов.

0 голосов
/ 27 мая 2009

Нетипизированные массивы. Actionscript (диалект ECMAScript / Javascript, так что, если вы знаете, что это будет проще), имеет класс Array. Нетипизированный, просто к чему можно привыкнуть.

Любой динамический объект может быть хеш-таблицей. Иногда это действительно здорово.

Синтаксис довольно легко подобрать, так как он очень похож. Существуют некоторые различия в области видимости, переменные и функции объявляются по-разному.

ECMAScript более динамичен, чем Java / C ++, и это может оказаться очень полезным.

Если вы используете Flex, постарайтесь в полной мере использовать MXML, он значительно упрощает некоторые вещи.

Я постараюсь добавить к этому, когда все приходит на ум.

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