Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 169
Текст из файла (страница 169)
Метод!Опт() также опре- делен для строковых объектов, В ) аыа нет необходимости в структуре 50 гцсс, имеющейся в языке С, посколь- ку структура классов языка )аыа допускает определение сложных данных с по- мошьнз простого определения класса, содержащего несколько определенных объектов. П.5.2. Управление последовательностью действий Операторы. В языке)аыа присутствуют обычныс для языка С управляюшиеструктуры т Р, 0ог и ипт1е. В этом языке нет оператора до0о'. Выход из цикла осушестштяется операторами языка С ЬгеаК и солстпце, при этом следует указать метку цикла, из которого нужно выйти: Оцгегсоор: (ог(т=0, т<З, т( (услоаие выхода из цикла) (ьгеаи Оцтегсоор:) ) Определения классов.
Определения классов в языке )ача похоже на определения классов в языке С++ в отношении определения переменных экземпляра (полей) и методов для нового класса, некоторые аспекты взяты из языка Вша!!(аП(; в частности, суперкласс нового класса задается явно, например: с1азз ньиа1цез ех(еооз ОЬ)есс 1 рцЫш ОоцЫе х; У* лерененная экзенлляра *т' рцЫ тс тлс у у* переменная экзенл»яра *! Мекка(цел(з 1 ... ) /* конструктор для неыча1цез *у ) где Иеттча1цез является субклассом (производным классом) суперкласса ОЬ)ес( и состоит из двух полей, х (ОоцЫ е геа)) и у ( т лсерег). В языке )аыа используется большая библиотека предопределенных классов. )ачабо.* — стандартная библиотека ввода-вывода, а)аиа.атчц" — стандартная библиотека апплетов, используемая для выполнения аппп етов) аыа, встроенных в тч еЬ- страницы НТМ! .
Но зарезерннронанное ключанос слово кото осталось( — Ирииеч. науч Рад. 614 Приложение. Обзоры языков Как уже говорилось, лля размещения экземпляров класса (обьсктов) используются С-подобные объявлсния. Так, Иеича1ие5 Муваса[1 создает массив Муба[а (пустой), каждый пз элементов которого имеет тип Ивича1пез. Как н в языках С и С++, используется точечная нотация для ссылок на компоненты объекта мубага: муба[а [17) х и муйа1а [17 Еу.
Кромс того, так жс как и в С++, можно определить метод Меича1цвз(1 для явного присваивания переменным экземпляра (полям) х и у значений при создании экземпляра класса. Конструктору можно передать параметры, например: Веича1чеь1псав1е еи ~лг Ы [ тшмх - гс тьиьу - Ь:) При оснобождении памяти нужно вызывать метод Пла1чге() (который действует подобно деструктору класса языка С++ -иил класса). Так жс как и в языке С++, в )ача можно опрсдслять другис методы в описании класса и затем вызывать их с использованием точечной нотации. В языке ~ача отсутствует явный вызов функции, так как в этом нет необходимости.
Доступ к методу (как в 5уз[еп. опт. рщ лг1 л(зтш лд1) является неявным вызовом функции. Определение проиэнодных классов. Язык) ача имеет такую жс структуру и роизводных классон, как и язык С++. Иеис1аээ является производным классом класса 01бег01азз, если он определен слсдуюгцим образом: с1азз хеис1азз ехгелпз 01вегс1аза С Меис1агэ наслсдуст все псрсмснныс экземпляра (поля) класса 01бегс1азз, а вызов метода класса меис!азз (например, мвис1 азз. езпсс1олх) передается 01 ьегс1 азз.
Пюссх олх, если метод Ецлс11олХ не определен в классе Меи01а зз. Управление доступом. Псрсмепныс экземпляра в языкс )ача могут быть открытыми (рпь1хс), закрытыми (рг~ча[е) и защищенными (рго[есгеб). Открытыс имена доступны отовсюду, закрытыс имена доступны только внутри определения класса, а защищенные имена поступим в производных классах данного класса. Если нс используется ни один из приведенных атрибутов имен, полагают, что управление доступом является дружвственныуи, то есть имена являются доступными лля любого определения класса внутри пакета, к которому принадлежит данный класс, но больше ниоткуда (некая форма полуоткрытого доступа). Переменные в определении класса обычно являются переменными экземпляра — это означает, что онн присутствуют в любом экземпляре объекта этого класса.
Для описания переменной, общей для всех экземпляров данного класса, используется атрибут э[а [х с. Например, если бы вы создавали структуру связанного списка, каждый связанный список был бы классом [~лХеЬОЬдесг. В нем было бы объявление эЫЫ с Егее[1зстуре ЕгееЬ1зц которое было бы общим для всех экземпляров класса [1пХеЬОЬ1есг, чтобы управлять размещением новых элементов списка из общего списка. Методы, общие для П.В. ЗА)(А 61 5 всех экземпляров класса и имеющие поступ только к переменным класса, также могут быть объявлены с атрибутом агат> с.
Виртуальные метолы языка С+э в я<>ыке) ача называются абстрактными и определяются так жс, как и виртуальные методы языка Са ы а(>а(гас( чо>С нетьосяаве() !* не>од с пустяк телок */ Потоки. Через потоки )ача позволяет реализовать некоторый уровень многопроцессорной обработки. Например, браузер Но() ача параллслыю с браузером, отображающим НТМБ-файлы пользователя, запускает программу сборки мусора. Это позволяет избежать остановки отображения файлов на время ожидания завершения процесса сборки мусора. Также и метод лля отображения т рафики может быть отдельным потоком по отношению к метолу отображения текста, позволяя реализовать более быструю перелачу полезной информации. Потоки запускак>тся команлой пех 1Пгеа<)(обьек< ).
Лтрпбут ьупс)воп> ае<) (ьупс(>гоп1 ге<) чо(<) аьагтВог(() ) в опрслслспнях нескольких мст<>лов запрещает олновременпое выполнение двух (и более) таких методов, тем самым предотвращая туп иковыс ситуации, например одно времен н ь> й доступ к совместно используем ы и данным. Стандартные функции Язык )ача был создан для облегчения создания тчеЬ-страниц. Поэтому он включает в себя библиотеку классов ЛЬэггасг Ж(п<(оьч Тоо()<1< (Л'чт<Т) для построения пользовательских интерфейсов. В ней предусмотрены средства для создания фреймов, отображения их на экране, возможности добавления меню, полос прокрутки и текста.
Следующие методы дают только небольшое представление о некоторых из имеющихся функциональных возможностей, сама же библиотека классов настолько огромна, что нет возможности полностьк> описать ес в ланной книге. Библиотека Лчт<Т создает иерархию классов. На верхнем уровне находятся графика, компоненты (кнопки, контейнеры — например, фреймы, — текстовые области) и границы. Для созлання сложных отображаемых структур используются различные производные классы, Обьскт ч)> пйох (окно) не имеет ни границ, ни полосы меню. Он может генерировать события х>п<)охОреп<( или И>пбохС!оке<), которые могут использоваться для создания экземпляра окна.
Фреймы являклся окнами с заголовком и границей, для которых определено больше событий, чем для простого окна. Метал з)>ох() отображает на экране фрейм (субкласс окна). Конструктор т га<пе(" як я фрейма" ) создает новытт фрейм с указанным именем. Метод ьеьз)ге()(, й) устанавливает размер фрсйма )( х и пнксслов. Метод ИепоВаг() созласт во фрейме строку мспю. Метод((спи(тейт("икя") создает элемент меню с указанным имепслт. Метод Вот<оп("икя" ) создает кнопку с указанным именем. Метод а<(<)(обьект) добавляет указанный объект (например, меню или кнопку) во фрейм.
Метод <(гахзтг1пй("текст", Х. у) помещает указанный текст вофрейм в точке с координатами (Х, У) в пикселах. 616 Приложение. Обзоры языков П.6. ОЗР Пример с пояснениями В примере, приведенном в листинге П.З, снова происходит суммирование элементов массива.
В данном случае мы задаем функции прямо в сеансе ЫБР. Хотя используемый нами Е15Р имеет функцию (1оаб "иия файла"), которзя считывает определения функций языка Е15Р из файла. Символ > обозначает приглашение Е!5Р вводить команды. Листинг П.8. Сумма элементов числового вектора на языке (38Р 1 11тзр 2 > Сохранение значений в виде списка сиивопов 3 >(Оегтпе (5никехг Ч) 4 (СОПО ((ПО11 Ч) (РГОдн (рт П( "5»жти ) О)) 5 (Г (+ (5нжиехс (ссг И ) (саг и)) ) )) б 50МЬЕХГ 7 >, Создание вектора из введенных значений 8 (Летно Сес1прн((Г с) 9 (сопс ((ес с О) пт1) 10 ( Г (согв (геап О (Се(1прнв Г (- с 1)))))) 11 СЕП ИРО Г 12 >(Оегсп Оо1(.() 13 (ргойп 14 (зевс тпгт)е (орел '"1)зр пава")) 15 (ве(д аггау (Се(!прн( тп(з1е (геас тпгз1е))) 16 (ргтпь аггау) 17 (ргтпв (5нвкехт аггау)))) 18 001 Г 19 >(0011) 20 21 (1 2 3 4) 22 "5нж " 23 10 24 1О Строка б Вызов интерпретатора Е15Р.