Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Универсальные коллекции языка С#. Учебное пособие
.pdf
Продолжение таблицы
Наименование
операции
Описание
Выход n – целое число – степень одночлена
Постусловия Нет
Degree
Записать
Вход n – целое число – степень одночлена
Предусловия Нет
Процесс Записывает степень n одночлена в поле Degree
Выход Нет
Постусловия Поле Degree = n
Coef
Взять
Вход Нет
Предусловия Нет
Процесс Возвращает коэффициент c одночлена полинома (содер-
жимое поля Coef).
Например:
a = (1x^2), a. Степень = 2
Выход n – целое число – степень одночлена.
Постусловия Нет.
Coef
Записать
Вход c – целое число – коэффициент одночлена
Предусловия Нет
Процесс Записывает коэффициент одночлена с в поле Coeff
Выход Нет
Постусловия Поле FCoeff = c
Equel Равно
Вход q – одночлен
Предусловия Нет
Процесс Сравнивает одночлен this с одночленом q на равенство.
Возвращает значение True, если одночлены равны, т. е.
имеют одинаковые коэффициенты и степени, и значение
False – в противном случае
Выход Булевское значение
101

Окончание таблицы
–
Наименование
операции
Описание
Постусловия Нет
Diff Дифференцировать
Вход Нет
Предусловия Нет
Процесс Создает одночлен, являющийся производной одночлена
this, и возвращает его.
Например:
3
a= (x
), a. Дифференцировать = 3x
2
Выход Одночлен
Постусловия Нет
Eval Вычислить
Вход x
действительное число
Предусловия Нет
Процесс Вычисляет значение одночлена в точке x и возвращает его.
Например:
2
a= (1x
), а. Вычислить(2) = 4
Выход Действительное число
Постусловия Нет
ToString ОдночленВСтроку
Вход Нет
Предусловия Нет
Процесс Формирует строковое представление одночлена
Выход Строка
Постусловия Нет
end Member
3. Члены полинома храните в коллекции C#. Проанализируйте опе-
рации вашего контейнера и выберите способ организации полинома.
4. Для реализации одночленного полинома (одночлена) создайте
класс Tmember, в который вынесите все операции на членах полинома.
После выполнения каждой операции приводите полином к нормализованному виду: упорядочить, привести подобные, удалить нулевые члены (члены
с нулевыми коэффициентами).
5. Тип данных реализуйте в отдельном модуле UPoly.
102

Пример построения пользовательского класса
на основе контейнера через отношение наследования
Класс MySortedList<Tkey, Tvalue> построен как наследник класса
контейнера SortedList<Tkey, Tvalue>. В нем определен конструктор без
параметров, который резервирует память по 20 элементов, и переопределен метод ToString, унаследованный от класса Object.
classMySortedList<Tkey,Tvalue>:SortedList<Tkey,Tvalue>
{
publicMySortedList()
{
Capacity=20;//Емкость.
}
publicoverridestringToString()
{
stringresult="";
foreach(varelinthis)
result+=el.ToString()+",";
returnresult==""?"Списокпуст!":result;
}
}
staticvoidMain(string[]args)
{
MySortedList<string,int>lst0=newMySortedList<string,int>();
Console.WriteLine($"Списокlst0.Емкость={lst0.Capacity},элементов–
{lst0.Count}");
Console.WriteLine(lst0.ToString());
MySortedList<string,int>lst=newMySortedList<string,int>
{
{"word",5},
{"world",2},
{"country",7}
};
Console.WriteLine($"Списокlst.Емкость={lst.Capacity},элементов‐{lst.Count}");
Console.WriteLine(lst.ToString());
}
Результатработыпримера:
Списокlst0.Емкость=20,элементов‐0
Списокпуст!
Списокlst.Емкость=20,элементов‐3
[country,7],[word,5],[world,2],
103

Пример построения пользовательского класса
на основе контейнера через отношение композиции
Класс MySortedList<Tkey, Tvalue> построен как класс, объекты которого содержат в себе объекты контейнера SortedList<Tkey, Tvalue>.
В нем определен конструктор без параметров, который резервирует
память по 20 элементов, переопределен метод ToString, унаследованный от класса Object, и определены два свойства для чтения Capacity и
Count.
classMySortedList<Tkey,Tvalue>
{
SortedList<Tkey,Tvalue>lst;
publicMySortedList()
{
lst=newSortedList<Tkey,Tvalue>(20);//Емкость.
}
publicintCapacity{get{returnlst.Capacity;}}//Емкость.
publicintCount{get{returnlst.Count;}}//Элементов.
publicoverridestringToString()
{
stringresult="";
foreach(varelinlst)
result+=el.ToString()+",";
returnresult==""?"Списокпуст!":result;
}
publicvoidAdd(Tuple<Tkey,Tvalue>tuple)
{
lst.Add(tuple.Item1,tuple.Item2);
}
}
staticvoidMain(string[]args)
{
MySortedList<string,int>lst0=new
Console.WriteLine($"Списокlst0.Емкость={lst0.Capacity},элементов–
{lst0.Count}");
Console.WriteLine(lst0.ToString());
MySortedList<string,int>lst=newMySortedList<string,int>();
lst.Add(newTuple<string,int>("word",5));
lst.Add(newTuple<string,int>("world",2));
lst.Add(newTuple<string,int>("country",7));
MySortedList<string,int>();
104

Console.WriteLine($"Списокlst.Емкость={lst.Capacity},элементов‐{lst.Count}");
Console.WriteLine(lst.ToString());
}
Результатработыпримера:
Списокlst0.Емкость=20,элементов‐0
Списокпуст!
Списокlst.Емкость=20,элементов‐3
[country,7],[word,5],[world,2],
ПОРЯДОК ВЫПОЛНЕНИЯ
В режиме консольного приложения:
опишите класс TMember, реализуйте класс и протестируйте каж-
дый метод;
опишите класс TPoly, реализуйте класс и протестируйте каждый
метод.
Тестовые наборы поместите в таблицу следующего вида.
Тестовый набор для тестирования операции «Умножить»
Номер
теста
1 0*X^0 0*X^0 0*X^0 0*X^0
2 0*X^0 1*X^0 0*X^0 1*X^0
3 1*X^0 1*X^0 1*X^0 1*X^0
4 1*X^0 2*X^1 2*X^1 2*X^1
5 1*X^0 2*X^1+3*X^2 2*X^1+3*X^2 2*X^1+3*X^2
6 1*X^0+1*X^1 1*X^0-1*X^1 1*X^0-1*X^2 1*X^0-1*X^1
Исходные данные Ожидаемый результат
вход полином
возвращаемое
значение
полином
СОДЕРЖАНИЕ ОТЧЕТА
1. Задание.
2. Текст программы на C#.
3. Тестовые наборы данных для тестирования типа данных.
105

КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Чем определяется размер памяти, выделяемой под экземпляр
класса?
2. Что такое отношение «обобщение» и как оно реализуется в C#?
3. Что такое отношение «композиции» и как оно реализуется в C#?
4. Что такое свойство и для чего оно предназначено?
5. Что такое индексатор и когда он необходим?
6. Что такое
7. Что такое униврсальные коллекции и для чего они предназначены?
interface и для чего они используются?
106

ГЛОССАРИЙ
Агрегация представляет собой форму ассоциации – более сильный
тип связи между целым (составным) объектом и его частями (компонентными объектами).
Анонимный метод – метод, который можно преобразовать в тип
делегата, т. е. в переменной типа делегат можно сохранить анонимный
метод.
Ассоциация – это семантическая связь между классами.
Временная сложность алгоритма в информатике определяется
как функция от длины строки, представляющей входные данные, равная времени работы алгоритма на данном входе. Временная сложность
алгоритма обычно выражается с использованием нотации «O» большое, которая учитывает только слагаемое самого высокого порядка,
а также не учитывает константные множители, т. е. коэффициенты.
Если сложность выражена таким способом, говорят об асимптотическом описании временной сложности, т. е. при стремлении размера
входа к бесконечности. Например, если существует число n
время работы алгоритма для всех входов длины n > n
3
5*n
+ 3*n, то временную сложность такого алгоритма можно асимпто-
тически оценить как O(n
3
)
Делегат (delegate) – это тип, который представляет ссылки на ме-
тоды с определенным списком параметров и типом возвращаемого
значения. При создании экземпляра делегата этот экземпляр можно
связать с любым методом с совместимой сигнатурой и типом возвращаемого значения. Метод можно вызвать (активировать) с помощью
экземпляра делегата.
Деструкторы предназначены для выполнения действий, которые
необходимо выполнить перед уничтожением объекта.
, такое, что
0
не превосходит
0
107

Индексаторы обеспечивают возможность доступа к элементам
класса по их порядковому номеру (индексу).
Интефейс в C# – ссылочный тип данных, который определяет контракт. Любой class или struct, реализующий этот контракт, должен
предоставлять реализацию для членов, определенных в интерфейсе.
Начиная с C# 8.0 интерфейс может определять реализацию по умолчанию для членов. Он может также определять члены static,
чтобы обеспечить единую реализацию для общих функциональных возможностей.
Интерфейс на уровне проекта – совокупность операций, опреде-
ляющих набор услуг класса или компонента. Интерфейс не определяет
внутреннюю структуру, все его операции имеют открытую видимость.
Итератор – включает оператор цикла foreach и метод итератора,
который должен возвращать значение одного из следующих типов:
IEnumerable, IEnumerable<T>, IEnumerator или IEnumerator<T>.
Методом итератора может быть метод доступа get.
Класс в C# – это ссылочный тип данных, определяемый пользова-
телем, средство объектно-ориентированного программирования.
Коллекция в C# – это объединение произвольного количества свя-
занных объектов, возможно, различного типа.
Композиция – это сильная форма агрегации. В композиции со-
ставной объект может физически содержать компонентные объекты.
Компонентный объект может принадлежать
только одному составному
объекту.
Компаратор – метод, обеспечивающий сравнение двух объектов
одного типа на больше, меньше или равно.
Константы класса – средство для хранения неизменяемых значе-
ний, связанных с классом.
Конструкторы предназначены для инициализации объектов клас-
са или класса в целом.
Лямбда-выражение, лямбда-оператор – это анонимная функция,
которая может быть присвоена
делегату.
Методы – средство для выполнения вычислений или действий,
выполняемых классом или объектом класса.
Обобщение – связь «тип-подтип» реализует механизм наследования.
Операция – это услуга, которую можно запросить у любого объек-
та данного класса. Воздействие одного объекта на другой с целью вызвать соответствующую реакцию.
108

Описание класса содержит ключевое слово class, за которым сле-
дует его имя, а далее в фигурных скобках – тело класса, т. е. список его
элементов.
Полиморфизм – способность скрывать множество различных реа-
лизаций под единственным общим интерфейсом.
Предикат в C# – представляет метод, определяющий набор крите-
риев и соответствие указанного объекта этим критериям.
Свойство – средство
включая методы для их чтения и записи.
Сериализация – это процесс преобразования объекта в поток байт
для сохранения или передачи в память, базу данных или файл.
Спецификаторы – средства, предназначенные для определения
свойства класса, а также доступности класса для других элементов
программы.
Список инициализаторов – список значений, которыми при
здании будет инициализирована коллекция.
определения характеристик объектов класса,
со-
109

БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Основной
1. Павловская Т. А. C#. Программирование на языке высокого уровня:
учебник для вузов / Т. А. Павловская. – Санкт-Петербург : Питер, 2014. –
432 с.: ил. – (Серия «Учебник для вузов»).
Дополнительный
2. Пахомов Б. И. C# для начинающих / Б. И. Пахомов. – СанктПетербург : БХВ-Петербург, 2014. – 432 с.: ил.
3. Microsoft Docs. Документация по C#. – URL: https://docs.microsoft.
com/ru-ru/dotnet/csharp/ (дата обращения: 14.10.2021).
4. Professor Web. Уроки по C# и платформе .NET Framework. – URL:
https://professorweb.ru (дата обращения: 14.10.2021).
5. Сайт о программировании METANIT.COM. С#. – URL: https://metanit.
com/sharp/tutorial/4.1.php (дата обращения: 14.10.2021).
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
