Файл: История развития программирования в России (Становления кибернетики в советский период).pdf
Добавлен: 31.03.2023
Просмотров: 113
Скачиваний: 1
Основная битва за доминирование между Pascal и BASIC развернётся в следующем десятилетии, и приведёт к созданию почти совершенных диалектов этих языков qBasic и Turbo Pascal. Именно им будут обучать в российских школах, именно их многие из нас заложат в фундамент программистского образования.
В пользу BASIC была поддержка крупных корпораций. Он по умолчанию использовался на всех известных ПК. Однако здесь был и скрыт аргумент в пользу Pascal - скорость. При нехватке памяти ПК BASIC запускался через интерпретатор, который работает медленнее компилятора. Таким образом, возник миф, что Pascal быстрее, хотя непосредственно к языкам эта версия не имеет никакого отношения.
Пока BASIC и Pascal боролись за умы начинающих программистов, многие корпорации были озабочены разработкой мощного универсального языка высокого уровня, который бы был производительнее и удобнее тех, над которыми трудились комитеты. Больше всего в этом преуспела компания Bell Labs - именно здесь увидели свет операционная система Unix и язык программирования C.
Одним из недостатков существующих популярных компьютерных языков была их ограниченность. Например, если вы хотели написать операционную систему, сначала приходилось иметь дело с низкоуровневыми функциями аппаратного обеспечения, и лишь заложив фундамент, можно было перейти к программированию на языке высокого уровня.
В результате в Великобритании появились сначала системный язык CPL, а потом его урезанный младший брат - BCPL (базовый CPL). Его слава добралась до другой стороны Атлантики, где Кен Томпсон, сотрудник Bell Labs, выпустил еще более упрощённую версию BCPL - B. В то время Unix разрабатывался на ассемблере, поэтому B стал настоящим панацеей для компании.
Позднее Деннис Ритчи переработал некоторые идеи Томпсона, и создал C (просто следующая буква алфавита). Язык сочетал в себе функции низкого уровня со структурой Algol. Таким образом, вначале C получил известность как структурированный язык ассемблера.
Самым ярким доказательством качества языка являлось то, что основная часть Unix, кроме небольшого ядра, была полностью переписана на C. Именно так, рука об руку, язык и ОС Unix существовали первые годы. Но слава распространялась, и в конечном итоге С начал использоваться в других операционных системах, и как итог - получил славу языка общего назначения.
Тем не менее, 70-е годы – это лишь время, когда было посажено семя С. Настоящий успех язык обрёл в следующем десятилетии. Такой, о каком создатели могли только мечтать.
Комитетские языки
Для Fortran и Cobol 70-е годы были временем перезапуска. Первый в 77 версии обзавёлся строковым типом, освоил блочную конструкцию if-else, расширил возможности по работе с файлами. Cobol-74 стал более статичным и ещё больше расширил синтаксис в угоду финансовым структурам.
А вот для Algol десятилетие выдалось плохим. В США к концу 70-х его почти вытеснил Pascal, его спасала лишь востребованность среди европейских и советских разработчиков, которые очень настороженно относились к новым языкам.
В СССР лишь в 1978 году появляется первый стандарт на комитетский язык – им стал Фортран. Разумеется, речь шла о базисном языке, а не его свежем диалекте. ГОСТ на Алгол-68 вышел спустя 10 лет, и, если вы его откроете, то узнаете причину задержки - синтаксис языка был полностью переведён на русский язык. Именно поэтому сложилось впечатление, что Фортран в СССР был больше востребован. На самом деле так было только в образовании. В науке и обороне Алгол был востребован ничуть не меньше.
Итак, в 1970-х в программировании наконец возникла главная движущая сила - мнение простых людей. Они уже не просто пользовались деятельностью «больших» учёных, любой желающий мог создать свой язык, написать компилятор или интерпретатор. Кто-то благодаря этому обрёл вечную славу, а кто-то построил миллиардную империю. Для того, чтобы сделать следующий качественный скачок, необходимо было вновь изменить подход к программированию, увеличив возможности и усложнив структуру.
Глава 2. Развитие программирования в современной России
2.1 Развитие объектно-ориентированного программирования
Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.
В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека Qt, написанная на языке C++.
Структура данных «класс», представляющая собой объектный тип данных, внешне похожа на типы данных процедурно-ориентированных языков, такие как структура в языке Си или запись в Паскале или QuickBasic. При этом элементы такой структуры (члены класса) могут сами быть не только данными, но и методами (то есть процедурами или функциями). Такое объединение называется инкапсуляцией.
Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности - для этого требуется наличие наследования.
Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм.
Язык Self, соблюдая многие исходные положения объектно-ориентированного программирования, ввёл альтернативное классам понятие прототипа, положив начало прототипному программированию, считающемуся подвидом объектного.
Понятию “объект” сопоставляют ряд дополняющих друг друга определений. Ниже приведены некоторые из них.
Объект - это осязаемая реальность, характеризующаяся четко определяемым поведением.
Объект - особый опознаваемый предмет, блок или сущность (реальная или абстрактная), имеющая важное функциональное назначение в данной предметной области.
Гипертекст - технология на базе средств обработки больших, глубоко вложенных, структурированных, связанных семантически, понятийно
Объектно-ориентированное или объектное программирование (в дальнейшем ООП) - парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием, - прототипов).
ООП возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Для дальнейшего развития объектно-ориентированного программирования часто большое значение имеют понятия события (так называемое событийно-ориентированное программирование) и компонента (компонентное программирование, КОП).
Формирование КОП от ООП произошло, как случилось формирование модульного от процедурного программирования: процедуры сформировались в модули - независимые части кода до уровня сборки программы, так объекты сформировались в компоненты - независимые части кода до уровня выполнения программы. Взаимодействие объектов происходит посредством сообщений. Результатом дальнейшего развития ООП, по-видимому, будет агентно-ориентированое программирование, где агенты - независимые части кода на уровне выполнения. Взаимодействие агентов происходит посредством изменения среды, в которой они находятся.
Языковые конструкции, конструктивно не относящиеся непосредственно к объектам, но сопутствующие им для их безопасной (исключительные ситуации, проверки) и эффективной работы, инкапсулируются от них в аспекты (в аспектно-ориентированном программировании). Субъектно-ориентированное программирование расширяет понятие объект посредством обеспечения более унифицированного и независимого взаимодействия объектов. Может являться переходной стадией между ООП и агентным программирование в части самостоятельного их взаимодействия.
Объекты могут находиться в определенных отношениях друг к другу. Эти отношения могут быть иерархическими. Основные иерархические отношения - это отношения использования и включения. Отношение использования реализуется посылкой сообщений от объекта A к объекту B. При этом объект A может выступать в роли:
- активного или воздействующего объекта, когда он воздействует на другие объекты, но сам воздействию не подвергается;
- пассивного или исполняющего, когда объект подвергается воздействию, но сам на другие объекты не воздействует;
- посредника, если объект и воздействует и сам подвергается воздействию.
Отношение включения имеет место, когда составной объект содержит другие объекты.
Объекты моделируют характеристики и поведение элементов мира, в котором мы живем. Они являются окончательной абстракцией данных.
Объекты содержат вместе все свои характеристики и особенности поведения. Отношения частей к целому и взаимоотношения между частями становятся понятнее тогда, когда все содержится вместе в одной упаковке. Это и называется инкапсуляцией.
Не менее важным является и тот факт, что объекты могут наследовать характеристики и поведение того, что мы называем порождающие, родительские объекты (или предки). Здесь происходит качественный скачок: наследование, возможно, является сегодня единственным самым крупным различием между обычным программированием на Паскале и объектно-ориентированным программированием в Borland Pascal.
В терминах Паскаля, объект во многом схож с записью, которая является оболочкой для объединения нескольких связанных элементов под одним именем.
Процесс, с помощью которого один тип наследует характеристики другого типа, называется наследованием.
Объект может быть охарактеризован структурой, его состоянием, поведением и индивидуальностью. Состояние объекта определяется перечнем всех возможных (обычно статических) свойств и текущими значениями (обычно динамическими) каждого из этих свойств. Свойства объекта характеризуются значениями его параметров. Поведение объекта описывает, как объект воздействует на другие объекты или как он подвергается воздействию со стороны других объектов с точки зрения изменения его собственного состояния и состояния других объектов. Говорят также, что поведение объекта определяется его действиями. Определенное воздействие одного объекта на другой с целью вызвать соответствующую реакцию называют операцией. В объектно-ориентированных языках программирования операции называют методами.
Можно выделить пять типов операций:
- конструктор, создание и инициализация объекта;
- деструктор, разрушающий объект;
- модификатор, изменяющий состояние объекта;
- селектор для доступа к переменным объекта без их изменения;
- итератор для доступа к содержанию объекта по частям в определенной последовательности.
Известна и другая классификация методов объекта, когда выделяют функции управления, реализации, доступа и вспомогательные функции.
Под индивидуальностью объекта понимают свойство объекта, позволяющее отличать этот объект от всех других объектов.
2.2 Актуальные проблемы развития программирования
Исследование Thomas E. Potok, Mladen Vouk и Andy Rindos показало отсутствие значимой разницы в продуктивности разработки программного обеспечения между ООП и процедурным подходом.
Кристофер Дэйт указывает на невозможность сравнения ООП и других технологий во многом из-за отсутствия строгого и общепризнанного определения ООП.
Александр Степанов, в одном из своих интервью, указывал на то, что ООП «методологически неправильно» и что «… ООП практически такая же мистификация как и искусственный интеллект…».
Фредерик Брукс (Frederick P. Brooks, Jr.) в своей статье «No Silver Bullet. Essence and Accidents of Software Engineering» (Computer Magazine; April 1987) указывает на то, что наиболее сложной частью создания программного обеспечения является « … спецификация, дизайн и тестирование концептуальных конструкций, а отнюдь не работа по выражению этих концептуальных конструкций…». ООП (наряду с такими технологиями как искусственный интеллект, верификация программ, автоматическое программирование, графическое программирование, экспертные системы и др.), по его мнению, не является «серебряной пулей», которая могла бы на порядок величины (то есть примерно в 10 раз, как говорится в статье) снизить сложность разработки программных систем. Согласно Бруксу, «…ООП позволяет сократить только привнесённую сложность в выражение дизайна. Дизайн остаётся сложным по своей природе…».