Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_ТП (с рамками)_2013.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
253.1 Кб
Скачать

39

Содержание (Технология программирования)

2. Определение алгоритма. Пример алгоритма. Пять основных свойств алгоритма. Сущность алгоритмизации. 3

3. Понятие алгоритмического языка. Основные достоинства и недостатки программирования на алгоритмическом языке 4

4. Языки программирования высокого уровня. Поколения и топология языков программирования высокого уровня с примерами (по Г. Бучу). 5

5. Интерпретаторы и компиляторы. «За» и «против». Структура. Понятие Байт-кода (P-Code) в языке Java. Языки 4GL. 6

6. Транслятор. Редактор связей. Загрузчик. Назначение и принципы функционирования. 7

7. Понятие исходного, объектного, загрузочного модулей. Назначение. 7

8. Понятие программы, подпрограммы, функции. Способы передачи и возврата параметров в подпрограммы и функции. 8

9. Основные принципы структурного программирования. 8

10. Модели управления в программных системах: централизованное управление, управление, основанное на событиях. 9

11. Структура событийно-управляемой программы для платформы Win32 10

12. Основные элементы объектно-ориентированных методов создания программных систем: абстрагирование, инкапсуляция, модульность, иерархия, типизация, параллелизм, устойчивость, полиморфизм. Понятие объектно-ориентированного программирования. 10

13. Понятие объекта и класса. Свойства объекта: состояние, поведение, идентичность. Свойства класса: структура и поведение. Описание классов в языке C++. Объект, класс и инкапсуляция как связанные понятия. 11

14. Создание объектов в языке C++. Распределение объектов в динамической памяти (куче) и автоматическое распределение памяти под объекты (на стеке). Сильные и слабые стороны. 12

15. Методы (члены-функции) в классах языка C++. Специальные методы: статические (static) методы, виртуальные методы и неизменные (immutable) методы в C++. 13

16. Конструкторы и деструкторы в языке C++. Соглашения относительно специальных функций-членов класса. Порядок вызова при наследовании. Виртуальные деструкторы. 14

17. Понятие модуля. Модуль как средство борьбы со сложностью программной системы. Принципы проектирования модулей. Модули в языке C++. Модульность и инкапсуляция как связанные понятия. 14

18. Типизация (декларация) данных в языках программирования. Задачи типизации. Слабая и сильная типизация. Достоинства и недостатки каждой. Типизация в языке C++. Встроенные типы данных. Определение new типов данных. 15

19. Соглашения по преобразованию (приведению) типов данных в языке C++. Операторы const_cast, reinterpret_cast, static_cast, dynamic_cast. 16

20. Специальный полиморфизм в языке C++. Перегрузка функций и операторов. 17

21. Параметрический полиморфизм. Параметризованные классы (template) и функции в языке C++ как средство статического полиморфизма. 17

22. Полная и частичная специализация шаблонов в языке C++. 18

23. Простое и множественное наследование в языке C++. Полиморфное поведение объектов при наследовании. Проблема «среза» в полиморфизме наследования и способы решения. 19

24. Абстрактные классы и интерфейсы. Описание на языке C++. Реализация интерфейсов. 19

25. Понятие интерфейса. Язык описания интерфейсов IDL (MIDL). 20

26. Стандартная библиотека шаблонов STL. Основные концепции: контейнер, алгоритм, итератор, поток. 21

27. Представление в машине символьной информации. Кодировки ASCII, MBCS, ANSI, Unicode. Строки ASCII-Z, Pascal, BSTR. 21

28. Признаки сложных систем согласно общей теории систем. Примеры систем (выделить в них признаки). 22

29. Сложность, присущая программному обеспечению. Составляющие сложности программного обеспечения по Ф. Бруксу. 24

30. Эволюция системного программного продукта. Понятие и составляющие программы, программного комплекса, программного продукта, системного программного продукта (по Ф. Бруксу) 24

31. Борьба со сложностью в программном обеспечении. Эволюция методов анализа и разработки (SA/SD, OOA/OOD). 25

32. Жизненный цикл программного обеспечения. Фазы ЖЦ, их характеристики артефакты. 26

33. Модели жизненного цикла разработки программного обеспечения. Сравнение моделей. 26

35. Производительность труда программиста. Различия в прогах опытного программиста и новичка по Ф. Бруксу. 27

36. Распределение стоимости разработки программного обеспечения по технологическим стадиям создания. 27

37. Язык UML. История создания. Область применения. Виды диаграмм UML для описания системы. 28

38. Программирование на основе шаблонов (паттернов). Роль шаблонов проектирования в борьбе со сложностью программного обеспечения. Будущее шаблонов. 29

39. Понятия связанности (Coupling) и зацепления (Cohesion) в сложных программных системах. Связанность и зацепление классов, модулей, компонентов. 30

40. Ошибки программирования: переполнение буфера. Понятие безопасного программного кода. 30

41. Оптимизация программного кода. Основные возможности оптимизации кода программистом и компилятором. 31

42. Оформление программ: основные пункты. 32

43. Процесс отладки программного обеспечения. Сложность отладки ПО. Методы поиска и устранения ошибок. Связь отладки с тестированием. 32

44. Понятие качества программного обеспечения. Составляющие и критерии качества. Обеспечение качества как процесс, а не этап. Международный стандарт ISO 9000/9001. 33

45. Задачи тестирования программного обеспечения. Тестирование как процесс, а не этап. Тестирование модулей, интерфейсов, сборки. Нисходящее и восходящее тестирование. Метрики тестирования и окончание тестирования. 33

46. Основы тестирования программного обеспечения методом «чёрный ящик» (функциональное тестирование). Роль прецедентов в функциональном тестировании. 34

47. Основы тестирования программного обеспечения методом «белый ящик» (структурное тестирование). 35

48. Понятие надежного ПО. Различие между надежностью аппаратуры и ПО. 35

49. Модели надёжности ПО. Сравнение моделей оценки надежности ПО. Перспективы построения «хороших» моделей оценки надежности ПО. 36

50. Динамические модели надежности программного обеспечения (Шумана). 36

51. Статические модели надежности программного обеспечения (Миллса). 36

52. CASE - технологии (инструменты, системы, средства). Эволюция CASE - средств, их классификация, характеристики современных CASE - инструментов. Перспективы развития. (По Вендрову, Калянову). 37

53. Классификация средств разработки (CASE - инструментов). 38

54. Технологический скачок (ТС) в программировании. Признаки технологического скачка. Исторические факты технологических скачков. 39

55-56. Основные нормы и принципы этики программирования. Хакерство как феномен. 39

Существуют сотни языков программирования. Их можно разделить на три основных типа: машинные языки; языки ассемблера; языки высокого уровня

Любой компьютер может непосредственно понимать лишь свой собственный машинный язык. Машинный язык — это «язык» определенного компьютера. Он определяется при проектировании аппаратных средств этого компьютера. Машинные языки в общем случае содержат строки чисел, которые являются командами компьютеру на выполнении большинства элементарных операций в тот или иной момент времени. Машинные языки машинно-зависимы, т.е. каждый машинный язык может быть использован только на компьютере одного определенного типа. Они тяжелы для человеческого восприятия.

По мере повышения популярности компьютеров стало очевидно, что программирование на машинных языках просто слишком медленно и утомительно для большинства программистов. Вместо использования строк чисел, которые компьютер мог бы понимать непосредственно, программисты начали использовать похожие на английский язык аббревиатуры для представления элементарных компьютерных операций. Эти аббревиатуры, напоминающие английский язык, сформировали основу языков ассемблера. Для преобразования программ на языке ассемблера в машинный язык со скоростью компьютера были разработаны программы трансляции, называемые ассемблерами. Код становится более понятен людям, он непонятен компьютеру до тех пор, пока не будет преобразован в компьютерный код.

Использование компьютеров резко возросло с появлением языков ассемблера, но эти языки все еще требовали много команд для полного описания даже простых задач. Для ускорения процесса программирования были разработаны языки высокого уровня, в которых иногда достаточно написать всего один оператор для решения реальной задачи. Программы трансляции, которые преобразуют программы на языках высокого уровня в машинные коды, называются компиляторами. Языки высокого уровня позволяют программисту писать программы, которые выглядят почти так же, как повседневный язык, и используют общепринятую математическую нотацию.

Очевидно, что языки высокого уровня гораздо удобнее с точки зрения программистов по сравнению с языками ассемблера. С и C++ относятся к числу наиболее мощных и наиболее распространенных языков высокого уровня.

Процесс компиляции программы с языка высокого уровня в машинный язык может занимать значительное время. Для непосредственного выполнения программ на языке высокого уровня без необходимости их компиляции в машинный язык были разработаны программы интерпретаторы. Хотя скомпилированные программы выполняются быстрее, чем интерпретируемые, интерпретаторы популярны в таких условиях, когда программы часто перекомпилируются для добавления в них новых возможностей и исправления ошибок. Но когда программа разработана, ее скомпилированная версия будет выполняться более эффективно.