_WELCOMETO Radioland

Главная Схемы Документация Студентам Программы Поиск Top50  
Поиск по сайту



Навигация
Главная
Схемы
Автоэлектроника
Акустика
Аудио
Измерения
Компьютеры
Питание
Прог. устройства
Радио
Радиошпионаж
Телевидение
Телефония
Цифр. электроника
Другие
Добавить
Документация
Микросхемы
Транзисторы
Прочее
Файлы
Утилиты
Радиолюб. расчеты
Программирование
Другое
Студентам
Рефераты
Курсовые
Дипломы
Информация
Поиск по сайту
Самое популярное
Карта сайта
Обратная связь

Студентам


Студентам > Курсовые > Объектно-ориентированные языки програмирования

Объектно-ориентированные языки програмирования

Страница: 4/5

       

2.3.1. C++

Язык

Язык С++ в основном является языком Си со специальными синтаксическими расширениями для определения и управления объектами. В нем был учтен ряд недостатков языка Си: теперь ведется проверка типов аргументов функций, можно производить макроподстановку функций. Также в него включены некоторые средства проекта стандарта Ansi C. По завершении стандарта C++ будет пересмотрен для удаления несовместимостей двух языков. Важной новой особенностью C++ является поддержка абстракции данных и объектно-ориентированного программирования. Абстракция данных поддерживается с помощью введения типов, определенных пользователем. Например, предположим, что есть новый тип данных shape, используемый в графической

системе. Этот тип определяется с помощью оператора class:

 

class shape {

        point centre;

        colour col;

        // ... комментарий

 

public:

        point where() {return centre; }

        void move(point to)

        { centre = to; draw(); }

        virtual void draw();

        virtual void rotate(int);

        // ... комментарий

};

 

Это определение содержит информацию как общую, так и частную. Сначала представление фигуры shape определяется двумя элементами частных данных - центром и цветом. Затем идет интерфейс, содержащий общую информацию. Пользователь может получить координаты центра, перемещать центр фигуры в данную точку, рисовать фигуру и вращать ее. Функции draw() и rotate() нельзя определить для абстрактного типа shape. Они называются виртуальными функциями и определяются позже для каждой специфической фигуры: окружности, треугольника или квадрата. Каждая из них определяется оператором class. Это означает, что, например, новый тип данных circle является производным класса shape, который называется его базовым классом. Производный класс наследует свойства базового класса. В данном случае класс circle наследует члены класса col и centre класса shape. Кроме этого, у него есть член radius. Функции draw() и rotate() теперь реализованы для класса circle:

 

class circle: public shape {      // окружность - это контур

      int radius;

 

public:

      void draw() { /* ... */ };

      void rotate(int) {}            // rotate - нулевая функция

};

 

Объектно-ориентированное программирование поддерживается в языке С++ в основном реализацией наследования методом задания взаимодействия типов данных [Stroustrup 1988].

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

Хотя С++ поддерживает объектно-ориентированное программирование, он не навязывает его. Можно игнорировать объектные расширения и просто писать обычные программы языка Си. Это преимущество с точки зрения совместимости двух языков и основная причина повышенного интереса к С++ в разработке ПО. С другой стороны, могут возникнуть недоумения по поводу того, в какой степени С++ можно считать объектно-ориентированным языком. Более того, трудно оценить, какая часть рынка языка отражает уникальный поворот сообщества Си в сторону ООС. Есть признаки, что при соответствующем курсе С++ отойдет от объектно-ориентированного сообщества: в 1988 ассоциацией пользователей UNIX (Usenix) была созвана отдельная конференция по С++, а также был создан новый журнал The C++ Report издателями журнала Journal of Object-Oriented Programming.

Среда

С++ - это язык программирования, а не среда разработки программ типа Smalltalk. Поэтому ему нужны средства поддержки работы программиста: сюда входят расширения существующих средств языки Си (редакторы, отладчики) и средства поддержки работы с объектами (окна просмотра классов). В свою очередь, эти средства должны соединяться со средой программирования. Быстрый рост рынка С++ предоставляет хорошие перспективы продавцам, имеющим продукты для С++. К ним относятся, например, существующие продавцы компиляторов и трансляторов С++. Один из интересных проектов в этой области - соглашение между ParcPlace Systems и Glockenspiel о разработке Cynergy - версии среды Smalltalk, поддерживающей программы на С++.

Поставщики

AT&T поставляет транслятор, обрабатывающий программу на С++ и генерирующий исходный код Ansi C, который затем компилируется нормальным образом. Транслятор пока еще остается продуктом AT&T без сопровождения. Лицензию можно купить прямо на фирме. Кроме этого, транслятор перенесен на разнообразные платформы фирмой Glockenspiel (Дублин). Несколько организаций имеют подлицензии: Oasys для рабочих станций (Sun, Apollo), Guidelines и Lifeboat для IBM PC.

Две другие фирмы, Zortech и Oregon Software, недавно выпустили компиляторы С++. Они больше основаны на справочном руководстве [Stroustrup 1986], а не на исходных текстах, и не имеют лицензии от AT&T.

 

2.3.2. OBJECTIVE-C

Язык

Другим ведущим продавцом продуктов, основанных на Си, является Stepstone, бывший PPI. Objective-C - это гибридный язык, состоящий из подмножества Ansi C и основных положений Smalltalk-80. Тексты программ могут содержать чистые операторы языка Си или объектно-ориентированные конструкции. Объекты задаются новым типом данных, называемым id. Сообщения посылаются объектам с помощью модифицированной версии синтаксиса языка Smalltalk. Новые объекты создаются посылкой сообщения new специальному типу объекта, называемому объектом-производителем. Например, новый экземпляр класса Pen создается с помощью следующего текста:

 

     extern id Pen;

     id aPen;

     aPen = [Pen new];

Objective-C не поддерживает множественное наследование и автома

 

ческую

сборку мусора, однако, тестовая версия последней создана и протестирована фирмой Stepstone [Cox 1986].

Компилятор Objective-C генерирует исходный текст на языке Си. По умолчанию используется динамическое связывание методов, однако, для

 

вышения надежности и эффективности можно выбрать статическое связы

 

ние.

Среда

Кроме компилятора, фирма Stepstone предоставляет (необязательно)

 

терактивную среду программирования Objective-C Interpreter. Она поддер

 

вает целый ряд бычных действий программиста: написание программ, к

 

пиляцию, связывание, тестирование и отладку. Она включает команды для вычисления выражений, вывода данных, установки контрольных точек,

 

иска каталогов файла, редактирования командного файла, проверки объ

 

тов, вывода иерархии классов и наследуемых методов.

Также предоставляется две библиотеки классов для поддержки основ

 

го и гра

 

ческого пользовательского интерфейса.

2.3.3 ДРУГИЕ ПРОДУКТЫ, ОСНОВАННЫЕ НА СИ

 

C-talk

C-talk - это запатентованный язык для MS-DOS и Apple Macintosh, с

 

данный отделом программных продуктов фирмы CNS Inc, специализир

 

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

 

сов для структур данных типа Buffer, Stream и ByteArray. Он поставляется в виде пакета, содержащего препроцессор для преобразования файлов на C-talk в исходные тексты на Си, и среды программирования, называемой C-talk Browser, основанной на оконном интерфейсе. Существуют средства редак

 

ро

 

ния файлов и просмотра классов и методов.

Complet

 

 

 

Complet

 

Compute

 

Corporation, New York работает над созданием объектно - ориентированной среды разработки программ, называемой Complete C. Она состоит из прекомпилятора, генерирующего стандартный Ansi С из объектно-ориентированного Си, набора инструментов (отладчика, компоновщика, генератора документов) и библиотеки основных классов. Complete C работает под MS-DOS, OS/2 и Unix.

2.4. ПРОДУКТЫ, ОСНОВАННЫЕ НА ЛИСПЕ

Объектно-ориентированные расширения Лиспа предназначены в осн

 

ном для сообщества исследователей искусственного интеллекта. Некоторые из этих расширений были первоначально созданы в университетах. Лидерами являются две самостоятельные версии: New Flavors, разработанный в Symbolics, и CommonLoops, разработанный в Xerox PARC. Они составили базу для

Commo

 

Lis

 

Objec

 

Syste

 

CLO

).

Отличительной особенностью некоторых систем, основанных на Лиспе, является способ управления взаимодействием объектов. В отличие от тра

 

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

означенного этим первым аргументом, в то время как имя функции эквивалентно имени сообщения.

CommonLoops

Loops - это многопарадигмовая система для обработки знаний и программирования, разработанная в Xerox PARC. В представлении знаний используется объектно-ориентированный подход. поддерживающий классы и наследование. Объектно - ориентированная часть Loops позднее была оформлена как пакет в составе продукта Common Lisp, более известного как CommonLoops. Характеристики языка:

частичная интеграция системы типа Common Lisp с классами CommonLoops;

использование синтаксиса обобщенных функций вместо посылки сообщений;

способность определять методы, различающиеся не только по первому аргументу ( так называемые мультиметоды);

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

Опытная реализация, названная Portable CommonLisp (PCL), распространена для небольшого сообщества пользователей. Она используется в Hewlett-Packard Laboratories для реализации другого объектно - ориентированного языка - CommonObjects [Kempf, Harris, D'Souza and Snyder 1987].

New Flavors

Flavors -

эт

 

расширени

 MacLisp/ZetaLisp. Это система посылки сообщений, используемая в коммерческих целях фирмами Symbolics и TI Explorers. New Flavors - это производная от Flavors, совместимая с ней, но использующая синтаксис обобщенных функций.

Common Lisp Object System (CLOS)

В 1986 г. группы с фирм Xerox PARC и Symbolics, а также группа с фирмы Lucid, начала работу над проектом спецификации для CLOS, представленный на рассмотрение технической рабочей группе Ansi, X3J13. Эта спецификация одобрена для вероятного принятия в качестве части развивающегося стандарта Common Lisp. Цели CLOS: использование набора уровней для независимых друг от друга действий языка программирования; сделать как можно больше в рамках первого класса Object System (объект первый класс - это объект, который можно явно создать и работать с ним); желание избавиться от сложного поведения для упрощения понятий и их объяснений; сделать спецификацию языка как можно более точной [DeMichiel and Gabriel 1987]. Основные средства CLOS:

три слоя языка: интерфейс для объектно-ориентированного прогр

 

мирования, функциональный интерфейс для Object System, и инст

 

менты, позволяющие программисту создавать свои собственные объектно-ориентированные языки;

использование обобщенных функций вместо посылки сообщений; при таком подходе объекты и функции являются анонимными объ

 

тами: ни один из них не является с

бственностью другого;

поддержка множественного наследования: список старшинства кл

 

сов используется для решения потенциальных конфликтов между

 

следуемой структурой и поведением; средство комбинации методов для получения значений обобщенной функции - задание способа к

 

бинации методов, применимых к набору аргументов (в результате множественного нас

 

дования);

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

Delphi Common Lisp

Delphi - это итальянская фирма, считающая себя первой в реализации стандарта для CLOS. Последний выступает как часть продукта Delphi Common Lisp (DCL), основанного на расширенной версии Kyoto Common Lisp.

Разработано три расширения CLOS:

поддержка традиционных систем;

поддержка постоянной памяти;

поддержка параллельности.

Allegro Common Lisp

Allegro CL - это реализация Common Lisp, разработанная и выставленная на рынок фирмой Franz Inc на широком наборе аппаратуры. В настоящее время он включает объектно-ориентированные расширения для поддержки Flavors и Portable CommonLoops. Поддержка стандарта CLOS буде реали

ована как только он станет доступным.

ExperCommon Lisp

ExperTelligence разрабатывает и выставляет на рынок объектно - ори

 

тированное расширение ExperLisp для Macintosh. Поддерживае

 

Macintosh Toolbox и MacApp.

 

2.5. EIFFEL

 

Язык

Eiffel - это запатентованный язык, разработанный и продаваемый ф

 

мой Interactive Software Engineering. Его разработка велась под влиянием объектно-ориентированных понятий языка Симула, объединенных с синт

 

сисом языка Ада и современными методами технологии программирования. Кроме поддержки классов и наследования, Eiffel вводит ряд новых средств:

утверждения для выражения формальных свойств классов: это могут быть

p

 

condition

,

postcondition

 или

invariant

;

обобщенные параметры для представления типов в объявлениях классов;

средство rename для поддержки множественного наследования р

 

решением конфликтов имен в случае, когда у класса более одного

 

дителя;

средство переопределения в нижестоящих классах, позволяющее осуществлять динамическое связывание вопреки статической пров

 

ки типов;

отложенные программы, реализация которых находится только в нижних кл

 

сах.

Размещение и освобождение памяти осуществляется системой времени выполнения, включающей пошаговый сборщик мусора. Есть интерфейс с другими языками с помощью понятия external, выдающего список каждой внешней подпрограммы, используемой в программе.

Среда

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

 

тимизирующий постпроцессор и библиотеку базовых классов для общих структур данных (списков, деревьев, стеков, хэш-таблиц). Постпроцессор может генерировать отдельный пакет на Си, который можно использовать для поставки на системы, не поддерживающие Eiffel.

2.6. ЯЗЫКИ, ОСНОВАННЫЕ НА ПАСКАЛЕ

 

2.6.1. ACTOR

Actor - это объектно-ориентированные язык и среда, основанные на П

 

кале и работающие под Microsoft Windows. Он соединяет систему управ

 

ния динамической памятью и автоматическую сборку мусора. Actor был с

 

дан группой Whitewater Group. Он используется для создания отдельных прикладных задач для Windows, которые можно скомпоновать с существ

 

щими программами на

Microsof

 

 

.

2.6.2. OBJECT PASCAL

 

Object Pascal - это объектно-ориентированное расширение Паскаля, р

 

работанное Н. Виртом совместно с командой с фирмы Apple. Классы (типы) реализованы как расширение паскалевской структуры RECORD. В Object Pascal они могут содержать как поля данных, так и поля методов. Методы определяются как процедуры или функции Паскаля, определяемые по имени класса. Сообщения посылаются с помощью обычных конструкций Паскаля для определения поля.

Object Pascal использовался для внутренних разработок фирмы Apple. Библиотека классов Object Pascal составляет основу интегрированной сис

 

мы разработки прикладных программ MacApp. Язык свободно распростра

 

ется [Schmucker 1986].

2.7. ЯЗЫКИ, ПОДДЕРЖИВАЮЩИЕ АБСТРАКЦИЮ ДАННЫХ

Раздаются возгласы, что ряд других языков также либо объектно - о

 

ентированные, либо поддерживают объектно-ориентированные понятия. В этом разделе рассматриваются два языка, имеющие существенную подде

 

ку программистов - Modula-2 и Ada, которые сравниваются с вышепривед

 

ными объектно-ориентированными языками. В таблице С2.4 подведены и

 

ги основных средств этих языков и основных коммерческих объектно-ориентированных языков.

2.7.1. ADA

 

Ada был создан в Министерстве Обороны США для использования во встроенных компьютерных системах. Его использование обязательно в государственных контрактах в некоторых областях как в США, так и в Великобритании. Благодаря этому такие системы являются естественными прикладными задачами для объектно - риентированных понятий: значительные усилия были затрачены на доказательство того, что Ада поддерживает ООС.

Новые типы данных (классы) можно задать в языке Ада как пакеты. Пакет содержит как общую, так и частную информацию. Пользовательский интерфейс задан как спецификация пакета, в то время как реализация задается отдельно в теле пакета, предоставляя эффективный механизм инкапсуляции. Связывание происходит во время компиляции, когда явно проверяются типы всех данных. В пакете можно переопределять операторы, давая новый смысл традиционным операторам типа +. Ада не позволяет типам наследовать информацию или поведение от других типов, хотя есть возможность использовать разновидность наследования - обобщение (genericity), позволяющее экспортировать ограниченное число частных типов и операций.

Ада может использоваться для разработки программ, основанных на объектах. Для проектов в военной и аэрокосмической областях другого выбора и нет. Пользователи, не ограниченные этими областями, могут с удовлетворением отметить, что их требования могут быть выполнены другим объектно-ориентированным языком типа Eiffel.

 

Таблица С2.4  Сравнение языков программирования

 

Язык

Скрытие

информации

Классы

Наследо-вание

Связы-вание

Сборка мусора

Инстру- ментарий

 

 

Simula

да

да

един.

стат.

нет

есть

Smalltalk-80 

да

да

един.

динам.

автом.

полный

С++

да

да

един.*

оба

нет

нет

Objective-C

да

да

един.*

оба

нет

есть

Eiffel

да

да

оба

оба

нет

есть

Ada

да

да

нет

стат.

нет

нет

Modula-2     

да

нет

нет

стат.

нет

нет