- •Парадигмы программирования предпосылки появления, обзор существующих парадигм программирования.
- •3.2. Процедурная парадигма
- •3.2.1. История возникновения парадигмы
- •3.2.2. Языки, поддерживающие парадигму
- •3.2.3. Представление программ и реализация вычислений
- •Основные принципы объектно-ориентированной парадигмы.
- •Наследование и агрегация как реализации принципа иерархии в ооАиП.
- •Анализ и проектирование программного обеспечения: .Цели, классификация.
- •Структурный анализ программных систем: основные принципы, существующие методологии.
- •Диаграммы переходов состояний (std): назначение, нотация, примеры реализации.
- •Объектно-ориентированный анализ: базовые принципы, методология.
- •Язык uml: назначение, структура, нотация.
- •Сущности uml: типы, нотация, примеры описания.
- •Отношения uml: типы, нотация, примеры применения.
- •Диаграммы прецедентов uml: назначение, .Используемые элементы, примеры построения.
- •Диаграммы классов uml: назначение, используемые элементы, примеры построения.
- •Диаграммы взаимодействия uml: назначение, используемые элементы, примеры построения.
- •.Метрики качества структурного и объектно-ориентированного анализа и проектирования.
- •Понятие объекта и класса в объектно-ориентированном программировании. Члены-данные и члены функции.
- •2. Объект - как базовое понятие в объектно-ориентированном программировании
- •17.Конструкотр и деструктор.
- •18. Реализация принципа инкапсуляции ограничением области видимости компонент.
- •19. Аксессоры доступа к закрытым компонентам класса.
- •20. Статические компоненты класса: назначение, особенности и примеры использования.
- •Перегрузка стандартных операций: назначение, синтаксические особенности, примеры реализации.
- •Исключительные ситуации и способы их обработки. Блоки обработки и блоки завершения. Структурная обработка исключительных ситуаций.
- •Реализация принципа наследования в объектно-ориентированных языках программирования. Виды наследования.
- •Объявление наследования. Порядок определения новых и переопределения унаследованных компонент класса. Модификация области видимости компонент класса при наследовании.
- •Множественное наследование: объявление, примеры реализации, недостатки. Виртуальное наследование.
- •Виртуальные функции и полиморфизм – назначение, примеры практического использования.
- •Абстрактные классы: определение, назначение, примеры использования.
- •Интерфейс: назначение, синтаксис определения, примеры использования.
- •Основные принципы обобщенного программирования, его достоинства и недостатки.
- •Обобщение функций и методов: синтаксис определения, инстанцирование, особенности использования.
- •Обобщенные классы: синтаксис определения, примеры объявления и конкретизации.
- •Коллекции с#: реализация интерфейсов для сортировки элементов.
- •Делегаты c# как основной тип функторов.
- •Шаблоны проектирования: определение, классификация, назначение, достоинства и недостатки.
- •Шаблон Одиночка (Singleton): описание и пример программной реализации.
- •Шаблон Адаптер: назначение, структура, пример программной реализации.
- •Шаблон Наблюдатель (Observer): структура, пример реализации на языке c# с использованием событий (Events)
- •Архитектурный шаблон mvc: назначение, возможные структурные решения, примеры практической реализации
Коллекции с#: реализация интерфейсов для сортировки элементов.
Программные объекты в языке C# могут объединяться в коллекции. Благодаря коллекциям возможна эффективная групповая обработка объектов (причем, необязательно однотипных). Наиболее востребованы в программах коллекции обобщенного и необобщенного типа.
Необобщенные коллекции соответствуют ряду типовых структур данных, к которым относятся:
- Динамический массив ArrayList, способный, подобно контейнеру vector в STL, увеличивать свой размер при необходимости;
- хеш-таблицу для пар "ключ-значение” Hashtable;
- очередь Queue, работающая по принципу FIFO ("первым пришел — первым вышел");
- отсортированный список пар "ключ-значение" SortedList, являющийся аналогом контейнера map в STL;
- стек Stack, реализующий обработку по принципу LIFO )"первым пришел — последним вышел").
Особенность необобщенных коллекций заключается в том, что они хранят данные в виде ссылок на тип Object. Так как этот тип данных является базовым для всех типов CLS, в необобщенные коллекции можно объединять данные любого типа.
Функциональность необобщенных коллекций декларируется специализированными интерфейсами [4](см. таблицу 4).
Таблица 4. Интерфейсы необобщенных коллекций
Интерфейс |
Описание |
ICollection |
Определяет элементы, которые должны иметь все необобщенные коллекции |
IComparer |
Определяет метод Compare() для сравнения объектов, хранящихся в коллекции |
IDictionary |
Определяет коллекцию, состоящую из пар "ключ-значение" |
IDictionaryEnumerator |
Определяет перечислитель для коллекции, реализующей интерфейс IDictionary |
IEnumerable |
Определяет метод GetEnumerator (), предоставляющий перечислитель для любого класса коллекции |
IEnumerator |
Предоставляет методы, позволяющие получать содержимое коллекции по очереди |
IEqualityComparer |
Сравнивает два объекта на предмет равенства |
IList |
Определяет коллекцию, доступ к которой можно получить с помощью индексатора |
IStructuraIComparable |
Определяет метод CompareTo(), применяемый для структурного сравнения |
IStructuralEquatable |
Определяет метод Equals(), применяемый для выяснения структурного, а не ссылочного равенства. Кроме того, определяет метод GetHashCode() |
Классы и интерфейсы необобщенных коллекций находятся в пространстве имен System.Collections.
Обобщенные коллекции реализуют принцип обобщенного программирования для стандартных структур данных, в том числе имеющих реализации в виде необобщенных коллекций. Обобщенные коллекции (таблица 5) обеспечивают безопасность типизации, поскольку могут хранить объекты лишь одного типа данных.
Таблица 5. Обобщенные коллекции языка C#
Обобщенная коллекция |
Описание |
Dictionary<Tkey, TValue> |
Сохраняет пары "ключ-значение". Обеспечивает такие же функциональные возможности, как и необобщенный класс Hashtable |
HashSet<T> |
Сохраняет ряд уникальных значений, используя хештаблицу |
LinkedList<T> |
Сохраняет элементы в двунаправленном списке |
List<T> |
Создает динамический массив. Обеспечивает такие же функциональные возможности, как и необобщенный класс ArrayList |
Queue<T> |
Создает очередь. Обеспечивает такие же функциональные возможности, как и необобщенный класс Queue |
SortedDictionary<TKey, TValue> |
Создает отсортированный список из пар "ключ-значение" |
SortedList<TKey, TValue> |
Создает отсортированный список из пар "ключ-значение". Обеспечивает такие же функциональные возможности, как и необобщенный класс SortedList |
SortedSet<T> |
Создает отсортированное множество |
Stack<T> |
Создает стек. Обеспечивает такие же функциональные возможности, как и необобщенный класс Stack |
