Карманные компьютеры в России АРХИВ 1997-1999 г.г. сайтов Newton.Ru, HPC.Ru, Pilot.Ru, WinCE.Ru, Psion.Ru.
Работает исключительно в познавательных целях: есть битые ссылки, картинки и т.д.
Главная страничка АРХИВА       HPC.ru сегодня
Rambler's Top100


Новости месяца
Ньютон - что это такое
Каталог программного обеспечения
Каталог аппаратного обеспечения
Области применения
Страничка разработчика
Средства разработки программ для Ньютон
Что необходимо знать начинающему программисту
Секреты программирования для Newton
Где купить. Цены
Российские фирмы-разработчики
eMate 300
Русские программы
MessagePad 2000
MessagePad 2100
МакЦентр
Paragon
English page

На основную страницу

Что необходимо знать начинающему программисту

Краткая техническая информация о PDA Newton

1. Память.

Newton 120 - 2Mb ОЗУ
Newton 130 - 2.5 Mb ОЗУ
Дисковая память отсутствует. Возможно расширение ОЗУ с помощью PCIMCIA карт.

2. Операционная система.

OS 2.0 - многозадачная (с кооперативной многозадачностью) операционная система с оконной графической оболочкой.

3. Файловая система.

Файлы данных (soups в терминологии APPLE) хранятся в ОЗУ в упакованном формате и представляют собой записи с поименованными полями. Кроме обязательных ключевых полей записи soups (frames) могут содержать поля с произвольными именами.

Поддерживается индексирование soups по заданным полям, запросы на выборку записей по определенным признакам. Результат выполнения запроса представляет собой список ссылок на выбранные записи.

4. язык программирования.

язык Newton Script - объектно-ориентированный интерпретируемый язык. Тексты программ компилируются в промежуточный код. Имеется возможность выборочной компиляции функций в коды процессора. Для описания наследования свойств объектов используется понятие ПРОТОТИПА (в отличие от понятия класса). Любой объект может быть прототипом для Вашего объекта (нет деления на объекты и экземпляры объекта). Благодаря богатому набору встроенных в ПЗУ (8Mb!) прототипов, набор которых можно пополнять, объемы создаваемых программ получаются на удивление небольшими. Например, экранный эмулятор клавиатуры с возможностью переключения на кириллицу занимает всего 3К памяти.

Средство разработки Newton Toolkit обладает удобным построителем экранных форм, "знает" все прототипы, хранящиеся в ПЗУ и позволяет расширять этот набор, имеет связь с интерпретатором NewtonScript (через последовательный интерфейс или AppleTalk) на "живом" Newton'e, имеет встроенный отладчик.


NEWTONSCRIPT - объектно-ориентированный язык.

Основной конструкцией NewtonScript является ФРЕЙМ, представляющий собой динамический набор СЛОТОВ. Слот - это элемент фрейма, состящий из ИМЕНИ и ЗНАЧЕНИя. Слот может содержать любые виды значения.

Пример фрейма:
sample1 :=
{ name: "Иванов Иван Иваныч", // слот - строка
age: 33, // слот - число (целое)
city: 'Moscow, // слот - символ (Symbol)
citycode: "095",
phones: [ // слот - массив фреймов
{kind: 'home, num: "111-22-33"},
{kind: 'work, num: "444-55-66"},
{kind: 'fax, num: "777-88-99"}
],
getphone: func(type) // слот - функция (МЕТОД)
begin
foreach x in phones do
if x.kind=type then return(x.num);
return nil;
end
};


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

1) Прямой доступ к значению слота:
homephone := sample1.phones[0].num;
2) Доступ через определенный нами метод:
homephone:= sample1:getphone('home);
//результат-"111-22-33"


Слот getphone можно использовать и просто как функцию:

phones := [
{kind: 'home, num: "111-11-11"},
{kind: 'work, num: "222-22-22"},
{kind: 'fax, num: "333-33-33"}
];


homephone := call sample1.getphone with ('home); //результат - "111-11-11"

Когда мы вызываем функцию getphone как метод фрейма sample1, то в качестве переменной phones используется слот sample1.phones .
Когда мы вызываем функцию getphone как просто функцию, то в качестве переменной phones используется глобальная переменная phones .

Прототип - это прото-тип.

Определим фрейм, аналогичный sample1, но описывающий телефоны Петра Петровича.

sample2 :=
{ name: "Петров Петр Петрович",
age: 33,
city: 'Moscow,
citycode: "095",
phones: [
{kind: 'home, num: "111-11-11"},
{kind: 'work, num: "222-22-22"},
{kind: 'fax, num: "333-33-33"}
],
getphone: sample1.getphone
};

Интересной особенностью NewtonScript является возможность определить фрейм для Петра Петровича более изящным способом:

sample2 :=
{ _proto: sample1,
name: "Петров Петр Петрович",
phones: [
{kind: 'home, num: "111-11-11"},
{kind: 'work, num: "222-22-22"},
{kind: 'fax, num: "333-33-33"}
]
};


Все недостающие слоты (age, city, citycode, getphones) фрейм Петра Петровича унаследует от фрейма Ивана Иваныча. Добавляя другие методы и данные во фрейм Ивана Иваныча (например, год рождения) мы сделаем эти слоты доступными и для Петра Петровича. Если же мы захотим добавить во фрейм Ивана Иваныча день рождения:
sample1.birthday := "1-Aug-1963",
a у Петра Петровича день рождения приходится на другую дату, то мы будем должны определить аналогичный слот во фрейме Петра Петровича:
sample2.birthday := "29-Jul-1963",
иначе Петр Петрович унаследует день рождения от Ивана Иваныча.
Интересной особенностью механизма proto-наследования является тот факт, что прототип является как бы определением типа для другого объекта, оставаясь вместе с тем "равноправным" объектом по отношению к тем объектам, для которых он является прототипом.
ПЗУ Newton 120/130 имеет объем 8Mb и содержит массу полезных прототипов почти на все случаи жизни. В свою очередь Newton Toolkit имеет встроенные средства визуального проектирования с использованием как прототипов из ПЗУ, так и прототипов, определенных пользователем. В результате построение приложений на Newton превращается в достаточно приятное занятие (велик коэффициент ПОЛУЧЕННЫЙ_РЕЗУЛЬТАТ/ВЛОЖЕННЫЕ_УСИЛИя), а сами приложения благодаря механизму proto-наследования занимают мало места в ОЗУ.

Отец, Сын и Прототип (происхождение видов).
Для описания экранных объектов Newton OS использует объекты (фреймы) особого типа, называемые views (виды). View в Newton OS - это аналог window в Windows. Это объекты NewtonScript, определяющие поведение соотвествующих экранных объектов. Так как экранные объекты образуют определенную иерархию, для описания иерархии соответствующих фреймов используется механизм, похожий на механизм proto-наследования.
Объект-Сын имеет специальный слот _parent, содержащий ссылку на обект-Отец. Подобно механизму proto-наследования, объекты-дети наследуют методы и переменные своих родителей. При обращении к методу , определение которого отсутствует непосредственно в данном фрейме, поиск идет сначала во фрейме, описанном в слоте _proto, затем во фрейме, описанном в слоте _parent. Механизмы proto- и parent- наследования имеют свои тонкие различия, точно также как и механизм "видообразования" несколько сложнее приведенной здесь упрощенной схемы. Во вводной статье мы не будем вдаваться в эти тонкости, отметим только, что механизмы proto- и parent- наследования реализованы в NewtonScript и не зависят от того, является данный фрейм "видом" или нет.
Краткий обзор NewtonScript.
По своему синтаксису NewtonScript напоминает Pascal, по полному отсутствию статического связывания имени переменной с определенным типом переменной - Lisp. Переменная меняет свой тип в соответствии с присваиваемым ей значением. Основные типы (basic types): integers, booleans, characters, сложные типы (complex types): reals, arrays, strings, frames. Массивы (arrays) могут состоять из элементов разных типов (внутри одного массива). Существует большое количество встроенных функций для работы с переменными каждого из вышеуказанных типов.
1) Работа с фреймами.
Слоты во фрейме можно задавать как при описании самого фрейма:
x := { a: 1, b: 2, c: func(x,y) ...};
так и динамически:
x := {};
x.a := 1;
x.b := 2;
x.c := func(x,y) ...

Интересна возможность многоуровневого создания слотов:
x := {a:1};
x.b.c.d.e.f := 5;

В результате фрейм x будет выглядеть следующим образом:
{ a: 1 , b: { c: { d: { e: { f: 5 }}}}}

Для удаления слота из фрейма используется функция RemoveSlot:
RemoveSlot(x, 'b);

Для проверки наличия слота во фрейме используется конструкция
frame.slot exists:
if x.a exists then ...


Если слот a отсутствует во фрейме x (а также во вложенных _proto и _parent фреймах), то результатом обращения x.a будет nil.

2) Массивы (Arrays)
Массив - это упорядоченный набор значений, который может динамически изменять свою размерность:
new:=[ ];
AddArraySlot(new, 33);
SetLength(new, 4);

В результате массив new будет иметь вид: [33, nil, nil, nil].
Существует ряд функций для работы с массивами как со множествами, например:
SetUnion(array1,array2,uniqueOnly) - функция для объединения массивов, где параметр КuniqueOnly может принимать значения TRUE или nil.

3) Символы
Чтобы указать, что идентификатор является символом, используется символ quote (').
Для преобразования строки в символ используется функция Intern(string), для обратного преобразования - функция SPrintObject(symbol).
Переменную, значением которой является символ, можно использовать для доступа к слоту по имени:
x:={ a: 1, b: 2};
y:= 'b;
z:= x.(y); //результатом будет 2


4) Итерация: foreach
foreach element in array do statement // для каждого элемента из массива array будет вызываться выражение statement, внутри которого значением переменной element будет очередной элемент из array.
foreach value in frame do statement
foreach slotname,value in frame do statement

Особая форма: foreach ... collect statement
y:= foreach x in [0, 1, 2] collect x*2; // результатом будет [0, 2, 4]
5) Итерация: for
for i:=start to end by index do statement

6) Циклы
while boolean-expression do statement
repeat statement until boolean-expression
loop expression
Для принудительного выхода из цикла используется оператор break;
7)Условные выражения
if boolean-expression then statement
if boolean-expression then statement else statement2

Во всех вышеприведенных примерах statement - это либо один оператор NewtonScript, либо последовательность операторов, заключенная между begin и end, причем операторы отделены друг от друга точкой с запятой.


Любишев Александр, программист фирмы МакЦентр
Статья подготовлена с использованием материалов из книги
J.McKeehan, N.Rhodes "Programming for the Newton Using Macintosh"

Вверх



   Rambler's Top100  Рейтинг@Mail.ru