лекции (2007), страница 3

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

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

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

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

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

1983 стадия развития Ада

Требования

  1. надежность

  2. эффективность

  3. читаемость

3 этап закончился условно в 1983 году. Но только условно.

- Объект ТД

- инкапсуляция

- наследование

- динамический полиморфизм

Основные языки, появившиеся в это время

Simula 67 (понятие «класс», «динамическая память», «наследование»), в 1972 году сотрудники лаборатории Xerox разработали SmallTalk. В 1980 вышел SmallTalk 5, но этот язык застыл в своем развитии. Хотя с точки зрения энтузиастов, в нем все есть, но основная проблема этого языка в эффективности (реализация виртуальных методов очень тяжелая).

В 80-е годы были популярны язык Pascal и язык С. И наиболее эффективные. У Pascal было расширение Object Pascal. Но к Borland Pascal он не имеет никакого отношения. У C был Objective C. В 80-е годы язык C оказался очень удачным, плюс распространение бесплатных компиляторов в Unix, в том числе в 1979 году. Язык С с классами создал Страуструп. Потом он сделал С++.

Причины успеха С++

- трепетная совместимость с языком С (разработка стандарта ANSI C согласовывалась с пользователями). Хотя, некоторые вещи все-таки приходилось менять. Сначала там шла минимизация количества ключевых слов. Пользователи, которым понравился язык, меняли свои программы. Но библиотеки для системы не переписывали. Поэтому всякие Pascal отпадали.

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

Основная задача создателей языка Fortran – выжать быстродействие численных расчетов. Что поколебало Fortran, были Boost и Loki для С++, шаблоны которых уже созданы прямо, чтобы тупо преобразовывать текст. Например, то же введение inline + template, что сокращает накладные расходы.

История развития С++ проходит в несколько этапов.

1 - 1979 – 1983 период первого развития. С с классами

2 – 1986 – С++ 2.0 уже широко использовался программистами. После этого он продолжает развиваться по всему миру. В частности, Страуструп в своей книге «дизайн и эволюция языка С++» сказал, что есть буквально несколько пунктов, которые он бы сделал по-другому. 2 крупных понятия из ООП не были реализованы сначала: множественное наследование и механизм шаблонов. Но в 1986 году смогли реализовать только множественное наследование. Решение очень спорное, но оно помогло ему в развитии. Но потом, когда внедрили шаблоны, каждый компилятор делал это, как хотел. Visual С++ полностью реализует все шаблоны не так. Принятие стандарта языка отложили до того, как STL была написана полностью. В 1998 году был принят стандарт языка C++.

По сравнению с сегодняшним С почти не изменился. А С++ все время расширяется. Но С++ стал чересчур сложным. В 90-е годы начала появляться тенденция создания чистых объектных языков для индустриального программирования. Прежде всего это язык Oberon – 1988 год (с точки зрения минимальности – один из самых маленьких языков, (выжатый язык Modula 2 + наследование)) В Oberon 2 появились процедуры, динамически привязанные к типу.

1995-1999 годы - борьба Java(1995) и C# 1999 и Delphi. C # и Delphi были созданы одним автором. Delphi основан на VCL. Потом он перебазировался на создание J++. Java появлялась, как некоторый маркетинговый ход. С технической точки зрения это +. А с точки зрения финансов – это минус. Java была предложена для того, чтобы достичь кроcсплатформенность веб-приложений. Понятие виртуальной машины. JVM и байткод – основа Java

Ucsd-pascal и smalltalk.

Для Pascal разработали P-код, чтобы можно было программы Pascal делать на различных машинах. У нас есть один язык Pascal, один транслятор в P-код. И для каждой архитектуры делается интерпретатор P-кода. Примерно та же идея была реализована в smalltalk. Создали машинный код для виртуальных машин.

Вот так компилятор языка Java переводит программу в байткод. A JRE – виртуальный интерпретатор байт кода. Ecma – ассоциация развития компьютеров.

Язык с# - основа .NET. В этой системе предлагается использовать разные ЯП в одной и той же среде. Microsoft разработала Common Language Specification. Язык, который удовлетворяет CLS - встроен в .NET. Типы переменных (целый, вещественный, строка) и процедуры их обработки. У всех языков CLS одинаковые даже обработчики мусора. В итоге, .NET представляет собой RE, с байткодом они действительно сделали MIL. Но принципиальное отличие в том, что для него нет интерпретатора ( есть компилятор jit).

В C# появился стандарт 3, который делался для поддержки COM (COM - компонентная модель объекта).

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

COM – это специфический набор интерфейсов. COM объект – объект с интерфейсом IUnknown с 3мя методами: QueryInterface, AddRef, RClean.

В каждом языке своя система, свои правила, свои библиотеки. И они до этого никак не могли договориться, кто будет выделять и освобождать память, к примеру. Адекватно решить эту проблему COM не смогла. Идея была в том, пусть сам объект заботится, кто ему будет выделять память (счетчик ссылок). Но забыть в тексте программы AddRef и RClean - проще простого.

На смену этого пришло .NET

Вопрос - как стандартизовать данные? Вся система .NET основана на CLS (Common Language Specification) С одной стороны эта спецификация говорит, что процессы в системе использует одну систему типов, покрывающую все типы, которые можно реализовать на нынешней системе Windows. Она поддерживает как и Dword, так и строки (bstr). Вся идея была основана на том, что все языки, поддерживающие эту спецификацию, удовлетворяют общим требованиям. В свою очередь, CLS делится на CLI (common language infrastructure – dictionary, различные массивы (они должны поддерживаться каждым языком)) и CTS(Common Type System – как раз совокупность всех типов, поддерживаемых этой спецификацией). В итоге, мы получаем общую библиотеку и общую систему типов. Для того, чтобы язык погрузить в эту систему, он должен удовлетворять CLS. Существующие ЯП были изменены, чтобы поддерживать это, но они претерпели много изменений.

Например:

VB.NET

JScript

C#

Фирма Netscape придумала язык Lifescript чтобы «оживлять» страницы.

Договорились, чтобы этот язык назывался javascript, в пику java, так как он был немного похож синтаксисом на Java. jscript - расширенная и подправленная версия javascript (это к вопросу, что же такое JavaScript).

Процесс преобразования языков под .NET платформу

Что у нас было с языком C

int i;

&i

Надо было взять подмножество C++ с контролируемыми указателями из среды .NET. Плюс язык был дополнен чертами, чтобы быть совместимым с .NET (Managed C++ - страшная вещь).

Нужно было сделать специальный язык, для которого все эти типы были бы родными. Таким языком и явился C#. Как раз его отцом стал Андельс.

В системе .NET нам по большому счету все равно, что писать. Если проект написан аккуратно, то стоимость перевода на .NET не столь велика.

Раньше говорили, что пройдет несколько лет, исчезнет WinAPI, и все будут писать на .NET

C# и Java были синтаксически очень похожи, аналогично с Delphi.

С# был сразу отдан на стандартизацию ECMA и 2ой стандарт был полностью с ним согласован. Сам язык подразумевает динамическую сборку мусора и динамизм. Тип был привязан к значению, а не к переменной.

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

VB славился тем, что программы его были короткие, но VBRun к ним был очень большой. Специалисты с Microsoft понимали, что сделать эффективный интерпретатор им не удастся. Но цель сделать эффективный интерпретатор – вполне достижимая, вспомнить даже реализацию виртуальной машины Java. Но чтобы пройти стандартные тесты, к этому интерпретатору прикручивались дополнительные винтики, чтобы сделать ее быстрее.

Ответом от Microsoft послужил MIL, к которому не было никакого интерпретатора, но disassembler имелся. С MIL, зная принципы трансляции, воссоздать C# программу довольно просто. Аналогичная проблема была решена в языке java, так как в общем случае это нехорошо. MIL при помощи Just In Time компилятора и работает. По мере загрузки класса из MIL можно проверить, удовлетворяет ли класс спецификации - соответственно, с MIL можно ожидать повышение уровня безопасности. Но этого не произошло, так как для этого требуется написать все компоненты на .NET.

На этом введение закончено.

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

Их всего 3.

- Данные

- Операции

- Связывание.

Данные:

Любая программа имеет связь с данными. Есть понятие «объект данных», которое обладает некоторыми свойствами:

- имя – идентификатор, последовательность букв и цифр, начинающаяся с буквы

- значение

- тип

- область действия (область видимости)

- время жизни

Тот язык, в котором существует понятие адрес переменной - Фон Неймановский.

Один из вопросов, встающих перед проектировщиками – как давать составные имена. С точки зрения имени, нам интересно именно его связывание, а если оно и связано, то как и когда. Интересно, что в Коболе и Фортране эту проблему решают довольно просто: именовано – переменная, не именовано – константа. Весь комизм ситуации в том, что константы в программе должны быть тоже с именами. Но при хорошем проектировании, в программе констант должно быть около 3х.

В современных ЯП, если речь идет об объектах классов, все объекты делятся на 2 вида.

1 - простые типы данных

2 - референциальные типы данных.

Так же вводится понятие value types. Объекты референциальных типов данных все анонимные.

X c;

Если X - имя типа, с - намертво связано. И в современных ЯП это означает, что к объектам мы обращаемся только по ссылкам, сами объекты не именованные.

Имена связываются со ссылками на объекты, но не с самими объектами.

Имена присваиваются вместе с простыми типами данных. У константы значение связывается 1 раз, у переменной связывание непостоянно.

Основная операция в функциональном языке - применение функции. Вместе с этим, если мы вызываем функцию f(a,b,c), само связывание переменных со значением происходит только при вызове функции. Связывание – динамическое. Для константы связь статическая, или квазистатическая.

В таких языках, как Pascal или С++, связывание статическое.

Бывает и другой тип констант, которым мы присваиваем значение 1 раз, и они с этим значением и остаются до конца.

Тип Данных = множество операций + множество значений

Абстрактный Тип Данных = множество операций

IsEmpty(s)<=> Push(s,x); Pop(s) <=> IsEmpty(s);

Любая реализация, которая удовлетворяет этим аксиомам - стек. Оно и определяет множество операций.

Абстрактный класс, доведенный до абсолюта – интерфейс.

Типы данных в «безтиповых» языках связываются только со значениями.

Область действия переменной и время ее жизни.

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

- статическая

- квазистатическая (автоматическая)

- динамическая

(есть еще один тип, который мы не учитываем – регистровая память)

Статические переменные живут все время исполнения программы, начиная с момента ее инициализации. Для квазистатических переменных выделяется некая область, время жизни переменной ограничено, как только выходим из блока, переменная умирает. Для переменных динамической памяти все полагается на управление сборщиком мусора: например, что происходит с объектом, на который ничего не ссылается, какое время он будет существовать – все это не контролируется программистом. Так же значение ссылки все время может передвигаться, в результате работы сборщика мусора, но к этому есть исключения, когда объекты можно «lock» - persistent object. В технологии COM есть iPersist, такая вещь сохраняется где-то во внешней памяти.

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

var x; - увеличивает эффективность, так как отключает динамическую область видимости, использует статическую.

x=0;

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