Обобщенное программирование

Содержание

Слайд 2

Обобщенное программирование

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

Обобщенное программирование парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое
применять к различным типам данных, не меняя само это описание.
Основана на использовании абстрактных описаний требований (расширении понятия абстрактного типа данных)

Слайд 3

Обобщенное программирование

Вместо описания отдельного типа применяется описание семейства типов, имеющих общий интерфейс

Обобщенное программирование Вместо описания отдельного типа применяется описание семейства типов, имеющих общий
и семантическое поведение. Набор требований, описывающий интерфейс и семантическое поведение, называется концепцией
Тип моделирует концепцию (является моделью концепции), если он удовлетворяет её требованиям

Слайд 4

Этапы решения задачи

Найти полезный и эффективный алгоритм
Определить обобщённое представление (параметризовать алгоритм,

Этапы решения задачи Найти полезный и эффективный алгоритм Определить обобщённое представление (параметризовать
минимизировав требования к обрабатываемым данным)
Описать набор (минимальных) требований, удовлетворяя которые всё ещё можно получить эффективные алгоритмы
Создать каркас на основе классифицированных требований

Слайд 5

Реализация в языках программирования

Реализация в языках программирования

Слайд 6

Обобщения в C#

Обобщения в C#

Слайд 7

Альтернативные варианты

Различные варианты одного и того же алгоритма (перегрузка методов)
Использование базового класса

Альтернативные варианты Различные варианты одного и того же алгоритма (перегрузка методов) Использование
(в пределе – object) с явным приведением типов
Обобщения: единое решение, не зависящее от конкретного типа данных, применяемое к обработке данных разных типов

Слайд 8

Понятие обобщения

Обобщение – параметризированный тип
Обобщения позволяют создавать классы, структуры, интерфейсы, методы и

Понятие обобщения Обобщение – параметризированный тип Обобщения позволяют создавать классы, структуры, интерфейсы,
делегаты для обработки разнотипных данных с соблюдением типовой безопасности
Класс, структура, интерфейс, метод или делегат, оперирующий параметризированным типом данных, называется обобщенным

Слайд 9

Простой пример

class Gen {
Т ob;
public Gen(T о) { ob

Простой пример class Gen { Т ob; public Gen(T о) { ob
= о; }
public T GetOb() { return ob; }
public void ShowType() { Console.WriteLine("Тип Т:" + typeof(T)); }
}

static void Main() {
Gen iOb = new Gen(102);
iOb.ShowType();
int v = iOb.GetOb() ; Console.WriteLine("Значение: " + v) ;
Gen strOb = new Gen("Это строка");
strOb.ShowType();
string s = strOb.GetOb(); Console.WriteLine("Значение: " + s);
}

Слайд 10

Необобщенный аналог

class NonGen {
object ob;
public NonGen(object о) { ob

Необобщенный аналог class NonGen { object ob; public NonGen(object о) { ob
= о; }
public object GetOb() { return ob; }
public void ShowType() { Console.WriteLine("Тип Т:" + ob.GetType()); }
}

static void Main() {
NonGen iOb = new NonGen(102);
iOb.ShowType();
int v = (int) iOb.GetOb(); Console.WriteLine("Значение: " + v) ;
NonGen strOb = new NonGen("Это строка");
strOb.ShowType();
string s = (string) strOb.GetOb(); Console.WriteLine("Значение: " + s);}
iOb = strOb; //логическая ошибка!

Слайд 11

Терминология

Gen – закрыто сконструированный тип
Gen – открыто сконструированный тип
int

Терминология Gen – закрыто сконструированный тип Gen – открыто сконструированный тип int
– закрытый тип
T – открытый тип (включает параметр)
Если все аргументы типа – закрытые, то такой тип – закрыто сконструированный; если хотя бы 1 открытый – открыто сконструированный

Слайд 12

Общий синтаксис

Объявление обобщенного класса:
class имя_класса<список_параметров_типа> {
Объявление объекта (ссылки на обобщенный класс):
имя_класса<список_аргументов_типа> имя_переменной

Общий синтаксис Объявление обобщенного класса: class имя_класса { Объявление объекта (ссылки на
= new имя_класса<список_аргументов_типа> (аргументы_конструктора);

Слайд 13

Ограниченные типы: ограничение на базовый класс

class A {
public void Hello ()

Ограниченные типы: ограничение на базовый класс class A { public void Hello
{ Console.WriteLine("Hello"); } }
class В : А { }
class С { }
class Test where T : А
{ Т obj ;
public Test(T о) { obj = о; }
public void SayHello() { obj.Hello (); }
}

static void Main() {
A a = new A(); В b = new B(); С с = new C();
Test t1 = new Test(a); t1.SayHello();
Test t2 = new Test(b); t2.SayHello();
// Test t3 = new Test(c); t3.SayHello(); // Ошибка!
}

Слайд 14

Ограниченные типы: другие ограничения

Ограничение на интерфейс class имя where T : имя_интерфейса
Ограничение

Ограниченные типы: другие ограничения Ограничение на интерфейс class имя where T :
на конструктор new() – позволяет получать экземпляр объекта обобщенного типа class имя where T : new()
Ограничения ссылочного типа и типа значения class имя where T : struct class имя where T : class

Слайд 15

Абстрактные типы данных

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

Абстрактные типы данных - это тип данных, который предоставляет для работы с
этого типа определённый набор функций, а также возможность создавать элементы этого типа при помощи специальных функций

Список
Стек
Очередь
Ассоциативный массив

Слайд 16

Обобщенные коллекции в C#

Dictionary
HashSet
LinkedList
List
Queue
SortedSet
Stack

Обобщенные коллекции в C# Dictionary HashSet LinkedList List Queue SortedSet Stack …