Файл: Машинно-ориентированные языки.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 12.03.2024

Просмотров: 56

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Содержание:

Введение

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

В данной работе использованы следующие учебные пособия, раскрывающие тему объектно-ориентированного программирования: Давыдова, Н. А. «Программирование: учебное пособие» 2009 года, Мухортов, В. В., Рылов, В. Ю. «Объектно-ориентированное программирование, анализ и дизайн, методическое пособие» 2002 года, Тюгашев, А. А. «Основы программирования. Часть I» 2016 года, Бердоносов, В. Д. «Объектно-ориентированное программирование: учеб. пособие» 2015 года.

Кратко определим причины выбора именно этих пособий.

Бердоносов В. Д является профессором КнАГТУ, а также автором (соавтором) изданий по информационным технологиям.

Тюгашев А. А. является доктором технических наук и автором более чем 20 научных трудов по программированию. Данное пособие было написано для Университета ИТМО.

Учебное пособие соавторов Мухортова и Рылова было написано на основе методологии, разработанной Г. Бучем, и в каком-то смысле является переработкой издания Буча (будет упомянуто далее) в более понятной и сокращенной/сжатой форме.

Учебное пособие Давыдовой Н. А. выпущено научным издательством БИНОМ, специализируется в издании научных книг, вузовских и школьных учебников, методической и научно-популярной литературы естественнонаучного и информационно-математического направлений и выпускает методические пособия в соответствии с ФГОС.

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

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


Тимоти Бадд, который является доцентом по информатике в Университете штата Орегон, а также автором более десятка книг по объектно-ориентированному программированию, структурам данных, некоторые из которых опубликованы на нескольких языках;

Гради Буч, американского специалиста в области программной инженерии, руководителя исследований в IBM Research, IBM Fellow, создателя унифицированного языка моделирования UML;

Мэтт Вайсфельд, профессора колледжа, разработчика программного обеспечения и автора книг и статей по объктно-ориентированной разработке, из штата Огайо;

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

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

Также в данной работе использованы статьи таких интернет-ресурсов, как Habrahabr – крупнейшего в Рунете сообщества программистов, в котором публикуются актуальные статьи практикующих программистов; Progstudy – площадки онлайн-обучения программированию, созданной и поддерживаемой программистами-практиками; itweek.ru (электронной страницей печатного издания PC Week/RE) — специализированного еженедельного издания, освещающего широкий круг проблем области ИТ.

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

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

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


1.1 Машинно-ориентированные языки

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

Программирование в общепринятом понимании — процесс описания программной идеи с помощью языка, понятного приемнику и передатчику, тогда как программа представляет собой некую систематизированную совокупность команд, которые входят в перечень исполнимых для конкретной электронно-вычислительной машины, компьютера [2, с. 12].


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

В 1830-е годы Чарльз Бэббидж приступает к проекту аналитической машины, по сути прообраза современной ЭВМ. Первыми программами в истории считаются предписания по расчету чисел Бернулли, написанные Адой Лавлейс для этой машины, именно в этих предписаниях появляется такое фундаментальное понятие программирования, как цикл. Для ввода программы в машину предполагалось использовать перфокарты, и сама программа Ады Лавлейс представляет собой не текст, а набор перфокарт. Кроме того леди Лавлейс предвидела возможность машины оперировать не только числами, но и произвольными объектами, выраженными, например, алгебраически в символьной форме, что в наши дни называется символическими вычислениями, или компьютерной алгеброй. Если бы аналитическая машина была построена, она стала бы первым программируемым компьютером.[8, c.17]

Стоит упомянуть еще об одном подобном нереализованном проекте, относящемся к более близкому прошлому, проекте 1938 года, логической машине Z1 немецкого инженера Конрада Цузе. Если машина Бэббиджа должна была работать на паровом двигателе, машина Цузе была уже электромеханической, а программа должна была задаваться с помощью перфоленты. В 1945 году Цузе занялся созданием языка для будущей логической машины. Язык, получивший имя Plankalkül (на русском это название соответствует выражению «планирующее исчисление»), фактически, представляет собой язык программирования высокого уровня с такими современными чертами, как вызов подпрограмм, условные операторы, итерационные циклы, арифметику с плавающей запятой, массивы, иерархические структуры данных, утверждения, обработку исключений и многие другие.

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

Данный, предварительный этап развития информационных технологий — это этап самоотверженных изобретателей, по сути первый шаг к созданию машин, которые должны облегчить человеческие жизни и труд, однако на данном этапе затраты ресурсов значительно превышают плоды, результаты. В дальнейшем, очевидно, что произойдет кардинальный переворот. [8, c. 17]


1.2 Эволюция информационных систем, необходимость эволюции языков

Появление ЭВМ — по сути революционное событие середины XX века. Первые электронно-вычислительные машины использовались исключительно для математических и статистических расчетов, но их возможности были ограничены малым объемом оперативной памяти, а также несовершенством системы ввода-вывода [7, c. 8]. Данные и команды вводились с пульта, перемычками или тумблерами. Как тогда, так и в наши дни, память ЭВМ может хранить только двоичные представления. Все программа писались в машинных кодах, но очевидно, что машинный язык весьма неудобен для человека. Программистам прошлого было необходимо запоминать, какой последовательности нулей и единиц соответствует та или иная команда, в ячейках с какими номерами хранятся промежуточные результаты вычислений, само программирование было занятием непростым, доступным немногим высококвалифицированным специалистам, и человеческий фактор был причиной проникновения в программы большого количества ошибок.[8, c.19]

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

- увеличивался объем кода (машинных операций);

- также недопустимо усложнялась структура процессора ЭВМ;

- время программирования соответственно тоже увеличивалось [2, c. 15].

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

Необходимость преодолеть данные проблемы стала причиной перехода к новой парадигме программирования — ассемблированию. Во-первых, понятие адресов (фактически номеров) ячеек было заменено понятием «операнд», во-вторых, однородные машинные инструкции были объединены в мнемонические команды. Большой вклад в развитие программирования и особенно его языков внесли Грейс Мюррей Хоппер и ее группа ученых: именно им мы обязаны возникновением подпрограмм, первого компилятора и такого понятия, как отладка [6, с. 16].

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


В 1950-х годах ЭВМ получили широкое распространение в научно-исследовательских институтах США и Западной Европы, с этого времени начинается стремительный прогресс программирования.[6, с. 16]

Далее программирование идет по пути развития алгоритмических абстракций. Такие характерные для машины понятия, как ячейки памяти или простейшие операции суммирования чисел в ячейках памяти, были заменены абстрактными переменными и довольно сложными выражениями, похожими на используемые в математике формулы Неудивительно, что первый язык программирования высокого уровня так и назвали — FORTRAN, от слов «формульный транслятор», этот язык, позволял решать специфические научные и инженерные задачи, и стал первым широко распространенным коммерческим языком. Также стали создаваться компиляторы для других языков программирования, среди которых стоит упомянуть COBOL, аппаратно-независимый язык, в котором, в отличие от большинства прочих языков, все данные описываются в отдельной секции, которая не совпадает с секцией команд, что позволяет использовать одни и те же описания данных в различных программах. Особенно эффективно выполняют программы, написанные на этом языке, простые арифметические операции с большими массивами данных, что необходимо, например в бухгалтерских расчетах.[6, с 18]

При создании языков высокого уровня делалась попытка выразить в языке суть алгоритма решения задачи, абстрагированного от мелких деталей реализации на той или иной ЭВМ, что нашло свое отражение в названии еще одного знаменитого языка программирования — ALGOL (от англ. algorithmic language — алгоритмический язык). ALGOL стал основой для дальнейшего развития программистской мысли, многие разработанные впоследствии и получившие распространение языки программирования содержат идеи и решения, взятые из ALGOL: во-первых, создание специальной нотации для определения синтаксиса алгоритмических языков (нотация Бэкуса-Наура); во-вторых доведение до логического завершения концепции операторных алгоритмических языков с заранее фиксированными типами данных и блочной структурой. Также стоит упомянуть такие нововведения ALGOL, как возможность разработки отдельных модулей проекта независимо друг от друга, а также реализацию вызова фрагментов кода программы и способов передачи параметров между процедурами и функциями. Также именно в ALGOL понятия блока и рекурсивного вызова функции.

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