Запись урока:
Часть 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]
Темы занятия:
- Сущность и основные принципы ООП (см. стр. 42 Шилдта или Википедия об ООП):
- Абстракция;
- Инкапсуляция;
- Полиморфизм;
- Наследование.2. Тестирование программы средствами Visual Studio 2010.
- Использование очередей – класс Queue. (см. Справочник C#)
- Классы: уровни доступности (см. Справочник C#), статические и нестатические методы (см. Справочник C#), интерфейсы (стр. 375 Шилдта)
- Делегирование (см. стр. 473 Шилдта) и лямбда-выражения (см. стр. 488 Шилдта).
Домашнее задание:
- Прочитать о следующих методах LINQ:
- Take(), TakeWhile(), Skip(), SkipWhile();
- First(), FirstOrDefault(), Min(), Max();
- OrderBy(), OrderByDescending(), ElementAt();
- ToList(), ToArray(), ToSet();
- При желании – GroupBy().2. Написать тесты к классу SmmIndicator по аналогии с SmaIndicator. Тесты оформить в виде MSTest, если стоит полная версия Visual Studio или в виде самодельной функции)
- Разработать расширяющий метод (Extension method) для IEnumerable<int>, выполняющий подсчёт выражения: КубическийКорень(Сумма(Аi * i)) Пример использования метода в коде: var mas = new [] {5,6,7,8,9}; double res = mas.MyMagicMethod(); // res == кубкорень(50 + 61 + 72 + 83 + 9*4);
Полезные материалы:
Решение домашней задачи:
1. Тест для SmmIndicator:
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. Расширяющий метод:
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);
}
Вложения: Исходные коды
Comentarios (4)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
В ДЗ после 3-го семинара надо было изучить ряд методов класса IEnumerable, среди которых метод ToSet(). Его в библиотеке MSDN нет.
Несколько замечаний: Если быть точным, то IEnumerable не просто класс, а интерфейс (или чисто абстрактный класс). Нужно изучить не только интерфейс IEnumerable, а методы, которые перечислены в задании, а они реализованы не в IEnumerable (т.к. это интерфейс, в нем не может быть реализаций, а в данном случае и объявлений методов которые приведены в задании).
Ну в общем Вы правы, что метода ToSet() нет в стандартном .NET, в частности в версии 4.5. Это было специально добавлено в задание, чтобы ученики могли ориентироваться в .NET, получили некоторый опыт в этом.
Если все-таки необходимо преобразовать в коллекцию ISet<>, то можно воспользоваться готовыми расширениями LING, например MoreLINQ, или самому реализовать это расширение для IEnumerable<>.
С чем может быть связано расхождение в значениях линий Болленжера в моем коде и в терминале Alfa-Direct? Мой код расчета:
В результате у меня получается на пятиминутках 01.04.2013 в 11:35 верхняя - 140814, средняя 140527, нижняя 140239. В терминале AD: верхняя - 140943; средняя - 140578; нижняя - 140212.