Аннотация
Данный курс является первым в линейке курсов по разработке программного обеспечения.
Языки программирования С и С++, изучаемые в предлагаемом курсе, являются инструментами, сочетающим гибкость/мощь «низкоуровневых» возможностей, присущих языкам ассемблера, с удобством и возможностью «абстрактного» программирования, предоставляемыми современными проблемно-ориентированными языками.
Данный курс является первым в линейке курсов по разработке программного обеспечения.
Языки программирования С и С++, изучаемые в предлагаемом курсе, являются инструментами, сочетающим гибкость/мощь «низкоуровневых» возможностей, присущих языкам ассемблера, с удобством и возможностью «абстрактного» программирования, предоставляемыми современными проблемно-ориентированными языками.
Требования предварительной подготовки:
· Элементарные понятия архитектуры персонального компьютера.
· Базовые знания о архитектуре операционных систем, системного и прикладного программного обеспечения.
· Знакомство с двоичной, восьмеричной и шестнадцатеричной системами счисления.
· Умение формализовать решаемую задачу (наличие алгоритмического мышления).
· Знание английского языка ускоряет получение контекстной справочной информации.
· Элементарные понятия архитектуры персонального компьютера.
· Базовые знания о архитектуре операционных систем, системного и прикладного программного обеспечения.
· Знакомство с двоичной, восьмеричной и шестнадцатеричной системами счисления.
· Умение формализовать решаемую задачу (наличие алгоритмического мышления).
· Знание английского языка ускоряет получение контекстной справочной информации.
Программа
1. Вводная часть
• Программное и аппаратное обеспечение.
• Языки программирования: уровень и тип языка программирования, характеристики.
• Краткий обзор парадигм программирования: процедурные языки, объектно-ориентированные языки.
• Этапы разработки программного обеспечения.
• Жизненный цикл программного продукта.
• Характеристики разрабатываемой программы.
• Основные принципы обработки команд программы исполнителем (компьютером).
• Организация ЭВМ.
• Принципы построения ЭВМ, машина Фон Неймана.
2. Понятие Данные
• Понятие данные, информация.
• Свойства информации.
• Представление данных разного типа в компьютере: целочисленные данные и числа с плавающей точкой, строки фиксированной и переменной длины, символы, логические значения, даты.
• Различные варианты кодировки символов.
• Сравнение данных разных типов.
• Системы счисления. Общие понятия и конкретные системы: десятичная, двоичная, шестнадцатеричная, восьмеричная.
• Правила перевода числа из одной системы в другую.
• Устройство памяти.
• Адресация.
• Понятие переменная.
• Объявление (декларация) и инициализация переменных.
• Правила именования.
3. Понятие Программа
• Понятие программа, алгоритм, исполнитель.
• Типы программного обеспечения: системное, прикладное, инструментальное (средства разработчика).
• Трехуровневая модель программного продукта.
• Свойства алгоритмов.
• Формы представления алгоритмов: естественный язык, блок-схема, формальный язык. Составление блок-схем алгоритмов.
• Иерархическая организация программы, модульность.
• Область видимости и время жизни.
• Секции программного модуля.
• Понятия транслятор, компилятор, интерпретатор.
• Статическая и динамическая компиляция.
4. Понятие Интерфейс
• Варианты интерфейсов: UI, GUI и др.
• Важность правильной разработки интерфейса.
• Различные методы построения диалога с пользователем.
5. Язык программирования. Переменные
• Состав и структура языка программирования.
• Понятия алфавита, синтаксиса и семантики.
• Комментарии.
• Переменные. Определение имени переменной. Объявление переменной.
• Инициализация переменной по умолчанию и из кода.
• Область видимости и время жизни переменных.
• Затенение имен.
• Оператор присваивания.
• Типы переменных. Преобразование типов явное и неявное.
• Стандартные операции с переменными.
• Константы.
• Указатель или ссылка на переменную.
6. Язык программирования. Операторы.
• Понятие оператора. Запись операторов.
• Многострочные операторы, понятие блока.
• Оператор условия. Составления условия: сравнение числовых значений, дат, строковых и логических значения.
• Составление сложных условий: использование логических операций OR, AND, XOR, NOT.
• Приоритет операций. Вложенные операторы.
• Оптимизация условий.
• Оператор выбора. Оптимизация оператора выбора.
• Оператор цикла: циклы с предусловием, с постусловием, с параметром.
• Цикл для обхода элементов группы.
• Понятия: тело цикла, условие цикла, счетчик, итерация.
• Использование счетчика цикла.
• Оператор досрочного выхода из цикла.
7. Процедуры и функции.
• Декомпозиция задачи на подзадачи.
• Программирование сверху вниз и снизу-вверх.
• Парадигма черного ящика.
• Входные и выходные данные подпрограммы.
• Понятия подпрограмма, процедура, функция.
• Процедуры стандартные, пользовательские, обработки событий.
• Описание, объявление, вызов процедуры.
• Библиотеки функций. Вызов процедуры и функции.
• Аргументы формальные и фактические.
• Тип аргумента. Передача аргументов по значению и по ссылке.
• Значение, возвращаемой функцией.
• Способы взаимодействия различных фрагментов программы.
• Структурная декомпозиция.
8. Способы организации данных.
• Роль организации данных в программе.
• Понятие массива. Массивы одномерные и многомерные.
• Понятие индекса и элемента массива.
• Подсчет объема памяти занимаемой массивом.
• Типовые задачи с массивами: доступ к элементу, обход элементов, инициализация элементов.
• Представление текстовой информации.
• Понятие строка. Различные способы организации строковых данных.
• Работа с отдельными символами.
• Наиболее употребительные функции для работы со строками.
• Пользовательский тип данных (структура). Объявление и использование пользовательского типа.
• Совместное использование пользовательских типов, данных и массивов.
• Применение списков и файлов.
• Однонаправленный, двунаправленный, кольцевой списки.
• Организация стеков различных типов.
9. Решение общих алгоритмических задач.
• Поиск элемента в массиве: линейный, двоичный и интерполяционные алгоритмы.
• Поиск наибольшего и наименьшего элемента в массиве.
• Различные способы сортировки элементов массива: метод прямого выбора, метод вставки, пузырьковая сортировка.
• Оценка сложности алгоритма и сравнение алгоритмов.
• Алгоритмы работы со строками.
• Разбиение и объединение строк, поиск и извлечение подстроки, удаление подстроки, синтаксический анализ текста.
• Рекурсивные и итерационные алгоритмы.
• Рекурсивные математические функции на примере вычисления факториала.
10. Объектно-ориентированное программирование.
• Преимущества применения объектно-ориентированного подхода в программировании. Понятия класс, объект, свойство, метод, событие.
• Основные характерные черты объектно-ориентированного подхода (обзорно): инкапсуляция, наследование, полиморфизм.
1. Вводная часть
• Программное и аппаратное обеспечение.
• Языки программирования: уровень и тип языка программирования, характеристики.
• Краткий обзор парадигм программирования: процедурные языки, объектно-ориентированные языки.
• Этапы разработки программного обеспечения.
• Жизненный цикл программного продукта.
• Характеристики разрабатываемой программы.
• Основные принципы обработки команд программы исполнителем (компьютером).
• Организация ЭВМ.
• Принципы построения ЭВМ, машина Фон Неймана.
2. Понятие Данные
• Понятие данные, информация.
• Свойства информации.
• Представление данных разного типа в компьютере: целочисленные данные и числа с плавающей точкой, строки фиксированной и переменной длины, символы, логические значения, даты.
• Различные варианты кодировки символов.
• Сравнение данных разных типов.
• Системы счисления. Общие понятия и конкретные системы: десятичная, двоичная, шестнадцатеричная, восьмеричная.
• Правила перевода числа из одной системы в другую.
• Устройство памяти.
• Адресация.
• Понятие переменная.
• Объявление (декларация) и инициализация переменных.
• Правила именования.
3. Понятие Программа
• Понятие программа, алгоритм, исполнитель.
• Типы программного обеспечения: системное, прикладное, инструментальное (средства разработчика).
• Трехуровневая модель программного продукта.
• Свойства алгоритмов.
• Формы представления алгоритмов: естественный язык, блок-схема, формальный язык. Составление блок-схем алгоритмов.
• Иерархическая организация программы, модульность.
• Область видимости и время жизни.
• Секции программного модуля.
• Понятия транслятор, компилятор, интерпретатор.
• Статическая и динамическая компиляция.
4. Понятие Интерфейс
• Варианты интерфейсов: UI, GUI и др.
• Важность правильной разработки интерфейса.
• Различные методы построения диалога с пользователем.
5. Язык программирования. Переменные
• Состав и структура языка программирования.
• Понятия алфавита, синтаксиса и семантики.
• Комментарии.
• Переменные. Определение имени переменной. Объявление переменной.
• Инициализация переменной по умолчанию и из кода.
• Область видимости и время жизни переменных.
• Затенение имен.
• Оператор присваивания.
• Типы переменных. Преобразование типов явное и неявное.
• Стандартные операции с переменными.
• Константы.
• Указатель или ссылка на переменную.
6. Язык программирования. Операторы.
• Понятие оператора. Запись операторов.
• Многострочные операторы, понятие блока.
• Оператор условия. Составления условия: сравнение числовых значений, дат, строковых и логических значения.
• Составление сложных условий: использование логических операций OR, AND, XOR, NOT.
• Приоритет операций. Вложенные операторы.
• Оптимизация условий.
• Оператор выбора. Оптимизация оператора выбора.
• Оператор цикла: циклы с предусловием, с постусловием, с параметром.
• Цикл для обхода элементов группы.
• Понятия: тело цикла, условие цикла, счетчик, итерация.
• Использование счетчика цикла.
• Оператор досрочного выхода из цикла.
7. Процедуры и функции.
• Декомпозиция задачи на подзадачи.
• Программирование сверху вниз и снизу-вверх.
• Парадигма черного ящика.
• Входные и выходные данные подпрограммы.
• Понятия подпрограмма, процедура, функция.
• Процедуры стандартные, пользовательские, обработки событий.
• Описание, объявление, вызов процедуры.
• Библиотеки функций. Вызов процедуры и функции.
• Аргументы формальные и фактические.
• Тип аргумента. Передача аргументов по значению и по ссылке.
• Значение, возвращаемой функцией.
• Способы взаимодействия различных фрагментов программы.
• Структурная декомпозиция.
8. Способы организации данных.
• Роль организации данных в программе.
• Понятие массива. Массивы одномерные и многомерные.
• Понятие индекса и элемента массива.
• Подсчет объема памяти занимаемой массивом.
• Типовые задачи с массивами: доступ к элементу, обход элементов, инициализация элементов.
• Представление текстовой информации.
• Понятие строка. Различные способы организации строковых данных.
• Работа с отдельными символами.
• Наиболее употребительные функции для работы со строками.
• Пользовательский тип данных (структура). Объявление и использование пользовательского типа.
• Совместное использование пользовательских типов, данных и массивов.
• Применение списков и файлов.
• Однонаправленный, двунаправленный, кольцевой списки.
• Организация стеков различных типов.
9. Решение общих алгоритмических задач.
• Поиск элемента в массиве: линейный, двоичный и интерполяционные алгоритмы.
• Поиск наибольшего и наименьшего элемента в массиве.
• Различные способы сортировки элементов массива: метод прямого выбора, метод вставки, пузырьковая сортировка.
• Оценка сложности алгоритма и сравнение алгоритмов.
• Алгоритмы работы со строками.
• Разбиение и объединение строк, поиск и извлечение подстроки, удаление подстроки, синтаксический анализ текста.
• Рекурсивные и итерационные алгоритмы.
• Рекурсивные математические функции на примере вычисления факториала.
10. Объектно-ориентированное программирование.
• Преимущества применения объектно-ориентированного подхода в программировании. Понятия класс, объект, свойство, метод, событие.
• Основные характерные черты объектно-ориентированного подхода (обзорно): инкапсуляция, наследование, полиморфизм.
Практические работы
1. Знакомство со средой программирования.
• Знакомство со средой программирования MS Visual Studio.
• Основные типы файлов.
• Понятие решения, проекта, модуля.
• Создание нового проекта, присвоение имен.
• Основные операции в проекте, навигация.
• Основные необходимые понятия для начала работы с объектами и классами.
• Проектирование пользовательского графического интерфейса.
• Работа в Form Designer.
• Написание кода.
• Создание обработчиков событий, реагирование на действия пользователя.
• Решение простейших алгоритмических задач:
- ввод, вывод данных,
- использование подпрограмм,
- проверка правильности ввода, реагирование на ошибки,
- обмен значений двух переменных,
- определение четности числа.
• Компиляция проекта. Подготовка и запуск исполняемого файла.
• Работа со справочной системой.
2. Работа с массивом
• Создание проекта, добавление, удаление, переименование модулей.
• Проектирование приложения, двухуровневая модель.
• Реализация независимости пользовательского интерфефса от логики.
• Реализация подпрограмм для работы с массивом: добавление элемента, удаление, очистка массива, выбор элемента, сортировка элементов.
• Контроль входных данных.
• Разработка пользовательской формы.
• Проектирование интерфейса.
• Организация ввода и вывода данных, реакция на ошибки.
3. Работа со строками
• Решение следующих задач:
- переворот строки,
- отображение кодов символов,
- получение случайного слова,
- подсчет и вывод отдельных слов в строке.
• Реализация рекурсивного алгоритма
• Реализация рекурсивного алгоритма на примере факториала.
1. Знакомство со средой программирования.
• Знакомство со средой программирования MS Visual Studio.
• Основные типы файлов.
• Понятие решения, проекта, модуля.
• Создание нового проекта, присвоение имен.
• Основные операции в проекте, навигация.
• Основные необходимые понятия для начала работы с объектами и классами.
• Проектирование пользовательского графического интерфейса.
• Работа в Form Designer.
• Написание кода.
• Создание обработчиков событий, реагирование на действия пользователя.
• Решение простейших алгоритмических задач:
- ввод, вывод данных,
- использование подпрограмм,
- проверка правильности ввода, реагирование на ошибки,
- обмен значений двух переменных,
- определение четности числа.
• Компиляция проекта. Подготовка и запуск исполняемого файла.
• Работа со справочной системой.
2. Работа с массивом
• Создание проекта, добавление, удаление, переименование модулей.
• Проектирование приложения, двухуровневая модель.
• Реализация независимости пользовательского интерфефса от логики.
• Реализация подпрограмм для работы с массивом: добавление элемента, удаление, очистка массива, выбор элемента, сортировка элементов.
• Контроль входных данных.
• Разработка пользовательской формы.
• Проектирование интерфейса.
• Организация ввода и вывода данных, реакция на ошибки.
3. Работа со строками
• Решение следующих задач:
- переворот строки,
- отображение кодов символов,
- получение случайного слова,
- подсчет и вывод отдельных слов в строке.
• Реализация рекурсивного алгоритма
• Реализация рекурсивного алгоритма на примере факториала.