Программирование на .NET

Санкт-Петербург, осень 2017

Описание

Курс имеет целью дать общее представление о программировании под .NET: что такое вообще .NET и зачем он нужен, что он работает не только на Windows, про язык C#, его особенности и отличия от других языков, кратко про язык F# (потому что не только на C# можно программировать под .NET). Будет немного про известные библиотеки и технологии, будут также практические занятия и домашние работы. Будут лекции приглашённых докладчиков – опытных .NET-программистов, которые расскажут об особенностях и тонкостях использования технологии.

Курс ориентирован на людей, владеющих ООП и освоивших хотя бы один объектно-ориентированный язык программирования (С++ и/или Java). Также очень желательно представление о функциональном программировании, чтобы часть курса про F# была понятна.

Оценка за курс выставляется по формуле сумма баллов за домашние задания, приведённая в диапазон от 0 до 5 + оценка за экзамен, приведённая в диапазон от 0 до 2. За каждую домашнюю работу выставляются баллы от 0 до 10, баллы за задания, сданные после дедлайна, ополовиниваются. Решения можно исправлять и после дедлайна, повышая баллы, но максимальный балл определяется состоянием решения на момент дедлайна (например, если на момент дедлайна реализована только половина функциональности, за задачу нельзя получить больше 5 баллов). Таким образом, если сдать все домашние задания идеально и в срок, на экзамен идти не надо, если не делать домашних заданий вообще, курс не сдать.

Преподаватели

Список лекций

Введение, C#

Базовые знания о C#, чтобы можно было начать программировать. - краткое введение о платформе .NET и языке C# - Hello, world на C# - Особенности синтаксиса, элементраные типы - Ссылочные типы и типы-значения, объявление классов и структур, разница с Java - Модификаторы видимости классов и членов класса, наследование, интерфейсы и абстрактные классы, base, касты. - virtual, override, new method, partial, sealed - Преобразование типов

.NET Framework

Знакомство с библиотекой, виртуальной машиной, CLI, CLR и т.д. и т.п. Mono, .NET Core. NuGet. Запуск кода, верификация, байндинг-редиректы, appConfig/webConfig, безопасность (trust), AppDomains.

Бенчмаркинг .NET

Лекция приглашённого докладчика Андрея Акиньшина

Исключения, модульное тестирование

Исключения. Блоки try, catch, finally. Иерархия библиотечных классов-исключений, свойства Exception. Перебрасывание исключений, best practices по поводу объявления исключений, особенности. Модульное тестирование на C#: NUnit/MS Unit Testing Framework, Mock-объекты и NSubstitute. Best Practices по написанию юнит-тестов.

Контейнеры и генерики

Контейнеры, итераторы, стандартные контейнеры с особенностями их использования, генерики в .net, написание своих генериков: параметрический полиморфизм, вариантность.

Событийно-ориентированное программирование

Делегаты, мультикастинг, Func/Action, event, анонимные методы, лямбда-выражения, замыкание, каноничное объявление события, ключевые слова add и remove.

Пользовательский интерфейс, WinForms

Демонстрация вживую: - рассказ про шаблон для WinForms-приложений в Visual Studio (там же рассказ про особенности, не встречавшиеся ранее, например, регионы или partial-классы) - события и обработчики - библиотечные контролы (очень кратко) - лейауты (Anchor, Dock, TableLayout) - невизуальные контролы (на примере таймера)

.NET Internals

Сборка мусора в .NET: mark and sweep, поколения, роежимы сборщика мусора (workstation/server, параллельный/batch), настройка сборки мусора, управление временем жизни объектов, слабые ссылки. Финализаторы, IDisposable.

Внутреннее представление строк, интернирование. Unsafe, fixed, работа с указателями.

F# как альтернативный язык разработки под .NET

Введение, общий обзор концепций F#. Основные конструкции: let, типы, конструкторы типов, таплы. Подробно про функциональные типы. Рекурсия, взаимная рекурсия. Лямбда-функции. Операторы |> и >>. Частичное применение. matching. Ленивые типы данных, seq. Записи, discriminated union-ы. Хвостовая рекурсия, аккумулятор, CPS.

Типы и генерики в F#

Типы в F#. Автоматическое обобщение, стандартные генерик-функции, словари операций, касты, вывод типов, value restriction, point-free. ООП.

Вычислительные выражения в F#

Computation expressions. Workflow, Builder, монады, моноиды и эндоморфизмы. Async, операции внутри async, обработка исключений (Async.Catch), отмена операций

Экзамен

При подготовке к ответу можно пользоваться источниками, но будут дополнительные вопросы, которые могут быть по любому пункту из списка.

Оценку отлично автоматом получают все, набравшие в сумме за домашние работы более 60 баллов, им на экзамен можно не приходить.

Оценку хорошо автоматом получают все, кто набрал более 47 баллов, оценку удовлетворительно --- более 35 баллов. Если эта оценка устраивает, на экзамен тоже можно не приходить, но экзамен даёт возможность повысить оценку. Все, у кого за домашние работы в сумме менее 10 баллов, на экзамен тоже могут не приходить, в этом случае выставляется оценка неудовлетворительно.