Программа курса
Объектно-ориентированное программирование
I . Принципы обектно-ориентированного программирования
1. Строгая типизация данных.
2. Интерфейсы, полиморфизм и перегрузка операторов в C++.
3. Адресное пространство приложения: куча, стек и статические объекты.
5. Динамическая инициализация объектов. Сборка "мусора" в C++ и Java.
6. Реализация косвенных обращений к объектам в куче.
7. Хранение объектов в памяти. Виртуальные функции.
7. Наследование и абстрактные классы в C++.
8. Полиморфные классы. Подстановочный критерий Барбары Лисков.
9. Динамическая идентификация типов в C++.
10. Наследование и абстрактные классы в Java.
11. Реализация интерфейсов в Java.
12. Многопоточное программирование в Java.
13. Проблема повторного использования клиентских программ.
II Абстрактные классы и интерфейсы для канонических структур данных в C++ и Java
1. Базовые классы: вектор Array, многомерный вектор MultiDimentionalArray, матрица Matrix, связанный список LinkedList
2. Абстрактные классы: компаратор Comparator, абстрактный объект Object, Wrapper, контейнер Container, посетитель Visitor, перечисление Enumeration, ассоциация Association.
3. Классы коллекций:
- стек Stack и его реализации StackAsArray и StackAs LinkedList.
- очередь Queue и ее реализации QueueAsArray и QueueAsLinkedList,
- двунаправленная очередь Deque и ее реализации Deque AsArray и DequeAsLinkedList,
- упорядоченный список OrderedList и его реализации OrderedListAsArray и OrderedListAsLinkedLis,.
- базовые классы курсор Cursor, терм Term и полином Polinomial,.
- отсортированный список SortedList и его реализации SortedListAsArray и SortcdListAsLinkedList,
- хэшированная таблица HashTable и ее реализации ChinedHashTable, ChaincdScatterTable и OpenScatterTable,
- множество Set и его реализации SetAsArray и SetAsBitVector,
- мультимножество MultiSct и его реализации MultiSetAsArray и MultiSetAsLinkcdList,
- разбиение Partition.
4. Деревья:
- абстрактный класс Tree,
- абстрактный класс PrePostVisitor и производные классы PreOrder, InOrder и PostOrder,
- классы бинарное дерево BinaryTree и АВЛ-дерево AVL-Tree.
5. Классы для представления графов:
- классы вершина Vertex и дуга Edge,
- абстрактный класс граф Graph и его реализации GraphAsMatrix и GraphAsLinkedList
III Обеспечение повторного использовании клиентских программ
1. Диаграммы проектирования клиентских классов в C++ и Java и язык UML.
2. Использование паттернов проектирования при разработке архитектуры программ.
IV Канонические паттерны проектирования в C++ и Java
1. Порождающие паттерны:
- абстрактная фабрика Abstract Factory
- строитель Builder
- фабричный метод Factory Method
- прототип Prototype
- одиночка Singleton
2. Структурные паттерны:
- адаптер Adapter
- мост Bridge
- компоновщик Composite
- декоратор Decorator
- фасад Facade
- приспособленец Flyweight
- заместитель Proxy
3. Паттерны поведения:
- цепочка обязанностей ChainOfResp
- команда Command
- интерпретатор Interpreter
- итератор Iterator
- посредник Mediator
- хранитель Memento
- наблюдатель Observer
- состояние State
- стратегия Strategy
- шаблонный метод TemplateMethod
- посетитель Visitor
V Подходы к выбору паттернов для решения задач проектирования
1. Файловая система на основе TemplateMethod.
2. Файловая система на основе Composite + Proxy + ChainOfResp + Iterator + Visitor + Observer + Command.
3. Файловая система на основе 7 предыдущих паттернов + Decorator.
VI Принципы программирования в С#
1. Элементы языка. Работа с приложениями. Библиотека базовых классов. Переменные и типы.
2. Техника программирования. Классы и компоненты. Управление памятью. Управление потоком выполнения программы. Небезопасный код. Метаданные и отражения. Конфигурирование компонентов и приложений.
3. Использование SDK.
Литература
1. Майерс С. Наиболее эффективное использование C++. ДМК. Москва. 2000
2. Майерс С. Эффективное использование STL. Питер. Санкт-Питербург. 2002
3. Элджер Д. C++. Питер. Санкт-Петербург. 2001
4. Холлингвэрт Д., Баттерфилд Д., Сворт Б., Олсон Д. C++ Builder. БХВ-Петербург. Санкт-Петербург. 2001
5. Шилдт Г. C++. БХВ-Петербург. Санкт-Петербург. 2002
6. Секунов Н. Visual C++.NET. БХВ-Петербург. Санкт-Питербург. 2002
7. Ноутон П., Шилдт Г. Java 2. BHV. Санкт-Петербург. 2000
8. Пономарев В. JBuilder 6/7. BHV. Санкт-Петербург. 2003
9. Дарвин Я.Ф. Java. Сборник рецептов. Питер. Санкт-Петербург. 2002
10. Топп У., Форд У. Структуры данных в C++. Вильяме. Москва. 2000
11. Александреску А. Современное проектирование на C++. Обобщенное программирование и прикладные шаблоны проектирования. Вильяме. Москва. 2002
12. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. Питер. Санкт-Петербург. 2003
13. Влиссидес Дж. Применение паттернов проектирования. Дополнительные штрихи. Вильяме. Москва. 2003
14. Стелтинг С., Маасен О. Применение шаблонов Java. Вильяме. Москва 2002
15. Робинсон У. С# без лишних слов. ДМК. Москва. 2002