Цели и задачи



Дата16.07.2016
өлшемі61.04 Kb.
#204089
Спецкурс по C++. Программа.

Дедов Антон


  1. Цели и задачи


Компания использует C++ в качестве основного средства при разработке в большинстве своих продуктов. Поэтому существует очевидная постоянная потребность в грамотных разработчиках, которые способны применять используемый в компании инструментарий, увеличивая качество и надежность продуктов.

Принимая во внимание контекст, то есть тот факт, что речь идет о студентах старших курсов, предлагается следующий набор критериев - относительно опыта/знаний в C++ - к успешному соискателю-выпускнику ВУЗа:



  • Твердое знание основ языка.

  • Понимание назначения всех основных средств языка.

  • Опыт в работе над реальными (пусть учебными) проектами.

  • Способность создавать безопасный и сопровождаемый код.

  • Наличие осознания необходимости и намерение относительно дальнейшего самообразования.

Исходя из вышесказанного целью курса может являться

  1. Ознакомление с культурой и принятыми практиками программирования в сообществе C++, знакомство с современным состоянием языка.

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

Я не случайно употребил слово безопасность. На мой взгляд, способность разработчика создавать понятный и сопровождаемый код, а так же код лишенный грубых ошибок, вызванных непониманием и неправильным использованием средств языка должен быть одним из самых веских критериев к кандидатам.
Поэтому, среди основных задач курса должно быть формирование сознательного отношения к использованию тех или иных средств языка, а не изучение «крутых» трюков. В нашем случаем - это значит, делать упор на:

  • проектирование классов;

  • использование стандартной библиотеки и ее признанных расширений;

  • использование дизайна, который учитывает безопасность исключений.
    1. Требования к слушателям


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

Как минимум – это знание одного из языков программирования: C, Java, либо основ C++. А так же понимания концепций структурного и объектно-ориентированного программирования.


  1. Содержание курса


Курс условно разбит на несколько модулей. Каждый модуль содержит логически объединяет смежные темы.

Модули содержат специфические примеры кода, которые, между тем демонстрируют распространенные техники написания программ на C++, а так же использование стандартной библиотеки.



Список модулей:

  1. Введение в язык

  2. Объектно-ориентированное программирование на C++

  3. Исключения

  4. Шаблоны

  5. Введение в стандартную библиотеку C++

Модули естественным образом разбиваются на части, минимальная единица – лекция. Лекции разных модулей могут перемежаться с целью установления последовательности изложения материала в виде доступном для понимания. Т.е. начитанного материала должно хватать для «усвоения» каждой последующей лекции.
    1. Введение в язык

      1. Лекция 1


Длительность: 2часа

  1. Назначение языка и краткая история, основные возможности.

  2. Объявления и определения.

  3. Встроенные типы данных. Переменные; квалификаторы const.

  4. Выражения, операторы и управляющие структуры.

  5. Указатели. Массивы. Строковые литералы. Ссылки.

  6. Области видимости переменных.

  7. Структуры как средство группирования данных.

  8. Функции. Объявление и определение. Аргументы и возвращаемые значения. Аргументы по умолчанию. Указатели на функцию.

  9. Перегрузка функций и операторов. Разрешение имен функций при перегрузке.

  10. Структура программы. Понятие единицы трансляции. Понятие о правиле одного определения.
      1. Лекция 2


Длительность: 2часа

  1. Классы как абстрактные типы данных.

  2. Члены класса.

Ограничения доступа как средство для поддержки инкапсуляции. Дружба.

  1. Объекты. Определение переменных-объектов.

  2. Конструкторы и деструкторы классов. Порядок инициализации и уничтожения членов.

  3. Способы размещения объектов в памяти: автоматический, динамический, статический.

  4. Динамическая память. Операторы new, delete, delete[].

  5. Генерируемые компилятором определения членов классов.

  6. Использование объектов: вызов методов, передача объекта в качестве параметра функции. Понятие временного объекта.

  7. Передача объектов по значению и по ссылке.
      1. Лекция 3


Длительность: 1час, как и все последующие лекции.

  1. Пространства имен.

Пространства имен как область видимости. Открытость пространств имен. Безымянные пространства имен. Квалификаторы using. Fully specified name.

  1. Поиск и разрешение имен. Поиск Кёнинга.

  2. Иерархии классов.

Уровни доступа наследования. Иерархии is-a, и реализован посредством. Агрегирование как альтернатива наследованию.

  1. Конструкторы и деструкторы.

Порядок инициализации классов предков. Порядок вызовов деструкторов. Виртуальные деструкторы.

  1. Виртуальные функции. Абстрактные классы.

  2. Различие между перегрузкой, замещением и сокрытием функций.

  3. Введение в множественное наследование.
    1. Исключения (часть I)

Лекция 1


  1. Назначение механизма исключений.

  2. Группировка исключений.

  3. Поимка исключений, порядок. Поимка по константной ссылке. Re-throw.

  4. Ресурсы и исключения.

Исключения в конструкторах. Использование std::auto_ptr и boost::shared_ptr. Идиома RAII.

  1. Исключения и деструкторы.
    1. Объектно-ориентированное программирование

      1. Лекция 1


  1. Основные принципы ООП. (?)

  2. Проектирование классов для разного назначения: объекты-значения, базовые классы, классы исключений, шаблоны классов и т.п.

  3. Open-Close Principle как одна из целей объектно-ориентированной архитектуры.

  4. Принцип подстановки Лисковой.

Лекция 2


  1. Принцип интерфейса.

Какие функции составляют интерфейс класса. Какие функции должны быть членами класса, какие нет.

  1. Использование абстрактных классов.

Делайте нетерминальные классы абстрактными. Dependency Inversion Principle. Interface Segregation Principle.

  1. Инкапсуляция и проектирование интерфейса.

Классы обладающие поведением должны скрывать данные. Смешивание открытых и закрытых членов вредно.

  1. Паттерн невиртуального интерфейса (NVI pattern).

Лекция 3


  1. Вопросы перегрузки операторов:

    • Перегрузка new, delete.

    • Перегрузка операторов ++, ->, [] и т.п.

    • Перегрузка операторов +, >>, <<.

    • Какие операторы не рекомендуется перегружать.

  1. Вложенные классы.

  2. Идиома Pimpl.

  3. Паттерн Proxy.
    1. Шаблоны (часть I)

      1. Лекция 1


  1. Понятие шаблона. Инстанцирование.

  2. Шаблонные функции. Перегрузка.

  3. Шаблоны классов.

  4. Шаблоны членов классов.
    1. Стандартная библиотека (часть I)

Лекция 1


  1. Обзор и организация стандартной библиотеки.

  2. Использование строк.

  3. Контейнеры. Типы контейнеров.

Последовательности, ассоциативные контейнеры, адаптеры контейнеров. Требования к стандартным контейнерам.

  1. Потоки (введение).
    1. Шаблоны (часть II)

Лекция 2


  1. Специализация шаблонов классов.

  2. Частичная специализация шаблонов классов и шаблонов функций.

  3. Использование шаблонов. Классы свойств. Паттерн стратегия.
    1. Исключения (часть II)

Лекция 1


  1. Гарантии безопасности исключений (гарантии Абрамса).

  2. Разработка кода безопасного с точки зрения исключений.

  3. Стратегии обработки ошибок и исключительных ситуаций.
  1. Литература


Список литературы составлен в алфавитном порядке.

  1. Андрей Александреску. Современное проектирование на С++. Обобщенное программирование и прикладные шаблоны проектирования. // 2002

  2. Гради Буч. Объектно-ориентированный анализ и проектирование. С примерами приложений на C++. // 2000

  3. Дэвид Вандевурд, Николаи М. Джосаттис. Шаблоны C++. Справочник разработчика. // 2003

  4. Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. // 2001

  5. Скотт Майерс. Эффективное использование C++. 50 рекомендаций по улучшению ваших программ и проектов. // 2000

  6. Скотт Майерс. Наиболее эффективное использование C++. 35 новых рекомендаций по улучшению ваших программ и проектов. // 2000

  7. Скотт Майерс. Эффективное использование STL. // 2002

  8. Герб Саттер. Решение сложных задач на C++. // 2002

  9. Герб Саттер. Новые сложные задачи на C++: 40 новых головоломных примеров с решениями. // 2005

  10. Герб Саттер и Андрей Александреску. Стандарты программирования на C++: 101 правило и рекомендация. // 2005

  11. Бьерн Страуструп. Язык программирования C++. // 2001

  12. Бьерн Страуструп. Дизайн и эволюция языка C++. // 2000

  13. ISO/IEC 14882:1998(E), Programming Languages – C++ (ISO and ANSI C++ standard).

  14. Robert C. Martin. Design Principles and Design Patterns. // objectmentor.com 2000

Полезные ссылки


  • http://public.research.att.com/~bs/ Bjarne Stroustrup's homepage.

  • http://www.boost.org Boost libraries.

  • http://www.gotw.ca/gotw Herb Sutter. Guru of the Week.

  • http://objectmentor.com Object Mentor, Inc.

  • http://rsdn.ru Russian Software Development Network.

  • http://ooad.asf.ru Объектно-ориентированный анализ и проектирование.


Достарыңызбен бөлісу:




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет