Здравствуйте, гость ( Вход | Регистрация )

Свернуть

Новости

Форум Лучшее из галереи Уроки и статьи
07.12.2015 Выставочный зал: кошарик - персональная выставка
31.08.2015 Интересные ссылки для рисовальщиков
21.01.2015 Выставочный зал 2: Игрушки Олеси Гавриленко

27.12.2014 Выставочный зал: кошарик - персональная выставка
17.11.2014 Дуэль "Рыбки" - победитель Лисичка
05.11.2014 Конкурс иллюстраций "Снежная королева", до 31 января
30.10.2014 Дуэль "Рыбки" до 16 ноября
14.07.2014 Мастер-класс Мини-мишка в технике фелтинга
26.05.2013 Ау! Мы ищем таланты! – приглашаем модераторов!
"Что это у Вас?!" - "Золото, бриллианты&a
tn_gallery_839_3_60325.jpg
фотодуэль "Что это у Вас?!" - "Золото, бриллианты!"
06.01.2016 Виртуальный Музей: Русский живописец Василий Дмитриевич Поленов
28.12.2015 Виртуальный Музей: Нидерландский живописец Квентин Массейс
16.12.2015 Виртуальный Музей: Итальянский живописец Франче́ско Айец
17.11.2015 Виртуальный Музей: Луи Анкетен (Louis Anquetin)
11.11.2015 Виртуальный Музей: Русский живописец Алексей Иванович Корзухин
Файловый архив
06.09.2013 Прочее: Файлы к уроку "Чайная церемония"
05.09.2013 Журнал Art Tower: ArtTower Magazine #8
16.05.2013 Adobe Photoshop: Кисти: Reid Southen brush
16.05.2013 Adobe Photoshop: Кисти: Goro Fujita brush
16.05.2013 Adobe Photoshop: Кисти: Кисти для рисования в Photoshop
Блоги Новости в цифровом мире и мире дизайна
02.12.2014 Дама с каменьями: Вести с крыши 2
08.11.2014 Timenews: Вассерман: прежняя модель мировой экономики исчерпала себя
06.11.2014 Дама с каменьями: Приятные вести с крыши))) от Гаргула)
02.11.2014 Spell: Книги Дж. Кэмерон
22.10.2014 Vjaz: от ФУ до МА
25.11.2015 Комментарий от Foxx в Costa Rica Adventure Divers, Логотип для компании и рисунок на майку (maria_mer)
18.11.2015 Комментарий от maria_mer в Spellforce - майка, для фанов игры (maria_mer)
18.11.2015 Комментарий от maria_mer в Белая книга. Целитель - любительский прект (maria_mer)
09.04.2015 Комментарий от Romana в Книги Дж. Кэмерон (Spell)
08.04.2015 Комментарий от Romana в Я решил вернуться... (Элбирет)
16.03.2015 ФОТОФОРУМ-2015
01.01.2015 ARQUTE.com и ArtTalk.ru закрываются
19.01.2017 Конкурс дизайна логотипов
26.12.2016 ру/Ководство: О творческом развитии
14.10.2016 ру/Ководство: Разнообразие

 
Добавить ответ в эту темуОткрыть тему
> Основоположения программирования - часть II.2, Введение: процедурные и ООП языки.
V
Des
сообщение 24.04.2008 - 10:58
Сообщение #1


тритониус
****

Звезда писателя I степениЗа вклад в развитие ArtTower.ru
Группа: Почетные граждане
Сообщений: 728
Регистрация: 9.12.2007
Из: Москва \ Питер
Пользователь №: 6553
дышу под водой
Галерея Блог


Симпатии:  68  


2) Какие бывают языки программирования - продолжение

а) данные и действия
Итак, мы разобрались в предыдущей главке с тем, какими бывают языки программирования по способу исполнения - компилируемые, интерпретируемые и с промежуточным байт-кодом. Теперь мы перейдем ближе к самому процессу программирования и рассмотрим, какими бывают языки программирования в части того, как именно они «устроены» - т.е. как именно в них представляется наша задача и перерабатываются данные для ее решения. Иначе говоря, мы рассмотрим основные парадигмы программирования.
Но для этого нам нужно будет сначала усвоить несколько основных понятий любого языка программирования высокого уровня. Ниже я привожу понятия, которые используются в любом языке программирования - от самого простого и «машинно-ориентированного» до самого наиобъектно-ориентированного.

Итак: язык программирования - это то, на чем мы можем «рассказать» компьютеру о:
а) нашей задаче
и
б) о том, что компьютер должен (шаг за шагом сделать), чтобы ее решить и выдать нам результат.
Первое - это то, как представлены данные в нашей программе. Второе - как представлены действия.
Так вот, данные в программе представляются переменными и константами.
Строго говоря, переменная - это именованная область памяти для хранения определенного вида данных. Но это - строго говоря... Из этого нас практически интересует только то, что если в ходе программы нам какая-то, особенно «объемистая», переменная больше не нужна - ее лучше уничтожить, чтобы память не занимала.
А говоря нестрого, зато ясно, - понятие «переменная» очень близко к школьному старому-доброму алгебраическому понятию «переменная X». С той разницей, что если алгебраическая переменная - это знак, символ («место хранения») для обозначения числа (ну или - хотя в школе реже - вектора, в школьной физике - определенной физической величины), то программистская переменная - это место хранения чего угодно. Лишь бы нам только было известно и понятно, что именно там хранится и «с чем его едят» - т.е. как его, это «что-то», «обрабатывать». С чем можно складывать, от чего отнимать и можно ли делить. Или, напр., конкатенировать (конкатенация - слияние строк)
Переменная может содержать число. Может - строку («hello, world!», напр.) Может - целую структуру данных, содержащую несколько «полей», или даже (для Flash) - «ролик» (MovieClip), а то и - целый набор таких роликов... (т.е. конечно, не самих роликов, а их программных описаний - но в том-то и дело, что нам это до опредленной степени безразлично) Т.е. «место содержания чего угодно» мы можем понимать вполне буквально - если, конечно, учитываем, что должно быть точно определено, «чего» именно и в каком виде.
Константы - это, грубо говоря, «переменные с неизменным значением». Напр., мы говорим, что константа PI = 3,14 - и в дальнейшем вместо 3,14 мы всегда можем писать «PI». Для двух знаков это малоосмысленно. Если мы захотим 10 знаков после запятой в числе π или e - то очень даже целесообразно.
В дальнейшем мы познакомимся с таким понятием, как Тип переменной - который как раз и определяет, какой именно вид данных хранится в нашей переменной.
У каждой переменной есть имя и значение. Имя - это то, как называется эта самая «область для хранения данных». По имени мы обращаемся к переменной (и т.о. получаем доступ к ее значению). Значение - то, что в переменной хранится.
Бывает так, что переменная есть, т.е. мы обозначили в программе, что она есть (или программа сама ее «сделала» по мере надобности), а значения у нее еще нет - в этих случаях говорят, что значение переменной не определено. Т.е. на самом-то деле это и есть значение такой переменной - undefined - что в переводе с английского (и с Flash AS smile.gif ) как раз и означает - «не определено».
Имя переменной неизменно от ее создания (объявления) до ее уничтожения или до окончания работы программы. Значение переменной может изменяться, если только мы же сами или система не наложили на эти изменения каких-либо ограничений - вообще говоря, произвольно, лишь бы то, что мы хотим хранить в ней, соответствовало ее Типу - т.е. тому виду данных, для которого она предназначена.
Во многих (хотя и не во всех) языках программирования переменная обязательно должна быть объявлена до того, как ее в первый раз использовали (т.е. присвоили ей какое-нибудь значение). К таким языкам относится и AS2. И хотя этот язык позволяет не объявлять сразу же и Тип переменной - лучше все-таки это делать. Ведь это, как и объявление самой переменной - не прихоть создателей языка, а вопрос оптимизации количества памяти: от типа переменной зависит то, сколько памяти под нее нужно будет выделить компилятору.
С Типами переменных, их объявлением и использованием мы разберемся подробнее позднее, а пока перейдем к представлению действий по обработке данных в программировании.
С представлением действий в программе все несколько сложнее. Видов действий много, и они различны между собой в принципе: одни влияют на ход выполнения программы, другие - меняют значения переменных, третьи - вообще служебные и предназначены только и исключительно для компилятора...
а) Самым простым представлением действия в программе является оператор. Оператор - это конструкция языка, обозначающая какое-либо простое, базовое действие, уже заложенное в языке.
Арифметические операторы.
Напр., если мы пишем:
z = x + y;
то «+» и «=» - как раз и есть операторы. «=» - это оператор присваивания, «+» - сложения.
Присваивание - наверно, самый часто встречающийся в программах вид действий. Смысл его в том, что левой части присваивается значение того выражения, которое стоит в правой части. При этом слева может стоять только переменная, справа - выражение.
О том, что такое выражение, можно, наверно, написать два тома. Или три. Или дать формальное определение, которое все равно никто (включая автора) не станет разбирать до конца...
Я поступлю проще. Обозначим выражение как то, значение чего можно вычислить. Т.е. - несколько переменных, связанных операторами, или значение функции, или даже - сама функция (да-да, я помню, что вы еще не знаете, что такое функция в программировании...), или свойство какого-либо объекта, или - одна переменная... Главное, чтобы это можно было вычислить и чтобы оно принадлежало к тому же Типу, что и переменная слева. Тогда значение этого чего-то можно будет вычислить и присвоить переменной слева от оператора присваивания.
В AS2 есть все полагающиеся порядочному языку программирования операторы, в т.ч., конечно, и основные арифметические: +, -, *, /, а также % («взять остаток») и целая гамма логических и битовых.
Операторы перехода:
Предположим, что по ходу программы мы выдаем пользователю вопрос (неважно, в какой форме - две кнопки, полем текстового ввода или еще как) и в зависимости от его ответа действуем дальше. Или, напр., нам нужно проверить по ходу выполнения программы - больше ли нуля значение определенной переменной? - и в зависимости от этого поделить на нее другую переменную или умножить...
Т.е. - изменить ход программы в зависимости от какого-либо условия. Вот для такого случая и существует оператор условного перехода «if». Он проверяет, истинно или ложно выражение, которое стоит после него в скобках, и в зависимости от этого выполняет или пропускает следующий дальше блок кода, заключенный в фигурные скобки. Напр.,
...
CODE
/*
Предположим, что переменные a,b,c,d мы объявили где-то раньше.
Кстати, между «/*» и «*/» мы можем писать вообще что душа пожелает -
компилятор все равно пропустит это «мимо ушей». Так оформляются в программе
комментарии, существующие для того, чтобы другой человек или мы сами
через месяц могли без проблем понять, что именно делает тот или иной
участок программы или вся программа. Комментировать код - признак
хорошего тона. Комментарии должны быть краткими и ясными - напр.,
вот этот уже слегка более подробен, чем следовало бы... smile.gif
Кстати, «/*» и «*/» - тоже оператор.
*/

// Еще один способ оформления комментария - поставить «//» в начале строки -
// тогда компилятор пропустит все до следующей строки.

a = 2;
b = 3;
c = 1;
if (d > 0) { c = a+b ; }


Если значение переменной d (или, короче, - «значение d») было больше нуля к моменту выполнения этого блока кода, то после его выполнения c будет равно 5. Если нет (т.е. если d меньше или равно нулю) - то c останется равным единице.
«if» в переводе с английского - «если». Поэтому вся конструкци может читаться как
«если d больше нуля, то присвоить с значение выражения a + b».

Есть более развернутый вариант оператора if:
if (...) { ... } else { ... }
Здесь после блока кода стоит вторая часть оператора - «else» - и еще один блок кода. «else»означает по-английски (и по-флэшевски) «иначе».
Т.е., напр.:
if (d > 0) { c = a+b ; } else {c = a-b; }
означает «если d больше нуля, то сложить значения переменных a и b и присвоить результат переменной с, если нет - вычесть значение b из значения a b и присвоить результат переменной c»
Заметим, что во втором варианте одна и только одна из двух ветвей программы выполняется всегда, если только вычисление условия («d>0» - как мы увидим в дальнейшем, это тоже - выражение, значение которого вычисляется) не приводит к ошибке в программе.

Маленькое теоретическое отступление для интересующихся: если считать последовательный переход от одной «шага» (напр., строки) программы к следующему - одним видом структурных (т.е. определяющих последовательность выполнения программных шагов) элементов программы, а вторым - переход по условию (в AS реализуемый оператором if, здесь имеется в виду - без части «else»), то - теоретически строго доказано, что из этих двух конструкций строятся все остальные. Все остальные конструкции, в первую очередь - циклы, могут быть построены из этих двух.
Поэтому остальные констукции, касающиеся последовательности выполнения программы, мы пока отложим и перейдем к тому, для чего была написана эта глава: к краткому обзору парадигм языков программирования.

б) Процедурные языки
Для того, чтобы рассказать вам о парадигмах языков программирования, мне осталось ввести только одно еще понятие - функция.
Часто в ходе написания программы встречаются участки кода, которые могут повторяться. Или которые просто удобно отделить с тем, чтобы потом вызывать одним оператором. Напр., не быо бы никакого удобства в том, чтобы каждый раз выписывать полностью вычисление синуса или тот участок кода, который описывает дважение нужного нам объекта-»героя» на каждом кадре.
Такие участки кода оформляют как функции. У функции есть имя, аргументы и возвращаемое значение. Один раз задав функцию, мы можем дальше использовать ее - вызывать - столько раз, сколько нужно (конечно, только в той же программе). Выглядит это так:

CODE
/* Предположим, что функция gravity у нас задана,
а переменные alt, time и alt0 объявлены, причем на момент
вызова функции time и alt0 присвоены значения нужного Типа */

alt = gravity(alt0,t);


Читаться это будет как «присвоить [переменной] «alt» значение, возвращаемое функцией «gravity» от alt0, t». Здесь «gravity» - имя функции, alt0 и time - аргументы, а то, что будет присвоено alt в результате выполнения функции - возвращаемое значение.
Есть стандартные функции, так сказать, «джентльменский набор», которые нам определять не надо, поскольку создатели языка уже об этом позаботились. Напр., функция random(x), которая возвращает случайное целое значение в диапазоне от 0 до x-1 (правда, не рекомендуемая к использованию - устаревшая, но ужасно иногда удобная) или (как пример разнообразия действий, производимых функциями) getURL(), которая открывает ссылку, переданную ей в качестве аргумента, в том же окне броузера, где проигрывается флэш-ролик, или в новом окне - в зависимости от второго аргумента.
Но есть и функции, определяемые нами. Напр., чтобы мы могли использовать функцию gravity(), нам нужно сначала ее определить. Сделать это можно так:

function gravity (alt0,time) { alt = alt0 - ( 9.8 * time * time ) / 2;}

Функция может возвращать или не возвращать значение, может принимать или не принимать аргументы, быть очень простой, как приведенная, или весьма сложной, функция может менять значение переменной, которая никакого отношения к ней, казалось бы, не имеет - хотя сейчас это и считается «дурным тоном» и вообще запрещено в строгих языках программирования... Но для нас важно сейчас понять, что функция - это повторяющийся участок кода.

Когда трава была значительно зеленее, а деревья, безусловно, выше и древесинестей, - языки программирования целиком состояли из объявления переменных, присвоения им начальных значений (инициализации), задания функций (которые, если не возвращают значения, и по сей день называются процедурами) их последовательного использования. И еще операторы условного перехода и циклы.
Таков был FORTRAN - язык, на котором программируют физики-ядерщики и по сей день. Таков был «отец всея биллгейтсии» блаженной памяти Basic. Таков и по сей день язык командных bat-файлов...
Все, что мы можем запрограммировать, т.е. все, что мы можем представить как определенную информацию и эту информацию обработать, представлялось вот такими простыми конструкциями.
Пожалуй, высшим пиком развития этой концепции были C и Модула2/Паскаль, а наибольшим (и принципиальным) усложнением это концепции - возможность добавлять собственные типы данных, т.е. - Типы переменных. Т.е. «сказали» мы, напр., что «Тип «дуб» состоит из одного целого числа (годовые кольца - но это мы должны уже сами помнить, что там за «одно целое число») и одной строки («имени кого»)» - и можем объявлять переменные типа Дуб. И присваивать значения: X1:Дуб = {300, «PetroSecundo»}, X2 = {5,«VasilijPupkin»}. Кррасота.
Но вся эта «красота» простоты «элементарных кирпичиков» обернулась бы неимоверной и «неподъемной» сложностью программного кода (да что там - скорее всего, просто нереализуемостью, и не видели бы мы никаких «Photoshop CS3», а рубились бы в Тетрис по сю пору), если бы не появился принципиально иной подход к программированию и принципиально другие языки.

в) Объектно-ориентированные языки
Объектно-ориентированный язык - это в первую очередь средство работы с программными объектами, отражающими часть окружающего (или виртуального) мира. Это язык, которым выражаются сущности и отношения между ними - в первую очередь, и только во вторую - методы работы с ними.
Проще (как это и делается во всех руководствах по ООП) сходу дать основные понятия этого подхода, чем пытаться передать, что он дает программисту. Скажу только, что это целая философия, и этот «вкус» можно почувствовать с первых же шагов в ООП - если только вы философски настроены smile.gif

Итак:
ООП имеет дело с объектами, которые представляют собой некоторые сущности. Объекты представлены экземплярами классов. При этом каждый экземпляр создан по определенному (как говорит Википедия) «чертежу», а эти «чертежи» (классы) проектируем мы сами (если дело не касается стандартных объектов языка - как, напр., класс MovieClip в AS2).
Объекты состоят в очень интересных отношениях между собой: наследование и полиморфизм. Эти отношения задаются в классах. Полиморфизм мы пока оставим - это дело необязательное для усвоения основ, да и понимать его трудновато, а вот наследование рассмотрим - в нем вся соль.
Класс - это описание типа объекта. В это описание входит:
- описание свойств будущих экземпляров класса. Очень грубо говоря, это переменные, «привязанные» к типу объектов, который мы описываем
- описание методов, которые может выполнять объект данного класса. Очень грубо, опять-таки, говоря, это - функции, «привязанные» к типу объектов, который мы описываем в классе.
- то, что происходит при «рождении» нового объекта этого типа, т.е. создании экземпляра. Это специальный метод, называемый конструктором класса - и он обязательно должен присутствовать в описании класса.
- то, наследником какого класса является описываемый класс, если он - «потомок» какого-либо класса.
«Наследование» означает следующее: если какой-то класс (напр., класс «triangle») наследует другому (напр., «geom_figure»), то класс-потомок автоматически обладает всеми свойствами и методами класса-родителя. И кроме того, разумеется, еще и своими собственными свойствами и методами. В нашем примере: класс «triangle» может унаследовать от класса «geom_figure» свойства centerX, centerY, f_area (подразумевая под ними координаты центра геометрической фигуры и ее площадь), и собственный метод trangle.area() для вычисления площади, а также собственные свойства sizeA, sideB, sideC.

И - еще одна «фишка» ООП: после того, как мы определили класс, нас не волнует, как именно в нем реализованы свойства и методы. Более того, часть внутренних механизмов класса скрывается вполне намеренно (нами - от себя же или от коллеги, который работает вместе с нами). Этот принцип называется «инкапсуляция». И это - не «конструкция языка», а концептуальное требование. Иными словами... благое пожелание - впрочем, выливающееся во вполне конкретные программистские действия.

Чтобы не было совсем скучно, я покажу пример из моей текущей работы с подробнейшим комментарием:

CODE
(файл dAlphaTrans.as)
/*
класс определяет переход двух «роликов» наплывом с заданной продолжительностью перехода.

*/
class dAlphaTrans {
/* так объявляются переменные. private означает,
что переменная будет «видна» только «внутри» класса, public -
что к ней можно будет обратиться «снаружи».
слово после двоеточия - тип переменной */
private var id:Number;
private var step:Number;
public var t:Number;
private var mctmp:MovieClip;
public var mc1:MovieClip;
public var mc2:MovieClip;

/* конструктор класса пуст.
Т.е. при создании нового экземпляра класса ничего
особенного не происходит. Тем не менее он должен быть. */
public function dAlphaTrans() { }

/* этим методом мы сможем установить время перехода между роликами */
public function setTransitionTime(time:Number){ //
this.t =time;
}

/* Этот метод изменяет значения прозрачности двух роликов,
если прозрачность второго меньше значения «100»,
а если достигла - меняет их местами и «самовыключается» */
public function alphaChange():Void{
if (this.mc2._alpha < 100) {
this.mc1._alpha -= this.step;
this.mc2._alpha += this.step;
}
else {
this.mc1 = this.mc2;
this.mctmp = this.mc1;
this.mc2 = this.mctmp;
clearInterval(this.id);
}


}
/*здесь инициализируется процесс «перехода наплывом» */
public function doTransition(m1:MovieClip,m2:MovieClip,tm:Number){
this.step = 2; // устанавливаем «шаг» (внутренний, снаружи мы его не получим)
this.mc1 = m1; // «принимаем» первый...
this.mc2 = m2; // ...и второй ролики «в работу»
/* считаем, сколько времени займет выполнение каждого шага,
если методу переданы не только имена роликов, но и время. */
if ™ { this.t = tm*20; }
// ...и запускаем процесс периодического вызова метода «alphaChange»
this.id = setInterval(this,"alphaChange",this.t);
} // здесь заканчивается определение метода doTransition()
} // здесь заканчивается описание класса.



И все. Теперь мы можем к любым двум объектам MovieClip (т.е. к любым двум «роликам») в сцене применить т.н. «Альфа Транзишн» - монтажный переход «наплывом» - следующими двумя строчками (напр., у нас два объекта - mc1 и mc2, при этом прозрачность mc1 (mc1._alpha) =0 (иначе они оба - полностью видны, и переход бессмысленен)

var at:dAlphaTrans = new dAlphaTrans();
at.doTransition(_root.mc1,_root.mc2,2)


- и в готовой флэшке ролики «поменяются местами» за 2 секунды, как только встретится этот вызов метода doTransition(). Точно так же можно будет с любой длительностью «наплыть» любыми двумя MovieClip-ами - причем и через год все будет работать (если только нас не приведет Господь перейти на AS3) в любом другом проекте - достаточно будет положить файлик dAlphaTrans.as в папочку с классами нашего проекта.

Это - простой пример. В конце концов, «наплыв» можно реализовать и функцией, без ООП, хотя есть некоторые тонкости, которые даже здесь уже позволяют говорить о преимуществах объектно-ориентированного подхода...

Но вот, напр., строчка, которой мы разом наследуем все свойства и методы такого мощного встроенного (т.е. стандартного, определенного создателями языка) класса, как MovieClip:

class OurClass extends MovieClip { ... }

И одной этой строкой мы проектируем новый вид объектов, с которыми можно делать все то же, что с «роликами», плюс что-то, что определим мы сами! А потом, напр., автоматически порождать эти объекты... Сделать т.о., напр., искры от костра или падающие снежинки, которые будут сами «подгружать» из нужных файлов изображения, сами крутиться, падать, гаснуть, таять и «умирать» - не представляет ни малейшего труда и занимает минимум времени и десяток-другой строк кода... если, конечно, знать «как?».

Однако справедлив вопрос: зачем так долго говорить о процедурных и ООП-языках, когда можно было бы уже начать программировать, изучать Типы переменных, циклы, «рисовать» программно, и вообще - "заставлять шарик прыгать"?
А потому что AS2 - очень, очень интересный язык...
Он - полностью объектно-ориентирован. Все структуры в нем - объекты, свойства и методы, в т.ч. даже... пользовательские функции. При этом он позволяет такие «вольности» по сравнению со «строгими» ООП-языками, и такие «процедурные» конструкции, что о его объектной ориентированности порой просто забываешь. Напрочь.
В этом - свобода этого языка и в этом же, возможно, его недостаток.

AS1 был еще слишком хлипким, "молодым" и слабеньким.
AS3 - строго объектно ориентирован. Шаг влево, шаг вправо от ООП - «вопли» компилятора об ошибке.

А AS2 - самое то. И гибкий, и мощный.

Это - то, почему я решил писать уроки программирования именно на примере AS2. И понимание с первых же шагов особенного этого положения, особенного удобства, особенного статуса этого языка - на мой взгляд, не просто необходимо, но - концептуально.


Продолжение
____________________________________


Автором урока является Des.
Запрещается копирование и публикация урока на других сайтах без письменного согласия автора и размещения ссылок.


The tutorial is written by Des.
No part of this tutorial can be copied/pasted on any other website without the author's express written permission.


Сообщение отредактировал Des - 15.01.2009 - 22:17


--------------------
"Высшая мудрость - умение разговаривать с людьми" ((с) Ямамото Цунэтомо (Дзётё), "Хагакурэ")
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Flash
сообщение 8.06.2008 - 19:59
Сообщение #2


Проезжий
*


Группа: Жители
Сообщений: 13
Регистрация: 7.12.2007
Пользователь №: 6531



Симпатии:  0  


Спасибо.
Будет ли продолжение? Если будет, то каким (в общих чертах хотя бы).
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Des
сообщение 8.06.2008 - 20:13
Сообщение #3


тритониус
****

Звезда писателя I степениЗа вклад в развитие ArtTower.ru
Группа: Почетные граждане
Сообщений: 728
Регистрация: 9.12.2007
Из: Москва \ Питер
Пользователь №: 6553
дышу под водой
Галерея Блог


Симпатии:  68  


Цитата(Flash @ 8.06.2008 - 20:36) *
Спасибо.
Будет ли продолжение? Если будет, то каким (в общих чертах хотя бы).


Да.

"Программирование шаг за шагом" на примере / базе Flash AS. В следующей серии напишем первые строчки кода и заставим их работать smile.gif


--------------------
"Высшая мудрость - умение разговаривать с людьми" ((с) Ямамото Цунэтомо (Дзётё), "Хагакурэ")
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
LOla44
сообщение 4.01.2010 - 20:37
Сообщение #4






Группа: Туристы
Сообщений: 2
Регистрация: 4.01.2010
Из: Кострома
Пользователь №: 15083



Симпатии:  0  


Спаибо, очень рада, что нашла ваши уроки.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Елена_*
сообщение 3.10.2010 - 01:39
Сообщение #5





Гости






   


В книге Колина Мука "AS 3 для профессионалов" для "видимости" лишь внутри класса используется оператор "internal" а не "private". Есть ли разница, что использовать? Возможно, какой-то из операторов "устаревший"? Дайте ответ, пожалуйста.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Foxx
сообщение 3.10.2010 - 02:19
Сообщение #6


Благородный Дон
*******

2 место3 место3 местоМеткий стрелокПобедитель турнираЗа вклад в развитие ArtTower.ru2 местоПобедитель турнираМеткий стрелок
Группа: Стражи
Сообщений: 5568
Регистрация: 8.05.2006
Из: Киев
Пользователь №: 10
ФотоГраф
Галерея Блог


Симпатии:  320  


Елена, это не устаревшая конструкция.
Объекты, объявленные как private, доступны внутри класса.
Объекты internal доступны внутри пакета (package). Все классы, описанные в этом же пакете будут иметь доступ к internal переменным или методам.


--------------------
Dixi
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Быстрый ответДобавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия форума Сейчас: 18.12.2017 - 08:18