Запись урока: Часть 1 [vk]http://vk.com/video_ext.php?oid=-66674957&id=167886014&hash=485c6ef5d7844e6f&hd=3[/vk]
Часть 2 [vk]http://vk.com/video_ext.php?oid=-66674957&id=167886016&hash=d5a74cd8c3f76bb9&hd=3[/vk]
Темы занятия:1. Сущность и основные принципы ООП (см. стр. 42 Шилдта или
Википедия об ООП):
2. Тестирование программы средствами Visual Studio 2010.
3. Использование очередей – класс Queue. (см.
Справочник C#)
4. Классы: уровни доступности (см.
Справочник C#), статические и нестатические методы (см.
Справочник C#), интерфейсы (стр. 375 Шилдта)
5. Делегирование (см. стр. 473 Шилдта) и лямбда-выражения (см. стр. 488 Шилдта).
Домашнее задание:1. Прочитать о следующих методах LINQ:
- Take(), TakeWhile(), Skip(), SkipWhile();
- First(), FirstOrDefault(), Min(), Max();
- OrderBy(), OrderByDescending(), ElementAt();
- ToList(), ToArray(), ToSet();
- При желании – GroupBy().
2. Написать тесты к классу SmmIndicator по аналогии с SmaIndicator.
Тесты оформить в виде MSTest, если стоит полная версия Visual Studio или в виде самодельной функции)
3. Разработать расширяющий метод (Extension method) для IEnumerable<int>, выполняющий подсчёт выражения:
КубическийКорень(Сумма(Аi * i))
Пример использования метода в коде:
var mas = new [] {5,6,7,8,9};
double res = mas.MyMagicMethod();
// res == кубкорень(5*0 + 6*1 + 7*2 + 8*3 + 9*4);
Полезные материалы:1.
Методы расширения.
Решение домашней задачи:1. Тест для SmmIndicator:Code
static class MySmmIndicatorTest
{
public static void AddTestLength2()
{
var ind = new SmmIndicator(2);
ind.Add(3);
ind.Add(4);
if (!ind.IsReady)
throw new Exception();
if (5m != ind.Value)
throw new Exception();
ind.Add(10);
if (!ind.IsReady)
throw new Exception();
if (Math.Abs(116m - ind.Value * ind.Value) > 0.000001m)
throw new Exception();
}
public static void AddTestLength3()
{
var ind = new SmmIndicator(3);
ind.Add(3);
ind.Add(4);
ind.Add(5);
if (!ind.IsReady)
throw new Exception();
if (Math.Abs(50m - ind.Value * ind.Value) > 0.000001m)
throw new Exception();
ind.Add(8);
if (!ind.IsReady)
throw new Exception();
if (Math.Abs(105m - ind.Value * ind.Value) > 0.000001m)
throw new Exception();
}
}
2. Расширяющий метод:Code
public static double MyMagicMethod(this IEnumerable<int> items)
{
//double sum = 0;
//int index = 0;
//foreach (var item in items)
//{
// sum += item*index;
// index++;
//}
//return Math.Pow(sum, 1.0/3);
// LINQ ~ SQL
return Math.Pow(items.Select((a,i) => a*i).Sum(), 1.0 / 3);
}
Вложения:Исходные коды