AAA
Обычный Черный

Кто не делится найденным, подобен свету в дупле секвойи (древняя индейская пословица)

версия для печатиВерсия для печати



Библиографическая запись: «Универсальные» языки программирования (Basic, Pascal, C++ и другие). — Текст : электронный // Myfilology.ru – информационный филологический ресурс : [сайт]. – URL: https://myfilology.ru//165/yazyki-programmirovaniya-i-ix-ispolzovanie-v-informaczionnyx-sistemax/universalnye-yazyki-programmirovaniya-basic-pascal-c-i-drugie/ (дата обращения: 24.04.2024)

«Универсальные» языки программирования (Basic, Pascal, C++ и другие)

«Универсальные» языки программирования (Basic, Pascal, C++ и другие)

Содержание

    Универсальный язык, или Язык общего назначения, - язык программирования, ориентированный на решение задач практически из любой области и объединяющий на единой методической основе наиболее существенные свойства и средства современных машино- и проблемноориентированных языков программирования (например, язык ассемблера , ПЛ/1 и др.).

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

    Классическими примерами универсального ЯП могут служить язык ассемблера ЕС или ПЛ/1. В свое время на эту роль претендовали Алгол'60, Симула'67, Алгол'68. Реально ее играют также Фортран, в частности его стандарты – Фортран'66 (ГОСТ) и Фортран'77 (стандарт ИСО), Бейсик (в особенности его развитые модификации), Паскаль (в особенности диалекты, допускающие раздельную трансляцию), менее известные у нас такие ЯП, как Корал (стандарт МО Великобритании), Джовиал (стандарт ВВС США), а также отечественный Эль'76.

    Алгол

    Алгол [ALGOL - ALGOrithmic Language] - Язык программирования высокого уровня, ориентированный на описание алгоритмов решения вычислительных задач. Был создан в 1958 г. специалистами западно-европейских стран для научных исследований. Версия этого языка Алгол-60 была принята Международной конференцией в Париже (1960 г.) и широко использовалась на ЭВМ 2-го поколения.

    Версия Алгол-68, разработанная группой специалистов Международной федерации по обработке информации ( ИФИП) в 1968 г., получила статус международного универсального языка программирования, ориентированного на решение не только вычислительных, но и информационных задач. Это был язык, в котором были устранены недостатки Алгола-60 и добавлены некоторые новые возможности, удобные и безопасные, которые к тому же могли быть легко и эффективно реализованы.

    Алгол-68 — сложный язык. Но его сложность имеет несколько иную природу, нежели сложность ПЛ/1. Если ПЛ/1 просто объемен, то сложность Алгола-68 в том, что его механизмы носят предельно обобщенный характер. Авторы языка создали мощную, универсальную, но весьма изощренную конструкцию, для понимания которой требуется немалое напряжение. Даже для описания синтаксиса Алгола-68 формализма БНФ оказалось недостаточно. Алгол-68 определен с помощью грамматик А. ван Вейнгаардена, которые являются обобщением БНФ и, несомненно, не облегчают понимание языка.

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

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

    Хотя в настоящее время Алгол практически не используется, он послужил основой или оказал существенное влияние на разработку более современных языков, например, Ада, Паскаль и др. Создатель Си++ Бьерн Строуструп называл Алгол-68 одним из
    предшественников Си++.

    Кобол

    В те же годы, когда появились Фортран и Алгол — языки для программирования научно-технических задач, была осознана и потребность в средствах разработки учетно-бухгалтерских систем. Компьютеры пришли в бизнес. В  США был создан язык Кобол
    (COBOL, COmmon Business Oriented Language — универсальный язык, ориентированный на бизнес). 

    Кобол разработан в 1960 году комитетом КОДАСИЛ (CODASYL, Conference on Data Systems Languages — конференция по языкам систем обработки данных), организованным министерством обороны США. В состав комитета вошли представители ведущих американских компьютерных фирм. Инициировала создание этого комитета Грейс Хоппер.

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

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

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

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

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

    Интерес к Коболу проявили, например, в киевском Институте кибернетики, которым руководил академик В. М. Глушков, всегда уделявший большое внимание вопросам использования вычислительных машин в планировании и управлении. Сотрудниками этого
    института было написано изданное большим тиражом учебное пособие [КОБОЛ, 1974]. 

    PL/1

    Programming Language number One, сокращенно PL/I, — язык программирования номер один — таково полное оригинальное название этого языка.

    ПЛ/1 разработан и реализован в течение 1963-1966 годов. Разработку языка вел комитет, созданный компанией IBM и ассоциацией пользователей компьютеров IBM. Кроме специалистов IBM в комитет вошли также представители ряда американских промышленных компаний. Работы по языку ПЛ/1 велись в рамках создания серии компьютеров IBM/360. Возглавлял разработку Джордж Рэдин (George Radin). Вот как он писал о поставленной задаче: «Комитет стремился к тому, чтобы язык мог удовлетворить программистов различных уклонов: программистов научных и коммерческих задач, программистов задач, решаемых в реальном масштабе времени, и программистов систем, а также к тому, чтобы как начинающие, так и опытные программисты могли использовать возможности языка в соответствии со своим уровнем».

    Был создан действительно мощный и универсальный язык. Однако, как показал дальнейший ход событий, подход, примененный при создании ПЛ/1, оказался все же неудачным. Главным недостатком этого языка считают чрезмерную сложность, точнее громоздкость, поскольку трудных для понимания концепций он, в общем-то, не содержит, но количество заложенных в язык возможностей необычайно велико. Полная документация по ПЛ/1 для ЕС ЭВМ занимала свыше 2000 страниц.

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

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

    Сложность языка ПЛ/1 создает трудности как при освоении, так и при реализации. Конструкция языка такова, что разработка компилятора для него становится трудной и трудоемкой задачей. Недаром вначале были выпущены компиляторы для подмножества языка. Вследствие трудности реализации и ориентированности на архитектуру операционной системы OS/360 язык ПЛ/1 был долгое время доступен лишь на компьютерах IBM и совместимых с ними.

    Компиляторы ПЛ/1 работали медленно, создавая при этом медленные и объемные машинные программы, уступавшие в эффективности программам, полученным трансляцией с Фортрана.

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

    Известны, однако, некоторые проекты, в которых ПЛ/1 использовался (в основном для переноса старых программ на новые платформы) в 90-е годы. Компиляторы ПЛ/1 имеются на всех основных программно-аппаратных платформах.

    Бейсик

    Бейсик [BASIC - Beginner’s All-purpose Symbolic Instruction Code] - Язык программирования высокого уровня , разработанный в 1963 - 1964 гг. в Дартмутском колледже Томасом Куртом и Джоном Кемени . Первоначально предназначался для обучения программированию. Отличается простотой, легко усваивается начинающими программистами благодаря наличию упрощенных конструкций языка Фортран и встроенных математических функций, алгоритмов и операторов. Существует множество различных версий Бейсика, которые не полностью совместимы друг с другом. Некоторые реализации Бейсика включают средства обработки данных и наборов данных. Большинство версий Бейсика используют интерпретатор, который преобразует его компоненты в машинный код и позволяет запускать программы без промежуточной трансляции. Некоторые более совершенные версии Бейсика позволяют использовать для этой цели трансляторы. На IBM PC широко используются Quick Basic фирмы Microsoft, Turbo Basic фирмы Borland и Power Basic (усовершенствованная версия Turbo Basic, распространяемая фирмой Spectra Publishing ). В начале 1999 г. фирма Microsoft выпустила версию языка Visual Basic 6.0 (VB 6.0), предназначенного для создания многокомпонентных программных приложений для систем уровня предприятий.

    Паскаль

    Паскаль [PASCAL - акроним с французского - Program Applique a la Selection et la Compilation Automatique de la Litterature] - процедурно-ориентированный язык программирования высокого уровня, разработанный в конце 1960-х гг. Никлаусом Виртом, первоначально для обучения программированию в университетах. Назван в честь французского математика XVII века Блеза Паскаля. В своей начальной версии Паскаль имел довольно ограниченные возможности, поскольку предназначался для учебных целей, однако последующие его доработки позволили сделать его хорошим универсальным языком, широко используемым в том числе для написания больших и сложных программ. Существует ряд версий языка (например, ETH Pascal, USD Pascal, Turbo Pascal ) и систем программирования на этом языке для разных типов ЭВМ. Для IBM PC наиболее популярной является система Turbo Pascal фирмы Borland (США). 

    Создатель языка Паскаль — Никлаус Вирт (Niklaus Wirth). После отклонения рабочей группой ИФИП его проекта усовершенствования Алгола-60 Н. Вирт, работая в Стэнфордском университете (США), осуществил реализацию предложенного им языка на компьютере IBM/360. Этот язык в дальнейшем получил название Алгол W и применялся в ряде университетов для целей обучения.

    В 1967 году Н. Вирт вернулся в родную Швейцарию, а через год организовал группу из трех помощников (У. Амман (U. Ammann), Э. Мармье (Е. Marmier), Р. Шилд (R. Schild)) для реализации языка, который мы знаем теперь под именем Паскаль. Разработка Паскаля преследовала несколько целей. Во-первых, это стремление получить язык, пригодный для систематического обучения программированию и способствующий формированию правильного стиля. Во-вторых, язык должен был стать инструментом для разработки системных программ (компиляторов, операционных систем). В-третьих, при проектировании было обращено внимание
    на возможность компактной и эффективной реализации.

    В Паскале нашли дальнейшее развитие идеи Алгола-60 и Алгола W. Одной из важнейших новаций языка была последовательно, ясно и полно реализованная концепция типов данных. Она стала практическим воплощением теории структурной организации данных, активно развивавшейся в те годы Ч. Э. Р. Хоаром.

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

    Цели, поставленные Н. Виртом при создании Паскаля, были достигнуты. Язык и до сих пор остается одним из наиболее приемлемых средств обучения программированию. В Паскале впервые была последовательно реализована концепция строгой статической типизации, предусматривающая возможно более полный контроль соответствия типов на стадии компиляции. Последующее развитие показало правильность этой концепции. Некоторые языки в своей эволюции прошли путь от почти полного ее отрицания до признания и развития. Идеи, впервые воплощенные в Паскале, нашли продолжение в последующих, «паскалеподобных» языках: Ада, Модула-2, Оберон. И даже такие, казалось бы, не похожие внешне на Паскаль языки, как Ява и Си#, впитали в себя его концепции.

    В 1982 году был принят стандарт ISO на язык Паскаль, а в 1990 году — его новая редакция. Однако этот стандарт не оказал существенного влияния на развитие языка.

    В нашей стране Паскаль заметили с опозданием. Во второй половине 70-х в центре внимания были ЕС ЭВМ (клоны IBM/3G0) с их
    Фортраном и ПЛ/1. Многие ведущие специалисты по программированию, вышедшие из математической среды, явно отдавали предпочтение Алголу-68. Написанное в 1974 году классическое руководство по Паскалю Н. Вирта и К. Йенсен было издано по-русски лишь в 1982 году, став первой общедоступной  книгой по языку. Хотя к этому времени уже существовали реализации Паскаля на
    БЭСМ-6, Эльбрус-1 и ЕС ЭВМ, они оставались неизвестными для многих программистов. Широкую известность Паскаль приобрел лишь в первой половине 1980-х с появлением микрокомпьютеров и выходом книг по языку.

    Ада

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

    В 1977 году был объявлен открытый конкурс на создание нового языка. Участникам конкурса было рекомендовано взять в качестве прототипа Паскаль, Алгол-68 или ПЛ/1. На конкурс было представлено более полутора десятков проектов. Четыре были отобраны для дальнейшего рассмотрения. Им были даны условные названия Зеленый, Красный, Желтый и Синий. Во всех четырех проектах
    в качестве основы был выбран Паскаль. Разработчиков Желтого проекта, представленного компанией SRI International, консультировали Н. Вирт и Ч. Э. Р. Хоар.

    Второго мая 1979 года на заседании рабочей группы зеленый язык был признан победителем и назван Ада. Название языку дано в честь Августы Ады Байрон Кинг, графини Лавлейс (Augusta Ada Byron King, Countess of Lovelace), дочери английского поэта Джорджа Байрона. Ада Байрон считается первым в истории программистом.

    Язык Ада разработан группой специалистов французской компании СИ Honeywell Bull под руководством Жана Ичбиа (Jean D. Ichbiah). Ада значительно сложнее Паскаля. Автор Паскаля Н. Вирт видел в этом источник серьезных проблем: «Слишком много всего вываливается на программиста. Я не думаю, что, изучив треть Ады, можно нормально работать. Если вы не освоите
    всех деталей языка, то в дальнейшем можете споткнуться на них, и это приведет к неприятным последствиям». На это Ж. Ичбиа возражал: «Иногда Вирт верит в малые решения больших проблем. Я не верю в такие миражи. Крупные проблемы требуют крупных решений». Последний тезис довольно часто выдвигается как оправдание сложности программных систем и языков программирования, хотя, при всей внешней убедительности, не имеет на самом деле достаточных обоснований. «Язык для сложного мира» — такой девиз сопровождает эмблему языка Ада.

    В 1980 году были сформулированы «каменные» (STONEMAN) требования к программному окружению, которое должно сопровождать каждую реализацию Ады. В 1983 году принят американский ANSI-стандарт языка Ада, а в 1987 году совпадающий с ним международный стандарт ISO.

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

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

    Технология и идеология объектно-ориентированного программирования (ООП) зародились в 60-е годы, в период активного осмысления технологических вопросов разработки программных систем. Свое воплощение тогда ООП получило в языке Симула-67, созданном Оле-Йоханом Далом (Ole-Johan Dahl) и Кристеном Нюгардом (Kristen Nygaard) в Норвежском компьютерном центре.

    Можно считать, что объектно-ориентированное программирование — это раздел структурного программирования, ведь одна из основополагающих работ но ООП «Иерархические структуры программ» О.-Й. Дата и Ч. Э. Р. Хоара была опубликована под одной обложкой со статьей Э. Дейкстры «Заметки по структурному программированию» в книге, которая так и называлась «Структурное программирование».

    В те годы предложенный Симулой-67 подход к построению программ не получил массового распространения. Новая волна интереса к ООП возникла в 80-е годы в связи с появлением систем с графическим пользовательским интерфейсом, при создании которых использование ООП оказалось весьма уместным.

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

    Идеология ООП

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

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

    Принципиальным отличием, делающим ООП богаче АТД, является возможность расширения типов. Один тип может быть определен на основе другого, обогащая и модифицируя своего предшественника. В. Ш. Кауфман даже использует термин «обогащение типов» вместо понятия «расширение типов».

    Один из апологетов ООП Г. Буч предлагает называть «объектными» языки, поддерживающие абстракцию данных, а «объектно-ориентированными» — языки, допускающие расширение типов. К первым можно отнести Модула-2, Ада-83, ко вторым — Си++, Оберон, Ада-95, Ява, Си#.

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

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

    Справедливости ради надо отметить, что понятие «класс» появилось в программировании не только не позже, но даже раньше понятия «тип запись». Термин «класс» введен в обиход языком Симула-67. Это новое понятие стало обобщением понятия «блок» Алгола-60. Блок представляет собой совокупность описаний (переменных, процедур) и операторов. В языках, происходящих от Си и Симулы-67, классы — это такие блоки, для которых могут быть созданы экземпляры-объекты. В объектно-ориентированных языках, восходящих к Паскалю, объекты — это переменные такого типа запись, частью которого являются процедуры.

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

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

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

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

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

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

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

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

    Можно отметить и определенные недостатки ООП. Внедрение механизмов поддержки ООП усложняет языки программирования, иногда значительно. Ярким примером такого рода является язык Си++, который не ограничивается реализацией минимально необходимых механизмов наследования, а предусматривает об­ширный набор средств, некоторые из которых, как показала практика, избыточны и небезопасны. Программа, написанная в объектно-ориентированном стиле, может оказаться менее понятной. Это обусловлено, в частности, использованием позднего связывания, когда по тексту программы невозможно определить, какая из процедур (функций, методов) будет вызвана.

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

    Simula

    Симула-67 (Simula 67) — язык программирования общего назначения, разработанный в конце 1960-х годов сотрудниками Норвежского вычислительного центра Кристеном Нюгором и Оле-Йоханом Далем для моделирования сложных систем  и представлял собой модернизированный Алгол-60.

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

    Тем не менее, этот язык активно использовался в образовательном процессе в высших учебных заведениях, особенно в Скандинавии; о влиянии Симулы на разработку им C++ отмечал его автор — Страуструп (в том числе в книге «Дизайн и эволюция C++»).

    В современной терминологии язык можно охарактеризовать как объектное расширение Алгола 60. Конструкции языка очень сходны с аналогичными в современных объектно-ориентированных языках.

    C (Си)

    Си (англ. C) — компилируемый статически типизированный язык программирования общего назначения, разработанный в 1969—1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие языка Би.. Язык Си создан в ходе работ по операционной системе UNIX, разработка которой велась в Bell Laboratories. Язык разработан и реализован на миникомпьютере PDP-11.

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

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

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

    Си является одним из важнейших языков программирования. Он послужил прообразом новых языков, став основой
    целой программистской культуры. Язык программирования Си оказал существенное влияние на развитие индустрии программного обеспечения, а его синтаксис стал основой для таких языков программирования, как C++, C#, Java и Objective-C.

    C++

    C++ — компилируемый, статически типизированный язык программирования общего назначения. Язык программирования высокого уровня, созданный Бьорном Страуструпом на базе языка Си. Является его расширенной версией, реализующей принципы объектно-ориентированного программирования. Используется для создания сложных программ. Для IBM PC наиболее популярной является система Turbo C++ фирмы Borland (США).

    Язык формировался более 10 лет. В 1980 году сотрудник Bell Laboratories Бьорн Страуструп (Bjarne Stroustrup), стремясь улучшить Си, обеспечив поддержку абстракции данных и объектно-ориентированного программирования, ввел в Си понятие класса, заимствованное из языка Симула-67. Кроме того, были добавлены контроль и преобразование типов параметров функций и некоторые другие возможности. В течение нескольких лет язык, получивший название «Си с классами», использовался в исследовательской группе Б. Страуструпа.

    В 1983-1984 годах в язык были внесены добавления: виртуальные функции, совместное использование (перегрузка, переопределение) операций (как в Алголе68 и Аде). В новой реализации язык получил остроумное название Си++ (увеличенный, расширенный Си), предложенное Риком Маскитти (Rick Mascitti).

    В 1985 году Б. Страуструп опубликовал первую книгу с описанием Си++: «The C++ Programming Language», Addison-Wesley, 1985 (русский перевод: [Страуструп, 1991]). С этого времени началось распространение языка, стали появляться его реализации для разных платформ.

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

    В дальнейшем язык постоянно расширялся. Были добавлены множественное наследование, шаблоны, обработка исключений. В 1989 году, с созданием объединенного комитета ANSI/ISO начался процесс стандартизации языка, растянувшийся на долгие годы. В ходе стандартизации в язык вносились все новые добавления: логический тип, пространства имен и др. В 1993-1994 годах в проект стандарта включено описание библиотеки ввода-вывода и библиотеки стандартных шаблонов (Standard Template Library, STL), предложенной сотрудником компании HewlettPackard А. Степановым. Стандарт принят в 1998 году (ISO/IEC 14882-1998).
    В 90-е годы было осуществлено большое число реализаций Си++. Системы программирования на языке Си++ были выпущены и активно продвигались компаниями Microsoft (Microsoft C++, Visual C++) и Borland (Turbo C++, Borland C++, C++ Builder). В компании Microsoft Си++ стал основным языком системного программирования. Получил признание компилятор Watcom C++, отличавшийся
    высокой степенью оптимизации создаваемого кода. Развитыми возможностями обладает IBM Visual Age C++. Широко известен компилятор g++, разработанный в рамках проекта GNU.

    В новое тысячелетие Си++ вошел как один из основных языков программирования. Однако его оценка с годами меняется. Если в начале 1990-х на волне объектно-ориентированной моды критика Си++ была почти не слышна, то начиная с 1995 года оценки языка программистским сообществом становятся более трезвыми. Этому способствовало появление языка Ява (Java), предложенного компанией Sun Microsystems. Сделав Яву внешне похожим на Си++, разработчики Sun предприняли попытку избавить новый язык от изъянов предшественника. С тех пор не замечать недостатки Си++- стало невозможным. Появление языка Ява в 1995 году и языка Си# в 2000-м означает, по сути, признание несостоятельности Си++’. Оба эти языка, основанные на Си++, не только не расширяют его какими-либо принципиально новыми средствами, а наоборот, во многом сужают, упрощают, делают более строгим. Это, однако, не мешает «неправильному» языку Си++ оставаться фактическим стандартом. Его стиль импонирует вкусам и привычкам широкого круга практических программистов.

    C#

    C#  — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота как язык разработки приложений для платформы Microsoft .NET Framework. Впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.

    C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, переменные, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

    Переняв многое от своих предшественников — языков C++, Delphi, Модула, Smalltalk и, в особенности, Java — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов (между тем допускается множественная реализация интерфейсов).

    Си# — простой, современный, объектно-ориентированный язык с безопасной системой типов, происходящий от Си и Си++. Си# будет удобен и понятен для программистов, знающих Си и Си++. Си# сочетает продуктивность Visual Basic и мощность Си++.

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

    Оберон

    Оберон — язык программирования высокого уровня, разработанный Никлаусом Виртом, для исполнения программ на котором предназначена одноимённая операционная система, авторами которой являются Никлаус Вирт и Юрг Гуткнехт. Основой для Оберона послужил язык Модула-2, выросший из Паскаля, (по словам Вирта, первоначально систему хотели писать непосредственно на Модуле, но пришли к выводу о необходимости её доработки и сокращения, что и привело к появлению Оберона). Целью проекта (Project Oberon) Никлауса Вирта и Юрга Гуткнехта в 1986—1989 годы было создание с нуля обозримой и надёжной операционной системы для однопользовательской рабочей станции.

    Оберон — очень простой язык. При этом он содержит все необходимые средства и структурного, и объектно-ориентированного, и модульно-компонентного программирования. Чтобы добиться наибольшей надёжности и производительности трансляции, было предпринято значительное упрощение языка за счёт его отказа от средств, которые были сочтены ненужными (исходя из опыта разработки, реализации и применения других языков), либо усложняли компилятор без достаточного оправдания с точки зрения производительности, либо были достаточно сложны, чтобы быть отправленными во внешние библиотеки, либо плохо совмещались с механизмами модульности и автоматического управления памятью: записи с вариантами, перечислимые типы, типы-диапазоны, множества общего вида, беззнаковый целый тип, локальные модули, модули определений, списки экспорта, оператор for, прежний вариант оператора with, специальный синтаксис определения главной программы. Рудиментарные средства поддержки параллельного программирования, имевшиеся в Модуле-2, не вошли в язык, так как он обслуживал однопользовательскую операционную систему. В целях упрощения отказались от обработки исключений.

    Было упрощено описание массивов (индексы массивов могут быть только целочисленными и всегда начинаются с нуля, подобно языку Си), ограничено использование указателей — указатели могут существовать только на записи и массивы, в списках импорта указывается только импортируемый модуль, а при использовании импортированных имён требуется обязательная квалификация (явное указание имени модуля-экспортёра). В статье «От Модулы к Оберону»[4] Вирт подробно пояснил причины удаления каждого из элементов.

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

    Благодаря внесённым изменениям, Оберон стал синтаксически проще. Описание его синтаксиса поместилось на одной странице, полное описание языка занимает около 20 страниц, что вдвое меньше, чем описание Модулы-2. Оберон является если не минимальным, то, во всяком случае, одним из самых малых по объёму универсальных языков программирования высокого уровня.

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

    Важнейшее свойство языка — обозримость. Даже после первого знакомства с его описанием, объем которого составляет всего около 20 страниц, у опытного программиста создается ощущение неплохого знания языка. Оберон, в отличие от таких языков как ПЛ/1, Алгол-68, Си++, Объектный Паскаль, Ява или Си# нетрудно знать в совершенстве и целиком. Оберон представляет собой квинтэссенцию технологий, воплощенных в универсальных языках программирования в XX веке.

    Java

    Java — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Разработка ведётся сообществом, организованным через Java Community Process; язык и основные реализующие его технологии распространяются по лицензии GPL. Целью проекта, осуществлявшегося в обстановке строгой секретности, было создание среды программирования для устройств бытовой электроники.

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

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

    Благодаря энергичной пропаганде, общей неудовлетворенности языками Си и Си++, большому интересу ко всему, связанному с Интернетом, желанием многих компаний и потребителей найти противовес решениям Microsoft, технология Ява получила широкую известность, поддержку и начала быстро распространяться. Росту популярности технологии Ява способствовала и ее открытость. Компания Sun сделала общедоступными спецификации языка, виртуальной машины и библиотек, образующих интерфейс прикладного программирования (Java API). Бесплатно распространяется комплект разработчика на языке Ява (JDK — Java Development Kit), включающий компилятор с Явы в байт-код (программа javac), интерпретатор байт-кода (виртуальную машину, программа java), отладчик, дизассемблер, библиотеку классов, другие инструменты, необходимые для создания программ. Продвигая новую технологию, ее создатели акцентировали внимание на нескольких основных свойствах языка Ява, представляя его как простой, объектно-ориентированный, распределенный, интерпретируемый, надежный, безопасный, не зависящий от архитектуры, переносимый, высокопроизводительный, многопоточный и динамический язык. 

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

    Kotlin

    Kotlin (Котлин) — статически типизированный, объектно-ориентированный язык программирования, работающий поверх Java Virtual Machine и разрабатываемый компанией JetBrains. Также компилируется в JavaScript и в исполняемый код ряда платформ через инфраструктуру LLVM.

    Kotlin – один из самых новых языков в экосистеме Java, устраняющий многие ограничения Java и гораздо более универсальный. Среди его преимуществ: полная совместимость с Java и возможность интеграции на уровне исходного кода, широкая поддержка парадигмы функционального программирования, помогающая писать надежный и безопасный код, лаконичность синтаксиса. Авторы ставили целью создать язык более лаконичный и типобезопасный, чем Java, и более простой, чем Scala. Следствием упрощения по сравнению со Scala стали также более быстрая компиляция и лучшая поддержка языка в IDE. Язык полностью совместим с Java, что позволяет Java-разработчикам постепенно перейти к его использованию; в частности, язык также встраивается Android, что позволяет для существующего android-приложения внедрять новые функции на Kotlin без переписывания приложения целиком.

    Синтаксис языка использует элементы из JavaScript, Паскаля, TypeScript, Haxe, PL/SQL, F#, Go и Scala, C++, Java, C#, Rust и D. При объявлении переменных и параметров типы данных указываются после названия (разделитель — двоеточие). Точка с запятой, как разделитель операторов, также необязательна (как в Scala, Groovy и JavaScript); в большинстве случаев перевода строки достаточно, чтобы компилятор понял, что выражение закончилось. Кроме объектно-ориентированного подхода, Kotlin также поддерживает процедурный стиль с использованием функций. Как и в Си, C++ и D, точка входа в программу — функция main, принимающая массив параметров командной строки. Программы на Kotlin также поддерживают perl- и shell-стиль интерполяции строк (переменные, включённые в строку, заменяются на их содержимое). Также поддерживается вывод типов.

    Kotlin разрабатывался так, чтобы быть намного более восприимчивым ко многим новым приемам, появляющимся в функциональном программировании. В  Kotlin есть изменяемые и  неизменяемые ссылки, но предпочтение отдается неизменяемым. Kotlin также поддерживает большую часть абстракций функционального программирования, которые позволяют избегать управляющих структур
    (хотя он имеет традиционные управляющие структуры, помогающие упростить переход от традиционных языков). Еще одна особенность Kotlin – он уменьшает потребность в шаблонном коде, позволяя сократить его до минимума. На Kotlin
    можно написать класс с  необязательными свойствами (обладающий также функциями equals, hashCode, toString и copy) в одной строке кода, тогда как для объявления эквивалентного класса на Java потребуется около тридцати строк (включая методы свойств и перегруженные конструкторы).


    1. Новый систематизированный толковый словарь : https://www.gpntb.ru/win/book/
    2. Голицына О. Л., Партыка Т. Л., Попов И. И. Языки программирования : учебное пособие / О. Л. Голицына, Т. Л. Партыка, И. И. Попов. — 2-е изд., перераб. и доп. — М. : ФОРУМ, 2010. — 400 с. : ил. — (Профессиональное образование).
    3. Свердлов С. З. Языки программирования и методы трансляции : учебное пособие / Свердлов С. З. ; Свердлов С. З. - 2-е изд., испр. - Санкт-Петербург : Лань, 2019. - 564 с. - ISBN 978-5-8114-3457-2.
    4. Кауфман В. Ш. Языки программирования. Концепции и принципы / Кауфман В. Ш. ; Кауфман В. Ш. - Москва : ДМК Пресс, 2010. - 464 с. - ISBN 978-5-94074-622-5.
    5. Сомон П. И. Волшебство Kotlin / Сомон. П. И. ; Сомон. П. И. - Москва : ДМК Пресс, 2020. - 536 с. - ISBN 978-5-97060-801-2. 

    10.07.2021, 20881 просмотр.


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

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

    Dear visitors! It is a pain in our heart to inform you that this site collects user metadata (cookies, IP address and location data), which is vital for the operation of the site and the maintenance of its life.

    If you do not want to provide this data for processing under any pretext, please leave the site immediately and we will not tell anyone that you were here. With the same care, the site administration.