И.Г. Головин - Конспект лекций по курсу Языки программирования (1161120), страница 5
Текст из файла (страница 5)
Коллекции типов, у которых есть общий предок,называются гомогенными, а коллекции типов без ограничений – гетерогенными.Преобразование от Object к чему-то контролируемое.(T) e– e-object ссылается ли на T? Если нет – исключениеПлюс такого подхода в том, что это надежно Минус накладные расходы(особенно С++),диагностика возможна только в Runtime, необходимость поддержки множественногонаследования.В 1985 Страуструп, автор языка C++, выбирал между множественным наследованием ишаблонами. Выбрал первое, что было ошибкой. Позднее появились ObjectiveC (похож наSmallTalk), C++ – расширения языка С.
Некоторые говорят, что если возможности какого-тоязыка нет в Smalltalk, то это не объектно-ориентированный язык. В нем нетмножественного наследования. Утверждение: множественное наследование нельзяреализовать эффективно на подобных языках. В итоге из-за того, что Страуструп выбралмножественное наследование, пять первых лет языка C++ прошло без стандартнойбиблиотеки, и все ведущие компиляторы имели свои реализации библиотеки. От стандарта1998 года прежде всего ждали STL.СОЦИАЛЬНАЯСамой лучшей системой RAD (Rapid Application Development) в середине 1990-х была Delphi.В ней была мощная библиотека VCL. Однако Visual Basic 4.0, хотя и был хуже, сталпопулярнее, во-первых, благодаря мощной поддержке Microsoft и, во-вторых, потому, чтоPascal не было принято изучать в качестве первого языка программирования.СХЕМА РАССМОТРЕНИЯ ЯПI.БАЗИС ЯЗЫКА ПРОГРАММИРОВАНИЯБазис языка программирования – те составляющие ЯП, которые встроены в компилятор иопределяются синтаксисом.Базис может быть скалярным и структурным.22Скалярный базис – простые типы данных и операции.Структурный – составные типы данных операции над ними, операторы.Современные императивные ЯП обладают следующими свойствами:1.
Скалярный базис очень похож2. Структурный базис деградируетII.СРЕДСТВА РАЗВИТИЯСредства развития – новые типы данных ЯП.Пример: в С++ вся стандартная библиотека реализована средствами С++.Заметим, что C++ – это единственный язык, в котором строковый тип (std::string)реализован средствами языка. В других языках зашито в компилятор или .NETСуществует два основных средства развития ЯП:a. Процедураb. КлассIII.СРЕДСТВА ЗАЩИТЫ.Средства защиты говорят о том: как язык защищает программиста от неправильногоиспользования средств ЯП.Другими словами – средства поддержки необходимых уровней абстракций.Простейший пример: const.Заметим, что при изучении классов возникает вопрос, зачем же они нужны, если все то жесамое можно написать на структурах? Например, существовала оконная библиотекаXWindow.
Библиотека клиента Xlib была написана на C в процедурном стиле. Существовалтакже XToolkit – framework для объектно-ориентированного программирования на C. В нембыл базовый набор «классов», которые выглядели примерно так:Пример (C)struct Window {Core _core_part;Window _window_part;};Главным оператором в коде был switch. Казалось бы, чего не хватает, вот вам объектноориентированное программирование на C. А не хватает как раз средств защиты.Полноценный класс позволяет инкапсулировать и таким образом защищать.23БАЗИС ЯЗЫКОВ ПРОГРАММИРОВАНИЯВ курсе мы будем рассматривать индустриальные языки программирования.
Основнаяпроблема индустриального программирования – это сложность. Самые сложные программы– это операционные системы. Что такое миллион строк? Несколько шкафов, заполненныхбумагой. Осознать одному человеку такой объем кода просто не под силу. Порядоксложности какой? Например, X Server, сложность 100 тысяч строк на языке Керниган РитчиС, а также реализация протокола tcp/ip. В общем, не разобраться в такой программе. Однаколюди это делают. Помогают уровни абстракции.
Заметим, что если руководитель не можетизложить суть проекта на одной странице, значит он ничего не понимает, и его надоуволить.Для уменьшения сложности необходимы средства защиты – средства поддержкинеобходимого уровня абстракции. Нас будут интересовать именно средства построенияуровней абстракций.ИСТОРИЧЕСКИЙ ОЧЕРК РАЗВИТИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ1. Эмбриональный (зарождение) с 54 года до начала 60-х годов2. Бурный рост – до начала 80-х годов3. Эволюционный – до настоящего времениЗаметно, что длительность периодов увеличивается. В названных периодах можновыделить какие-то подпериоды.ЗАРОЖДЕНИЕПример (Fortran)Язык программирования Фортран 1954 – 1957гг – эпохальный языкпрограммирования. FORTRAN – formula translator (трансляторформул).Всегда служил примером – как не надо делать языкипрограммирования.
Но он используется до сих пор. Наиболеепопулярные версии Фортран77 и Фортран90 (иногда Фортран9x).Фортран добился ровно тех целей, которые перед ним былипоставлены. Ключевые цели: область научно-технических расчетов,область бизнес-приложений (коммерческих расчетов, бухгалтерия),как раз то, чем занимались люди в 50-х годах. Отличие – многовходных данных, мало расчетов, а у бизнес-приложений наоборот, онизанимались вводом входных данных, в основном.Писать программы мог тот, кто непосредственно знаком сархитектурой.
А вот модели писать могли и математики.Математик не понимает машинные коды, поэтому он объяснял, чтоему нужно программисту с помощью блок-схем. Блок-схема состояла24из блоков (последовательных вычислений, разветвлений). Фортранпереводил эти блок-схемы на машинный язык.
До языка Фортранвопрос о мобильности (переносимости, portability) программ вообщене стоял. Как только появлялась новая машина, для нее сразу жепоявлялся компилятор языка Фортран. Появилась мобильностьзнаний, человек стал уже не привязан к конкретному компьютеру. Атакже компилятор Фортран наиболее оптимален по сравнению сдругими языками.В чем суть блок-схемы? Какие основные операторы Фортран?V = e; тип REAL (с плавающей точкой);DOUBLE PRECISION (для особенно длинных чисел);понятие функции и процедуры.Например:RES = F(X)*CEXP(-k*x/z).Попробуем записать на языке Си:Plus(RES,Mult(F(X),CEXP(ToComplexInt(k),..И.Г.
– Я уже запутался, что дальше. Можете закончить эту запись доконца, и получить море удовольствия. Особенно при расстановкезакрывающих скобок.Придется придумать несколько десятков функций умножения,деления, которые будут делать одно и то же – делать из целого –комплексное, и т.д. Это уже языковые ограничения.
На языке C++ этипроблемы очень адекватно решаются с помощью шаблонов иперегрузки операций +, -, *, /. Добавляем конструктор преобразования– и все. Это достижение. Этим C++ хорош. В языке C эти проблемы нерешаются. В языке C99 они решены с помощью способов расширениябазиса.IF(l)M1,M2,M3 – единственный условный оператор.Еще был цикл, с известным числом повторений, для прохода по сетке.DO 5 I=1,3<операторы тела>5 CONTINUE40% операторов в языке Фортран имеет вид I = I + 1.Математиков это не смущало. Зато объяснить этот язык было25«проще пареной репы». Еще были 4 формы оператора goto, но их, свашего позволения, я не буду писать (И.
Г.).Формы ввода/вывода:PRINT 100,RESREAD …100 FORMAT …Все, что есть в Фортране, мы до сих пор используем. Фортран –научное программирование. Главная его критика связана с тем, чтоиз своей ниши он перелез в нишу языков индустриальногопрограммирования. Фортран очень интересный язык. Нужно лиописывать переменные? Как вы думаете? (Ответ, конечно же – нет).Массивы начинаются с 1, как всегда у математиков. Переменные I,J, K, L, M, N – и все. Решили очень просто. Первые 6 пунктовперфокарты – метка. Потом специальное место для строкипродолжения.
А дальше соответственно запись. Все пробелы простоигнорировались везде, кроме строковой константы. Тем, кто делалсканер, так было проще. И поэтому в Fortran значимы первые шестьсимволов имени.В чем минусы языка Fortran?Давайте поставим вместо пробела точку.DO5I=1.3 – появилась новая переменная, цикл выполнился 1 раз.Ошибка при тестировании не выявилась, а стоила несколькомиллионов долларов.Фортран сумел создать и занять особую языковую нишу. Языковую нишу занимает тот, ктоделает это первым, по аналогии с экологической нишей: каждую экологическую нишуидеально занимает один вид. Побеждает тот, кто пришел туда первым.
И в этом смыслепрограммные системы ведут себя как динозавры. Программные системы не внедряются,они выживают.После Фортрана появилось много языков, но они не вытесняют его. Все знают, что Фортраннесовершенный, но Фортран подходит к нише, поэтому не вытесняется. Фортран имелоглушительный успех, трудно найти еще один такой успешный язык.Затем появился Алгол-60, но он был уже вторым.Пример (Алгол 60)Алгол-60 был создан группой ученых.