лекции (2010) (by Ульянов Алексей_ Лихогруд Николай_ Сергеев Николай) (1160852), страница 2
Текст из файла (страница 2)
по-простому«забывая» про другие данные.По мнению Барбары Лисков, абстракция данных получила наибольшее развитие в языках CLU, ALPARD иModula. На уровне современного понимания языков программирования считается, что абстракция иинкапсуляция данных являются самыми важными понятиями, даже важнее наследования.Итак, период зрелости начался с языков программирования Си и Паскаль, которые сразу заняли своиэкологические ниши. Следующим важным языком этапа «Зрелости» является Ада.В Пентагоне, который в те времена активно разрабатывал систему ПРО и различные видыкомпьютеризированных вооружений, провели исследование расходования средств на жизненный циклпрограммы.
Выяснили следующее:25%50%ТестированиеСопровождение!!13-15%Спецификация10-12%Программирование1976 197819791980В связи с тем, что Пентагоном и егосубподрядчиками использовалось свыше 350 ЯП(из них было около 12 более-менее частоиспользуемых, остальные – редкие =>сопровождение ещё дороже, т.к. подходит нелюбой программист, а только специальноподготовленный), отсутствовали стандарты, былопринято решение разработать универсальныйЯП(3-я попытка), и покупать программы,написанные только на нём.В 1976 Были выставлены первые требования (их называют «соломенными»), затемвыставили «Деревянные», и, наконец, в 1978-м году – «Стальные».– Объявлен конкурс и языки-матки.
Ими стали PL/I, Algol 68, Pascal.Сквозь все требования прошли 12 языков. Далее было отобрано 4. Все 4 былиоснованы на Паскале.Победивший язык назвали «Ада» в честь первой женщины-программиста (да ивообще программиста), которая в своё время писала программы для создаваемоймашины Бэббиджа, которую смогли создать только его потомки в 20-м веке.1983Стандарт языка Ада. Разработка комплекта аттестации компиляторовПримерно раз в два года выходил документ, который разъяснял стандарт, т.к. язык получился оченьсложным.
Пентагон уделил особое внимание контролю качества компиляторов и придумал целую систему ихсертификации.Принципы языкового дизайна••Принцип критичных технологических потребностей («сундучка») - хорошо бы взять с собой всевещи(потребности), которые в принципе могут пригодитьсяПринцип минимальности языковых конструкций(«Принцип чемоданчика») - чемодан ограничен итяжёл, много не унесёшь => нужно брать только самое нужноеКак я понял, названия этих принципов подразумевают то, что сундук больше чемодана (на Руси не былошкафов, вещи хранили в больших сундуках) – комментарий студента.Из вышесказанного видно, что эти принципы являются конкурирующими, т.к.
уклон в сторону критичныхтехнологических потребностей ведёт к перегрузке и чрезмерному усложнению языка, что противоречитвторому принципу. И наоборот, если реализовать только минимум конструкций, язык может получитьсянедостаточно мощным.1988199319952005Вирт разрабатывает Оберон. Язык, который наиболее соответствует принципуминимальности минимальности языковых конструкций.Оберон-2. Ещё более сжатый и краткий язык.
Характерен быстрой скоростьюкомпиляции и эффективностью получаемого кода. Оригинальное описание языка,составленное Виртом, имеет размер около 20 страницНовый стандарт Ада-95. В и без того сложную Аду добавили объектноориентированную парадигму.Ада-2005GNAT — один из самых популярных компиляторов с языка Ada.При разработке Ады уделили внимание•••Надёжности – важнейшее требование, т.к. на Аде пишутся программы для военных объектов. Иошибок, падений и прочего тут быть не должноЭффективности – все военные системы должны работать быстроЧитаемостиОсновной недостаток Ады – сложность.Ада и Модула-2 были завершающими языками периода зрелости.Объектно-Ориентированное Программирование:Первым полностью объектно-ориентированным языком был Small Talk1980198319951999Модула-2Си++JavaC#Лейтмотив лекции – «Существует ли универсальный язык?». Ответ однозначен – Нет!Лекция.
Ульянов А.В.4.1. Основные концепции императивных языков программирования.ПП:1) Императивное – господствует2) Функциональное – ML, Lisp, Хаски3) ЛогическоеБольшинство ЯП – императивные, это связано с наибольшей эффективностью. (Такая у нас сейчас архитектураЭВМ).Императивное: основано на принципах Фон Неймана:ПамятьОбъекты, данные, типы…:=ЦП (АЛУ, УУ)операции:= - абстрактный обмен между памятью и ЦП.1978 – Джон Бекус прочитал уникальную лекцию «может ли программирование быть освобождено от ФонНеймановского программирования».
Предложил ФП. Такая ситуация не вечна. Просто императивные ЯПзаведомо более эффективны. Но от этого отходят.Глава 1. Базисные понятия ЯП.П1. Данные, операции, связывания.Данные – некая сущность, над которыми выполняются операции.Операции – то, что можно делать с данными.Дуализм (между данными и операциями).Строка – данные. А длина строки?В С - …\0 Length – операция.В TP – длина строки ограничена 255 (в нулевом байте хранится длина строки). Отсюда д.с.
– данные.В VB – BSTR – похож на char. Длина строки находится в первых двух байтах => данные.Такой дуализм вводит понятие Свойства: getters\setters. Которое реализовано, например, в C#:int x{get{…}set{…}}Class c;c.x;С точки зрения доступа – данные, а вот с точки зрения реализации – x состоит из двух процедур, т.е. –операции.Что главное: операции или данные? С точки зрении современной теории:В ООП хорошо спроектированный класс должен иметь функциональный интерфейс (данные –> protected) =>главные – операции, а данные помогают их реализовывать.Связывание:ОД(объект данных) – переменные, константы – абстрактное место, где могут храниться данные.Существуют связи:ОД < - > значениеОД < - > адресx.f() – связывание между именем функции и его телом.Причем время связывания не равно моменту связывания.
(с точки зрения интервала)Существуют 2 основных вида связывания:a) До начала работы программы (статическое)b) Во время работы программы (динамическое)i: integer;До начала работы программы идет связывание i и integer, а также integer и набором допустимых операций(+,-,*,div,mod) в момент компиляции.Виды связывания:1) Статическое – в момент трансляции, сборка(линковка) – с точки зрения ЯП.2) Динамическое – во время работы программы - между ОД и его значением: V=30;3) Квазистатическое (константы: const C = 20;)C++: void f( int N ) - КС{int K = N; – похоже на статическое связывание, но выполняется динамически, во время работы программы.}Ада: N: integer const := 20;Procedure D( L: integer )K: integer const := 2; - КСBegin…End D;Время связывания будем различать на:1) Статическое2) Динамическое3) КвазидинамическоеАтрибуты данных:ОД в большинстве ЯП имеет 6 атрибутов данных (не все являются обязательными):a)b)c)d)e)f)имя – необязательнозначение – обязательноадрес – не универсален => зависит от компиляторатип данныхвремя жизниобласть действияИмя (идентификатор): необязательноint a[10]; a[2] – статическоеint i; a[i] – динамическое (зависит от компилятора)Имя <-> значение:Для константы – статическое, для переменной – динамическое.Адрес:X* p= new X();X & x = *p;delete(&x);Нельзя брать адрес от константы.
Ссылку на константу можно.Типы данных:Чем выделяются (определяются)Определяются назначением.Современная точка зрения:Тип данных = Множество операций + Множество значений.Примером может служить стек: Pop, Push, IsEmptyIsEmpty(v) = true;Push(v) => Not IsEmpty(v)Абстрактный тип данных = множество операций. (основной вид современного программирования)Когда происходит связывание: ОД ТДБольшинство императивных ЯП – статическое связывание.Java Scrypt, php… – динамическое связывание.
(в основном такие языки являются интерпретируемыми).Ада 83: Любой ОД имеет тип.В традиционных ЯП – любой ОД имеет единственный тип.ООЯП – любой ОД имеет статический тип. (Base d;)Однако некоторые ОД могут иметь динамический тип.С++: указатели и ссылки.(Base* p;)Время жизни (время существования): класс память.Определяется от момента распределения в памяти, до момента выхода из памяти.Все время работы программы: статические объекты (С)Динамические объекты:Время жизни определяется программистом – new (delete).Когда удаляется из памяти – “сборщик мусора”, но отсутствует delete (или от реализации).Промежуточные:В С++: Автоматический класс памяти (объект)Блок (является управляющей конструкцией): блок объявлений и блок операторов.Объект <-> Память.Статический => Статическая.Динамический => Динамическая.Квазистатический => Квазистатическая.Сохраняемы объекты данных: могут сохраняться во внешней памяти и восстанавливаться.
Могут сохранятьсяи восстанавливаться между работой различных запусков программы.CLR(спецификация) – единая система типов. Набор типов данных, динамический сборщик мусора.Объявление -> имя; связывание ТДОбласть видимости – часть программы, где устанавливается объявление.Область действия (видимости) распространяется на имена.1. Определяющие вхождения имени (как правило предшествуют использованию) – определяются основныехарактеристики имени.2. Использующие вхождения имени.Область действия – область действия определяющего вхождения.Область действия:a) статическоеb) динамическоеЭто понятие связывается только с ОД.ОД имяДелится на 2 класса:1) определяющее вхождение2) все остальное – использующее вхождение.Область действия имени – часть программы, где действия определяют вхождения.Область действия определяется синтаксически и часто является блоком.Pascal:i: integer;Правильный ответ – Я не знаю контекста.1-й контекст: блок begin … end2-й:var i: integer;3-й:record … endJava script:Var i; - объявление имени.i = 0; - определяется вхождение.Если же сделать по-другому, то при a != 0 будет ошибка:if ( a == 0) i = j;j = i;Перекрытие имен:void f();void f( int );Перекрытие определяется правилами языка.Перекрытие имен не является необходимым (Оберон), но иногда это полезно.В большинстве ЯП области действия не накладываются, а только вкладываются.В таких языках, как Java, C# локальное имя не должно совпадать с глобальным для данного блока.