Тверской государственный университет
Опубликован: 03.10.2011 | Доступ: свободный | Студентов: 3284 / 60 | Оценка: 4.33 / 3.83 | Длительность: 19:48:00
ISBN: 978-5-9963-0573-5
Лекция 1:

Введение

Лекция 1: 123456 || Лекция 2 >

Современная технология ПО

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

В последние годы две главные идеи, составляли потенциал создания качественного ПО — объектно-ориентированное конструирование ПО (ОО ПО) и формальные методы. Обе эти идеи, особенно первая, делают изучение введения в компьютинг более захватывающим и полезным. Они же, наряду с другими концепциями современной технологии разработки ПО, играют главную роль в этой книге. Давайте начнем наше первое беглое знакомство с этими идеями.

Объектно-ориентированное конструирование ПО

В предыдущей книге (на русском языке — "Объектно-ориентированное конструирование ПО", изд. "Русская Редакция", Интернет-университет, 2005г.) объектная технология рассматривалась на более глубоком уровне.

Конструирование ОО ПО исходит из осознания того, что правильно построенные системы программной инженерии должны основываться на повторно используемых компонентах высокого качества, как это делается в электронике или строительстве. ОО-подход определяет, какую форму должны иметь эти компоненты: каждый из них должен быть основан на некотором типе объектов. Термин "объект", давший имя этому методу, предполагает, что объектами являются не только сущности некоторой предметной области, такие как, например, круги и многоугольники в графической системе, но также объекты, имеющие чисто внутренний для системы смысл, например, списки. Если вы не совсем понимаете, что все это значит, — это нормально. Мы надеемся, что, если вы перечитаете это введение несколько месяцев спустя, все будет кристально понятно!

Объектная технология (краткое имя для ОО-конструирования ПО) быстро изменила индустрию ПО. Овладение ей с первых шагов изучения компьютинга — лучшая страховка от технической отсталости.

Формальные методы

Формальные методы являются приложением систематических способов доказательства, основанных на математической логике, к конструированию надежного ПО. Надежность, а скорее отсутствие ее, — одна из самых неприятных проблем ПО. Ошибки или страх ошибок служат постоянным фоном программирования. Всякий, кто использует компьютеры, знает дюжину анекдотов по поводу тех или иных "багов".

Формальные методы могут помочь улучшить ситуацию. Изучение формальных методов в полном объеме требует больших знаний, чем это доступно для начального уровня университетского образования. Но подход, используемый в этой книге, показывает важность влияния формальных методов, в частности, благодаря "Проектированию по Контракту" (Design by Contract), в котором конструирование ПО рассматривается как реализация некоторых контрактных отношений, существующих между модулями программной системы. Каждый контракт характеризуется точной спецификацией прав и обязанностей. Надеюсь, вы поймете важность этих идей и будете помнить их на протяжении всей вашей карьеры. В индустрии хорошо известна разница между "кодировщиком" и программистом, способным создавать корректные, устойчивые программные элементы длительного пользования.

Учимся, создавая

Эта книга — не теоретическая презентация. Она предполагает практику работы параллельно с изучением теоретических материалов. Ассоциированный веб-сайт — http://touch.ethz.ch — предоставляет ссылки на необходимое ПО в версиях для Windows, Linux и других платформ, свободное для загрузки. В некоторых случаях практическая работа с ПО предваряет изучение теоретических концепций.

Система, используемая в этом курсе, содержит развитое ОО-окружение — EiffelStudio, среду разработки программных систем на языке Eiffel, применяемом на этапах анализа, проектирования и программирования. Язык Eiffel — это простой, современный язык, широко используемый в мире для больших критически важных индустриальных проектов в таких областях, как банковское дело, здравоохранение, сетевые разработки, аэрокосмическая индустрия. Этот язык также широко применяется в университетах при обучении и исследованиях. Задействованная при обучении версия EiffelStudio немногим отличается от профессиональной версии — у нее тот же графический интерфейс и те же базисные повторно используемые компоненты, представленные в библиотеках: EiffelBase, EiffelVision и EiffelMedia.

Ваш университет может получить академическую лицензию, обеспечивающую поддержку и сопровождение данного ПО.

Четыре других языка программирования, широко используемые в индустрии: Java, C#, C++ и C — рассмотрены в приложениях к данной книге.

Любой профессиональный программист должен свободно владеть несколькими языками, по крайней мере, некоторыми из упомянутых. Изучение Eiffel будет несомненным плюсом в вашем резюме (признак профессионала) и поможет вам стать мастером и в других ОО-языках.

От потребителя к поставщику

Поскольку с первого дня курса вы будете иметь всю мощь EiffelStudio на кончиках ваших пальцев, существует возможность пропустить "детские" упражнения, традиционно используемые при обучении программированию. Наш подход основан на том наблюдении, что обучение ремеслу лучше всего начинать с изучения работ, выполненных профессионалами, получать преимущества, используя результаты этих работ, понимая их внутреннюю конструкцию, дополняя их, улучшая их и начиная строить свои собственные конструкции. Это проверенный временем почтенный метод ученичества, когда подмастерье работает под руководством мастера.

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

Библиотека Traffic, как следует из названия, обеспечивает механизмы, относящиеся к движению в городе: автомобилей, трамваев, такси — а также пешеходов. Она обеспечивает графическую визуализацию, моделирование, определение и анимацию маршрутов и все прочее. Здесь появляется богатый источник различных приложений и расширений: можно писать видеоигры, решать оптимизационные задачи, испытывать новые алгоритмы.

Встроенные примеры используют Париж как один из самых популярных туристских объектов мира. Но возможна адаптация для любого другого города, так как вся локальная информация отделена от программ и задается в файле формата XML. Создав такой файл, можно работать с выбранным вами городом. Например, курс, изучаемый в ETH, рассматривает городскую трамвайную сеть Цюриха, заменяющую систему метро Парижа.

Абстракция

То, что в основе работы лежат существующие компоненты, имеет еще одно следствие, важное для вашего образования как инженера ПО. Программные модули, которые вы повторно используете, имеют существенные размеры с большим количеством встроенных в них знаний. Было бы довольно трудно применять их в собственных приложениях, если бы предварительно пришлось читать их полные тексты. Вместо этого вы будете основываться на описании их абстрактных интерфейсов, извлеченных из программных текстов и содержащих только ту информацию, которая необходима потребителю продукта. Извлечение абстрактного интерфейса выполняется автоматически программными механизмами, составляющими часть EiffelStudio. Абстрактный интерфейс дает описание цели программного модуля, описание выполняемой им функции, но не дает описание того, как эта функция реализуется. Он описывает, что делает модуль, но не как он это делает. В терминологии ПО абстрактный интерфейс называется спецификацией (specification) модуля. Он не включает реализацию (implementation) модуля.

Эта техника позволит вам освоить один из ключевых навыков профессионального разработчика ПО: абстракцию, означающую в данном случае способность отделять цель любой части ПО от реализации — от деталей, зачастую весьма обширных. Каждый профессор, читающий лекции по информатике, почти заклинаниями убеждает студентов в необходимости абстракции, имея на то все основания. Здесь тоже есть немалая толика заклинаний, но обнадеживает то, что пользу абстракций можно увидеть на примерах, постигая на опыте преимущества, предоставляемые повторно используемыми компонентами. Когда вы начнете строить свое собственное ПО, вам придется следовать тем же принципам, поскольку это единственный способ справиться с хаосом сложных программных систем.

Преимущества абстракции довольно конкретны. Вы почувствуете их с первых шагов. Первая программа, которую предстоит написать, будет содержать только несколько строчек, но результаты ее работы будут значимыми (анимация маршрута на карте города). Абстрактные спецификации модулей системы Traffic позволят нам без труда их использовать. Если бы для использования модулей пришлось анализировать их тексты, мы быстро утонули бы в океане деталей и не смогли бы получить никакого результата.

Спецификация вместо текста — это все, что необходимо потребителю ПО. Спецификация — это спасительный круг, позволяющий не сгинуть в море сложностей.

Цель: качество

Эта книга учит не только методам, но и методологии. В течение всего курса вы будете сталкиваться с принципами проектирования и правилами стиля. Иногда будет казаться, что проще написать программу, не придерживаясь никаких рекомендуемых правил. Действительно, такое возможно. Но правила методологии — это водораздел, отделяющий любительские программы от ПО промышленного качества. Первые иногда работают, иногда нет, вторые — должны всегда работать в соответствии со своими спецификациями. Именно такое ПО мы и хотим научиться создавать.

Вы должны применять эти правила не потому, что так написано в этой книге и так говорят ваши профессора, но потому, что мощь и скорость компьютеров усиливают любые недочеты, казалось бы, незначительные. От программиста требуется обращать внимание как на всю картину в целом1"Картина маслом", как говорил герой фильма "Ликвидация", так и на отдельные детали. Это обеспечит хорошую страховку в будущей карьере. Программистов много, но их реальная дифференциация состоит в способности создания ПО высокого качества.

Не будьте глупцами, успокаивая себя выражениями "это только упражнение" или "это только маленькая программа":

  • упражнения — именно то место, где следует учиться наилучшим из возможных методов работы. Когда фирма "Аэробус" пригласит вас написать управляющее ПО для их следующего лайнера, учиться будет слишком поздно;
  • считать программу "маленькой" — это, чаще всего, неоправданное ожидание. В индустрии многие "большие" программы начинались как программы небольшого размера, которые со временем разрастались, поскольку у пользователей хорошей программы появляются все новые идеи и запросы на расширение ее функциональности.

Так что следует применять одни и те же методологические принципы ко всем разрабатываемым программам, независимо от того, маленькие они или большие, учебные или реальные.

Такова цель этой книги: не просто дать основы инженерии программ и позволить получить опыт в привлекательной работе по созданию работающих программ, но показать красоту принципов, методов, алгоритмов, структур данных и других определяющих дисциплину методик. И, может быть, самая главная цель — привить чувство, заставляющее вас делать не просто хорошее ПО, а выдающееся, стремление создавать программы высочайше возможного качества.

БM

Цюрих / Санта-Барбара, Апрель 2009

Предисловие для преподавателей

Уже в самом заголовке книги отражен ее дух: не просто научить программированию, а научиться "программировать Хорошо". Я пытаюсь направить студентов по правильной дороге, так, чтобы они могли радоваться программированию — без радости далеко не уйдешь — и достигли успеха в карьере; не просто получили первую работу, но обладали способностью отвечать на новые вызовы в течение всей жизни.

Для достижения этой цели книга предлагает инновационные идеи, детализируемые в этом предисловии.

  • Обращенный учебный план, известный также как подход "извне-внутрь", основанный на большой библиотеке повторно используемых компонентов.
  • Всепроникающее применение ОО и управляемой модели (model-driven) технологий.
  • Eiffel и Проектирование по Контракту (Design by Contract).
  • Умеренная доза формальных методов.
  • Включение с самого начала подходов, свойственных программной инженерии.

Эти методики в течение нескольких лет применялись в ETH в курсе "Введение в программирование", который читался всем студентам, поступающим на отделение информатики. Книга "Почувствуй класс" построена на этом курсе и вобрала в себя его уроки. Это также означает, что преподаватели, использующие ее как учебник, могут применять все разработанные нами методические материалы: слайды, презентации лекций, материалы для самообучения, студенческие проекты, даже видеозаписи лекций.

Лекция 1: 123456 || Лекция 2 >
Кирилл Юлаев
Кирилл Юлаев
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?