Программировани е Сергей Салищев Занятие 1. Введение
Обзор Обо мне План работ на семестр Литература Требования Выбор языка Среда разработки Ссылки Введение в С/С#/Java
План работ на семестр Ликвидация «алгоритмической безграмотности» Зачет 15 задач В следующем семестре как писать большие программы, которые делают полезные вещи
Литература Кормен, Ривест, Лейзерсон. Алгоритмы: построение и анализ Google Ахо, Ульман, Хопкрофт. Построение и анализ вычислительных алгоритмов Вирт. Алгоритмы и структуры данных Кнут. Искусство программирования
Что инженер делает на работе Google 5-20% Чтение документации 5-50% Чтение чужого кода 5-60% Тестирование и отладка 25-80% Документирование ? Когда программировать?
Требования к задачам Код должен быть читаем Java style guide Константы Мнемонические имена Код должен работать Автоматические тесты Код должен быть хорошим Асимптотически быстрый алгоритм Отсутствие бесполезных действий Использовать стандартные библиотеки
Среда разработки Редактор Синтаксическое выделение Авто-завершение Авто-исправление Отладчик Пошаговое исполнение Точки останова Контроль данных
Критерии выбора языка Простота Выразительность Императивный Декларативный Безопасность Востребованность Библиотеки Кросс-платформенность Эффективность Низкоуровневые возможности Параллелизм
Выбор языка: С Достоинства Простота Выразительность Востребованность Библиотеки Кросс-платформенность Эффективность Низкоуровневые возможности Недостатки Арифметика указателей Низкий уровень абстракций Опасность ошибок
Выбор языка: Java Достоинства Простота Библиотеки Востребованность Кросс-платформенность Сборка мусора Эффективность Параллелизм Недостатки Отсутствие низкоуровневых средств Бедность средств шаблонного программирования
Выбор языка: C# Достоинства Простота Библиотеки Востребованность Сборка мусора Эффективность Параллелизм Низкоуровневые средства Богатая система типов, шаблоны Недостатки Кросс-платформенность
С++ Достоинства Гибкость Эффективность Востребованность Недостатки Слишком сложно
Другие языки Достоинства Различные Недостатки Востребованность Эффективность Библиотеки
Чем пользуемся: C Программы Программы MS Visual Studio MS Visual Studio GCC / MinGW GCC / MinGW Документация Документация Google Google ANSI C99 (ISO/IEC 9899:1999)
Чем пользуемся: Java Программы Eclipse JDK 1.7 Документация Google Java Language Specification Java Style Guide Java Tutorial JavaDoc
Чем пользуемся: C# Программы Программы MS Visual Studio MS Visual Studio.NET 4.0.NET 4.0 Mono Mono Документация Документация Google Google MSDN MSDN ECMA C# Language Specification ECMA C# Language Specification ECMA CLI Specification ECMA CLI Specification
Данные + Программа Данные Таблица с именованными ячейками Значения ячеек Структура входных данных Структура выходных данных Структура внутренних данных Программа Последовательность шагов действий над данными Иерархия Структур данных Подпрограмм
Объект и Класс Объект Объединение данных и подпрограмм (методов) работы с ними Является экземпляром класса Существует только во время исполнения Класс Описывает структуру данных объектов Описывает методы объектов Классу соответствует объект
Примеры Объектов и Классов Ваша программа Строка Массив Файл Композитная структура данных
Типы данных: C char, short, int, long, long long (signed/ unsigned) float, double, long double Структуры / Объединения Массивы Указатели Указатели на функции
Типы данных: Java Примитивные boolean byte, short, int, long char float, double Ссылочные Скалярные Массивы
Типы данных: C# Значения Значения Числовые типы Числовые типы char char Структуры Структуры Ссылки Ссылки Указатели (в небезопасном подмножестве) Указатели (в небезопасном подмножестве)
Поля и Методы (C# / Java) Статические Принадлежат объекту Класс Конструкторы Обычные Принадлежат объектам экземплярам Параметры Java: Все параметры передаются по значению C#: есть ссылочные параметры Локальные переменные
Базовые операторы Признак оператора ; Присваивание (=,...) Арифметические (+, -, *, /, %) Сравнения (==, >=,,
Блоки и ветвления Блок {} if... else Цикл while, do...while Цикл for Переход return, break, continue C / C# Переход goto Переключатель switch … case Java / C# Инициирование исключений throw Обработка исключений try … catch … finally, throws