Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

Глава 18. Обобщения

18.1. Обобщения как средство абстракции

Код, записанный на каком-либо языке программирования, представляет собой

наиболее детализированное и поэтому в общем случае сложное представление

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

объясняется тем обстоятельством, что в нём должны быть учтены все детали

реализации алгоритма с помощью применяемого языка и ограничения той

операционной среды, в которой должна выполняться программа. Сложность кода и

трудоёмкость его разработки делают задачи его повторного использования и

автоматизации его генерации весьма важными и актуальными. В предыдущих главах

рассмотрены средства, позволяющие программировать на основе объектно-

ориентированного подхода. Этот подход позволяет создавать отдельные классы и

библиотеки

классов,

пригодные

для

повторных

использований.

Применяя

библиотеку классов, можно существенно снизить трудоёмкость разработки

программ, абстрагируясь от деталей кода, скрытых (инкапсулируемых) в

используемых объектах библиотечных классов.

Следующий уровень абстракции – параметризация

"параметризация:типов"

объявлений типов (например, классов) и методов

"параметризация:методов" .

Прежде чем переходить к описанию этого механизма (реализованного в языке C# с

помощью обобщений) поясним на примере его основные принципы.

Предположим, что для дальнейшего применения необходимо иметь класс,

объект которого представляет собой отдельный элемент связного списка, каждый из

которых хранит значения типа int.

class ListInt {

public int data;

public ListInt (int d)

{ data = d;}

}

Если в дальнейшем потребуется класс элементов связного списка, объекты

которого хранят значения типа char, то придётся объявлять его, например, так:

class ListChar {

public char data;

public ListInt (char d)

{ data = d;}

}

По структуре класс ListInt и ListChar подобны, единственное отличие – типы

полей data и типы параметров конструкторов в одном случае int, а во втором char.

Этот факт, а именно различие классов только в обозначениях типов, делает

возможным создание обобщённого (параметризованного) класса, который будет

служить шаблоном для автоматической генерации его частных случаев – классов с

полями типов int, char, а при необходимости long, double и т.д.

В языке C# такой механизм автоматизированной генерации кодов конкретных

объявлений

существует .

Определения

( объявления )

классов ,

структур ,

интерфейсов, делегатов и методов могут быть параметризованы типами тех данных,

которые представлены этими конструкциями или обрабатываются с их помощью. О

такой возможности параметризации объявлений говорят, используя термин

"обобщения". "обобщения" Механизм обобщений языка C# схож с механизмом

шаблонов (templates) классов и функций языка С++. Кроме того, как указывает

стандарт C#, обобщения хорошо знакомы программистам, владеющим языками

Эффель или Ада. Отметим, что в русскоязычной литературе, посвящённой языкам

Эффель и Ада обобщённые (generic) методы называют родовыми подпрограммами,

а об обобщённом программировании говорят как о родовом программировании.

Параметризованные

объявления

классов

и

структур

называют

,

соответственно, объявлениями обобщённых классов

"объявления:обобщённых

классов"

(generic class declaration) и объявлениями обобщённых структур

"объявления:обобщённых структур"

(generic struct declaration).

И классы

и

структуры в этих случаях параметризованы типами своих данных и типами тех

данных, которые должны обрабатываться методами этих классов и структур.

Интерфейсы

могут

быть

параметризованы

типами

тех

данных,

которые

обрабатываются методами интерфейсов после их реализации. Объявления таких

параметризованных

интерфейсов

называют

объявлениями

обобщённых

интерфейсов

"объявления:обобщённых

интерфейсов"

(generic

interface

declaration). Для того, чтобы создавать "обобщённые алгоритмы" выполняют

параметризацию

методов

типами

применяемых

в

них

данных .

Такие

параметризованные методы называют обобщёнными методами

"обобщённые

методы" ( g e n e r i c

methods).

В

объявлении

обобщённого

делегата

"объявления:обобщённых делегатов" типизирующие параметры определяют типы

параметров и тип возвращаемого значения тех методов, которые должны

представлять экземпляры делегата.

Соседние файлы в папке CSBasicCourse2ndedPodbelsky