© ACT Europe согласно GNU Free Documentation License Франко Гасперони gasperon@act-europe.fr перевод: Владислав.

Презентация:



Advertisements
Похожие презентации
АНАСТАСИЯ ТКАЧУК PK11-PV TEKO 1 Языки программирования.
Advertisements

Модуль переноса решений Как средство распространения партнерских решений Варфоломеев Антон Директор по производству DocsVision.
OpenGL и Direct3D сравнение стандартов Выполнил: Пенкин А. Группа И-204.
Использование языка Си для программирования ЦСП TMS320C67x.
Инструментальные средства визуальной коммуникации и прикладной дизайн Лекция 3.
Лекция 5 Способы конструирования программ. Основы доказательства правильности.
1 Диаграммы реализации (implementation diagrams).
Выполнил: Гусев Данил. Что такое программное обеспечение? Возможности современного ПК столь велики, что все большее число людей находят ему применение.
1 Технология структурного программирования Формирует у ученика культуру программирования. Упрощает переход к более сложным и совершенным технологиям: объектно-
Объектно- ориентированная платформа Windows
ПроектированиеРазработкаВнедрение г. Самара ул. Льва Толстого
Компьютерные технологии в метеорологии (Java-технологии) Чукин В. В.
Язык программирования формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических.
Операционные системы. Первое поколение компьютеров (элементная база - электронно-вакуумных лампы) – конец 40-х - начало 50-х годов XX века (1946 г. в.
БЭСТ Дизайнер проектов Введение Концепции Основные понятия.
Язык программирования формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических.
Лекция 6 Понятие операционных систем Учебные вопросы: 1. Характеристики ОС 2. Свободные и проприетарные ОС.
1 Тема 1.7. Алгоритмизация и программирование Информатика.
Компьютерные словари и системы компьютерного перевода текста Урок информатики 10 класс.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ КОМПЬЮТЕРА КОМПЬЮТЕР КАК УНИВЕСАЛЬНОЕ УСТРОЙСТВО ДЛЯ РАБОТЫ С ИНФОРМАЦИЕЙ Информатика и ИКТ.
Транксрипт:

© ACT Europe согласно GNU Free Documentation License Франко Гасперони перевод: Владислав Козловский Языки программирования и конструирование программного обеспечения

© ACT Europe согласно GNU Free Documentation License 2 Домашняя страница курса Здесь находятся все слайды курса (PDF и PowerPoint) Здесь находятся все слайды курса (PDF и PowerPoint) Местонахождение оригинального курса Здесь находятся все слайды оригинального курса (PDF и PowerPoint) Здесь находятся все слайды оригинального курса (PDF и PowerPoint)

© ACT Europe согласно GNU Free Documentation License 3 Уведомление об авторском праве © ACT Europe согласно GNU Free Documentation License © Владислав Козловский (перевод) согласно GNU Free Documentation License Позволяется копировать, распространять и/или модифицировать этот документ согласно условиям GNU Free Documentation License, Версии 1.1 или более поздней, опубликованной Free Software Foundation, при условии упоминания автора оригинала и переводчика, а также сохранении ссылки на первоисточник ( europe.fr/). Полный текст лицензии доступен по адресу:

© ACT Europe согласно GNU Free Documentation License 4 Сходство конструкций* Строительные конструкции Программные конструкции Чертежи Документы по анализу и проектированию (н.п. диаграммы UML) Материалы Языки программирова- ния (ЯП), библиотеки, повторно используемые компоненты Инструменты Инструменты разработчика: Редактор, компилятор, отладчик, упр.конфигурацией, инструменты тестирования,… *Аналогия взята с вступительного слова Такера Тафта на конференции Tools USA 99

© ACT Europe согласно GNU Free Documentation License 5 Фазы разработки ПО, затронутые ЯП Проектирование Создание структуры (архитектуры) программы, вокруг которой будет написан код Кодирование Заполнение структуры программы кодом Тестирование Проверка, действительно ли код делает то, что нужно (функциональность, производительность, надежность,...)

© ACT Europe согласно GNU Free Documentation License 6 Важность качества инструментов и материалов Строительные конструкции Программные конструкции Представьте себе первоклассную деревянную панель, в которую гвоздь можно забить только под строго определенным углом, иначе он будет гнуться Представьте себе программирование с использованием языка, который принимает все что вы напечатали и только потом пытается понять что же с этим делать Представьте себе процесс кладки стены, когда каждый 4-й кирпич в момент укладки его в стену раскалывается Представьте себе использование библиотеки графических компонентов, в которой каждая четвертая процедура содержит ошибку Представьте себе использование молотка, наконечник которого, при каждом неудачном ударе по гвоздю, постоянно слетает Представьте себе работу с компилятором, вылетающим при каждой третьей компиляции или генерирующим слишком медленный исполнительный код.

© ACT Europe согласно GNU Free Documentation License 7 Хороший Хороший язык программирования … Поможет создавать ПО: Надежное Безопасное Защищенное Пригодное для расширения и развития С хороший языком программирования жизнь станет проще. Правда он не будет делать работу за Вас.

© ACT Europe согласно GNU Free Documentation License 8 Плохой Плохой язык программирования … Сделает проблематичным создание ПО: Надежное Безопасное Защищенное Пригодное для расширения и развития Возможно написание хорошего ПО с помощью плохого языка программирования. Для этого требуется большее количество опытных разработчиков. Так или иначе это потребует больше времени и будет СТОИТЬ больше, чем с использованием хорошего языка программирования.

© ACT Europe согласно GNU Free Documentation License 9 Правда жизни о строительстве ПО Человеческие факторы, влияющие на программирование Люди делают ошибки Люди уходят Исправлять ошибки, портировать или добавлять новые возможности в ПО часто достается вовсе не первоначальным авторам кода ПО постоянно развивается Свойства хорошего языка программирования Усложняет написание неправильного кода Поддерживает абстракцию Помогает писать читабельный код Поддерживает модульную организацию ПО Переносимый

© ACT Europe согласно GNU Free Documentation License 10 Почему? Требование к хорошему языку программирования Объяснение Усложнять написание непра- вильного кода Люди делают ошибки. Особенно программисты, постоянно заваленные работой. Поддерживать абстракции Люди делают ошибки & Люди уходят. Необходимо писать программы на концептуальном уровне, близком к прикладной области. Это упростит создание и понимание кода. Помогать писать читабельный код Люди уходят. Особенно программисты. Чтобы сохранить вложенные в разработку ПО инвестиции, другие люди должны иметь возможность быстро понять написанный ранее код. Поддерживать модульную организацию ПО ПО постоянно развивается. Вы должны представить вашим клиентам ПО прежде, чем оно фактически будет закончено (важно для обратной связи). Более того, однажды поставив его, вы должны продолжать исправлять ошибки и добавлять новые возможности. Быть переносимым ПО постоянно развивается. Вы вынуждены переносить его на новые платформы.

© ACT Europe согласно GNU Free Documentation License Франко Гасперони перевод: Владислав Козловский Примеры языков программирования

© ACT Europe согласно GNU Free Documentation License 12 Пример программирования Можете ли Вы, меньше чем за 20 секунд, выяснить правильно ли реализуют 2 ниже представленные подпрограммы данное условие: Возвратить n-битный фрагмент 32 битного слова с Бита в позиции p До бита в позиции p-n+1 Биты нумеруются справа на лево бит 31 ……… бит p ………… бит p-n+1 ……… бит 0 n битов

© ACT Europe согласно GNU Free Documentation License 13 C/C++ unsigned get_bits ( unsigned x, int p, int n) { return (x >> (p-n+1)) & ~(~0

© ACT Europe согласно GNU Free Documentation License 14 Ада 95 function Get_Bits (X : Bit_Array; P : Bit; N : Offset) return Bit_Array is begin return X (P – N P); end Get_Bits;

© ACT Europe согласно GNU Free Documentation License Фортран(54) PL/I(66) Ада(95) Java(96) Бейсик(66) C(72) Кобол(58) Алгол(60) Симула(67) Smalltalk(80) C++(89) imperative A S S E M B L Y Eiffel (86) Хронология некоторых императивных языков программирования Ада(83) Паскаль(70)

© ACT Europe согласно GNU Free Documentation License Ада(83) Ада(95) Java(96) C(72) Паскаль(70) C++(89) Eiffel (86) ISO C++(98) Ада(2005) C#(2001)? ANSI C(88) ISO C(99) 2005

© ACT Europe согласно GNU Free Documentation License 17 Цели разработки С-подобных языков программирования C Переносимый, высокоуровневый ассемблер Не заботится о безопасности и надежности C++ Объектно-ориентированный язык, снизу-вверх совместимый с C Не заботится о безопасности и надежности Java Устранение присущих C++ проблем с безопасностью (н.п. невозможно создать вирус на Java) Не заботится о надежности

© ACT Europe согласно GNU Free Documentation License 18 БЕЗОПАСНЫЙ != БЕЗОТКАЗНЫЙ БЕЗОПАСНЫЙ != НАДЕЖНЫЙ Java – безопасный язык Следовательно, Вы не сможете создавать вирусы с помощью Java Java (как и C и C++) – не надежный язык Программисту легко допустить ошибку как во время привычной разработки, так и во время внесения последующих изменений и создавать некорректно функционирующие программы Sun Microsystem не рекомендует использовать Java в отказоустойчивых контекстах

© ACT Europe согласно GNU Free Documentation License 19 Содержимое Лицензии Windows 2000 ЗАМЕЧАНИЕ ПО ПОДДЕРЖКЕ JAVA ДАНОЕ ПРОГРАММНОЕ ИЗДЕЛИЕ МОЖЕТ СОДЕРЖАТЬ ПОДДЕРЖКУ ПРОГРАММ, НАПИСАННЫХ НА JAVA. ТЕХНОЛОГИЯ JAVA - НЕ УСТОЙЧИВАЯ К СБОЯМ И НЕ РАЗРАБОТАНА, ИЗГОТОВЛЕНА, ИЛИ ПРЕДНАЗНАЧЕНА ДЛЯ ИСПОЛЬЗОВАНИЯ ИЛИ ПЕРЕПРОДАЖИ КАК ИНТЕРАКТИВНОE ОБОРУДОВАНИЕ УПРАВЛЕНИЯ В ОПАСНЫХ СРЕДАХ, ТРЕБУЮЩИХ ОТКАЗОУСТОЙЧИВОЙ РАБОТЫ, ТАКИХ КАК СИСТЕМЫ УПРАВЛЕНИЯ ЯДЕРНЫМ ОБОРУДОВАНИЕМ, СИСТЕМЫ НАВИГАЦИИ САМОЛЕТА ИЛИ СИСТЕМЫ СВЯЗИ, СИСТЕМЫ УПРАВЛЕНИЯ ВОЗДУШНЫМ ДВИЖЕНИЕМ, МАШИНЫ ПОДДЕРЖАНИЯ ЖИЗНЕОБЕСПЕЧЕНИЯ ИЛИ ОРУЖЕЙНЫЕ СИСТЕМЫ, В КОТОРЫХ СБОЙ В ТЕХНОЛОГИИ JAVA МОЖЕТ ПРИВЕСТИ НЕПОСРЕДСТВЕННО К СМЕРТИ, ТЕЛЕСНОМУ ПОВРЕЖДЕНИЮ, ИЛИ СЕРЬЕЗНОМУ ФИЗИЧЕСКОМУ ИЛИ ЭКОЛОГИЧЕСКОМУ УЩЕРБУ. Sun Microsystems, Inc письменно обязал Microsoft делать эту оговорку.

© ACT Europe согласно GNU Free Documentation License Франко Гасперони перевод: Владислав Козловский Язык программирования Ада

© ACT Europe согласно GNU Free Documentation License 21 Ада Версия Паскаля промышленного уровня, специально созданная для построения: Надежного и безопасного программного обеспечения ПО нуждающегося в контролированном расширении, развитии Систем, критичных к выбору ПО (н.п. систем реального времени) ПО в смешанных многоязыковых средах Язык, разработанный международной командой 1983: Первая версия языка ­ Объектный, но не объектно-ориентированный язык 1995: Первый пересмотр стандарта (н.п. добавлена возможность OO программирования) ­ Первый объектно-ориентированный язык, стандартизированный ISO 2005: Второй пересмотр стандарта (н.п. расширена стандартная библиотека, улучшена поддержка ОО и встроенных систем реального времени) ­ Начат процесс стандартизации Единственный язык, имеющий формальную процедуру проверки правильности компилятора Процедура проверка – это стандарт ISO (> 4,000 тестов проверки компилятора)

© ACT Europe согласно GNU Free Documentation License 22 Ада: использовать для систем, связанных с безопасностью Требования безопасности рекомендуют использование Ады для самых высоких уровней целостности Даже документ MISRA-C рекомендует использование Ады: Рекомендации по использованию языка C для создания ПО для транспортных средств:...очевидно, что есть и другие языки, которые в многом лучше подходят для создания систем, связанных с безопасностью, обладающие (к примеру) большей надежностью и лучшим контролем соответствия типов. Примером подобных языков, в целом значительно превосходящих C, есть Ада и Модула 2. Если эти языки доступны для предлагаемых систем, то их применение, в сравнении с C, считается более предпочтительным. стр.3.

© ACT Europe согласно GNU Free Documentation License 23 Вдохновленные Адой свойства других языков программирования C++ Шаблоны (настраиваемые модули) Исключения Java Проверка индекса массива Проверка деления на 0

© ACT Europe согласно GNU Free Documentation License 24 Некоторые языки, производные из Ады SPARK Подмножество Ады используемое для проектирования особо критичных по отношению к безопасности систем VHDL Используется для проектирования чипов PL SQL Язык программирования, предназначенный для расширения SQL и превращения его в полноценный императивный язык программирования

© ACT Europe согласно GNU Free Documentation License 25 Критичные по отношению к бизнес-процессам Canal+ Technologies: Плата-за-просмотр. Управление доступом BNP: Язык принятия решений в торговле Philips: Линия по производству полупроводников Хельсинский радиотелескоп Критичные по отношению к решаемой задаче Astree: Трансевропейская система передачи сигналов на железной дороге Weirton Steel – управление сталелитейным производством Электронные деньги Mondex Сканирующий электронный микроскоп Критичные по отношению к безопасности Аэробус Airbus A340 Аэробус Boeing 777 Российский самолет-амфибия Бе-200 Некоторые индустриальные приложения написанные на Аде

© ACT Europe согласно GNU Free Documentation License Франко Гасперони перевод: Владислав Козловский Ада и стоимость разработки

© ACT Europe согласно GNU Free Documentation License 27 Источник: MITRE (область авиастроения) Ада и стоимость разработки (исследования 1995 года) 270,000 СИК 225,000 СИК 150,000 СИК ,0501,4001,7502,100 Пункты реализованной функциональности Стоимость разработки, тысяч долларов Ада Другие языки, ориентированные на человека C 135,000 СИК 112,500 СИК 75,000 СИК * СИК – Строк Исходного Кода

© ACT Europe согласно GNU Free Documentation License 28 Исследования компании Ziegler: Сравнение языков C и Ада Исследования 1995 на примере компилятора VADS 60 инженеров, на протяжении гг., все со степенью Магистра в области Компьютерных наук Все знали C на момент приема на работу. Все использовали в работе над проектом и C и Аду. VADS Около 4.5 миллионов строк кода, файлов, стоимость >28 миллионов долларов на протяжении 10 лет Код на CКод на Аде Make-скрипты Другое Всего строк кода

© ACT Europe согласно GNU Free Documentation License 29 Стоимость реализации на свойство Стоимость/свойство: $0 $50 $100 $150 $200 $250 $300 $350 CC, включая MakefilesАда

© ACT Europe согласно GNU Free Documentation License 30 Дефекты, обнаруженные (пользовате- лями) после поставки продукта КритическиеСерьезныеСредниеВсего C Ада

© ACT Europe согласно GNU Free Documentation License 31 Почему была выбрана именно Ада? Не из-за людей: Те же самые люди использовали оба языка Не из-за процесса: И для С и для Ады использовались схожие процессы для дизайна, для тестирования, для отладки, для контроля исходного кода, для управления, и т.д Язык C требовал makefiles, но имел более простые стандарты кодирования Не из-за высокоуровневых конструкций Ады: VADS использовал очень мало настраиваемых модулей и задач Ады Не из-за повторного использования: Это исследование оценивало только целевой код, исключая повторное использование

© ACT Europe согласно GNU Free Documentation License 32 Некоторые аргументы в пользу Ады Ада упрощала локализацию ошибок Большинство ошибок обнаруживалось во время компиляции Ошибки времени выполнения находить было легче Ада лучше поддерживала инструменты разработки Более богатая семантическая модель Ады позволяла переложить на компьютер большее количество работы Например, все сборки были автоматизированы и гарантированно непротиворечивы Ада уменьшала фактическую сложность Функция сложности языка и сложность приложения Язык, стандартно считающийся сложным, оказался легким для изучения и использования Ада поощряла лучшую организацию программы Пакеты, со спецификациями и приватными частями

© ACT Europe согласно GNU Free Documentation License 33 Резюме Разработка ПО на Аде обошлась на 60% дешевле чем на C Код написанный на Аде содержал в 9 раз меньше ошибок чем аналогичный на C Была ли в целом Ада лучше? *ДА* На протяжении разработки и сопровождения разных подмножеств VADS Для опытных программистов И для новичков Как для экспертов C ТАК И для экспертов Ады Как для наиболее ТАК И для наименее квалифицированных программистов, принимавших участие в проекте Сложно ли было изучать Аду? *Нет* Был ли написанный на Аде код более надежен? *ДА*

© ACT Europe согласно GNU Free Documentation License Франко Гасперони перевод: Владислав Козловский Ада и обучение

© ACT Europe согласно GNU Free Documentation License 35 С точки зрения образования Ада - хороший язык для преподавания хорошей практики программирования Надежность, безопасность, защищенность Ада 95 позволяет создавать как функционально- ориентированное, так и объектно-ориентированное ПО Ада позволяет конструировать программное обеспечения, способное развиваться Сегодня существует свободно-распространяемый высококачественный компилятор Ады(83/95/2005), доступный всем желающим GNAT (GNU Ada) ( Для платформ Linux, Solaris, Windows, Mac…

© ACT Europe согласно GNU Free Documentation License 36 Вы должны знать несколько языков Нет единого языка программирования на все случаи жизни Сегодня большинство систем использует смесь языков программирования

© ACT Europe согласно GNU Free Documentation License 37 Пример: MULTOS CA Многоцелевая ОС для кредитных карт со встроенным микропроцессором (smart cards) 30%: SPARK (подмножество Ады) Ядро безопасности с защитой от взлома Гарантирует САМЫЙ ВЫСОКИЙ уровень защиты 30%: Ада 95: Инфраструктура (многозадачность, межпроцессное и межзадачное взаимодействие, интерфейс с базой данных и т.д.), привязка к ODBC и Win32 30%: C++ Графический интерфейс пользователя (Microsoft Foundation Classes) 5%: C Драйверы устройств, криптографические алгоритмы 5%: хранимые процедуры и SQL запросы к реляционной БД