Продукты, основанные на языке Си — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Продукты, основанные на языке Си

2020-04-01 97
Продукты, основанные на языке Си 0.00 из 5.00 0 оценок
Заказать работу

 

В настоящее время объектно-ориентированные языки стремятся приблизиться к традиционным языкам (в основном к языку Си). Для этого есть ряд причин:

- уже можно воспользоваться накопленным опытом программирования;

- интерфейсы существующих систем намного проще;

- язык более приемлем в области управления;

- поставка может быть осуществлена на стандартных платформах;

- гарантия переносимости между платформами.

Наибольшим потенциалом для больших коммерческих организаций обладает язык C++ фирмы AT&T. Хотя он и не имеет пока большого количества средств сопровождения, некоторые коммерческие организации уже работают над созданием сред развития языка, а другие разрабатывают дополнительные инструменты и библиотеки классов. Кроме того, несколько компаний разработали языки и инструментальные средства, основанные на языке Си. В таблице C2.3 подводятся итоги доступных продуктов, основанных на Си.

 

Таблица С2.3 Продавцы и продукты языков, основанных на Си

 

Продукт Платформа Продавец
  Трансляторы C++  
Advantage C++ IBM PC под MS-DOS, Xenix, Unix Lifeboat
Designer C++ Macintosh II Oasys
  IBM PC под MS-DOS, OS/2  
  IBM RT  
  PC 80386 под Unix, Xenix  
  HP 9000/300 и 9000/800  
  NEC Astra  
  AT&T 3b2  
  DEC Vax под VMS и Ultrix  
  Sun-3, Sun-4  
Glockenspiel C++ IBM PC под MS-DOS, OS/2        Glockenspiel
  386/ix и Xenix  
  AT&T 3b2 под Sys V.2  
  HP 9000/300  
  Sun-3, Sun/386i  
  IBM RT под Sys V.2  
  Apollo  
  DEC Vax под Ultrix и VMS  
Guidelines C++ IBM PC под MS-DOS Guidelines
  Компиляторы С ++  
Oregon C++ Sun-3 Oregon
  DEC Vax под Ultrix  
  PC 386 под Xenix  
Zortech C++ IBM PC под MS-DOS Zortech

Другие продукты, основанные на языке Си

C-talk       IBM-PC под MS-DOS CNS   Macintosh   Complete C IBM PC под MS-DOS, OS/2, Unix  Complete Computer                                                 Corporation Objective C  Sun Stepstone   DEC Vax     Apollo     HP 9000 series 200/300  

       

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.

 

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, основанной на оконном интерфейсе. Существуют средства редактирования файлов и просмотра классов и методов.

Complete C

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

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

 

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

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

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 вводит ряд новых средств:

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

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

средство rename для поддержки множественного наследования разрешением конфликтов имен в случае, когда у класса более одного родителя;

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

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

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

Среда

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

 

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

 

2.6.1. ACTOR

 

Actor - это объектно-ориентированные язык и среда, основанные на Паскале и работающие под Microsoft Windows. Он соединяет систему управления динамической памятью и автоматическую сборку мусора. Actor был создан группой Whitewater Group. Он используется для создания отдельных прикладных задач для Windows, которые можно скомпоновать с существующими программами на Microsoft C.

 

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   да нет нет стат. нет нет

 

* множественное наследование в стадии разработки

 

MODULA-2

 

Modula-2, разработанная Н. Виртом, является прямым потомком языков Algol 60 и Pascal, и привлекает многих, обученных на традиции этих языков. Ее ключевое средство - принцип скрытия информации, заключающийся в отделении спецификации модуля от его реализации. Абстрактные типы данных могут быть определены как закрытые типы. Спецификация типа содержится в модуле с определением, который описывает тип данных и процедуры для доступа к нему. Программы, выполняющие эти процедуры, содержатся в модуле реализации. Как и в Аде, такое разделение служит в качестве механизма инкапсуляции. Однако Modula-2 более ограничивает, чем Ада, не разрешая ни переопределение, ни обобщение операций.

Появилось несколько статей, показывающих, как Modula-2 может быть использована для разработки объектно-ориентированных систем. Это требует существенной нагрузки на программиста, поскольку язык не поддерживает объектно-ориентированные средства, описанные в главе B1. Необходимость пользователей языков Algol-Pascal-Modula в средствах ООП могут быть удовлетворены, например, реализацией языка Modula-3, объектно-ориентированного потомка Modula-2, разработанного группой исследовательского центра фирм DEC и Olivetti в Калифорнии [Cardelli et al 1988].

 

ЗАКЛЮЧЕНИЕ

 

Ведущие продавцы ПО для персоналок являются активными пользователями объектно-ориентированных языков и средств. Microsoft считается создателем объектно-ориентированных иерархий классов для Word и Excel.

Позиция Microsoft стала ясна после нескольких публикаций и интервью. Компания поддержала объектно-ориентированные расширения существующих языков, включая Basic. Bill Gates также поразил всех заявлением о том, что он не видит будущего за введением новых объектно-ориентированных языков после 1988 г., но ОС будущего должны иметь объектно-ориентированную поддержку: "Вы не поднимите всю глубину прикладных задач, работая только с ними, до тех пор, пока мы не сделаем это внутри ОС" [Byte, 1988]. Это будет достигнуто дополнительными возможностями OS/2.

Практически все объектно-ориентированные языки программирования являются развивающимися языками, их стандарты регулярно уточняются и расширяются. Следствием этого развития являются неизбежные различия во входных языках компиляторов различных систем программирования. Наиболее распространенными в настоящее время являются системы программирования Microsoft C++, Microsoft Visual C++ и системы программирования фирмы Borland International.

Список литературы

 


Поделиться с друзьями:

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.079 с.