====== Современные управляемые языки программирования ====== === Адрианов Н.М., Иванов А.Б. === **В осеннем семестре 2022 г. занятия по спецкурсу начнутся 17 сентября.** **Когда**: суббота, 16:45 **Где**: 802 2УК Канал в telegram для организационных вопросов: [[https://t.me/+4_rmZcjFj8YzZjAy]] [[#Программа|Программа]] [[#Литература|Литература]] ---- В курсе изучаются языки программирования Java и C# и основы объектно-ориентированного программирования в применении к реализации эффективных алгоритмов и структур данных. ---- == Программа == - История Java и .NET. Коцепция управляемых языков программирования - Виртуальная машина. JIT-компиляция - Основные типы данных и операторы - Пространства имен - Реализация ввода-вывода - Объектно ориентированная модель. Классы, объекты, методы, свойства - Наследование - Ссылочные типы и типы-значения - Строки, Unicode и кодировки - Шаблоны и методы обобщенного программирования - Исключения - Понятие интерфейса и реализации. Компараторы - Реализация классических абстрактных структур данных. Итераторы - Лямбда-выражения - Создание графических интерфейсов - Поведенческие шаблоны проектирования - Методики измерения скорости работы программы и расхода памяти == Литература == * Г. Шилдт "Java 8. Полное руководство", Вильямс, 2015 * Б. Эккель "Философия Java", Питер, 2014 * Дж. Рихтер "CLR via C#", Питер, 2013 * Дж. Скит "C#. Программирование для профессионалов", Вильямс, 2014 * Дж. Блох "Java. Эффективное программирование", Вильямс, 2018 == Веб-ресурсы == * [[http://docs.oracle.com/javase/tutorial/]] * [[http://docs.oracle.com/javase/8/docs/api/index.html]] * [[http://zetcode.com/tutorials/javaswingtutorial/]] * [[https://msdn.microsoft.com/ru-ru/library/67ef8sbd.aspx]] * [[https://msdn.microsoft.com/en-us/library/aa288436(v=vs.71).aspx]] == Материалы лекций == * {{:managed:oop-1.pdf|}} Введение в управляемые языки. История, виртуальная машина, JIT-компилятор, среда разработки, программа Hello, world. * {{:managed:oop-2.pdf|}} Статические методы и поля. Наследование и переопределение методов. C#: свойства и структуры (value types). * {{:managed:oop-3.pdf|}} Обобщенные типы данных (generics). Цикл foreach и итератор. == Проекты на языке C# == * {{:managed:algocs_hello.zip|}} Ввод-вывод данных, сортировка массива * {{:managed:algocs_comparable.zip|}} Класс Person (конструктор, поля, методы и свойства), переопределение метода ToString, реализация интерфейсов IComparable, IComparer. * {{:managed:algocs_structs.zip|}} Ссылочные типы (reference types) и типы-значения (value types). Классы и структуры. * {{:managed:algocs_stack.zip|}} Реализация стека на основе массива. Обобщенные типы (generics). Реализация IEnumerable. * {{:managed:algocs_hash.zip|}} Реализация GetHashCode и Equals в пользовательском классе для хранения объектов в хеш-таблице. * {{:managed:algocs_paint.zip|}} Приложение с графическим интерфейсом (WinForms). * {{:managed:algocs_reflection.zip|}} Типы данных в runtime и reflection. == Проекты на языке Java == * {{:managed:algojava_first.zip|}} Первая программа: метод main, пакеты, использование класса Scanner * {{:managed:algojava_hello.zip|}} Ввод-вывод данных, сортировка массива * {{:managed:algojava_comparable.zip|}} Класс Person (конструктор, поля, методы и свойства), переопределение метода toString, реализация интерфейсов Comparable, Comparator. * {{:managed:algojava_stack.zip|}} Реализация стека на основе массива. Обобщенные типы (generics). Реализация Iterable. * {{:managed:algojava_hash.zip|}} Как сравнивать строки. Реализация hashCode и equals в пользовательском классе для хранения объектов в хеш-таблице. * {{:managed:algojava_paint.zip|}} Приложение с графическим интерфейсом (Swing). {{:managed:trades.zip|}} Задание на использование LINQ / Stream API {{ :managed:managed_2022.zip | Тезисы лекций}}