Понятие обобщенного программирования. Принципы обобщенного программирования (абстрагирование, иерархия, типизация)
Итак, мы изучили такие технологии программирования, как структурное программирование (языки С++, Pascal), объектно-ориентированное (языки С++, C#). В ООП внимание уделяется данным об объекте и действиям над объектом. Это значит, что классы содержат: поля, конструкторы, методы, свойства, индексаторы, события.
Обобщённое программирование – новая технология программирования, которая была реализованная ещё в языке C++. В обобщённом программировании внимание уделяется алгоритмам, которые не зависят от типов данных, т.е. происходит абстрагирование от конкретных задач предметной области.
Это значит, что появились так называемые типизированные данные, т.е. тип переменной для них задан как параметр в виде <Тип>, а затем, во время работы программы, этот тип конкретизируется. В языке C++ были разработанны шаблоны функций, работающие с такими обобщёнными типами.
В структурном программировании наиболее универсальные алгоритмы оформлялись в виде процедур и функций пользователя, которые затем были собраны в модули, библиотеки модулей.
В 90-х годах 20 века американский программист Алекс Степанов создал библиотеку стандартных шаблонов, которая называлась STL (Standard Templates Library). В ней были собраны функции, которые реализуют самые распространённые алгоритмы (сортировка массивов, поиск в массиве и т.д.). В своих приложениях программисты получили возможность пользоваться этими шаблонами функций, посылая в них конкретные типы данных.
Наибольшую ценность библиотека STL приобрела с появлением в ней реализации работы со структурами данных, таких как стек, очередь, списки (однонаправленные и двунаправленные (кольцевые)). Эти новые структуры данных позволили более эффективно, чем стандартные массивы, хранить информацию во время работы программы. При разработке таких структур данных в языке C++ использовано иерархическое наследование классов, а в C# – интерфейсы.
В настоящее время библиотека STL переименована в библиотеку ATL (Active Templates Library). Словом Active называют новые технологии, позволяющие динамически, во время работы программы, использовать библиотеки классов.
Платформа программирования .NET поддерживает библиотеку ATL, но предлагает более удобный способ работы при создании приложений – использование базовых классов среды .NET.Среда .NET содержит стандартные интерфейсы, позволяющие поддерживать целые наборы классов, с помощью которых можно создавать различные структуры данных – коллекции. Коллекции служат для хранения во время работы приложения данных любого типа, в том числе и классового. Классы коллекций создают иерархическую структуру, так как реализуют соответствующие интерфейсы, которые при этом наследуются.
Можно создавать такие коллекции, методы и классы, которые принимают любой тип данных. Для этого служат обобщения. Обобщения – это типы, которые принимают имена других типов в качестве параметров. В среде .NET имеются обобщения для большинства классов, коллекций. Распознать тип данных во время работы программы позволяет динамическая идентификация типов.В этом и состоит сущность принципа обобщенного программирования «типизация данных».
Обзор коллекций. Интерфейсы коллекций. Классы коллекций общего назначения.
Обзор коллекций
Интерфейсы и классы, которые позволяют создавать различные коллекции, находятся в пространстве имён System.Collections. Для работы с коллекциями следует подключить директиву использования using System.Collections.
Под коллекцией понимается группа (набор) разнотипных объектов. В языке С++ коллекции называются контейнерами, в VB или VBA их называют семействами.
Коллекции разработаны для хранения объектов путём добавления их с помощью определённых методов. Обход (просмотр) содержимого коллекции позволяет выполнить цикл
foreach (Тип_объекта Имя_элемента in Коллекция).
Коллекции упрощают программирование, предлагая уже готовые решения для построения структур данных, разработка которых с нуля отличается большой трудоёмкостью. Основное достоинство коллекций состоит в том, что они стандартизируют способ обработки групп объектов в приложениях. Ведь все коллекции разработаны на основе набора заранее определённых интерфейсов.
Среда . NET Framework поддерживает три основных типа коллекций: общего назначения, специализированные и ориентированные на побитовую организацию данных.
Коллекции общего назначения реализуют такие структуры данных как динамический массив, стек, очередь, хэш-таблицы и другие. Сюда относятся так же словари, предназначенные для хранения пар “ключ-значение”.
Коллекции специального назначения ориентированы на обработку данных конкретного типа (строк) или на обработку уникальным способом (однонаправленный список). Однонаправленный список – это последовательность (цепочка) узлов, последний из которых содержит пустой указатель (null):
Классы коллекций, ориентированных на побитовую организацию данных, служат для хранения групп битов. Они работают очень быстро, так как используют побитовые операции (сдвиг влево, сдвиг вправо, и, или и другие). Примером таких коллекций являются цветовые палитры.
Интерфейсы коллекций
Основополагающими для всех коллекций являются интерфейсы IEnumerable, IEnumerator, которые указывают, как реализовать перечисление. Базовым интерфейсом является интерфейс ICollection, то есть на нём построены все коллекции. В этом интерфейсе имеется самое востребованное свойство int Count {get;} – количество элементов коллекции в текущий момент времени.
Интерфейс IList определяет коллекцию-список. В нем имеется индексатор (отсчёт от 0), а так же много методов, которые позволяют добавлять, удалять элементы, очищать коллекцию.
Интерфейс IDictionary поддерживает словари. В нем имеются свойства Keys и Values.