Разработка программного обеспечения: Повышение квалификации

Программа повышения квалификации для разработчиков программного обеспечения. В программе: Методы и средства инженерии программного обеспечения. Нотация и семантика языка UML. Основы объектно-ориентированного программирования. Основы объектно-ориентированного проектирования и многое другое.
IT: Интернет
Высшая школа экономики. Высшая школа бизнес-информатики (ВШБИ) логоВысшая школа экономики. Высшая школа бизнес-информатики (ВШБИ)
Открытый набор
72 часа
Онлайн
от 30 000 ₽

Анонс программы

Программа повышения квалификации для разработчиков программного обеспечения. В программе: Методы и средства инженерии программного обеспечения. Нотация и семантика языка UML. Основы объектно-ориентированного программирования. Основы объектно-ориентированного проектирования и многое другое.

Описание Программы

Основные курсы
Методы и средства инженерии программного обеспечения

  1. Области знаний программной инженерии и стандарты ЖЦ программного обеспечения. Дано определение программной инженерии, ее место в инженерной деятельности специалистов при создании компьютерных систем и общее описание десяти областей знаний профессионального ядра знаний SWEBOK. Изложен ЖЦ стандарта ISO/IEC 12207 и связь его процессов с областями знаний SWEBOK
  2. Модели жизненного цикла для разработки программных систем. Описываются основные модели жизненного цикла, которые используются в практике проектирования программных систем. Рассмотрен стандарт ISO/IEC 12207 и подходы к формированию рабочих моделей жизненного цикла на его основе. Дана характеристика фундаментальных моделей ЖЦ (водопадной, спиральной, инкрементной, эволюционной) и стандартной модели
  3. Методы определения требований в программной инженерии. Приведены методы и инженерия требований к системе. Рассмотрен процесс сбора, накопления и спецификации требований. Дана классификация требований и характеристика функциональных и нефункциональных требований.
  4. Методы объектного анализа и построения моделей предметных областей. Проведено рассмотрение и дана характеристика методов анализа предметной области и построения моделей. Рассмотрены объектно-ориентированные и стандартизованные, традиционные методы проектирования архитектуры системы
  5. Прикладные и теоретические методы программирования. Изложены базовые основы методов прикладного, систематического (структурного, компонентного, аспектно-ориентированного и др.) и теоретического (алгебраического, композиционного, концепторного и алгебро-алгоритмического) программирования для ознакомления студентов с теоретическими и прикладными аспектами методов программирования
  6. Формальные спецификации, доказательство и верификация программ. Дано описание формальных методов спецификаций (Z, VDM, RAISE), методов доказательства правильности программ с помощью утверждений, пред- и постусловий и верификации программ
  7. Методы проверки и тестирования программ и систем. Изложены методы и процессы тестирования (и верификации), сбора данных о дефектах и отказах, модели оценки надежности программ, использующие данные результатов тестирования
  8. Интерфейсы, взаимодействие и изменение программ и данных. Рассмотрены основы интеграции и преобразования разноязыковых программ и данных, методы изменения (реинженерия, реверсная инженерия и рефакторинг) компонентов и систем, дана характеристика стандарта о независимости типов и структур данных от языков программирования, а также рассмотрены принципы взаимодействия неоднородных компонентов в современных промежуточных средах
  9. Инженерия приложений и предметной области. Излагаются современные основы инженерии приложений и предметных областей (доменов), тенденции и направления их развития в плане производства одиночных программных систем из повторных компонентов и целых семейств с многоразовым применением компонентов и одиночных программных систем
  10. Модели качества и надежности в программной инженерии. Глава посвящена представлению моделей качества ПС, метрикам и методам достижения и измерения качества ПС. Приведена характеристика и дана классификация математических моделей надежности Марковского и пуассоновского типов
  11. Методы управления проектом, риском и конфигурацией. Проведен анализ и дано описание инженерии программирования, принципов и методов планирования и управления программным проектом, рисками и формированием версий программных систем
  12. Средства программной инженерии. Дан обзор современных языковых средств и спецификации интерфейсов объектов программирования. Изложены средства разработки MSF фирмы Microsoft

Дополнительные материалы

  • Малая энциклопедия инструментов ООП
  • Словарь терминов программной инженерии
  • Перечень стандартов программной инженерии
  • Список условных обозначений

Нотация и семантика языка UML

  1. Современные технологии объектно-ориентированного анализа и проектирования информационных систем. Концепции объектно-ориентированного анализа и проектирования. Эволюция и краткая характеристика основных подходов к разработке информационных моделей бизнес-систем и бизнес-процессов. Особенности проектирования, анализа и формализации корпоративных систем. Основные этапы развития языка UML и принятые стандарты. Разработчики графической нотации и специфика ее использования в процессе создания масштабируемых программных систем.
  2. Основные элементы языка UML. Общая характеристика моделей объектно-ориентированного анализа и проектирования. Пакеты в языке UML, их графическое изображение. Базовые семантические конструкции языка, их описание с помощью специальных обозначений. Канонические диаграммы языка UML и особенности их графического представления. Рекомендации по графическому изображению диаграмм языка UML.
  3. Элементы графической нотации диаграммы вариантов использования. Диаграмма вариантов использования как концептуальное представление бизнес-системы в процессе ее разработки. Особенности графического изображения вариантов использования и актеров. Основные отношения между графическими элементами, их стереотипы. Понятия бизнес-актера, сотрудника и бизнес варианта использования. Особенности концептуального моделирования бизнес-систем в форме диаграмм вариантов использования.
  4. Спецификация требований и рекомендации по написанию эффективных вариантов использования. Классификация требований, их спецификация в форме диаграмм вариантов использования. Сценарии вариантов использования, их графическая интерпретация. Применение шаблонов сценариев при разработке диаграмм вариантов использования. Примеры написания текста сценария. Рекомендации по написанию вариантов использования.
  5. Элементы графической нотации диаграммы классов. Графическое изображение класса, его атрибутов и операций. Конкретные и абстрактные классы. Видимость и кратность атрибутов и операций. Расширение языка UML для построения моделей программного обеспечения и бизнес-систем. Интерфейсы и варианты их графического обозначения.
  6. Отношения и их графическое изображение на диаграмме классов. Отношение ассоциации, варианты его графического изображения. Отношение обобщения классов. Наследование атрибутов и операций классов. Отношения агрегации и композиции, их семантические особенности. Рекомендации по построению диаграмм классов.
  7. Элементы графической нотации диаграммы кооперации. Назначение диаграммы кооперации. Объекты, их имена и графическое изображение. Активные и пассивные объекты, их графическое изображение. Мультиобъекты и составные объекты. Графическое изображение связей, посылаемых и принимаемых сообщений между объектами. Формат и синтаксис записи сообщений. Стереотипы сообщений. Рекомендации по построению диаграмм кооперации.
  8. Элементы графической нотации диаграммы последовательности. Назначение диаграммы последовательности. Объекты, их графическое представление. Линия жизни и фокус управления. Особенности изображения моментов создания и уничтожения объектов. Ветвление и условия их выполнения. Рекомендации по построению диаграмм последовательности.
  9. Элементы графической нотации диаграммы состояний. Особенности моделирования поведения объектов в виде диаграмм состояний. Понятие конечного автомата и логика изменения его состояний. Описание реакции объекта на асинхронные внешние события в форме диаграммы состояния. Внутренние действия состояния и ду-деятельность. Триггерные и нетриггерные переходы. События и их спецификация на диаграммах состояний.
  10. Моделирование параллельного поведения с помощью диаграмм состояний. Особенности моделирования параллельного поведения объектов в форме диаграмм состояний. Понятие составного состояния и подсостояния. Сложные переходы и псевдосостояния. Исторические состояния, особенности их использования. Синхронизация параллельных подсостояний. Рекомендации по построению диаграмм состояний.
  11. Элементы графической нотации диаграммы деятельности. Диаграмма деятельности и особенности ее построения. Состояния и переходы на диаграмме деятельности. Ветвление и распараллеливание процессов на диаграмме деятельности. Особенности изображения объектов на диаграмме деятельности. Использование диаграмм деятельности для описания моделей бизнес-процессов.
  12. Элементы графической нотации диаграммы компонентов. Назначение диаграммы компонентов, ее основные элементы. Особенности физического представления программных систем. Компоненты программных систем, их разновидности. Интерфейсы, их реализация компонентами. Использование диаграммы компонентов для проектирования зависимостей между компонентами. Рекомендации по построению диаграммы компонентов.
  13. Элементы графической нотации диаграммы развертывания. Диаграмма развертывания, особенности ее построения. Варианты графического изображения узлов на диаграмме развертывания. Специфика представления ресурсоемких узлов и технических устройств. Соединения и зависимости на диаграмме развертывания. Рекомендации по построению диаграммы развертывания.
  14. Паттерны проектирования и их представление в нотации UML. Паттерны объектно-ориентированного анализа и проектирования, их классификация. Паттерны проектирования в нотации языка UML. Полный список паттернов проектирования GoF. Паттерн Фасад, его обозначение в нотации языка UML и пример реализации. Паттерн Наблюдатель, его обозначение в нотации языка UML и пример реализации

Основы объектно-ориентированного программирования

  1. Качество ПО. Качество - это цель инженерной деятельности; построение качественного ПО (software) - цель программной инженерии (software engineering). В данном курсе рассматриваются средства и технические приемы, позволяющие значительно улучшить качество ПО. Прежде чем приступить к изучению этих средств и приемов, следует хорошо представлять нашу цель. Качество ПО лучше всего описывается комбинацией ряда факторов. В этой лекции мы постараемся проанализировать некоторые из них, покажем, где необходимы улучшения, и укажем дорогу в дальнейшем путешествии по лекциям этого курса.
  2. Критерии объектной ориентации. В предыдущей лекции исследовались цели ОО-метода. Готовясь к чтению технических деталей метода в следующих лекциях, полезно быстро, но с широких позиций рассмотреть ключевые аспекты ОО-разработки ПО. Такова цель этой лекции. Прежде всего, здесь будет дано лаконичное пояснение того, что делает систему объектно-ориентированной. Уже в этом есть определенная польза, поскольку этот термин используется так неразборчиво, что необходим список точных свойств; имея их, мы сможем оценить метод, язык или инструмент, претендующие на звание объектно-ориентированных.
  3. Модульность. В лекциях 3-6 будут рассмотрены требования к разработке программного продукта, которые почти наверняка приведут нас к объектной технологии.
  4. Подходы к повторному использованию. В этой лекции будут рассмотрены некоторые из проблем, направленных на широкомасштабное внедрение повторного использования программных компонентов.
  5. К объектной технологии. Расширяемость, возможность повторного использования и надежность - наши главные цели - требуют выполнения ряда условий, определенных в предыдущих лекциях. Для их достижения требуется систематический метод декомпозиции системы на модули. В этой лекции представлены основные элементы такого метода, основанного на простой, но далеко идущей идее: строить каждый модуль на базе некоторого типа объектов. Здесь эта идея объясняется, логически обосновывается и из нее выводятся некоторые следствия.
  6. Абстрактные типы данных (АТД). Чтобы объекты играли лидирующую роль в архитектуре ПО, нужно их адекватно описывать. В этой лекции показывается, как это делать.
  7. Статические структуры: классы. Анализируя основы программной инженерии, мы поняли причины, требующие совершенствования модульного подхода - повторное использование и расширяемость кода. Мы осознали, что традиционные методы исчерпали себя, - централизованная архитектура ограничивает гибкость. Мы выявили хорошую теоретическую основу ОО-подхода - абстрактные типы данных. Теперь, когда проблемам уделено достаточно внимания, вперед к их решению! Раздел содержит введение в фундаментальные методы ОО-анализа, проектирования и программирования. Необходимые обозначения (элементы описания) будут вводиться по мере необходимости. Сначала необходимо рассмотреть базовые строительные блоки - классы.
  8. Динамические структуры: объекты. В предыдущей лекции отмечалось, что экземпляры классов называют объектами. Настало время переключить внимание на эти объекты, и в общем смысле - на модель ОО-вычислений времени выполнения. В предыдущих лекциях рассматривались в основном концептуальные вопросы. Теперь необходимо обратиться к аспектам реализации. В частности, рассмотреть вопросы использования памяти (обсуждение будет продолжено в следующей лекции в связи со сборкой мусора). Неоднократно отмечалось, что одним из преимуществ объектной технологии разработки ПО является учет в полном объеме деталей реализации. Поэтому экскурсия в область реализации будет полезной, даже если сфера ваших интересов связана в основном с вопросами анализа и проектирования. Невозможно понять метод, не рассматривая его влияние на структуры времени выполнения.
  9. Управление памятью. Честно говоря, было бы неплохо забыть про память. Программы создавали бы объекты по мере надобности. Неиспользованные объекты исчезали бы в небытие, а необходимые медленно передвигались бы вверх. Этот процесс подобен движению по служебной лестнице работника большой корпорации, в конце карьеры достигшего уровня руководства. Но это не так. Память не безгранична и не организуется в непрерывный ряд слоев с уменьшающейся скоростью доступа. Нам необходимо увольнять наших бестолковых работников даже, если мы должны называть это ранним уходом на пенсию, продиктованным общей экономической ситуацией. Эта лекция изучает, кто все же должен быть сокращен, кем и как.
  10. Универсализация. Слияние двух концепций - модуля и типа - позволило разработать мощное понятие класса, послужившее основой ОО-метода. Уже в таком виде оно позволяет делать многое. Однако для достижения наших целей - расширяемости, возможности повторного использования, надежности необходимо сделать конструкцию класса более гибкой. Развитие может идти в двух направлениях. Один, представленный вертикалью на следующем рисунке, показывает абстракцию и специализацию; он ведет к изучению наследования в последующих лекциях. В данной лекции изучается другая размерность (горизонталь на рисунке), параметризация (тип как параметр), известная также как универсализация.
  11. Проектирование по контракту: построение надежного ПО. Вооруженные базисными концепциями класса, объекта, параметризации вы можете теперь создавать программные модули, реализующие возможно параметризованные типы структур данных. Мои поздравления! Сделан важный шаг в битве за лучшую программную архитектуру. Но рассмотренных методов явно недостаточно для реализации всеобъемлющего видения качества, введенного в начале книги. Факторы качества, на которых было сконцентрировано наше внимание, - повторное использование, расширяемость, совместимость - не должны достигаться ценой надежности (корректность и устойчивость). Хотя концепция надежности просматривалась по ходу обсуждения, мы добиваемся большего.
  12. Когда контракт нарушается: обработка исключений. Нравится это или нет, но не стоит притворяться, несмотря на все статические предосторожности, некоторые неожиданные и нежелательные события рано или поздно возникнут при одном из выполнений системы. Такие ситуации известны как исключения, и нужно должным образом уметь справляться с ними.
  13. Поддерживающие механизмы. Выше рассмотрены все основные методы создания ОО-программного продукта, кроме одного важнейшего набора механизмов. Недостающий раздел - наследование и все, что к нему относится. Перед тем как перейти к этой последней составляющей подхода, опишем несколько механизмов, важных для создания систем: внешние программы и инкапсуляцию не ОО-программного продукта; передачу аргументов; структуры управления; выражения; действия со строками; ввод и вывод. Эти технические аспекты существенны для понимания дальнейших примеров. Они хорошо сочетаются с основными концепциями.
  14. Введение в наследование. Интересные системы редко рождаются на пустом месте. Почти всегда новые программы являются расширениями предыдущих разработок, лучший способ создания нового - это подражание старым образцам, их уточнение и комбинирование. Традиционные методы проектирования по большей части не уделяли внимания этому аспекту разработки. В ОО-технологии он является весьма существенным.
  15. Множественное наследование. Полноценное применение наследования требует важного расширения этого механизма. Изучая его основы, мы столкнулись с необходимостью порождать новые классы от нескольких классов-родителей. Эта возможность, известная как множественное (multiple) наследование (именуемое так в противовес единичному (single) наследованию), действительно нужна для построения надежных ОО-решений.
  16. Техника наследования. Наследование - ключевая составляющая ОО-подхода к повторному использованию и расширяемости. В этой лекции нам предстоит исследовать новые возможности, разнородные, но демонстрирующие замечательные следствия красоты базисных идей.
  17. Типизация. Эффективное применение объектной технологии требует четкого описания в тексте системы типов всех объектов, с которыми она работает на этапе выполнения. Это правило, известное как статическая типизация (static typing), делает наше ПО: более надежным, позволяя компилятору и другим инструментальным средствам устранять несоответствия прежде, чем они смогут нанести вред; более понятным, обеспечивая точной информацией читателей: авторов клиентских систем и тех, кто будет сопровождать систему; более эффективным, поскольку информация о типах данных позволит компилятору сгенерировать оптимальный код. Хотя вопросами типизации данных активно занимались и вне объектной среды, да и сама статическая типизация применяется в языках, не поддерживающих ООП, особенно ярко эти идеи проявили себя именно при объектном подходе, во многом основанном на понятии типа, которое, сливаясь с понятием модуля, образует базовую ОО-конструкцию - класс.
  18. Глобальные объекты и константы. Локальных знаний не достаточно - компонентам ПО необходима глобальная информация: разделяемые данные, общее окно для вывода ошибок, шлюз для подключения к базе данных или сети. В классическом подходе достаточно объявить такой объект глобальной переменной главной программы. В ОО-системах нет ни главной программы, ни глобальных переменных. Но разделяемые (shared) объекты по-прежнему нужны.

Основы объектно-ориентированного проектирования

  1. Объектно-ориентированная методология: Правильно применяйте метод. В этих лекциях рассматривается методология объектной ориентации: как применять мощное множество концепций и технических приемов для получения преимуществ наших проектов и успешной их организации.
  2. Образец проектирования: многопанельные интерактивные системы. Создадим образец проектирования, иллюстрирующий ОО-метод. Он будет сравниваться с другими подходами, в частности с функциональной декомпозицией сверху вниз, что позволит продемонстрировать выдающиеся возможности Метода.
  3. Наследование: "откат" в интерактивных системах. В нашем втором примере займемся задачей, возникающей перед проектировщиками почти любой интерактивной системы, - как обеспечить возможность "отката" команд. Покажем, что наследование и динамическое связывание позволяют получить простое и общее решение довольно сложной и многогранной проблемы.
  4. Как найти классы. Важнейшая цель ОО-методологии - дать рекомендации по нахождению классов, на основе которых строится программная система. Этому посвящена данная лекция.
  5. Принципы проектирования класса. Опытные разработчики ПО знают, что одной из наиболее критичных проблем является проблема проектирования интерфейсов модуля. В больших и длительных проектах многие обсуждения и недоразумения связаны со спецификациями интерфейса модулей: "Но я полагал, что вы передаете мне уже нормализованные данные...", "Зачем Вы делаете эту обработку, я ведь уже об этом позаботился?.." и так далее.
  6. Используйте наследование правильно. Изучение технических деталей наследования и связанных механизмов в лекциях 7-18 курса "Основы объектно-ориентированного программирования" не означает еще автоматического владения всеми методологическими следствиями. Из всех проблем ОО-технологии ни одна не вызывает столько обсуждений и вопросов о том, как и когда использовать наследование. В этой лекции мы продвинемся в понимании смысла наследования не ради теории, а ради наилучшего применения наследования в наших проектах. В частности, мы попытаемся понять, чем наследование отличается от другого межмодульного отношения, его брата и соперника, - отношения встраивания, чаще всего называемого клиентским отношением. Мы исследуем, когда следует использовать одно, когда - другое, а когда оба отношения являются приемлемыми. Мы установим основной критерий использования наследования, по пути выяснив, в каких случаях его использование ошибочно. Мы сможем создать классификацию различных случаев легитимного использования, часть из которых принимается безоговорочно (наследование подтипов), другие - более спорны. На этом пути мы попытаемся освоить опыт таксономии или систематики, привнесенный из других научных дисциплин.
  7. Полезные приемы. Примеры ОО-проектирования, приведенные в предыдущих лекциях, иллюстрируют несколько характерных приемов. Хотя мы и не закончили наш обзор методологических проблем - нам предстоит еще рассмотрение правил стиля, концепций ОО-анализа, вопросов обучения, процессов ПО, - сделаем паузу и кратко сформулируем то, что уже изучено. Это будет самая короткая лекция во всей книге. Она просто перечисляет плодотворные идеи, объединяя их в группы с предваряемыми ключевыми словами, напоминая о тех примерах, где мы впервые столкнулись с этими идеями.
  8. Чувство стиля. Реализация ОО-метода требует обращать внимание на многие детали стиля, считающиеся пустяковыми для менее амбициозного подхода.
  9. Объектно-ориентированный анализ. Направленный изначально на решение проблем реализации ОО-метод быстро распространился на весь жизненный цикл ПО. Особый интерес представляет приложение ОО-идей к моделированию как программных, так и непрограммных систем. Это применение объектной технологии для рассмотрения скорее проблем, чем решений, известно как объектно-ориентированный анализ.
  10. Процесс разработки ПО. Центральный вопрос объектной технологии - ее воздействие на весь процесс разработки ПО. Пришло время рассмотреть влияние ОО-принципов на общую организацию проектов и их деление на этапы. Это часть более общей проблемы перспектив объектной технологии с позиций менеджмента. Вопросы менеджмента подробно изучаются в книге Object Success. В данной лекции обсуждаются лишь наиболее существенные идеи: кластеры как основная организационная единица, принципы параллельной разработки на основе кластерной модели жизненного цикла ПО, этапы и задачи такой модели, роль обобщения для повторного использования, принципы бесшовности и обратимости.
  11. Обучение методу. Заканчивая наше изучение методологических проблем, обратимся к одному из принципиальных вопросов, стоящих перед компаниями и университетами: как лучше учить тех, кто должен применять объектные технологии. Эта лекция представляет принципы обучения и отмечает типичные ошибки. В первой части проблема рассматривается с точки зрения лица, организующего профессиональную подготовку в компании, во второй - с позиций профессора университета. Несмотря на то, что речь пойдет о педагогических проблемах профессиональной подготовки, обсуждение касается и тех, кто не занимает указанных позиций и является скорее обучаемым, чем обучающим.
  12. Параллельность, распределенность, клиент-сервер и Интернет. Как и люди, компьютеры могут объединяться в команды для достижения результатов, которые ни один из них не может получить в одиночку, но в отличие от людей они могут выполнять много дел одновременно (или делать вид, что делают их одновременно) и делать их хорошо. Однако до сих пор в обсуждении неявно предполагалось, что вычисление является последовательным, т. е. управляется одной цепочкой команд. Сейчас мы увидим, что получится, если отказаться от этого предположения и перейти к рассмотрению параллельных вычислений.
  13. Сохранение объектов и базы данных (БД). Выполнение ОО-приложения означает создание и манипулирование некоторым числом объектов. Что происходит с этими объектами, когда текущее вычисление завершается? Часть объектов исчезает с завершением сессии. Многим приложениям нужны также и сохраняемые объекты, остающиеся между сессиями. Сохраняемые объекты могут использоваться разными приложениями, что приводит к необходимости баз данных.
  14. ОО-метод для графических интерактивных приложений. Элегантный интерфейс пользователя стал неотъемлемой частью всякого успешного программного продукта. Достижения в создании новых мониторов, эргономике (изучении человеческого фактора) и в разработке ПО привели к всеобщему распространению интерактивных методов и средств, прокладывающих себе дорогу с семидесятых. Многооконные системы позволяют выполнять одновременно несколько работ, мышь позволяет быстро указывать на требуемый элемент, меню ускоряет возможность выбора, значки представляют важные понятия, рисунки демонстрируют информацию визуально, кнопки выполняют стандартные операции.
  15. OO-программирование и язык Ada. Успехи методологии программирования 70-х годов привели к появлению нового поколения языков, сочетающих управляющие структуры Algol 60 и конструкции структурирования данных Algol W и Pascal с поддержкой скрытия информации. При различии свойств эти языки близки по сути, их принято называть инкапсулирующими языками. (Они также известны как "основанные на объекте" - терминология обсуждается в следующей лекции.)
  16. Эмуляция объектной технологии в не ОО-средах. Языки Fortran, Cobol, Pascal, C, Basic, PL/I и даже ассемблер до сих пор составляют существенную часть создаваемого или обновляемого ПО. Ясно, что проект, использующий один из этих языков, не сможет получить все преимущества объектной технологии. Это потребовало бы введения нотации, подобной изучаемой в этой книге, и, соответственно, компилятора, среды и библиотек. Но те, кто вынужден использовать такие инструменты, чаще всего из-за ограничений не технического характера, все же могут, вдохновившись объектной технологией, использовать ее концепции для улучшения качества своего ПО. Данная лекция представляет технические приемы эмуляции объектов, дающие возможность приблизиться к объектной технологии. В частности, эти приемы рассматриваются для языков Fortran, Pascal и C, но они применимы не только для упомянутых языков. Ada и другие инкапсулирующие языки обсуждались в предыдущей лекции. В следующей лекции будут рассмотрены такие ОО-языки, как Simula, Smalltalk, Objective-C, C++ и Java. Заметьте: при использовании языка, не входящего в список, например, Basic или Cobol, перенос рассматриваемых концепций не должен вызвать особых трудностей; при использовании ОО-языка данное обсуждение может привести к лучшему пониманию новшеств объектной технологии и поддерживающей техники реализации.
  17. От Simula к Java и далее: основные ОО-языки и окружения. Под влиянием языка Simula, введенного в 1967 г., появился ряд ОО-языков, отличающихся разнообразием подходов. Эта лекция описывает некоторые из них, привлекшие самое большое внимание: Simula, Smalltalk, C++ и другие ОО-расширения C, Java. В литературе до сих пор нет глубокого сравнительного описания важнейших ОО-языков. Цель этой лекции гораздо скромнее. Потому некоторые наиболее популярные языки описываются весьма коротко. Наша цель - изучить проблемы и концепции, находя их, где это возможно, даже если придется обратиться к менее популярным подходам. Для языка, имеющего практическую значимость, невелик риск пропустить что-то главное, поскольку многочисленные статьи и книги описывают его достаточно подробно. Настоящий риск таится в обратном: риск пропустить перспективную идею, просто потому, что поддерживающий ее язык (скажем, Simula) сейчас не так популярен. Таким образом, описание будет следовать не принципу равных возможностей в выборе примечательных языковых свойств, а принципу позитивных действий.
  18. Объектно-ориентированная среда. В заключительной части Девятой симфонии Бетховена баритон прерывает поток изумительной инструментальной музыки, призывая нас к чему-то возвышенному: О, друзья! Не эту мелодию! Пусть начнет звучать Более радостная. В предыдущих лекциях был дан обзор некоторых известных средств OO-разработки. Не принижая их значения, мы завершим обсуждение рассмотрением современного и комплексного подхода (первые три части Девятой симфонии тоже прелестны, хоть вокал в них и отсутствует). Данная лекция представляет программную среду (ISE EiffelStudio), реализующую принципы, изложенные в данной книге и делающую их непосредственно доступными разработчикам ОО-ПО.

Дополнительные материалы

  • Извлечения из библиотек Base
  • Универсальность и (versus) наследование

Специальные курсы
Необходимо выбрать и пройти 2 специальных курса.
Верификация программного обеспечения

  1. Общая информация о курсе. Курс знакомит слушателей с современными технологиями верификации программного обеспечения, применяемыми при промышленной разработке сложных и отказоустойчивых программных систем.
  2. Место верификации среди процессов разработки программного обеспечения. Лекция посвящена рассмотрению различных видов жизненного цикла разработки программного обеспечения и современных технологий разработки. Показано место процесса верификации в жизненном цикле, определена его цель и задачи. Рассматриваются различные типы процессов верификации, определяется разница между тестированием, верификацией и валидацией. Цель данной лекции: дать представление о процессе верификации как о четко определенном виде деятельности в рамках жизненного цикла разработки программной системы, определить современные подходы к верификации
  3. Введение. Обзор общих подходов к тестированию, изучение архитектуры программного комплекса "Калькулятор".
  4. Тестирование программного кода (методы+окружение). Лекция посвящена процессу тестирования программного кода. Определяются его задачи и цели, перечисляются основные методы и подходы к тестированию программного кода. Вводится понятие тестового окружения, рассматриваются его компоненты и различные виды окружения. Цель данной лекции: дать представление о процессе тестирования программного кода, его видах. Определить методы построения тестового окружения, необходимого для выполнения тестирования
  5. Тестирование программного кода (тестовые примеры). Лекция продолжает тематику тестирования программного кода, начатую в лекции 2. Лекция посвящена разработке тестовых примеров: определяются методы их создания, проводится классификация типов тестовых примеров, рассматривается тестирование робастности, определяются понятия классов эквивалентности, рассматриваются примеры тестирования компараторов. Цель данной лекции: дать знания, необходимые для самостоятельного анализа, разработки и модификации тестовых примеров на основе тест-требований
  6. Тестовые примеры. Классы эквивалентности. Ручное тестирование в MVSTE. Семинар посвящен рассмотрению тестовых примеров. Обсуждаются подходы к тестированию системы. Вводятся понятия классов эквивалентности, граничных условий, робастности (тестирования за границей диапазонов). Проводится обзор возможностей MVSTE по ручному тестированию и описанию тестовых примеров (Manual Testing).
  7. Тестирование программного кода (покрытия). Лекция завершает тему "тестирование программного кода". В лекции рассмотрены вопросы объединения тестовых примеров в тест-планы; определяются методы оценки результатов выполнения тестов. Значительная часть лекции посвящена покрытию программного кода тестами, различным типам покрытия, методам его анализа. Цель данной лекции: дать знания, необходимые для составления тест-планов и проведения анализа покрытия программного кода тестами
  8. Тестовое окружение. Семинар посвящен тестовому окружению. Рассматриваются вопросы проектирования тестового окружения, вводятся понятия тестовых классов и тестовых проектов.
  9. Повторяемость тестирования. Лекция посвящена вопросам обеспечения повторяемости тестирования в промышленном окружении. Определяются задачи и цели обеспечения повторяемости, рассматриваются процессы настройки тестового окружения, оптимизации последовательности выполнения тестовых примеров. Определяются проблемы, возникающие при наличии зависимостей между тестовыми примерами. Цель данной лекции: дать представление о подготовке тестов в промышленных средах
  10. Модульное тестирование. Семинар посвящен модульному тестированию, его задачам и целям. Вводится понятие модуля и его границ. Рассматривается тестирование классов, проектирование тестового окружения.
  11. Документация, сопровождающая процесс верификации и тестирования (тест-требования). Лекция посвящена документации, создаваемой в процессе тестирования. Рассмотрены технологические процессы, сопряженные с созданием или использованием тестовой документации. Рассмотрены следующие типы документов: стратегия и планы верификации, тест-требования. Цель данной лекции: определить основные технологические цепочки, в которых создается и используется тестовая документация, дать представление о роли стратегии верификации и планов верификации, определить подходы к разработке и анализу тест-требований
  12. Документация, сопровождающая процесс верификации и тестирования (тест-планы). Лекция продолжает тему документирования процесса тестирования, посвящена документации, создаваемой в процессе тестирования. Рассмотрены тест-планы, возможные формы их подготовки, отчеты о прохождении тестов и различные формы их подготовки. Цель данной лекции: определить основные технологические цепочки, в которых создается и используется тестовая документация, дать представление о роли тест-планов и отчетов о прохождении тестов, определить подходы к разработке и анализу тест-планов
  13. Автоматизация модульного тестирования. Семинар посвящен тестовому окружению, тестовым классам, тестовым проектам. Рассматривается подход XP (тесты перед кодом). Рассматриваются возможности MVSTE по тестированию модулей (Unit Testing).
  14. Документация, сопровождающая процесс верификации и тестирования (отчеты). Лекция завершает тему документирования процесса тестирования и посвящена документации, создаваемой в процессе тестирования. Рассмотрены отчеты о покрытии программного кода, отчеты о проблемах и трассировочные таблицы. Цель данной лекции: определить основные технологические цепочки, в которых создается и используется тестовая документация, дать представление о роли отчетов о покрытии, отчетов о проблемах и трассировочных таблиц
  15. Контрольная работа
  16. Формальные инспекции. Лекция определяет основные подходы к организацию статического анализа исходных текстов программ и документации при помощи формальных инспекций. Цель данной лекции: определить основные задачи и цели проведения формальных инспекций, определить этапы проведения формальной инспекции
  17. Формальные инспекции (окончание). Лекция завершает тему "Формальные инспекции" и рассматривает документы, создаваемые в ходе формальной инспекции, а также определяет особенности формальных инспекций программного кода и проектной документации. Цель данной лекции: определить основные документы, создаваемые в ходе формальной инспекции, и указать на основные особенности процессов формальной инспекции программного кода и проектной документации
  18. Формальные инспекции. Семинар посвящен формальным инспекциям программного кода. Проводится формальная инспекция программного модуля, участники выбираются из числа студентов.
  19. Модульное тестирование. Лекция является первой из трех рассматривающих уровни процесса верификации. Тема данной лекции - процесс модульного тестирования, его задачи и цели. Определяется понятие модуля и его границ, определяются подходы к проектированию тестового окружения при модульном тестировании. Рассматриваются организационные аспекты модульного тестирования. Цель данной лекции: дать представление о процессе модульного тестирования, его технической и организационной составляющих
  20. Покрытие программного кода. Семинар посвящен покрытию программного кода. Рассмотрены методы проверки покрытия, методы улучшения покрытия, покрытие по методу MC/DC. Обсуждаются отчеты о покрытии, различные их формы, анализ неполноты покрытия, влияние зависимостей тестовых примеров на полноту покрытия. Описан процесс сбора покрытия и генерации отчетов о покрытии в MVSTE
  21. Интеграционное тестирование. Лекция является второй из трех рассматривающих уровни процесса верификации. Тема данной лекции - процесс интеграционного тестирования, его задачи и цели. Рассматриваются организационные аспекты интеграционного тестирования - структурная и временная классификации методов интеграционного тестирования, планирование интеграционного тестирования. Цель данной лекции: дать представление о процессе интеграционного тестирования, его технической и организационной составляющих
  22. Повторяемость тестирования, зависимости тестовых примеров. Семинар посвящен зависимости тестовых примеров. Рассматривается инициализация тестового окружения перед выполнением, выполнение последовательностей тестов, зависимость по общим данным, зависимость по состоянию системы/модуля, упорядоченные тесты (ordered tests) в MVSTE.
  23. Системное тестирование. Лекция является последней из трех рассматривающих уровни процесса верификации. Тема данной лекции - процесс системного тестирования, его задачи и цели. Рассматриваются виды системного тестирования, особенности системного тестирования и испытаний при разработке сертифицируемого программного обеспечения. Цель данной лекции: дать представление о процессе системного тестирования, его технической и организационной составляющих
  24. Интеграционное тестирование. Семинар посвящен интеграционному тестированию, в т.ч. рассматриваются вопросы тестирования межмодульных интерфейсов, определения границ тестируемой области, тестирования информационного обмена между модулями.
  25. Тестирование пользовательского интерфейса. Лекция посвящена тестированию пользовательского интерфейса. Определяются задачи и цели данного вида тестирования, определяются методы функционального тестирования пользовательского интерфейса, вводятся основные понятия тестирования удобства использования (usability) интерфейсов. Цель данной лекции: дать представление о процессе тестирования пользовательского интерфейса, его задачах, целях и основных методах
  26. Методы разработки устойчивого кода. Лекция посвящена методам разработки устойчивого программного кода. Проводится классификация проблем, возникающих при работе программных систем, рассмотрено три метода разработки устойчивого кода: допущения, обработка исключений, сбор информации о сбоях. Цель данной лекции: дать представление о методах разработки устойчивого кода
  27. Поддержка процесса тестирования при промышленной разработке программного обеспечения. Лекция посвящена промышленным процессам поддержки тестирования: управлению качеством и конфигурационному управлению. Рассматриваются особенности этих процессов при разработке сертифицируемого программного обеспечения. Цель данной лекции: дать представление о процессах управления качеством и конфигурационного управления
  28. Тестирование в Microsoft Solutions Framework. Семинар посвящен Microsoft Solutions Framework и роли тестировщика в команде разработчиков, работающих по подходу MSF for Agile Software Development.

Объектное программирование в классах на С# 3.0

  1. Классы. В лекции рассматриваются детали построения класса. Обсуждается роль полей, как глобальной информации, доступной всем методам класса.
  2. Проектирование класса. Обсуждаются две роли класса - типа данных и модуля. Рассматривается интерфейс - ткрытая часть класса, методы класса и их частные случаи - конструкторы, свойства, операции. Лекция сопровождается задачами на построение классов.
  3. Структуры. Структуры, как частный случай класса, позволяют задавать развернутый тип данных. Подробно обсуждаются отличия ссылочных и развернутых типов данных, когда и где следует применять тот или иной тип - ыбирать структуру или ссылочный класс. Лекция сопровождается задачами.
  4. Перечисления. Перечисление позволяет задать конечное множество значений, которые могут получать объекты классы. Показано, как перечисление, заданное шкалой, позволяет строить эффективные по памяти и времени алгоритмы для широкого класса задач. Лекция сопровождается задачами.
  5. Отношения между классами. Клиенты и наследники. Одна из важнейших тем этого курса рассматривает два основных типа отношений, существующих между классами - наследование и встраивание. Каждый класс создается в интересах своих будущих клиентов и потомков. Подробно обсуждается вопрос, когда следует применять наследование, а когда встраивание.
  6. Наследование и полиморфизм. Продолжается изучение особенностей наследования. Рассматривается важное понятие полиморфизма, характерное для семейства классов, связанных отношением наследования. Лекция сопровождается задачами.
  7. Интерфейсы. Множественное наследование. Многозначное слово интерфейс в данной лекции задает еще один важный частный случай класса - класс, заданный заголовками методов. Интерфейсы важны не только потому, что позволяю задать определенное поведение у потомков интерфейса, но и позволяют справиться с проблемой множественного наследования. Лекция сопровождается задачами.
  8. Делегаты. Функциональный тип данных. Методы класса могут выступать в роли объектов. Методы с одинаковой сигнатурой принадлежат одному функциональному типу. Класс, позволяющий описать функциональный тип, называется делегатом. Различные вопросы, связанные с делегатами подробно рассматриваются в этой лекции.
  9. Применение делегатов. Функции высших порядков. Подробно обсуждаются анонимные методы. Рассматриваются функции высших порядков. Функции высших порядков как альтернатива полиморфизму. Приводятся примеры.
  10. Делегаты как свойства. Операции над делегатами. Рассматриваются операции, которые можно выполнять над объектами функционального типа. На примерах обсуждаются возможности комбинирования методов. Лекция сопровождается задачами.
  11. Классы с событиями. Поля, методы и события - треугольник, полностью описывающий объекты класса. События позволяют специфицировать поведение объектов класса, поскольку каждый объект при возникновении события может иметь свой набор обработчиков этого события.
  12. Корректная работа с событиями. Обсуждаются проблемы, возникающие при совместной обработке события несколькими обработчиками. Рассматривается пример моделирования жизни города, в котором происходят события. Лекция сопровождается задачами.
  13. Универсальность. Классы с родовыми параметрами. Универсальные классы, шаблоны, классы с родовыми параметрами - синонимичные понятия для класса, у которого есть параметры, задающие типы. Эти классы являются одним из мощнейших механизмов, позволяющих существенно сокращать объем кода объектно-ориентированных программных систем.
  14. Ограничения универсальности. Как ни парадоксально, но ограничение универсальности увеличивает свободу программиста. Рассматриваются способы ограничения универсальности. Лекция сопровождается задачами.
  15. Декларативность. Атрибуты и теги. В язык С# все в большей степени встраиваются декларативные элементы, позволяющие описать, что надо делать, не указывая, как это делается. В этой лекции изучаются такие элементы декларативного стиля как атрибуты и теги.
  16. Встроенные и заданные программистом атрибуты. Документируемые комментарии. В данной лекции подробно обсуждаются атрибуты - встроенные и создаваемые программистом, относящиеся к декларативным элементам – метаинформации, сопровождающей проект. Еще одна тема этой лекции - это документирование кода и использование тегов - документируемых комментариев. Лекция сопровождается задачами.
  17. Корректность и устойчивость программных систем. Программные системы во многих случаях - жизненно важные системы, от правильной работы которых может зависеть благосостояние и даже жизнь отдельного человека или целого коллектива. Элементами доказательного программирования должен владеть каждый профессиональный программист.
  18. Искусство отладки. Отладка рассматривается как процесс, направленный на достижение корректности программной системы. Обсуждаются средства, предоставляемые языком C# и средой разработки для отладки программных систем.
  19. Обработка исключительных ситуаций. Обработка исключительных ситуаций рассматривается как процесс, направленный на достижение устойчивости программной системы. В этой же лекции обсуждаются вопросы профессионального стиля разработки программных проектов. Подводятся итоги курса.
  20. Практикум 1. Установка Visual Studio 2010. В практикуме рассказывается процесс установки программного продукта.
  21. Практикум 2. Создание простого приложения в Visual Studio 2010. В практикуме показывается пример создания простой программы в Visual Studio 2010 на языке C#
  22. Практикум 3. Разработка программ в Visual Studio 2010. В практикуме даются примеры разработки различных проектов.
  23. Практикум 4. Взаимодействие проектов. В практикуме даются примеры взаимодействия: C# и C++, C3 и Visual Basic.

Основы программирования на С# 3.0: ядро языка

  1. Язык программирования и среда разработки. Обзорная лекция, в которой рассматриваются основные черты языка С#, его современное состояние и будущее. Описываются свойства среды разработки – Visual Studio 2008 и инструментария Framework .Net 3.5.
  2. Построение проектов на языке С#. Рассматриваются возможные типы проектов, которые можно строить на языке С# в Visual Studio 2008. Приводится пример проекта, демонстрирующий возможности языка C#.
  3. Типы и классы. Переменные и объекты. Вводятся понятия типа данных и класса. Рассматривается связь между этими понятиями. Показано, как объявляются переменные и объекты. Приводятся примеры. Большое внимание уделяется вводу и выводу переменных разных типов, контролю ввода.
  4. Переменные и объекты. Область видимости и время жизни. Рассматриваются разные уровни объявления объектов. Определяются понятия полей класса, глобальных и локальных переменных, такие их характеристики как время жизни и область видимости. Заканчивается лекция задачами по теме лекции.
  5. Выражения и операции. Рассматривается синтаксис и семантика построения выражений языка С#. Рассматриваются возможные операции языка, их приоритеты.
  6. Шкалы и лямбда выражения. Обсуждается работа со шкалами. Рассмотрен лямбда оператор и лямбда выражение. Анализируются преобразования типа операндов при вычислении выражений. Обсуждаются вопросы эффективного вычисления выражений. Предлагаются задачи на эту тему.
  7. Операторы языка С#. Рассмотрен весь набор операторов языка С#. Обсуждаются их достоинства и недостатки. Операторы присваивания выбора и циклов составляют основу процесса алгоритмизации.
  8. Специальные операторы языка C#. Продолжается обсуждение операторов цикла. Рассмотрены операторы языка try - catch – finally и оператор yield, используемый в итераторах. Обсуждается тема математической бесконечности и конечности вычислений. Рассматриваются классические алгоритмы и даются задачи на эту тему.
  9. Процедуры и функции – методы класса. Дается определение метода класса и его реализации в виде процедуры и функции. Рассматриваются синтаксические и содержательные различия процедур и функций.
  10. Проектирование методов класса. Поясняется взаимодействие полей и методов класса, характерное для объектного программирования. Обсуждаются функции с побочным эффектом. Алгоритмы и задачи сопровождают эту лекцию.
  11. Массивы. Многое о массивах – динамических и статических, одномерных и многомерных, массивах массивов – все это обсуждается в данной лекции. Большая часть лекции посвящена применению массивов при решении классических задач.
  12. Символы и строки. Эта лекция посвящена работе с текстовой информацией. Рассматриваются типы данных, применяемые при работе с текстами - char, string.
  13. Особенности работы c типом string. Обсуждается вопрос, почему тип string относится к неизменяемым классам. Рассматривается тип stringBuilder. Подробно обсуждаются классические алгоритмы поиска и сортировки строковых данных.

Программирование на языке С#: разработка консольных приложений

  1. Платформа Microsoft .Net Framework 2.0. Вводная лекция. В ней рассматриваются основные составляющие платформы Microsoft .Net Framework 2.0.
  2. Технология объектно-ориентированного программирования. Лекция рассматривает состав языка, типы данных, переменные и константы, а также организацию ввода-вывода данных. Приводятся основные понятия и принципы работы платформы, а также практические примеры.
  3. Операции. В данной лекции внимание уделено операциям и преобразованию типов. Приведены практические примеры.
  4. Операторы языка C#. Лекция посвящена операторам языка C#.
  5. Методы: основные понятия. Данная лекция посвящена методам C#: понятие метода, перегрузка методов.
  6. Рекурсивные методы. В данной лекции внимание уделено рекурсивным методам. Приведены практические примеры.
  7. Обработка исключений. Лекция посвящена обработке исключительных ситуаций.
  8. Массивы. Данная лекция рассматривает одномерные и многомерные массивы. Приведено большое количество практических примеров и заданий.
  9. Символы и строки. Лекция рассматривает символы и строки: типы данных char, string. Также рассмотрены изменяемые строки.
  10. Регулярные выражения. Лекция рассматривает регулярные выражения в C# и их применение.
  11. Организация С#-системы ввода-вывода. Материалы данной лекции посвящены вопросам организации ввода-вывода C#. Рассмотрен байтовый, символьный и двоичный потоки.
  12. Работа с файловой системой. Лекция посвящена принципам работы с файловой системой. Рассмотрены классы для работы с каталогами и файлами. Приведены практические примеры.
  13. Классы. Данная лекция посвящена классам C#. Приведены принципы использования классов и практические задачи.
  14. Иерархия классов. Лекция рассматривает иерархию классов: наследование, его виды, практические примеры.
  15. Интерфейсы и структуры. Лекция посвящена интерфейсам. Приведены принципы использования интерфейсов и практические задачи.
  16. Коллекции. В данной лекции раскрывается понятие коллекций C#. Приводятся принципы использования коллекций.

Дополнительные материалы.

  • Операции С#
  • Математические функции языка С#.

Работа в Microsoft Visual Studio

  1. Роль командной работы в создании прикладного программного обеспечения, основные постулаты и принципы работы в команде, обзор существующих инструментальных средств для командной работы
  2. Организация работы в команде
  3. Знакомство с методологией Microsoft Solution Framework (MSF), основные компоненты и принципы методологии, дисциплина управления проектом MSF
  4. Дисциплины управления рисками и готовностью в методологии MSF
  5. Модели процессов и команды методологии MSF
  6. Основные компоненты Visual Studio Team System(VSTS), формирование программно - аппаратной среды для установки VSTS. Лицензионная политика Microsoft. Методика установки компонентов VSTS
  7. Рабочее место менеджера проекта, инструментальные средства. Формирование технического задания, структурной схемы и основных функций тестового проекта в среде MS Project. График реализации проекта
  8. Основные функции и методы работы с MS Project, освоение рабочего места менеджера проекта
  9. Составление технического задания для вашего веб-проекта
  10. SharePoint Services и его роль в реализации проекта, как связующего звена между членами команды
  11. SharePoint Services как средство объединения команды
  12. Рабочее место архитектора проекта, основные функции и возможности, связь с разработчиками проекта
  13. Инсталляция сервера командной работы(Windows 2003, MS SQL, VS TFS, Framework 2.0, 3.0, SharePoint Services, VSTS, MS Project)
  14. Инсталляция рабочего места архитектора проекта, основные функции и возможности, создание архитектуры проекта согласно техническому заданию на проект
  15. Рабочее место разработчика, основные функции и инструментарий. Связь с менеджером и архитектором проекта
  16. Инсталляция рабочего места разработчика проекта, разработка фрагментов проекта
  17. Рабочее место тестера проекта, основные функции тестера и набор инструментальных средств тестирования, методы тестирования, стадии тестирования, связь с разработчиком, архитектором и менеджером проекта
  18. Инсталляция рабочего места тестера проекта, основные функции и возможности, тестирование фрагментов проекта
  19. Комплексное тестирование и отладка проекта
  20. Организация взаимодействия между членами команды, методы подбора членов команды в студенческой среде
  21. Разрешение конфликтных ситуаций при реализации проекта
  22. Оформление документации по проекту
  23. Роль и функции SharePoint в при выполнении курсовых и дипломных проектов в составе команды и в среде VSTS-2008

Стили и методы программирования.

  1. Вводная лекция. Появление языков программирования. Примеры простейших программ. Возможность понимать программы без изучения языка. Как текст программы превращается в исполняемый код?
  2. Модели вычислений. Традиционная архитектура вычислительных машин. Первое понятие о стилях программирования. Модификации традиционной архитектуры. Нетрадиционные архитектуры. Сети данных и параллелизм. Эмуляция и машина программы.
  3. Традиционные языки. Традиционные языки и традиционная архитектура. Структура традиционной программы. Основные традиционные языки. Как текст программы превращается в исполняемый код?
  4. Синтаксис, семантика и прагматика. Как определять язык программирования? Язык как текст (синтаксис). Язык как исполнимый текст (семантика). Конкретизация языка для данной обстановки. Какая часть синтаксиса нужна для семантики?
  5. Сентенциальное программирование: Рефал. Глобальные действия и глобальные условия. Конкретизация как один из видов отождествления. Данные и программы Рефала. Модель вычислений. Приемы программирования и примеры программ.
  6. Сентенциальное программирование: PROLOG. Исходные концепции языка. Данные. Управление при помощи неудач и возвратов. Порождение программы в ходе исполнения. Стандартные операции.
  7. Общие вопросы сентенциального программирования. Превращение логики в сентенциальный язык. Превращение теоретического языка в практический. Несовместимость моделей исполнения и отождествления. Вред и польза стандартизации.
  8. Функциональное программирование. Теоретические предпосылки. Списки и простейшие операции. Значения и модель вычислений. Динамическое порождение программ и функционалы. Объекты и синтез программ.
  9. Автоматное программирование: анализ задачи. Термин "автоматное программирование" принадлежит, насколько нам известно, А.А. Шалыто. Во всяком случае, ему принадлежит заслуга его развития вопреки моде и мнению большинства.
  10. Автоматное программирование: от таблицы к программе. Трансляция таблиц состояний и переходов. Различные методы представления таблиц как программ. Интерпретация таблиц переходов.
  11. Автоматное преобразование структурированных текстов. Понятие о языках разметки. Представление автоматной программы с помощью XML.
  12. Переход от данных к конечному автомату. Построение автомата по данным. Анализ автоматного программирования.
  13. Событийное программирование. События и демоны. Программирование от событий и от приоритетов.
  14. Структурное программирование. Теоретические предпосылки структурного программирования. Локальность действий и условий, требования к программным структурам. Призраки и подпорки. Сеть данных и совместность. Циклический и рекурсивный варианты.
  15. Проблемы, встающие перед параллельным программированием. Параллелизм и совместность. Виды параллелизма. Трудности параллельного программирования. Организация квазипараллелизма.
  16. Программирование от переиспользования. Что нужно для переиспользования? Необходимость математической культуры. Если бы Билли остался математиком... Образцы, шаблоны и фреймы.
  17. Общее понятие о стилях программирования. Следствия теоремы Гёделя о неполноте для программирования. Логическая несовместимость разных классов задач. Практическая несовместимость ипостасей внутри стилей. Взаимодействия и сочетаемость стилей.
  18. Методы по отношению к стилям

Язык программирования C++ для профессионалов

  1. Краткий обзор С++. В этой лекции содержится краткий обзор основных концепций и конструкций языка С++. Он служит для беглого знакомства с языком. Подробное описание возможностей языка и методов программирования на нем дается в следующих лекциях. Разговор ведется в основном вокруг абстракции данных и объектно-ориентированного программирования, но перечисляются и основные возможности процедурного программирования.
  2. Описания и константы. В данной лекции описаны основные типы ( char, int, float и т.д.) и способы построения на их основе новых типов (функций, векторов, указателей и т.д.). Описание вводит в программу имя, указав его тип и, возможно, начальное значение. В этой лекции вводятся такие понятия, как описание и определение, типы, область видимости имен, время жизни объектов. Даются обозначения литеральных констант С++ и способы задания символических констант. Приводятся примеры, которые просто демонстрируют возможности языка. Более осмысленные примеры, иллюстрирующие возможности выражений и операторов языка С++, будут приведены в следующей лекции. В этой лекции лишь упоминаются средства для определения пользовательских типов и операций над ними. Они обсуждаются в лекциях 5 и 7.
  3. Выражения и операторы. С++ имеет сравнительно небольшой набор операторов, который позволяет создавать гибкие структуры управления, и богатый набор операций для работы с данными. Основные их возможности показаны в этой лекции на одном завершенном примере. Затем приводится сводка выражений, и подробно обсуждаются операции преобразования типа и размещение в свободной памяти. Далее дана сводка операторов, а в конце лекции обсуждается выделение текста пробелами и использование комментариев.
  4. Функции. Все нетривиальные программы состоят из нескольких раздельно транслируемых единиц, по традиции называемых файлами. В этой лекции описано, как раздельно транслируемые функции могут вызывать друг друга, каким образом они могут иметь общие данные, и как добиться непротиворечивости типов, используемых в разных файлах программы. Подробно обсуждаются функции, в том числе: передача параметров, перегрузка имени функции, стандартные значения параметров, указатели на функции и, естественно, описания и определения функций. В конце лекции обсуждаются макровозможности языка.
  5. Классы. В этой лекции описываются возможности определения новых типов, для которых доступ к данным ограничен заданным множеством функций, осуществляющих его. Объясняется, как можно использовать члены структуры данных, как ее защищать, инициализировать и, наконец, уничтожать. В примерах приведены простые классы для управления таблицей имен, работы со стеком, множеством и реализации дискриминирующего (т.е. надежного) объединения. Следующие три лекции завершают описание возможностей С++ для построения новых типов, и в них содержится больше интересных примеров.
  6. Производные классы. Эта лекция посвящена понятию производного класса. Производные классы - это простое, гибкое и эффективное средство определения класса. Новые возможности добавляются к уже существующему классу, не требуя его перепрограммирования или перетрансляции. С помощью производных классов можно организовать общий интерфейс с несколькими различными классами так, что в других частях программы можно будет единообразно работать с объектами этих классов. Вводится понятие виртуальной функции, которое позволяет использовать объекты надлежащим образом даже в тех случаях, когда их тип на стадии трансляции неизвестен. Основное назначение производных классов - упростить программисту задачу выражения общности классов.
  7. Перегрузка операций. Лекция содержит описание механизма перегрузки операций в С++. Программист может задать интерпретацию операций, когда они применяются к объектам определенного класса. Помимо арифметических, логических и операций отношения можно переопределить вызов функций (), индексацию [], косвенное обращение ->, а также присваивание и инициализацию. Можно определить явные и скрытые преобразования между пользовательскими и основными типами. Показано, как определить класс, объект которого можно копировать и уничтожать только с помощью специальных, определенных пользователем функций.
  8. Шаблоны типа. В этой лекции вводится понятие шаблона типа. С его помощью можно достаточно просто определить и реализовать без потерь в эффективности выполнения программы и, не отказываясь от статического контроля типов, такие контейнерные классы, как списки и ассоциативные массивы. Кроме того, шаблоны типа позволяют определить сразу для целого семейства типов обобщенные (генерические) функции, например, такие, как sort (сортировка). В качестве примера шаблона типов и его связи с другими конструкциями языка приводится семейство списочных классов. Чтобы показать способы получения программы из в значительной степени независимых частей, приводится несколько вариантов шаблонной функции sort(). В конце определяется простой шаблон типа для ассоциативного массива и показывается на двух небольших демонстрационных программах, как им пользоваться.
  9. Механизм обработки особых ситуаций. В этой лекции описан механизм обработки особых ситуаций и некоторые, основывающиеся на нем, способы обработки ошибок. Механизм состоит в запуске особой ситуации, которую должен перехватить специальный обработчик. Описываются правила перехвата особых ситуаций и правила реакции на неперехваченные и неожиданные особые ситуации. Целые группы особых ситуаций можно определить как производные классы. Описывается способ, использующий деструкторы и обработку особых ситуаций, который обеспечивает надежное и скрытое от пользователя управление ресурсами.
  10. Потоки. В языке С++ нет средств для ввода-вывода. Их и не нужно, поскольку такие средства можно просто и элегантно создать на самом языке. Описанная здесь библиотека потокового ввода-вывода реализует строгий типовой и вместе с тем гибкий и эффективный способ символьного ввода и вывода целых, вещественных чисел и символьных строк, а также является базой для расширения, рассчитанного на работу с пользовательскими типами данных. Пользовательский интерфейс библиотеки находится в файле . Эта лекция посвящена самой потоковой библиотеке, некоторым способам работы с ней и определенным приемам реализации библиотеки.
  11. Проектирование и развитие. В этой главе обсуждаются подходы к разработке программного обеспечения. Обсуждение затрагивает как технические, так и социологические аспекты процесса развития программного обеспечения. Программа рассматривается как модель реальности, в которой каждый класс представляет определенное понятие. Ключевая задача проектирования состоит в определении доступной и защищенной частей интерфейса класса, исходя из которых определяются различные части программы. Определение этих интерфейсов есть итеративный процесс, обычно требующий экспериментирования. Упор делается на важной роли проектирования и организационных факторов в процессе развития программного обеспечения.
  12. Проектирование и С++. Эта лекция посвящена связи между проектированием и языком программирования С++. В ней исследуется применение классов при проектировании и указываются определенные виды зависимостей, которые следует выделять как внутри класса, так и между классами. Изучается роль статического контроля типов. Исследуется применение наследования и связь наследования и принадлежности. Обсуждается понятие компонента и даются некоторые образцы для интерфейсов.
  13. Проектирование библиотек. Эта лекция содержит описание различных приемов, оказавшихся полезными при создании библиотек для языка С++. В частности, в ней рассматриваются конкретные типы, абстрактные типы, узловые классы, управляющие классы и интерфейсные классы. Помимо этого обсуждаются понятия обширного интерфейса и структуры области приложения, использование динамической информации о типах и методы управления памятью. Внимание акцентируется на том, какими свойствами должны обладать библиотечные классы, а не на специфике языковых средств, которые используются для реализации таких классов и не на определенных полезных функциях, которые должна предоставлять библиотека.

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

Условия приема

  • Прием без ограничений, достаточно зарегистрироваться на сайте.

Необходимые документы

  • заявление (с личной подписью);
  • копия паспорта;
  • копия диплома(ов) об образовании;
  • одна фотография 3х4;
  • заполненный договор с физическим лицом или юридическим лицом в двух экземплярах с личной подписью;
  • копия документа, подтверждающего оплату (платежное поручение, квитанция).
Записаться на курс
Разработка программного обеспечения: Повышение квалификации
30 000
Заполните контактные данные
Оставьте заявку, чтобы забронировать себе место.
Наш менеджер свяжется с вами и ответит на любые ваши вопросы.
Открытый набор
72 часа
Онлайн
от 30 000 ₽