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

 
.
HOME
Новенькое
С++
Генетика
Ссылки
FAQ
Гостевая
книга
Предисловие
Содержание курса
Вопросы для самостоятельного изучения
Перечень лабораторных занятий
Литература
Контрольные вопросы

ПРЕДИСЛОВИЕ

Целью курса является дать представление студентам об основных принципах объектно-ориентированного программирования на языке С++. Основной задачей курса является подготовка специалистов, владеющих современными методами и средствами разработки алгоритмов и программ, знающих современную технологию программирования и умеющих применять ее при решении сложных прикладных задач. Курс лекций расчитан на студентов, имеющих подготовку по информатике и программированию на языке С.

Если у вас есть каке-то замечания по поводу изложенного здесь материала - пишите.

СОДЕРЖАНИЕ КУРСА

1. Типы данных
  • Современное понятие типа
  • Базовые типы
  • Основные конструкторы типов
2. Методология программирования
  • Декомпозиция и абстракция
  • Абстракция через параметризацию
  • Абстракция через спецификацию
  • Процедурная абстракция
  • Абстракция данных
  • Классы операций
  • Полнота
3. Введение в объектно-ориентированное программирование
  • Немного истории
  • Объектно – ориентированная технология разработки программ
  • Инкапсуляция
  • Наследование
  • Полиморфизм
4. Объектно-ориентированные расширения С++
  • Консольный ввод и вывод в С++
  • Введение в классы
  • Перегружаемые функции и операторы (overload)
5. Классы и объекты
  • Встраиваемые функции
  • Конструкторы и деструкторы
  • Конструкторы с параметрами и перегрузка конструкторов
  • Присваивание объектов
  • Передача в функции и возвращение объекта
  • Указатели и ссылки на объекты
6. Наследование в языке С++
  • Модификаторы наследования
  • Конструкторы и деструкторы при наследовании
  • Пример построения классов и наследования
  • Совместимость типов
7. Дружественные функции
  • Переопределение операторов с помощью дружественных функций
8. Виртуальные методы
  • Раннее и позднее связывание
  • Виртуальные функции
  • Полиморфизм и виртуальные методы
  • Указатели на базовые классы
  • Абстрактный класс
9. Шаблоны (параметризованные типы)
  • Шаблоны функций
  • Требования к фактическим параметрам шаблона
  • Отождествление типов аргументов
  • Шаблоны классов
  • Шаблоны классов: не только для типов
  • Наследование в шаблонах классов
10. Библиотека iostream
  • Простое внесение
  • Выражение извлечения
  • Создание собственных функций внесения и извлечения
  • Функции библиотеки iostream
  • Манипуляторы ввода –вывода
  • Файловые и строковые потоки

ВОПРОСЫ ДЛЯ САМОСТОЯТЕЛЬНОГО ИЗУЧЕНИЯ

  1. Виртуальные классы
  2. Обработка исключений

ПЕРЕЧЕНЬ ЛАБОРАТОРНЫХ ЗАНЯТИЙ


(* отмечены задачи для любителей трудностей)
  1. Создание класса и объектов типа "полином" с динамическим выделением памяти под элементы, для которого определены основные операции: сложение, вычитание, присваивание, *умножение, *деление. Реализация различных типов конструкторов для одного типа, включая конструктор копирования. Использование переопределенных операторов потокового ввода-вывода для этого нового типа.
    Иллюстрация на простом примере использования объектов нового типа.
  2. Создание нескольких (не менее двух) типов для графических объектов, используя механизм наследования от классов Point или Circle. (например: квадрат, прямоугольник, возможно закрашенный, круг, сектор, *3D- объекты и т.п.)
    Иллюстрация на простом примере использования объектов нового типа.
  3. Создание двухуровневой иерархии классов, где в качестве родительского класса выступает абстрактный класс, на примере абстрактного типа "график функции". При этом вид функции определяется в производном классе. Реализация операций сложения функций и умножения на константу, используя дружественные функции.
    Иллюстрация на простом примере использования объектов нового типа.

ЛИТЕРАТУРА

  1. Шилдт Герберт. Самоучитель С++ (2-ред)./Пер. с англ.-СПб.: BHV-Санкт-Петербург, 1997.-512с. (+дискета с примерами)
  2. Бруно Бабэ. Просто и ясно о Borland C++: Версии 4.0 и 4.5/ Пер. с англ. -М.:БИНОМ, 1994. - 400с.
  3. Страуструп Б. Язык программирования С++ (2-ред)./Пер. с англ.-М.: Радио и связь, 1995. - 352с.
  4. Клочков Д.П., Павлов Д.А. Введение в объектно-ориентированное программирование. / Учебно-методическое пособие. - Изд. Нижегор. ун-та, 1995. - 70с.
  5. Элиас М., Страуструп Б. Справочное руководство по языку С++ с комментариями. /Пер. с англ. -М.:Мир, 1992.- с.

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Какие существуют механизмы для создания новых типов?
  2. В чем смысл декомпозиции при составлении программ?
  3. В чем различие между видами и методами (способами) абстракции?
  4. Классы операций абстракции данных. Полнота класса операций.
  5. Парадигма ООП. Специфика интерфейса ОО программ.
  6. Преимущества ООП.
  7. Понятие класса. Отношение "объект - класс".
  8. Понятие полиморфизма. Проявления полиморфизма.
  9. Механизм наследования.
  10. Модификатора доступа и наследования. Как изменяются атрибуты элементов класса при наследовании?
  11. Смысл инкапсуляции.
  12. В чем разница между struct, class и union?
  13. Что такое конструктор, деструктор и когда они вызываются?
  14. Что такое встраиваемая функция? В чем ее преимущества и недостатки?
  15. Какие два способа существуют для создания встраиваемой функции?
  16. Как можно передать в функцию в качестве аргумента адрес объекта?
  17. Что такое дружественная функция?
  18. Когда следует переопределять операторы с помощью дружественных функций, а когда с помощью функций элементов класса?
  19. Что происходит при присваивании одного объекта другому (без переопределенной операции =) и какие побочные эффекты могут возникнуть?
  20. При передаче объекта в функцию в качестве аргумента создается копия этого объекта. Изменение копии в теле функции не отражается на оригинале. Возможно ли нарушение этого правила?
  21. Какая функция может иметь доступ к защищенным членам одного класса? ... двух классов?
  22. Что такое указатель this. Приведите пример использования этого указателя.
  23. Для чего необходимы операторы new и delete. В чем их отличие от функций malloc() и free()?
  24. Что такое ссылка? Какое имеется преимущество при использовании ссылки в качестве параметра функции, а в чем недостаток? В чем разница между ссылкой и указателем?
  25. Назовите причины, по которым может понадобиться перегрузка конструкторов и деструкторов (в одном классе).
  26. Какова основная форма конструктора копирования и когда он вызывается?
  27. Что такое аргумент по умолчанию? Как аргумент по умолчанию связан с перегрузкой функций?
  28. Почему может потребоваться перегрузка оператора присваивания?
  29. Как можно ли изменить приоритет перегруженного оператора?
  30. Что такое виртуальная функция?
  31. Какие функции не могут быть виртуальными?
  32. Что такое абстрактный класс и чем может быть вызвана необходимость построений абстрактного класса?
  33. Чем виртуальные функции отличаются от перегружаемых?
  34. Раннего и позднее связывание.
  35. Совместимость типов. Какую роль в достижении совместимости объектов могут играть абстрактные классы?
  36. Почему шаблоны называют параметризованными типами?
  37. Когда следует в программе применять шаблоны, а когда нет?
  38. Чем шаблоны лучше макроподстановок?
  39. Для каких типов данных может применяться конкретный шаблон, а для каких нет?
  40. В чем разница между классом и шаблоном класса?
  41. Что может выступать в качестве параметра для шаблона класса?
  42. В чем основное преимущество использования библиотеки потокового ввода-вывода?
  43. Как работает операция внесения (на примере)?
  44. Что такое манипулятор ввода - вывода?
  45. Организация файлового и строкового потока.
.
HOME | Новенькое | C++ | Генетика
Ссылки | FAQ | Гостевая книга

Исаев Сергей
e-mail: saisa@mail.ru
web: http://saisa.chat.ru