лекции (2007)

2019-09-19СтудИзба

Описание файла

Документ из архива "лекции (2007)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "лекции (2007)"

Текст из документа "лекции (2007)"

Лекции по курсу «Языки программирования»

осенний семестр 2007

лектор: Головин Игорь Геннадьевич

факультет ВМиК МГУ им. М.В. Ломоносова

Лектор: Игорь Геннадьевич Головин

Курс: Языки Программирования

Языки программирования, кратко рассматриваемые в течение курса:

  • С++

  • С#

  • Java

  • Delphi

  • Ада

  • GNAT продвижение языка Ада

  • Модула 2

  • Оберон

  • Оберон 2

  • С/Паскаль

Литература по курсу

  1. В.Ш. Кауфман Языки программирования: концепции и примеры.

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

  3. Тернс Пратт М. Зелковец ЯП: разработка и реализация.

  4. Бен Ари Языки программирования

Книги по конкретным языкам программирования

  1. Страуструп Дизайн и эволюция языка С++

  2. Нараина Джехани Язык Ада

  3. Никлаус Вирт Модула 2

  4. Арнольд, Бослинг и Хомс Язык программирования java

  5. Герберт Шилдт книга по java

План курса

  1. Введение

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

  • понятие типа данных и модуля – центральные понятия.

  1. Основные понятия объектно-ориентированных языков программирования

В курсе не будут рассматриваться

  • Параллельное программирование – отдельный курс программирования

  • Логическое программирование

  • Функциональное программирование –все ЯП нельзя свести к последним двум

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

Далее, в курсе, мы рассмотрим, как эти парадигмы отражаются в Lisp, Pascal и С#, эволюция которого идет в сторону добавления функциональной парадигмы.

ВВЕДЕНИЕ

1. Определение ЯП

С понятиями в курсе возникает некоторая путаница. Разные слова обозначают одинаковые вещи и наоборот.

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

Экспоненциальное определение определяет его через объем (Человек – Вася, Петя, Маша). Следуя ему, мы четко делим сущности – «это – не ЯП, а это – ЯП» (Английский и Язык программирования С++)). Исторически, список ЯП стоит начинать с языка Fortran. Далее пошло их интенсивное развитие. К 2000 году уже насчитывалась около нескольких тысяч различных языков программирования. В 60 годы каждый ВЦ считал долгом придумать свой язык программирования.

Возникает логичный вопрос: HTML – язык программирования или нет? Вот почему нам не очень подходит экспоненциальное определение.

Интенсиональное определение. ЯП – инструмент для планирования поведения исполнителя(Кауффман) Тут вводится основное понятие-аксиома – исполнитель (как и компьютер, так и человек или что-либо еще). С этой точки зрения машинный язык - планируемый – язык программирования. В С, Pascal исполнитель – вычислительная система. Так и html также ЯП, так как один из его исполнителей browser. Xml так же ЯП, здесь исполнитель любой, кто интересуется структурой документа. Для него исполнитель не столько компьютер, а определенная часть вычислительной среды. Английский язык тут не является языком программирования, так как не предназначен для планирования. Но из него реально выделить подмножество языка, используемое для координации исполнителя. Это определение достаточно широкое и включает нетрадиционные вещи.

В частности, очень важной чертой ЯП являются средства для планирования (описания последовательности, алгоритма, большинство ЯП – последовательные). Для адекватного планирования необходима обратная связь, то есть необходим контроль ЯП. Поэтому, в ЯП выделяется 2я часть (в Машинном языке этого нет) по контролю.

То есть, современные ЯП состоят из 2 частей. 1 – планирование (прогноз), 2 – контроль (статическое описание данных, к примеру, механизм обработки исключений). Контроль иногда называют еще и защитой.

ЯП и парадигмы программирования

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

Основные парадигмы.

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

Основные понятия этих языков – понятие состояния (понятие переменной) (в Pascal, С переменная - место в памяти, где может храниться значение; развитие понятия переменных – тип данных; возникновение понятия «константа» и так далее).

Второе понятие – понятие оператора присваивания (в горшочек можно что-либо положить). Оператор присваивания - главный.

Еще одно из основных понятий – оператор перехода. Понятие последовательного выполнения операторов. В качестве базовых операторов – операторы присваивания, перехода, либо ввода-вывода.

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

Следующая парадигма – ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ парадигма, основанная на понятии класса. Объекты объединяются в классы. При ООП все изображается при помощи объектов, с присущими им состояниями и поведениями. Один объект посылает другому сообщение, далее вступают в ход обработчики. Фон-неймановская парадигма хорошо расширяется на ООП (состояние – переменная, поведение – функция). В Smalltalk есть понятие переменной, там есть переменная «экземпляр», переменная «класс», метод доступа. Это все тоже расширение Фон-Неймановской парадигмы. Поэтому в ЯП легко легло понятие ООП (С, Objective C, Pascal, Object Pascal). Язык Ada появился в 1983 году, а в 1985 году в него добавили ООП. Процедурно-объектная парадигма – сейчас лидирующая.

ЛОГИЧЕСКАЯ парадигма. У нас есть некоторое утверждение. Вернее, даже исчисление высказывания. Например, Сократ – человек. Есть логические связки – импликация. Вводится понятие формулы (предиката). В логическом программировании мы формируем программу в виде фактов и предикатов. (Предикат – что-то типа «для любого x, f(x)....»)

Оказывается, что при определенном способе записи можно придать вычислительную семантику программе. «Сократ – человек. Все люди – смертны. Сократ – смертен»

ФУНКЦИОНАЛЬНАЯ парадигма. Поведение объекта описывается в терминах функций (в Фон-Неймановской модели самое главное – понятие переменной – места). Оператор присваивания позволяет перезаписать ее значение. В функциональной парадигме переменная - формальный параметр для функции. Поэтому тут отсутствует понятие состояния. На любом языке можно написать полноценную программу, в которой есть рекурсия (почти на всех, начиная с Алгол 60). Пример программы - есть количество денег, необходимо разменять их на более мелкие монеты.

Фон-Неймановская модель появилась в 1946 году и царствовала вплоть до 1957. ООП появилась в 1972 (зачатки - 1967 – язык Симула 2). Логическая – в 1971. Функциональная – 1965 – язык Лисп. Сейчас процветает ООП, начинает проникать функциональная. Ожидается появление логической парадигмы.

Аппликативная парадигма представлена языком REFAL, осталось сообщество его пользователей. Ее можно считать частью функциональной. Базовое понятие – образец и его применение, там есть и функция. Входная строка отождествляется с 1 образцом, если проходит, то подставляется образец 2, этим она напоминает Марковские машины. В обоих образцах могут участвовать функции. Особого распространения не получил, но парадигма его существует. Некоторое подобие мы видим при взаимодействии html и xsl. Такие преобразования легко выразить в Refal, а не в ad-hoc к html.)

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

Очевидная классификация по выразительным средствам может быть дополнена до классификации по областям применения. Например, языки обработки текста, языки системного программирования (C, Modula 2), языки обработки данных, скриптовые языки (языки сценариев). Один из известных скриптовых языков VBA (интерпретатор встроен в Office). Javascript встраивается в браузеры. Скриптовые языки получили популярность из-за веб-приложений. Они расширяют функциональность сервера: ASP, JSP, Perl. Эти языки отличаются от языков системного программирования, но они тоже имеют место быть. Эта классификация менее актуальна в данное время. Реально мы будем говорить про языки, отвечающие только лишь первым двум парадигмам.

2. Виды программирования

1. Игровое программирование. Программист создает программу для себя и они никакой ценности не имеют (для забавы или нет)

главное требование к ЯП для игрового программирования -легок для обучения и использования(например, Visual Basic)

2. Научное программирование. Это когда небольшой коллектив создает программы для собственного использования или для использования небольшим контингентом. Создаются для решения вполне четкой и важной задачей. Количество пользователей ограничивается либо одним пользователем, либо несколькими. Примером такого может служить browser для www. Но потом они перешли в другой разряд (первый browser был создан для общения между собой - Mosaic). Одно из направлений этого программирования – решение математических задач.

Требования:

  1. удобность использования, легкость освоения не играет роли

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

Язык Fortran – лидер этой области программирования. Но он является контрпримером, как не надо делать языки программирования. Но и лидером, так как он был самым первым, но на нем накоплены огромные запасы прикладных программ.

3. Индустриальное программирование. Это как раз производство программных продуктов. Он принципиально пишется для того, чтобы его использовали другие люди. Программа производится с целью отчуждения. Цели и изобразительные возможности сильно отличаются от первых двух. К ним предъявляются совершенно другие требования. Языки Программирования для индустрии совершенно не используют 3-5 парадигмы. Прежде всего, пишется на процедурных языках, позже на ООП.

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

Точки зрения

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

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

3. Реализаторская позиция. Позиция того человека, который пишет компилятор. Но она у нас не основная. Существует точка зрения, что хороший курс по языку можно прочесть без упоминания о реализаторской позиции. Но некоторые вещи без нее понять нельзя или очень сложно. Fortran – модульный язык. Программа состоит из подпрограмм. Локальные переменные подпрограмм не видны в другой подпрограмме. Для этого в Fortran введено понятие общего блока. Общий блок мог быть как и именованным, так и неименованным. В неименованных блоках нельзя инициализировать переменные, а именованные общие блоки должны быть одного размера (из-за особой среды компилирования). Либо использовать ограничение с циклом. Хорошие языки программирования не должны использовать такие вещи. Хороший ЯП мы должны объяснять в терминах абстрактной машины. А если мы посмотрим на индустриальную реализацию – что хуже? Чтобы ответить на эти вопросы, надо отдельно рассматривать суть каждого проекта (пример про то, можно ли все функции делать виртуальными – ответ: смотря где, так как иногда накладные расходы могут быть слишком большими. Некоторые вопросы нельзя понять без реализаторской позиции(вопрос про виртуальное наследование)).

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
426
Средний доход
с одного платного файла
Обучение Подробнее