Контакты

Код программы на языках программирования расширение. Современный язык программирования высокого уровня: примеры и сравнения. Список языков программирования

В пятидесятые годы двадцатого века с появлением компьютеров на электронных лампах началось бурное развитие языков программирования. Компьютеры, стоившие в то время значительно дороже, чем разработка любой программы, требовали высокоэффективного кода. Такой код разрабатывался вручную на языке Ассемблер . В середине 50-х годов под руководством Джона Бэкуса для фирмы IBM был разработан алгоритмический язык программирования FORTRAN . Несмотря на то, что уже существовали разработки языков, выполняющие преобразование арифметических выражений в машинный код, создание языка FORTRAN (FORmula TRANslator), предоставляющего возможность записи алгоритма вычислений с использованием условных операторов и операторов ввода/вывода, стало точкой отсчета эры алгоритмических языков программирования.

К языку FORTRAN предъявлялись требования cоздания высокоэффективного кода. Поэтому многие конструкции языка первоначально разрабатывались с учетом архитектуры IBM 407. Успех разработки этого языка привел к тому, что производители других вычислительных систем стали создавать свои версии трансляторов. С целью некоторой возможной на тот момент унификации языка язык FORTRAN IV, разработанный в 1966 году, стал первым стандартом, именуемым FORTRAN 66.

Как альтернатива языку FORTRAN , первоначально ориентированному на архитектуру IBM , под руководством Питера Наура в конце 50-х годов был разработан язык ALGOL ( ALGOrithmic Language ). Основной целью, преследуемой разработчиками этого языка, была независимость от конкретной архитектуры вычислительной системы. Кроме того, создатели языка ALGOL стремились разработать язык, удобный для описания алгоритмов и применяющий систему обозначений, близкую к той, что принята в математике.

Языки FORTRAN и ALGOL были первыми языками, ориентированными на программирование вычислений.

Язык PL 1, первые версии которого появились в начале 60-х годов, был первоначально ориентирован на IBM 360 и расширял возможности языка FORTRAN некоторыми средствами языка COBOL , разработанного в эти же годы. Несмотря на определенную популярность языка PL/I у программистов, работавших на компьютерах IBM и машинах серии ЕС, в настоящее время он представляет чисто теоретический интерес.

В конце 60-х годов под руководством Найарда и Дала был разработан язык Simula-67, использующий концепцию пользовательских типов данных. Фактически это первый язык, применяющий понятие классов.

В середине 70-х годов Вирт предложил язык Pascal , который сразу стал широко использоваться. В это же время по инициативе Министерства обороны США началась работа по созданию языка высокого уровня, получившего название Ada – в честь Ады Лавлейс, программистки и дочери лорда Байрона. Создание языка началось с определения требований и выработки спецификаций. Над проектом работали четыре независимые группы, но все они использовали как основу язык Pascal . В начале 80-х годов был разработан первый промышленный компилятор языка Ada .

Универсальный язык программирования С был разработан в середине 70-х годов Денисом Ритчи и Кеном Томпсоном. Этот язык стал популярным языком системного программирования и в свое время использовался для написания ядра операционной системы UNIX . Стандарт языка С начал разрабатываться рабочей группой института стандартов ANSI в 1982 году. Международный стандарт языка С принят в 1990 году. Язык С лег в основу разработки языков программирования C++ и Java .

Наряду с алгоритмическими языками параллельно развивались и языки, предназначаемые для обработки деловой информации, а также языки искусственного интеллекта. К первым относится язык COBOL (COmmon Business Oriented Language ), а ко вторым – языки LISP ( LISt Processing ) и Prolog. Язык LISP , разработанный в 60-х годах под руководством Дж. Маккарти, был первым функциональным языком обработки списков, который нашел широкое применение в теории игр.

С появлением персональных компьютеров языки стали составными частями интегрированных сред разработки. Появились языки, применяемые в различных офисных программах, например VBA ( Visual Basic for Application ).

В 90-х годах с распространением сети Интернет расширяется возможность распределенной обработки данных, что отражается и на развитии языков программирования. Появляются языки, ориентированные на создание серверных приложений, такие как Java , Perl и PHP , языки описания документов – HTML и XML . Традиционные языки программирования С++ и Pascal также претерпевают изменения: под языком программирования начинает пониматься не только функциональность самого языка, а также библиотеки классов, предоставляемые средой программирования. Акцент со спецификации самих языков программирования переносится на стандартизацию механизмов взаимодействия распределенных приложений. Появляются новые технологии – COM и CORBA , специфицирующие взаимодействие распределенных объектов.

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

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

  • научные вычисления (языки C++, FORTRAN, Java);
  • системное программирование (языки C++, Java);
  • обработка информации (языки C++, COBOL, Java);
  • искусственный интеллект (LISP, Prolog);
  • издательская деятельность (Postscript, TeX);
  • удаленная обработка информации (Perl, PHP, Java, C++);
  • описание документов (HTML, XML).

С течением времени одни языки развивались, приобретали новые черты и остались востребованы, другие утратили свою актуальность и сегодня представляют в лучшем случае чисто теоретический интерес. В значительной степени это связано с такими факторами, как:

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

Написание большинства современных компьютерных программ осуществляется при задействовании языков высокого уровня. Примечательно, что многие из них были разработаны еще в 60 и 70-х годах, но актуальны до сих пор. Какие еще факты о высокоуровневых языках мы можем отметить? Каковы наиболее распространенные разновидности соответствующих решений?

Сущность высокоуровневых языков написания программ

Язык программирования высокого уровня — инструмент, относящийся к категории машинно-независимых. Что это означает? Дело в том, что языки программирования делятся на несколько категорий.

Есть машинный код: набор алгоритмов, что предназначены для управления пользователем непосредственно аппаратными элементами компьютера. Их сущность будет полностью машинно-зависимой: для конкретных типов ПК подойдут только определенные алгоритмы.

Есть языки ассемблера. По сути дела, они являются надстройкой над теми, что предназначены для низкоуровневого управления аппаратными компонентами ПК посредством машинного кода. Но по многим признакам языки ассемблера также принято относить к машинно-зависимым. Как правило, они адаптированы к конкретной разновидности аппаратного компонента ПК. Их основная задача — упростить пользователю управление компьютером посредством соответствующих низкоуровневых коммуникаций.

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

Трансляторы

Важнейшие элементы, что входят в языки программирования высокого уровня, — трансляторы. Их функция может быть разной. В числе ключевых областей применения трансляторов — «перевод» команд, формируемых на языке программирования высокого уровня, в машинный код, понятный конкретному аппаратному компоненту ПК, например, процессору. Трансляторы, выполняющие данную функцию, именуются также компиляторами. Есть другая разновидность соответствующих компонентов — интерпретаторы. Они предназначены, в свою очередь, для «перевода» высокоуровневых команд в те, что понятны операционной системе или какой-либо программе.

Классификация высокоуровневых языков

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

Процедурно-ориентированные (задействуются в качестве инструмента при обработке информации на любом этапе вычислений);

Проблемно-ориентированные (используются как средство решения отраслевых и прикладных задач, формируемых при расширении областей применения ПК);

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

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

Процедурно-ориентированные языки

К таковым можно отнести Фортран. Он считается первым языком программирования высокого уровня, созданным для широкого применения. Характеризуется простой структурой. К процедурно-ориентированным языкам также относится Бейсик. Считается одним из самых часто используемых при обучении программированию. Пример другого процедурно-ориентированного языка — СИ. Изначально он создавался для ОС UNIX. На его основе впоследствии был создан язык C++, дополненный инструментами объектно-ориентированного программирования. Еще один язык, относящийся к рассматриваемой категории — Паскаль. Часто также задействуется при обучении программированию. Возможности данного языка позволяют его использовать как очень мощный инструмент разработки профессиональных видов ПО.

Проблемно-ориентированные языки

К таковым можно отнести Лисп, Пролог. Первый язык был разработан в 1962 году — спустя несколько лет после создания Фортрана. Рассматривается, таким образом, как второй в истории. Активно задействовался в качестве инструмента работы программистов со строками символов. На практике Лисп использовался в системах, классифицируемых как экспертные, а также те, что предназначались для аналитических вычислений. Пролог нашел широкое применение в области логического программирования. На практике чаще всего задействуется в управлении алгоритмами искусственного интеллекта в соответствующих системах.

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

Изучим теперь примеры языков программирования высокого уровня, которые относятся к категории объектно-ориентированных. В числе таковых — Visual Basic, Delphi, Visual Fortran, отмеченный выше C++, а также Prolog ++. Фактически все они в своей основе содержат процедурно-ориентированные языки. Однако предполагается существенное их дополнение визуальными элементами управления с целью последующего освоения необходимых алгоритмов разработчиками, привыкшими к другим инструментам. Так, первый язык программирования высокого уровня — Фортран — может быть в оперативные сроки изучен IT-специалистами посредством возможностей Visual Fortran. Аналогичным методом можно быстро освоить Бейсик или Пролог.

Осуществляется, в свою очередь, при использовании Delphi программирование на языке высокого уровня Object Pascal. Существует большое количество иных сред разработки ПО, классифицируемых как объектно-ориентированный язык. Данная сфера технологий разработки ПО активно развивается.

Фортран и Лисп — первый и второй высокоуровневые языки

Изучим подробнее то, как появился первый язык программирования высокого уровня — Фортран, а также Лисп, считающийся вторым. В 1954 году разработчики из компании IBM, возглавляемые Джоном Бэкусом, создали язык, посредством которого программисты получили возможность значительно облегчить взаимодействие с ПК, которое до того момента осуществлялось посредством машинных команд либо ассемблера. Он получил название Fortran и вскоре стал известен и в СССР под русифицированным наименованием. Фортран стал популярным инструментом для научных вычислений.

Основным революционным элементом, предложенным специалистами IBM сообществу, стал, собственно, тот самый компилятор, призванный быть альтернативой ассемблеру. В первые годы практики написания программ при использовании Фортран многие разработчики считали компилятор не вполне удачным решением, прежде всего, с точки зрения трудозатрат. Многие машинные коды, действительно, составлялись проще, чем при задействовании транслятора. Однако по мере стремительного увеличения производительности компьютеров программисты начинали осознавать, что без использования компилятора эффективное ПО, которое будет полностью задействовать вычислительные мощности ПК, создавать крайне проблематично. Так, начинания разработчиков из IBM получили дальнейшее развитие. Основные синтаксические конструкции языка программирования высокого уровня Фортран во многих случаях стали задейстоваться в качестве базовых при создании новых решений.

Примером достижения практических результатов в области развития концепций, заложенных в Фортран, можно считать создание Лисп. Данный язык был разработан в 1958 году, однако, широкую известность он приобрел несколько позже — в 1960-м. Лисп был разработан Джоном Маккарти и опубликован в одном из популярных журналов для IT-специалистов. Основное предназначение рассматриваемого языка — обработка списков. Лисп стал популярен в среде разработчиков систем искусственного интеллекта. На его основе были созданы такие языки, как Planner, Scheme, а также Common Lisp. Также Лисп оказал значительное влияние на многие современные инструменты разработки ПО. Структура языков программирования высокого уровня, популярных сегодня, в значительной степени базируется на алгоритмах Фортран и Лисп.

Интересно будет, однако, рассмотреть иные подходы к классификации рассматриваемых инструментов разработки средств ПО.

Универсальные высокоуровневые языки

Так, современные эксперты выделяют универсальные высокоуровневые языки. К ним относятся, в частности, те, что были разработаны в 60-е годы. Ключевые их характеристики:

Ориентация на широкий спектр задач (прежде всего, относящихся к вычислительным);

Большое количество языковых конструкций и алгоритмов;

Значимость не только для своего времени, но и для современного этапа развития компьютерной техники;

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

Универсальные языки — основополагающие в соответствующей отрасли IT-разработки. Можно отметить, что до сих пор они не имеют прямых аналогов в части внутренней структуры. Собственно, это во многом объясняет актуальность задействования соответствующих языков в современных объектно ориентированных интерфейсах. Также общее в отмеченных языках — тип данных. Этот фактор в значительной степени предопределяет их универсальность. В числе наиболее примечательных свойств языков, относящихся к категории универсальных — преемственность. Так, исторически более поздние языки, как правило, базировались на концепциях предшественников.

Уникальные языки

Некоторые IT-эксперты выделяют в самостоятельную категорию «уникальные языки». В числе таковых: APL, Cobol, Forth, SETL, а также CLU. Какова их специфика?

Важнейший аспект APL — задействование массивов (векторов и матриц) в качестве ключевого структурного типа. Специфика языка Cobol — в ориентированности на коммерческую сферу. Так, его целесообразно задействовать при решении задач, связанных со стандартизированным форматом представления результатов. Язык Forth характеризуется использованием постфиксной записи программ, а также задействованием стековой нотации. В языке SETL применяются совокупности значений в качестве одного из ключевых типов данных. Языком программирования высокого уровня является также CLU. Его основная особенность — задействование концепции работы с абстрактными типами данных. Многие IT-специалисты видят логичным появление новых решений, базирующихся на уникальных языках — таких как, например, Object-Oriented Cobol.

Средства параллельного программирования

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

Сопрограмм;

Разветвлений;

Объединений;

Параллельных скобок;

Алгоритмов работы с процессами.

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

Семафоры;

Мониторы;

- «рандеву»;

Критические участки;

Дистанционный вызов процедур;

Транзакции, относящиеся к категории атомарных.

К языкам рассматриваемого типа относятся Modula-2, BLISS, Concurrent Pascal, DP, Argus.

Семейство языков C

Выше мы рассмотрели в качестве примера языка высокоуровневого программирования такое решение, как C. По сути дела, оно формирует целое семейство. Языки, принадлежащие к нему, являются частными конструкциями C. Так, его дополнение различными объектно-ориентированными компонентами привело к разработке C++. После существенной фильтрации ряда конструкций C появился язык Java. Можно отметить, что Java создавался во многом под влиянием концепций проекта Oberon, которым руководит Никлаус Вирт, создатель языка Паскаль. Относится ли к высокоуровневым JavaScript? Безусловно, да, несмотря на узость применения — в качестве инструмента разработки веб-страниц. Но к языкам программирования высокого уровня не относятся, в частности, HTML, XML и SGML. Они классифицируются как инструменты разметки гипертекста.

Семейство языков Pascal

Языки программирования высокого уровня Pascal также образуют отдельное семейство. На базе Паскаль был, собственно, создан Oberon, классифицируемый как язык объектно-ориентированного типа. Ключевая особенность Oberon — в возможности обеспечения безопасности типов. Не считая Oberon, к языкам семейства Pascal можно отнести Modula-2, а также Component Pascal.

Семейство языков Ada

Основополагающий в соответствующей категории языков — заказанный под нужды Министерства обороны США Ada. Он был создан в конце 70-х — начале 80-х годов. Характеризуется большим количеством функций, возможностей, универсальностью. Семейство языков Ada включает такие решения, как Cedar, Modula 3.

Семейство языков Simula

Язык Simula распространен в отраслях программирования, связанных с имитационным моделированием. Специфика соответствующих решений — в задействовании специфического ядра. Его использование позволяет применять различные расширения, адаптированные к тем или иным сферам применения. На основе Simula были созданы объектно-ориентированный язык Smalltalk, а также BETA, характеризующийся способностью комбинировать в рамках единой абстракции алгоритмы, отражающие работу с данными, процедурами, а также управление. Объекты BETA могут рассматриваться в различном контексте, например, в качестве переменных, функций или параллельных систем.

Курсовая работа

на тему: “Языки программирования”


Введение

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

1.1 История развития языков программирования

2. Обзор современных языков программирования

2.1 Си его разновидности

2.2 Паскаль

2.3 Фортран

2.4 Бейсик

Выводы и предложения

Список использованной литературы

Введение

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

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

Объектом исследования послужили языки программирования и история развития языков программирования.

Целью курсовой работы является изучение классификации языков программирования и их развития.

Цели исследования:

1. Просмотреть общее сведения и уровни языков программирования.

2. Просмотреть историю развития языков программирования.

3. Сделать обзор современных языков программирования.

Задачи исследования:

1. Ознакомления с языками программирования.

2. Рассмотрение истории развития языков программирования.

3. Обзор современных языков программирования.

В первой главе рассматриваются общие сведения о языках программирования и история развития их.

Во второй главе рассматривается обзор современных языков программирования.

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

Применяемые технические средства: ПЭВМ: Core 2 DuoE6600 2.4 ГГц 2 x 4 Мб L2; 2 x 1024 Мб DDR3-1333МГц; NVIDIAGeForce 8600 GT 512 Мб; HDDHitachiDeskstar 7K1000 1 Тб; Принтер: Canon LBP3010.

Программные средства ОС WindowsXPProfessionalSP3. Данная курсовая работа выполнена в программе MicrosoftWord 2003, а также были использованы другие программы: Microsoft PowerPoint, Nero StartSmart.

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

Язык программирования - это система обозначений, служащая для точного описания программ или алгоритмов для ЭВМ. Языки программирования являются искусственными языками. От естественных языков они отличаются ограниченным числом “слов” и очень строгими правилами записи команд (операторов). Поэтому при применении их по назначению они не допускают свободного толкования выражений, характерного для естественного языка.

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

Основные требования, предъявляемые к языкам программирования:

наглядность - использование в языке по возможности уже существующих символов, хорошо известных и понятных как программистам, так и пользователям ЭВМ;

единство - использование одних и тех же символов для обозначения одних и тех же или родственных понятий в разных частях алгоритма. Количество этих символов должно быть по возможности минимальным;

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

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

однозначность - недвусмысленность записи любого алгоритма. Отсутствие ее могло бы привести к неправильным ответам при решении задач .

В настоящее время в мире существует несколько сотен реально используемых языков программирования. Для каждого есть своя область применения.

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

По этому критерию можно выделить следующие уровни языков программирования:

· машинные;

· машинно-оpиентиpованные (ассемблеры);

· машинно-независимые (языки высокого уровня).

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

Разные типы процессоров имеют разные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня. В данном случае “низкий уровень” не значит “плохой”. Имеется в виду, что операторы языка близки к машинному коду и ориентированы на конкретные команды процессора.

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

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

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

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

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

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

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

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

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

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

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

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

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

Прежде чем вы захотите изучать какой-нибудь язык программирования надо знать немного об их истории и где они применяются.

Я представляю вам краткий обзор 25 известных языков программирования. Начиная с самого известного до менее популярного. Статья сделана для новичков в сфере программирования. Вы можете почитать о каждом языке и выбрать тот который вам больше понравиться для изучения.

Прежде чем приступить к изучению языков программирования рекомендую вам изучить курс по .

1. JavaScript

Прототипно-ориентированный сценарный язык программирования. JavaScript изначально создавался для того, чтобы сделать web-странички «живыми». В браузере они подключаются напрямую к HTML и, как только загружается страничка – тут же выполняются.

Когда создавался язык JavaScript, у него изначально было другое название: «LiveScript». Но тогда был очень популярен язык Java, и маркетологи решили, что схожее название сделает новый язык более популярным.

Планировалось, что JavaScript будет эдаким «младшим братом» Java. Однако, история распорядилась по-своему, JavaScript сильно вырос, и сейчас это совершенно независимый язык, со своей спецификацией и к Java не имеет никакого отношения.

2. Java


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

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

Изначально язык назывался Oak («Дуб») разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения.

3. PHP


Является распространенным интерпретируемым языком общего назначения с открытым исходным кодом (скриптовый язык). PHP создавался специально для ведения web-разработок и код на нем может внедряться непосредственно в HTML-код. Синтаксис языка берет начало из C, Java и Perl, и является легким для изучения.

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

4. Python

Высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика, читаемости кода и на разработку веб приложений. Синтаксис ядра Python минималистичен. Код в Python организовывается в функции и классы, которые могут объединяться в модули.

5. C#


Объектно-ориентированный язык программирования. Разработан в 1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java.

Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов, делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

6. С++


Компилируемый, статически типизированный язык программирования общего назначения. Является одним из самых распространенных языков в мире. Google Chrome, Mozilla Firefox, Winamp и линейка продуктов Adobe были разработаны с помощью С++. Кроме того, некоторые современные игры и операционные системы были разработаны на С++ из-за быстрого процессинга и компиляции.

7. Ruby


Простой и читаемый язык программирования, ориентированный на разработку веб приложений. Разработанный Юкихиро Мацумто в 1995 году. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора.

Основное назначение Ruby - создание простых и в то же время понятных программ, где важна не скорость работы программы, а малое время разработки, понятность и простота синтаксиса. Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист.

8. CSS


Cascading Style Sheets (каскадные таблицы стилей) формальный язык описания внешнего вида документа, написанного с использованием языка разметки.
Преимущественно используется как средство описания, оформления внешнего вида веб-страниц, написанных с помощью языков разметки HTML и XHTML, но может также применяться к любым XML-документам.

9. C


Компилируемый статически типизированный язык программирования общего назначения. Язык Си был разработан Деннисом Ритчи в 1972 году в Bell Labs. Он является предшественником таких языков программирования как С++, Java, C#, JavaScript и Perl. По этой причине изучение этого языка ведет к понимаю и других языков. Язык С используется для разработки низкоуровневых приложений, так как считается ближе всего к аппаратному.

10. Objective-C


Компилируемый объектно-ориентированный язык программирования, используемый корпорацией Apple, построенный на основе языка Си и парадигм Smalltalk. Язык Objective-C является надмножеством языка Си, поэтому Си-код полностью понятен компилятору Objective-C. Язык используется в первую очередь для Mac OS X (Cocoa) и GNUstep - реализаций объектно-ориентированного интерфейса OpenStep. Также язык используется для iOS (Cocoa Touch).

11. Shell

Он не столько язык, сколько интерпретатор команд (командный язык). Его скрипты используются для автоматизации обновления программного обеспечения. Содержит стандартные конструкции для циклов, ветвления, объявления функций. В семействе операционных систем, совместимых с ОС UNIX, язык SHELL используется в качестве стандартного языка управления заданиями.

12. R


Язык программирования для статистической обработки данных и работы с графикой, а также свободная программная среда вычислений с открытым исходным кодом в рамках проекта GNU. R широко используется как статистическое программное обеспечение для анализа данных и фактически стал стандартом для статистических программ. В R используется интерфейс командной строки.

13. Perl


Высокоуровневый интерпретируемый динамический язык программирования общего назначения. Название языка представляет собой аббревиатуру, которая расшифровывается как Practical Extraction and Report Language - «практический язык для извлечения данных и составления отчётов». Основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе работа с регулярными выражениями, встроенная в синтаксис. На данный момент он используется для выполнения широкого спектра задач, включая системное администрирование, веб-разработку, сетевое программирование, игры, биоинформатику, разработку графических пользовательских интерфейсов.

14. Scala


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

15. Go


Компилируемый многопоточный язык программирования, разработанный компанией Google. Язык Go разрабатывался как язык системного программирования для создания высокоэффективных программ, работающих на современных распределённых системах и многоядерных процессорах. Он может рассматриваться как попытка создать замену языку Си. При разработке уделялось особое внимание обеспечению высокоэффективной компиляции. Программы на Go компилируются в объектный код и не требуют для исполнения виртуальной машины.

16. SQL

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

17. Haskell


Cтандартизированный чистый функциональный язык программирования общего назначения. Является одним из самых распространённых языков программирования с поддержкой отложенных вычислений. Отличительная черта языка - серьёзное отношение к типизации. Haskell превосходный язык для обучения и для экспериментов с сложными функциональными типами данных.

18. Swift


Открытый мультипарадигмальный компилируемый язык программирования общего назначения. Создан компанией Apple в первую очередь для разработчиков iOS и OS X. Swift работает с фреймворками Cocoa и Cocoa Touch и совместим с основной кодовой базой Apple, написанной на Objective-C. Swift задумывался как более легкий для чтения и устойчивый к ошибкам программиста язык, нежели предшествовавший ему Objective-C. Swift заимствовал довольно многое из Objective-C, однако он определяется не указателями, а типами переменных, которые обрабатывает компилятор. По аналогичному принципу работают многие скриптовые языки.

19. Matlab


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

20. Visual Basic


Язык программирования, а также интегрированная среда разработки программного обеспечения, разрабатываемое корпорацией Microsoft. Язык Visual Basic унаследовал дух, стиль и синтаксис своего предка - языка BASIC, у которого есть немало диалектов. В то же время Visual Basic сочетает в себе процедуры и элементы объектно-ориентированных и компонентно-ориентированных языков программирования.

Visual Basic также является хорошим средством быстрой разработки RAD приложений баз данных для операционных систем семейства Microsoft Windows. Множество готовых компонентов, поставляемых вместе со средой, призваны помочь программисту сразу же начать разрабатывать бизнес-логику приложения, не отвлекая его внимание на написание кода запуска программы.

21. Delphi


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

На сегодняшний день, наряду с поддержкой разработки 32 и 64-разрядных программ для Windows, реализована возможность создавать приложения для Apple Mac OS X , а также для Google Android (непосредственно исполняемые на ARM-процессоре).

22. Groovy


Объектно-ориентированный язык программирования, разработанный для платформы Java как дополнение к языку Java с возможностями Python, Ruby и Smalltalk. Groovy использует Java-подобный синтаксис с динамической компиляцией в JVM байт-код и напрямую работает с другим Java кодом и библиотеками. Язык может использоваться в любом Java-проекте или как скриптовый язык.

23. Visual Basic .NET


Объектно-ориентированный язык программирования, который можно рассматривать как очередной виток эволюции Visual Basic, реализованный на платформе Microsoft .NET. VB.NET не имеет обратной совместимости с более ранней версией (Visual Basic 6.0). Развитие проектов старых версий (*.vbp) возможно только после предварительной конвертации их в формат VB.NET специальным мастером (Migration Wizard); однако, после конвертации требуется существенная ручная доработка текстов.

24. D

Мультипарадигмальный компилируемый язык программирования, созданный Уолтером Брайтом из компании Digital Mars. Изначально D был задуман как реинжиниринг языка C++, однако, несмотря на значительное влияние С++, не является его вариантом. Также язык испытал влияние концепций из языков программирования Python, Ruby, C#, Java, Eiffel.

25. Assembler


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

Язык ассемблера - система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде. Язык ассемблера позволяет программисту пользоваться алфавитными мнемоническими кодами операций, по своему усмотрению присваивать символические имена регистрам ЭВМ и памяти, а также задавать удобные для себя схемы адресации. Кроме того, он позволяет использовать различные системы счисления для представления числовых констант и даёт возможность помечать строки программы метками с символическими именами с тем, чтобы к ним можно было обращаться.

Я не стал брать все языки т.к. они не так сильно востребованы у профессиональных программистов. Моя задача выполнена, теперь Вам осталось выбрать подходящий язык и покорять его. Удачи Вам в ваших начинаниях.

1.1 Microsoft Visual Studio C++

Microsoft Visual Studio - линейка продуктов компании Майкрософт, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств.

Visual Studio включает один или несколько компонентов из следующих:

Visual Basic .NET, а до его появления - Visual Basic;

Visual C++;

Visual C#.

Многие варианты поставки также включают:

Microsoft SQL Server либо MSDE;

Visual Source Safe - файл-серверная система управления версиями;

В прошлом, в состав Visual Studio также входили продукты:

Visual InterDev;

Visual J++;

Visual J#;

Visual FoxPro.

Наиболее значимые версии пакета:

Visual Studio 97 - первая выпущенная версия Visual Studio, в ней впервые были собраны вместе различные средства разработки ПО. Она была выпущена в двух версиях Professional и Enterprise. Она включала в себя Visual Basic 5.0, Visual C++ 5.0, Visual J++ 1.1, Visual FoxPro 5.0, впервые появилась среда разработки ASP - Visual InterDev. Visual Studio 97 - была первой попыткой Microsoft создать единую среду для разработки на разных языках программирования: Visual C++, Visual J++, Visual InterDev, и MSDN использовали одну среду, называемую Developer Studio. Visual Basic и Visual FoxPro использовали отдельные среды для разработки.

Visual Studio 6.0 - выпущена в июне 1998 - последняя версия Visual Studio работающая на платформе Win9x. По-прежнему популярна среди программистов, использующих Visual Basic. Данная версия являлась основной средой разработки приложений под Windows от Microsoft, до появления платформы.NET.

Visual Studio .NET (кодовое имя Rainier; внутренняя версия 7.0) - выпущена в феврале 2002 (влючает.NET Framework 1.0). Service Pack 1 для Visual Studio .NET (2002) выпущен в марте 2005.

Visual Studio .NET 2003 (кодовое имя Everett; внутренняя версия 7.1) - выпущена в апреле 2003 (влючает.NET Framework 1.1). Service Pack 1 для Visual Studio .NET 2003 выпущен 13 сентября 2006.

Visual Studio 2005 (кодовое имя Whidbey; внутренняя версия 8.0) - выпущена в конце октября 2005 (включает.NET Framework 2.0). В начале ноября 2005 также вышла серия продуктов в редакции Express: Visual C++ 2005 Express, Visual Basic 2005 Express, Visual C# 2005 Express и др. 19 апреля 2006 редакция Express стала бесплатной. Service Pack 1 для VS2005 и всех Express-редакций выпущен 14 декабря 2006 года. Дополнительный патч для SP1, решающий проблему совместимости с Windows Vista выпущен 3 июня 2007.

Visual Studio 2008 (кодовое имя Orcas) - выпущена 19 ноября 2007, одновременно с.NET Framework 3.5. Нацелена на создание приложений для ОС Windows Vista (но поддерживает и XP), Office 2007 и веб-приложений. Включает в себя LINQ, новые версии языков C# и Visual Basic. В студию не вошёл Visual J#. С 28 октября 2008 года впервые доступна версия на русском языке.

Продукт-преемник Visual Studio 2008 имеет кодовое имя Hawaii. 29 сентября 2008 года появился анонс , представляющий некоторые новшества, которые появятся в Visual Studio 2010 и.NET Framework 4.0.

Разработчик приложений, решивший воспользоваться услугами Visual Studio.Net 7.0, получает в свое распоряжение достаточно много новых технологий и инструментов, которые позволяют ему быстро и эффективно создавать обычные Windows-приложения, которые теперь принято называть настольными - desktop applications, а также web-приложения и web-услуги (Web Services). Компания Microsoft добавила в арсенал программиста новый язык С# (произносится «Си шарп»), который, как обещают специалисты, способен в несколько раз ускорить цикл разработки сложных проектов.

Главной новостью, которая должна привлечь ваше внимание, является то, что Visual C++, Visual Basic и С# используют одну и ту же среду разработки IDE (Integrated Development Environment), что дает возможность создавать комплексные проекты с использованием разных языков (mixed-language solutions). Многоязыковая среда разработки.Net (.Net Framework) представляет собой сумму трех составляющих:

общая для рассмотренного набора языков библиотека времени исполнения (Common Language Runtime);

унифицированная библиотека классов разработчика (Unified Programming Classes);

модель разработки web-приложений (Active Server Pages.Net).

Первая составляющая - библиотека времени исполнения (Common Language Runtime, сокращенно CLR), функционирует как на этапе выполнения, так и на этапе разработки. Во время выполнения кода она следит за динамикой многопотоковых приложений, обеспечивает взаимосвязь процессов, поддерживает их безопасность, автоматизирует процедуры выделения и освобождения памяти. На этапе разработки CLR автоматизирует типовые задачи, решаемые программистом, значительно упрощая использование новых технологий. Особо отмечаются преимущества, получаемые при создании компонентов стандарта COM (Component Object Model, сокращенно COM - Модель многокомпонентных объектов).

Вторая составляющая (Unified Programming Classes) предоставляет разработчику унифицированную, объектно-ориентированную, расширяемую библиотеку классов, которая совместно с другими ресурсами является частью программируемого интерфейса приложений API (Application Programming Interface). Она объединяет элементы MFC (Microsoft Foundation Classes), WFC (Windows Foundation Classes) и часть API, используемую Visual Basic.

Третья составляющая (ASP.Net) представляет собой надстройку на.д классами, которая дает возможность пользоваться объектно-ориентированной технологией при разработке типовых элементов HTML-интерфейса. Фактически выполняемые на стороне сервера, эти элементы проецируют функции пользовательского интерфейса в виде HTML-кода. Однако при разработке сервера имеется возможность использовать мощный аппарат, предоставляемый объектной моделью программирования. Результат - резкое упрощение процесса построения web-приложений. В дополнение к этому ASP.Net поддерживает достаточно новую концепцию или модель разработки программ. Вы, наверное, слышали о ней, как о технологии «тонкого» клиента. Основная суть этой модели - предоставление кода пользователю не в виде инсталлируемого продукта, а в виде временной услуги (service).

Код, который создан на основе среды разработки.Net Framework, носит название управляемого кода {managed code) в отличие от обычного, неуправляемого кода (unmanaged code). В режиме.Net компиляторы рассмотренных языков производят метаданные (metadata), которые сопровождают сам код. Это означает, что они генерируют дополнительную информацию, описывающую типы данных, объекты и ссылки. Библиотека времени исполнения (Common Language Runtime) использует метаданные для поиска и загрузки объектов, запуска функций, передачи параметров, размещения объектов в памяти.

Важной функцией, которую выполняет библиотека времени исполнения, является автоматическое освобождение памяти, занимаемой объектами, которые более не используются. Это нововведение призвано повысить надежность как отдельных компонентов, так и всего разрабатываемого приложения. Данные, время жизни которых управляется таким образом, называются управляемыми данными (managed data). Если ваш код является управляемым (managed code), то вы можете пользоваться управляемыми данными, но можете и не использовать их. Более того, вы можете и не знать, являются ли ваши данные управляемыми.

Общая библиотека времени исполнения (CLR) упрощает создание приложений и их составляющих, которые разработаны на разных языках и настроены (target) на использование CLR. Эти модули могут быть интегрированы в одном проекте и взаимодействовать между собой так, как будто они были созданы на одном языке. Например, вы можете декларировать класс, а затем создать производный от него класс уже на другом языке. Можно и просто пользоваться методами класса в рамках модуля, написанного на другом языке. Такая интеграция стала возможной потому, что компиляторы и инструменты разных языков пользуются общей системой типов, определенной в CLR, а также новыми правилами игры, принятыми при ее разработке.

1.2 C++ Builder

Borland C++ Builder — выпущенное недавно компанией Borland средство быстрой разработки приложений, позволяющее создавать приложения на языке C++, используя при этом среду разработки и библиотеку компонентов Delphi. В настоящей статье рассматривается среда разработки C++ Builder и основные приемы, применяемые при проектировании пользовательского интерфейса.

C++ Builder представляет собой SDI-приложение, главное окно которого содержит настраиваемую инструментальную панель (слева) и палитру компонентов (справа). Помимо этого, по умолчанию при запуске C++ Builder появляются окно инспектора объектов (слева) и форма нового приложения (справа). Под окном формы приложения находится окно редактора кода.


Рис.1. Среда разработки C++ Builder

Формы являются основой приложений C++ Builder. Создание пользовательского интерфейса приложения заключается в добавлении в окно формы элементов объектов C++ Builder, называемых компонентами. Компоненты C++ Builder располагаются на палитре компонентов, выполненной в виде многостраничного блокнота. Важная особенность C++ Builder состоит в том, что он позволяет создавать собственные компоненты и настраивать палитру компонентов, а также создавать различные версии палитры компонентов для разных проектов.

Компоненты разделяются на видимые (визуальные) и невидимые (невизуальные). Визуальные компоненты появляются во время выполнения точно так же, как и во время проектирования. Примерами являются кнопки и редактируемые поля. Невизуальные компоненты появляются во время проектирования как пиктограммы на форме. Они никогда не видны во время выполнения, но обладают определенной функциональностью (например, обеспечивают доступ к данным, вызывают стандартные диалоги Windows 95 и др.)


Рис. 2. Пример использования видимых и невидимых компонентов

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

Каждый компонент C++ Builder имеет три разновидности характеристик: свойства, события и методы.

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

Свойства являются атрибутами компонента, определяющими его внешний вид и поведение. Многие свойства компонента в колонке свойств имеют значение, устанавливаемое по умолчанию (например, высота кнопок). Свойства компонента отображаются а странице свойств (Properties). Инспектор объектов отображает опубликованные (published) свойства компонентов. Помимо published-свойств, компоненты могут и чаще всего имеют общие (public), опубликованные свойства, которые доступны только во время выполнения приложения. Инспектор объектов используется для установки свойств во время проектирования. Список свойств располагается на странице свойств инспектора объектов. Можно определить свойства во время проектирования или написать код для видоизменения свойств компонента во время выполнения приложения.

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

1.3 Delphi

Delphi - среда разработки, использует язык программирования Delphi (начиная с 7 версии язык в среде именуется Delphi, ранее - Object Pascal), разработанный фирмой Borland и изначально реализованный в её пакете Borland Delphi, от которого и получил в 2003 году своё нынешнее название. Object Pascal по сути является наследником языка Pascal с объектно-ориентированными расширениями.

Delphi - это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi - строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.

Delphi — это комбинация нескольких важнейших технологий:

    высокопроизводительный компилятор в машинный код;

    – объектно-ориентированная модель компонент;

    – визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов;

    – масштабируемые средства для построения баз данных.

    Borland Delphi 8 Studio позволяет создавать самые различные программы: от простейших однооконных приложений до программ управления распределенными базами. В состав пакета включены разнообразные утилиты, обеспечивающие работу с базами данных, XML-документами, создание справочной системы, решение других задач. Отличительной особенностью седьмой версии является поддержка технологии.NET.

    Основной упор модели в Delphi делается на то,чтобы максимально производительно использовать код.. Это позволяет очень быстро разрабатывать приложения, так как уже существуют заранее подготовленные объекты. А так же вы можете создавать свои собственные объекты, без каких-либо ограничений. Язык Delphi - строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.

    В стандартную поставку Delphi входят основные объекты из 270 базовых классов. На этом языке очень удобно писать, как приложения к базам данных, так даже и игровые программы. Если принять во внимание и удобный интерфейс для создания графических оболочек, то можно с уверенностью заявить что язык Delphi – это очень доступный для понимания, но в то же время и очень мощный язык программирования.

    Первая версия полноценной среды разработки Delphi для.NET - Delphi 8. Она позволяла писать приложения только для.NET. В настоящее время, в Delphi 2006, можно писать приложения для.NET, используя стандартную библиотеку классов.NET, VCL для.NET. Среда также позволяет создавать.NET-приложения на C# и Win32-приложения на C++. Delphi 2006 содержит функции для написания обычных приложений с использованием библиотек VCL и CLX. Delphi 2006 поддерживает технологию MDA с помощью ECO (Enterprise Core Objects) версии 3.0.

    В марте 2006 года компания Borland приняла решение о прекращении дальнейшего совершенствования интегрированных сред разработки JBuilder, Delphi и C++ Builder по причине убыточности этого направления. В августе 2006 года Borland выпустил облегченные версию RAD Studio под именем Turbo: Turbo Delphi, Turbo Delphi for .NET, Turbo C#, Turbo C++. В марте 2008 года было объявлено о прекращении развития этой линейки продуктов.

    В марте 2007 года CodeGear порадовала пользователей обновленной линейкой продуктов Delphi 2007 for Win32 и выходом совершенно нового продукта Delphi 2007 for PHP. В июне 2007 года CodeGear представила свои планы на будущее, то есть опубликовала так называемый roadmap, с которым можно ознакомиться здесь

    25 августа 2008 года компания Embarcadero, новый хозяин CodeGear, опубликовала пресс-релиз на Delphi for Win32 2009. Версия принесла множество нововведений в язык, как-то:

    – полная поддержка Юникода по умолчанию во всех частях языка, VCL и RTL;

    – обобщённые типы, они же generics.

    – анонимные методы.

    Среди многих распространенных программных продуктов, сделанных на Delphi, можно найти:

    1.Продукция Borland: Borland Delphi, Borland C++ Builder, Borland JBuilder 1 и 2 версии.

    2.Администрирование/разработка баз данных: MySQL Tools (Administrator, Query Browser), IBExpert, TOAD

    3.Инженерное ПО: Altium Designer/Protel (проектирование электроники).

    4.Просмотрщики графики: FastStone Image Viewer, FuturixImager, Photofiltre.

    5.Видео и аудио проигрыватели: KMPlayer (видео- и аудиопроигрыватель), X-Player (аудиопроигрыватель).

    6.Доставка информации в Интернете: Skype (VoIP и IM), QIP, QIP Infium и R&Q, (ИМы), The Bat! и si.Mail (клиенты электронной почты), PopTray (средство для проверки почты), FeedDemon (просмотр RSS/Atom новостных групп), XanaNews (чтение новостных групп), Xnews (чтение новостных групп).

    7.Создание музыки: FL Studio (ранее FruityLoops).

    8.Разработка программного обеспечения: Dev-C++, Dev-PHP , Maguma Open Studio и Open Perl IDE (IDE), DUnit (юнит-тестирование), Jedi Code Format (форматирование программного кода), Game Maker (создание игр) Help & Manual (система авторинга справки), Inno Setup (движок для инсталляции).

    9.Веб-разработка: Macromedia HomeSite (HTML-редактор), TopStyle Pro (CSS-редактор), Macromedia Captivate (захват экрана), Quick Page 2008 (Среда разработки Web-сайтов).

    10.Веб-браузеры (оболочки для MSIE): Avant Browser, Netcaptor.

    11.Утилиты: Spybot - Search & Destroy, Ad-Aware (антишпионское ПО), jv16 PowerTools, FDK (многофункциональная утилита для оптимизации системы), Total Commander и Frigate (файловые менеджеры), DarkCrypt TC/GUI (программный комплекс для шифрования), ImageSpyer и StegoTC (программный стеганографический комплекс), Copernic Desktop Search, PowerArchiver и PeaZip (архиваторы), MCubix (интеллектуальный анализ данных), Download Master [менеджер закачек], ACProtect (программа для упаковки и защиты EXE-файлов).

    12.Текстовые редакторы: SynEdit, Bred2, KeyNote, cEdit Professional, Programmer’s Notepad, UniRed, gleditor.

    13.Редакторы двоичных файлов (HEX-редакторы): Hexapad

    14.Бухучёт и налогообложение: Intuit’s Lacerte Professional Tax Software, включая все подсистемы, такие как QuickBooks/EasyACCT Trial Balance Utility, Document Management System и Client Database Repair Utility.

    15.Программы для чтения и каталогизации электронного текста: DarkLib (каталогизатор и мультиформатный букридер), IxReader (букридер).

    2 Сравнительный анализ возможностей (преимущества) недостатки современных объектно-ориентированных языков и средств разработки на их основе

    2.1 Object Pascal

    Object Pascal - полностью объектно-ориентированный диалект языка Pascal, разработанный фирмой Apple Computer совместно с Никлаусом Виртом. В 1986 компания Borland добавила подобное расширение Паскаля в продукт Turbo Pascal for Macintosh; с выпуском Turbo Pascal 5.5 расширение стало доступно для DOS. Начиная с Delphi 7 Borland начала официально называть свой язык Delphi. Однако Object Pascal поддерживается и развивается другими разработчиками. Наиболее серьёзные реализации Object Pascal (помимо Delphi) - это TMT Pascal, Virtual Pascal и Free Pascal.

    Любая программа в Delphi состоит из файла проекта (файл с расширением dpr) и одного или нескольких модулей (файлы с расширениями pas). Каждый из таких файлов описывает программную единицу Object Pascal.

    В окне кода жирным шрифтом выделяются так называемые зарезервированные слова, а курсивом — комментарии (так же выделяются зарезервированные слова и комментарии в книге). Как видим, текст программы начинается зарезервированным словом program и заканчивается словом end с точкой за ним. Замечу, что сочетание end со следующей за ней точкой называется терминатором программной единицы: как только в тексте программы встретится такой терминатор, компилятор прекращает анализ программы и игнорирует оставшуюся часть текста.

    Зарезервированные слова играют важную роль в Object Pascal, придавая программе в целом свойство текста, написанного на почти естественном английском языке. Каждое зарезервированное слово (а их в Object Pascal несколько десятков) несет в себе условное сообщение для компилятора, который анализирует текст программы так же, как читаем его и мы: слева направо и сверху вниз.

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

    {$R *.RES}

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

    Поскольку речь зашла о комментариях, замечу, что в Object Pascal в качестве ограничителей комментария могут также использоваться пары символов (*, *) и //. Скобки (*…*) используются подобно фигурным скобкам т. е. комментарием считается находящийся в них фрагмент текста, а символы // указывают компилятору, что комментарий располагается за ними и продолжается до конца текущей строки:

    {Это комментарий}

    (*Это тоже комментарий*)

    //Все символы до конца этой строки составляют комментарий

    Слово Program со следующим за ним именем программы и точкой с запятой образуют заголовок программы. За заголовком следует раздел описаний, в котором программист (или Delphi) описывает используемые в программе идентификаторы. Идентификаторы обозначают элементы программы, такие как типы, переменные, процедуры, функции (об элементах программы мы поговорим чуть позже). Здесь же с помощью предложения, которое начинается зарезервированным словом uses (использовать) программист сообщает компилятору о тех фрагментах программы (модулях), которые необходимо рассматривать как неотъемлемые составные части программы и которые располагаются в других файлах. Строки

    uses

    Forms, Unit1 in ‘Unitl.pas’ {fmExample};

    указывают, что помимо файла проекта в программе должны использоваться модули Forms И Unit1. модуль Forms является стандартным (т. е. уже известным Delphi), а модуль Unit1 — новым, ранее неизвестным, и Delphi в этом случае указывает также имя файла с текстом модуля (in ‘uniti.pas’) и имя связанного с модулем файла описания формы {fmExample}.

    Собственно тело программы начинается со слова begin (начать) и ограничивается терминатором end с точкой. Тело состоит из нескольких операторов языка Object Pascal. В каждом операторе реализуется некоторое действие — изменение значения переменной, анализ результата вычисления, обращение к подпрограмме и т. п. В теле нашей программы — три исполняемых оператора:

    Application.Initialize;

    Application.CreateForm(TfmExample, fmExample);

    Application.Run;

    Каждый из них реализует обращение к одному из методов объекта Application

    Объектом называется специальным образом оформленный фрагмент программы, заключающий в себе данные и подпрограммы для их обработки. Данные называются полями объекта, а подпрограммы — его методами. Объект в целом предназначен для решения какой-либо конкретной задачи и воспринимается в программе как неделимое целое (иными словами, нельзя из объекта «выдернуть» отдельное поле или метод). Объекты играют чрезвычайно важную роль в современных языках программирования. Они придуманы для того, чтобы увеличить производительность труда программиста и одновременно повысить качество разрабатываемых им программ. Два главных свойства объекта — функциональность и неделимость — делают его самостоятельной или даже самодостаточной частью программы и позволяют легко переносить объект из одной программы в другую. Разработчики Delphi придумали для нас с вами сотни объектов, которые можно рассматривать как кирпичики, из которых программист строит многоэтажное здание программы. Такой принцип построения программ называется объектно-ориентированным программированием (ООП). В объекте Application собраны данные и подпрограммы, необходимые для нормального функционирования Windows-программы в целом. Delphi автоматически создает объект-программу Application для каждого нового проекта. Строка

    Application.Initialize;

    означает обращение к методу Initialize объекта Application. Прочитав эту строку, компилятор создаст код, который заставит процессор перейти к выполнению некоторого фрагмента программы, написанного для нас разработчиками Delphi. После выполнения этого фрагмента (программисты говорят: после выхода из подпрограммы) управление процессором перейдет к следующей строке программы, в которой вызывается метод CreateForm и т. д.

    Модули — это программные единицы, предназначенные для размещений фрагментов программ. С помощью содержащегося в них программного кода реализуется вся поведенческая сторона программы. Любой модуль имеет следующую структуру: заголовок секция интерфейсных объявлений секция реализации терминатор Заголовок открывается зарезервированным словом Unit за которым следует имя модуля и точка с запятой. Секция интерфейсных объявлений открывается зарезервированным словом Interface, a секция реализации — словом implementation. Терминатором модуля, как и терминатором программы, является end с точкой. Следующий фрагмент программы является синтаксически правильным вариантом модуля:

    unit Unit1;

    interface

    // Секция интерфейсных объявлений

    implementation

    // Секция реализации

    end.

    В секции интерфейсных объявлений описываются программные элементы (типы, классы, процедуры и функции), которые будут ‘видны’ другим программным модулям, а в секции реализации раскрывается механизм работы этих элементов. Разделение модуля на две секции обеспечивает удобный механизм обмена алгоритмами между отдельными частями одной программы. Он также реализует средство обмена программными разработками между отдельными программистами. Получив откомпилированный «посторонний» модуль, программист получает доступ только к его интерфейсной части, в которой, как уже говорилось, содержатся объявления элементов. Детали реализации объявленных процедур, функций, классов скрыты в секции реализации и недоступны другим модулям.

    Классы служат основным инструментом реализации мощных возможностей Delphi. Класс является образцом, по которому создаются объекты, и наоборот, объект — это экземпляр реализации класса. Образцы для создания элементов программы в Object Pascal называются типами, таким образом, класс TfmExamplel -это тип. Перед его объявлением стоит зарезервированное слово type (тип), извещающее компилятор о начале раздела описания типов.

    Стандартный класс TForm реализует все нужное для создания и функционирования пустого Windows-окна. Класс TfmExamplel порожден от этого класса, о чем свидетельствует строка

    TfmExample = class (TForm)

    в которой за зарезервированным словом class в скобках указывается имя родительского класса. Термин «порожден» означает, что класс TfmExample унаследовал все возможности родительского класса TForm и добавил к ним собственные в виде дополнительных компонентов, которые вставлены в форму fmExample. Перечень вставленных нами компонентов и составляет значительную часть описания класса.

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

    Объект fmExampie формально относится к элементам программы, которые называются переменными. Вот почему перед объявлением объекта стоит зарезервированное слово var (от англ. variables — переменные).

    Элементы программы — это минимальные неделимые ее части, еще несущие в себе определенную значимость для компилятора. К элементам относятся:

    зарезервированные слова;

    идентификаторы;

    типы;

    константы;

    переменные;

    метки;

    подпрограммы;

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

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

    Идентификаторы — это слова, которыми программист обозначает любой другой элемент программы, кроме зарезервированного слова, идентификатора или комментария. Идентификаторы в Object Pascal могут состоять из латинских букв, арабских цифр и знака подчеркивания. Никакие другие символы или специальные знаки не могут входить в идентификатор. Из этого простого правила следует, что идентификаторы не могут состоять из нескольких слов (нельзя использовать пробел) или включать в себя символы кириллицы (русского алфавита).

    Типы — это специальные конструкции языка, которые рассматриваются компилятором как образцы для создания других элементов программы, таких как переменные, константы и функции. Любой тип определяет две важные для компилятора вещи: объем памяти, выделяемый для размещения элемента (константы, переменной или результата, возвращаемого функцией), и набор допустимых действий, которые программист может совершать над элементами данного типа. Замечу, что любой определяемый программистом идентификатор должен быть описан в разделе описаний (перед началом исполняемых операторов). Это означает, что компилятор должен знать тот тип (образец), по которому создается определяемый идентификатором элемент.

    Константы определяют области памяти, которые не могут изменять своего значения в ходе работы программы. Как и любые другие элементы программы, константы могут иметь свои собственные имена. Объявлению имен констант должно предшествовать зарезервированное слово const (от англ. constants — константы). Например, можyj определить константы const

    Kbyte = 1024;

    Mbyte = Kbyte*Kbyte;

    Gbyte = 1024*Mbyte;

    чтобы вместо длинных чисел

    1048576 (1024*1024) и 1073741824

    (1024*1024*1024) писать, соответственно, Mbyte и Gbyte. Тип константы определяется способом ее записи и легко распознается компилятором в тексте программы, поэтому программист может не использовать именованные константы (т. е. не объявлять их в программе явно).

    Переменные связаны с изменяемыми областями памяти, т. е. с такими ее участками, содержимое которых будет меняться в ходе работы программы. В отличие от констант переменные всегда объявляются в программе. Для этого после идентификатора переменной ставится двоеточие и имя типа, по образу которого должна строиться переменная. Разделу объявления переменной (переменных) должно предшествовать слово var. Например:

    var

    inValue: Integer;

    byValue: Byte;

    Здесь идентификатор inValue объявляется как переменная типа integer, а идентификатор byValue — как переменная типа Byte. Стандартный (т. е. заранее определенный в Object Pascal) тип integer определяет четырехбайтный участок памяти, содержимое которого рассматривается как целое число в диапазоне от -2 147 483 648 до+2 147 483 647, а стандартный тип Byte — участок памяти длиной 1 байт, в котором размещается беззнаковое целое число в диапазоне от 0 до 255 4 . Все приводимые сведения относительно диапазона возможных значений и объема памяти стандартных типов относятся к Delphi 32. Для 16-разрядной версии 1 эти величины имеют другие значения, например, тип Integer в версии 1 занимает 2 банта и имеет диапазон значении от -32 768 до +32 767.

    Метки — это имена операторов программы. Метки используются очень редко и только для того, чтобы программист смог указать компилятору, какой оператор программы должен выполнятся следующим. Метки, как и переменные, всегда объявляются в программе. Разделу объявлений меток предшествует зарезервированное слово label (метка).

    Подпрограммы — это специальным образом оформленные фрагменты программы. Замечательной особенностью подпрограмм является их значительная независимость от остального текста программы. Говорят, что свойства подпрограммы локализуются в ее теле. Это означает, что, если программист что-либо изменит в подпрограмме, ему, как правило, не понадобится в связи с этим изменять что-либо вне подпрограммы. Таким образом, подпрограммы являются средством структурирования программ, т. е. расчленения программ на ряд во многом независимых фрагментов. Структурирование неизбежно для крупных программных проектов, поэтому подпрограммы используются в Delphi-программах очень часто.

    В Object Pascal есть два сорта подпрограмм: процедуры и функции. Функция отличается от процедуры только тем, что ее идентификатор можно наряду с константами и переменными использовать в выражениях, т. к. функция имеет выходной результат определенного типа. Если, например, определена функция

    Function MyFunction: Integer;

    и переменная var

    X: Integer;

    то возможен такой оператор присваивания:

    Х:= 2*MyFunction-l;

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

    Procedure MyProcedure;

    :

    X:= 2*MyProcedure-l; // Ошибка!

    2.2 С++

    C++ — расширение языка С — был разработан сотрудником научно-исследовательского центра AT&T Bell Laboratories (Нью-Джерси, США) Бьерном Строустропом в 1979 году. С++ содержит в себе все, что есть в С. Но, кроме того, он поддерживает объектно ориентированное программирование (Object Oriented Programming, OOP). Изначально С++ был создан для того, чтобы облегчить разработку больших программ. Объектно ориентированное программирование это новый подход к созданию программ.

    За исключением второстепенных деталей C++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, C++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.

    Ключевым понятием C++ является класс. Класс — это тип, определяемый пользователем. Классы обеспечивают скрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. C++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline- подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В C++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.

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

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

    extern double sqrt(double);

    extern instream cin;

    Самый обычный способ обеспечить согласованность исходных файлов — это поместить такие описания в отдельные файлы, называемые заголовочными (или хэдер) файлами, а затем включить, то есть скопировать, эти заголовочные файлы во все файлы, где нужны эти описания. Например, если описание sqrt хранится в заголовочном файле для стандартных математических функций math.h, и вы хотите извлечь квадратный корень из 4, можно написать:

    #include

    //…

    x = sqrt(4);

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

    В команде включения include имя файла, заключенное в угловые скобки, например, относится к файлу с этим именем в стандартном каталоге (часто это /usr/include/CC); на файлы, находящиеся в каких-либо других местах ссылаются с помощью имен, заключенных в двойные кавычки.

    Например:

    #include «math1.h»

    #include «/usr/bs/math2.h»

    включит math1.h из текущего пользовательского каталога, а math2.h из каталога /usr/bs.

    Здесь приводится очень маленький законченный пример программы, в котором строка определяется в одном файле, а ее печать производится в другом. Файл header.h определяет необходимые типы:

    // header.h

    extern char* prog_name;

    extern void f();

    В файле main.c находится главная программа:

    // main.c

    #include «header.h»

    char* prog_name = «хороший, но полный»;

    main()

    {

    f();

    }

    а файл f.c печатает строку:

    // f.c

    #include

    #include «header.h»

    void f()

    {

    cout << prog_name << «\n»;

    }

    Скомпилировать и запустить программу вы можете например так:

    $ CC main.c f.c -o silly

    $ silly

    хороший, но полный

    $

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

    Быть реализованным на традиционных ЭВМ;

    Выполняться в среде традиционных операционных систем;

    Быть конкурентоспособным с традиционными языками программирования по эффективности при выполнении программ;

    Подходить для большей части возможных приложений.

    Это означает, что должны быть включены средства для эффективных численных приложений (плавающая арифметика без накладных расходов, иначе Fortran окажется привлекательней). Должны быть включены возможности доступа к памяти (что необходимо для написания драйверов). Должны быть возможности обращения к функциям (call-обращения), согласованные с интерфейсами конкретных операционных систем. И, дополнительно, должны быть возможности обращения к функциям, написанным на других языках и наоборот, к функциям, написанным на объектно-ориентированных языках из других языков.

    В таблице 1 показаны достоинства и недостатки объектно-ориентированных языков.

    Таблица 1 – Достоинства и недостатки объектно-ориентированных языков

    Плюсы

    Минусы

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

    Необходимо понимать базовые концепции, такие как классы, наследование и динамическое связывание

    Данные и операции вместе образуют определенную сущность и они не «размазываются» по всей программе, как это нередко бывает в случае процедурного программирования

    Многоразовое использование требует от программиста познакомиться с большими библиотеками классов

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

    Проектирование классов - задача куда более сложная, чем их использование

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

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

    Дает возможность создавать расширяемые системы

    Неэффективность в смысле распределения памяти

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

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

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

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

    простота ПО делает его более гибким и снижает затраты на эксплуатацию.

    Наряду с этими явными преимуществами, использование объектно-ориентированных языков и сред программирования способствует пошаговой разработке ПО. Быстрое прототипирование интерфейсов позволяет тестировать ответы пользователя независимо от основного тела прикладной задачи. Значение такого подхода наиболее проявляется в проектах, прикладные задачи которых заданы нечетко или трудны для понимания.

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

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

    Например, в измерительной системе, разработанной в Combuston Engineering (Columbus, Ohio), группа датчиков отображается классом Sensor, задающим общие свойства всех датчиков. Подклассы задаются для каждого типа датчика системы, например, для оптических или инфракрасных. Они наследуют общие процедуры, применимые ко всем датчикам, и содержат дополнительные процедуры, применимые только к оптическим или инфракрасным датчикам.

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

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

    Гибкость объектно-ориентированных систем является неоспоримым преимуществом для пользователей в быстро меняющихся средах, например, в технологии программирования. Например, Computer Science Corporation использовал объектно-ориентированный язык Smalltalk для разработки продукта Design Generator. Компания отмечает, что благодаря использованию объектно-ориентированной технологии, разработчики программ имеют возможность быстро реагировать на новые течения рынка в условиях возрастающей конкуренции.

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

    В прошлом библиотеками подпрограмм пользовались разработчики ПО для решения стандартных задач типа математических вычислений. Объектно-ориентированные системы дают более широкий спектр многократного использования текстов программ. Один из первых пользователей, Cadre Technologies, подсчитал, что объем текстов программ для новой прикладной задачи уменьшается в отношении 5:1 в случае использования объектно-ориентированных программ.

    Библиотеки объектов также можно приобретать от независимых поставщиков. В настоящее время наиболее активно покупают такие библиотеки классов для создания пользовательских интерфейсов с пиктограммами. Разработка и написание таких интерфейсов с нуля — задача нелегкая. Компании типа Apple и Whitewater Group поставляют инструментарии для быстрого построения таких интерфейсов на основе нескольких базовых классов типа Window, Menu, ScrollBar и Icon. Пользователи могут использовать как эти классы, так и их подклассы, добавляющие в интерфейс, например, специальные пиктограммы.

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

    Известно, что затраты на сопровождение составляют до 80% стоимости жизненного цикла системы программирования. Разработчики больших сложных систем, часто сталкивающиеся с необходимостью их модификации, склоняются к использованию ООС как одному из способов снижения затрат на сопровождение и повышения надежности их продуктов. Например, Wild Leitz (Торонто, Канада) использовал объектно-ориентированных язык Objective-C для разработки географической информационной системы. Компания посчитала исходные тексты на этом языке более легкими в сопровождении, поскольку они короче, являются изолированными «вещами в себе», что снижает влияние изменения одного модуля на оставшуюся часть системы.

    Правильно разработанные программы должны не только удовлетворять своим функциональным требованиям, но и обладать такими свойствами, как:

    повторная используемость;

    расширяемость;

    устойчивость к неправильным данным;

    системность.

    Правильный объектно-ориентированный стиль программирования обеспечивает наличие этих свойств. Поясним это на примере свойства системности.

    Программа обладает свойством системности, если она применима в качестве обобщенного оператора при «крупноблочном программировании». Крупноблочное программирование — это систематическое использование ранее разработанных крупных программных единиц (таких, как классы, подсистемы, или модули) при разработке новых программных систем.

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

    Основное препятствие для объектно-ориентированных систем в настоящее время — это сопротивление технического и управленческого персонала. Такое сопротивление естественно с точки зрения несовершенства многих объектно-ориентированных продуктов на сегодняшнем рынке. Несовершенство проявляется на примере ряда проблем, свойственных большинству новых технологий:

    ограниченный доступ на ряде стандартных платформ;

    необходимость интеграции с существующими системами и базами данных;

    нехватка ПО для программирования широкомасштабных систем.

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

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

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

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

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

    Эта механика нуждается в надлежащей языковой поддержке, чтобы быть эффективной. Для абстракции данных достаточно только языковой поддержки; для объектно-ориентированного программирования требуются средства общесистемного программного окружения. Чтобы обладать свойствами языка общего назначения, язык должен позволять эффективно использовать традиционные аппаратные средства.


    Рис. 3. Упрощённая схема организации многомодульной системы работы с геометрическими объектами

    Многомодульная структура системы обладает следующими преимуществами.

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

    Возможность повторного использования кода. Модуль ГеометрическиеОбъекты можно включить в любое приложение, если там есть и ДемонстрационныеОкна – можно включить и Визуализацию.

    Возможность поэтапной реализации программ. Так, первый релиз может включать ГеометрическиеОбъекты, ДемонстрационныеОкна и Визуализацию, во втором добавятся Вычисления и т.д..

    Возможность применения конвейерного метода производства, «распараллеливания» процесса разработки ПО.

    Есть несколько причин, не позволяющих считать С++ динамическим языком программирования.

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

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

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

    При разборе выражения p->f() компилятор «должен быть уверен», что объект, на который ссылается указатель p, действительно содержит метод f(). Даже шаблоны (template) не всегда помогают создать код, обрабатывающий разнотипные объекты: на этапе компиляции и сборки необходимо знать, какие из них требуется инсталлировать, какой применяется в каждом конкретном случае. Попробуйте-ка выполнить задание из листинга 1, не меняя классов и не используя конструкции if-then-else + dynamic_cast.

    /*

    Листинг 1. Статический контроль типов ограничивает возможности использования полиморфизма

    */

    class baseclass {};

    class A:public baseclass

    {

    public:

    A();

    // класс A содержит метод void f()

    virtual void f();

    };

    class B:public baseclass

    {

    public:

    B();

    // класс B не содержит метод void f()

    };

    class C:public baseclass {…};

    /*

    Требуется написать

    (не меняя вышеописанных классов и не используя if-then-else + dynamic_cast):

    */

    bool CallF(baseclass *p)

    {

    /*

    если определено p->f(), вызвать эту функцию и вернуть true,

    иначе – вернуть false

    */

    }

    C++ предлагает три способа реализовать функцию CallF. Первый (наиболее употребимый) – добавить в baseclass метод bool f(), в тех подклассах, где он имеет смысл – выполнять необходимые действия и возвращать true, в остальных – возвращать false. Второй – создать класс baseclass_f:public baseclass, унаследовать от него все классы, содержащие f(), и использовать dynamic_cast < baseclass_f *> . Третий – пресловутое if-then-else + dynamic_cast в CallF. Первый вариант приводит к засорению базового класса, к тому же baseclass может быть не доступен (например, содержаться в «закрытом» модуле). Второй требует перепроектировать всю систему объектов. А если затем потребуется написать CallG, CallH? Конечно, С++ поддерживает множественное наследование, но иерархия классов при таком подходе сильно усложнится, да и не дело менять её «туда-сюда». Недостатки третьего метода обсуждались неоднократно: функцию CallF придётся переписывать всякий раз, когда появляется новый класс, поддерживающий f().

    Невозможность run-time менять отдельные объекты классов. Казалось бы, если объекты принадлежат одному классу, то и вести себя они должны одинаково. Если существующий класс чем-либо не устраивает – «наследуйся» и меняй там что хочешь. Однако возможность динамически менять отдельные объекты класса часто оказывается очень полезной. Конечно, наследование является гибким и удобным способом изменения функциональности классов. Но после того как объект создан, изменить его методы, добавить новые методы и переменные уже нельзя. Для этого необходимо удалить существующий объект, а затем создать новый. При этом надо позаботиться об обновлении всех указателей на данный объект, сохранении его свойств. Кроме того, если каждый раз создавать новые классы, их количество может перейти все разумные границы.

    Заключение

    Наиболее распространенным объектно-ориентированным языком программирования безусловно является C++. Свободно распространяемые коммерческие системы программирования C++ существуют практически на любой платформе. Широко известна свободно распространяемая система программирования G++, которая дает возможность всем желающим разобрать достаточно хорошо и подробно прокомментированный исходный текст одного из образцовых компиляторов языка C++. Основные идеи объектно-ориентированного подхода опираются на следующие положения: программа представляет собой модель некоторого реального процесса, части реального мира; модель реального мира или его части может быть описана как совокупность взаимодействующих между собой объектов; объект описывается набором параметров, значения которых определяют состояние объекта, и набором операций (действий), которые может выполнять объект; взаимодействие между объектами осуществляется посылкой специальных сообщений от одного объекта к другому. Сообщение, полученное объектом, может потребовать выполнения определенных действий, например, изменения состояния объекта; Объекты, описанные одним и тем же набором параметров и способные выполнять один и тот же набор действий представляют собой класс однотипных объектов.

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

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

    Классы объектов часто удобно строить так, чтобы они образовывали иерархическую структуру.

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

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

    Список использованной литературы

  1. Архангельский А. Программирование в Delphi для Windows. Версии 2006, 2007, Turbo Delphi + CD. –М.: Бином. Лаборатория знаний, 2006.

    Архангельский А. Язык C++ в С++Builder. Справочное и методическое пособие. – М.: Бином. Лаборатория знаний, 2008.

    Бакнелл Дж. Фундаментальные алгоритмы и структуры данных в Delphi. Библиотека программиста.–СПБ.: Питер, DiaSof, 2006.

    Галисеев Г.В. Компоненты в Delphi 7. Профессиональная работа.–М.: : Вильямс, 2006.

  2. Гамма Э. Приемы объектно-ориентированного проектирования. Паттерны проектирования. С.Петербург: Питер, 2006.
    Решите задачу на основе текста Законов Хаммурапи Совершенствование учета основных средств сельскохозяйственного предприятия Каковы сроки проведения инвентаризации основных средств?

    2014-05-28


Понравилась статья? Поделитесь ей