Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы с 13-31 Информационные технологии.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.09 Mб
Скачать

Оглавление

13. Структурное и модульное программирование 2

14. Объектно-ориентированная парадигма программирования 6

15. Паттерны объектно-ориентированного анализа и проектирования, их классификация. 10

16. Модели представления данных, архитектура и основные функции СУБД. 11

17. Понятие распределенной системы. Требования к распределенным системам. 14

18. Внутренние и внешние характеристики качества ПО. 19

19. Методики повышения качества ПО и оценка их эффективности. 26

20. Стандарты IEEE, связанные с качеством ПО. Закон контроля качества ПО. 28

21. СММ (модель зрелости процесса разработки ПО). 31

22. Метрики качества программного обеспечения. 32

23. Распределенные системы и базы данных. 33

24. Распределенные системы. Обмен сообщениями. Дальний вызов процедур. Распределенные события. Распределенные транзакции. 34

25. Принципиальные особенности и сравнительные характеристики файл-серверной, клиент-серверной и интернет технологий распределенной обработки данных. 41

Файл-сервер 42

Клиент-сервер 42

Терминал-сервер 42

Распределенная обработка данных 43

26. Реляционный подход к организации БД. Базисные средства манипулирования реляционными данными. 47

Источник: http://ed.tusur.ru/lit/edu/db/04.shtml 47

4.1. Базовые понятия реляционных баз данных 47

4.1.1. Тип данных 47

4.1.2. Домен 48

4.1.3. Схема отношения, схема базы данных 48

4.1.4. Кортеж, отношение 48

4.2. Фундаментальные свойства отношений 49

4.2.1. Отсутствие кортежей-дубликатов 49

4.2.2. Отсутствие упорядоченности кортежей 49

4.2.3. Отсутствие упорядоченности атрибутов 50

4.2.4. Атомарность значений атрибутов 50

4.3. Реляционная модель данных 51

4.3.1. Общая характеристика 51

4.3.2. Целостность сущности и ссылок 51

Источник: Основные понятия реляционных БД.pdf 53

27. Методы проектирования реляционных баз данных (нормализация, ER-диаграммы). 54

Источник: https://habrahabr.ru/post/254773/ 54

Используемые термины 54

Первая нормальная форма 55

Вторая нормальная форма 55

Третья нормальная форма 56

Четвертая нормальная форма 59

Пятая нормальная форма 59

Доменно-ключевая нормальная форма 60

Шестая нормальная форма 60

Источник: https://support.microsoft.com/ru-ru/help/283878/description-of-the-database-normalization-basics 61

Первая нормальная форма 62

Вторая нормальная форма 63

Третья нормальная форма 63

Другие нормальные формы 63

Пример нормализации таблицы 63

ER-модель 66

28. Стандартный язык баз данных SQL. 67

Введение 67

Описание 69

Операторы 69

Преимущества 70

Независимость от конкретной СУБД 70

Наличие стандартов 70

Декларативность 70

Недостатки 70

Несоответствие реляционной модели данных 70

Сложность 70

Отступления от стандартов 71

Сложность работы с иерархическими структурами 71

Расширения 71

29. Принципы функционирования Internet, типовые информационные объекты и ресурсы. Ключевые аспекты WWW-технологии. 71

30. Адресация в сети Internet. Методы и средства поиска информации в Internet, информационно-поисковые системы. 77

31. Назначение и принципы построения экспертных систем. Классификация экспертных систем. 87

13. Структурное и модульное программирование

Весь текст с википедии, статьи:

Структурное программирование

Модульное программирование

Структу́рное программи́ рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 1970-х годах Э. Дейкстрой и др.

В соответствии с данной методологией любая программа строится без использования оператора goto из трёх базовых управляющих структур: последовательность, ветвление, цикл; кроме того, используются подпрограммы. При этом разработка программы ведётся пошагово, методом «сверху вниз».

Методология структурного программирования появилась как следствие возрастания сложности решаемых на компьютерах задач, и соответственно, усложнения программного обеспечения. В 1970-е годы объёмы и сложность программ достигли такого уровня, что традиционная (неструктурированная) разработка программ перестала удовлетворять потребностям практики. Программы становились слишком сложными, чтобы их можно было нормально сопровождать. Поэтому потребовалась систематизация процесса разработки и структуры программ.

Методология структурной разработки программного обеспечения была признана «самой сильной формализацией 70-х годов».

По мнению Бертрана Мейера, «Революция во взглядах на программирование, начатая Дейкстрой, привела к движению, известному как структурное программирование, которое предложило систематический, рациональный подход к конструированию программ. Структурное программирование стало основой всего, что сделано в методологии программирования, включая и объектное программирование».

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

Теорема о структурном программировании

Теорему сформулировали и доказали итальянские математики Коррадо Бём (Corrado Böhm) и Джузеппе Якопини (Giuseppe Jacopini). Они опубликовали её в 1965 году на итальянском языке и в 1966 году на английском. Наряду с теоремой, в статье Бёма и Якопини описывались методы преобразования неструктурных алгоритмов в структурные на примере созданного Бёмом языка программирования P′′. Язык P′′ — первый полный по Тьюрингу язык программирования без оператора goto.

Теорема Бёма-Якопини написана сложным языком и в непривычных обозначениях. Если использовать современную терминологию и обозначения, она примет вид:

Любая программа, заданная в виде блок-схемы, может быть представлена с помощью трех управляющих структур:

последовательность — обозначается: f THEN g,

ветвление — обозначается: IF p THEN f ELSE g,

цикл — обозначается: WHILE p DO f,

где f, g — блок-схемы с одним входом и одним выходом,

р — условие,

THEN, IF, ELSE, WHILE, DO — ключевые слова.

Пояснение. Формула f THEN g означает следующее: сначала выполняется программа f, затем выполняется программа g.

Принципы структурного программирования

Становление и развитие структурного программирования связано с именем Эдсгера Дейкстры.

Принцип 1. Следует отказаться от использования оператора безусловного перехода goto.

Принцип 2. Любая программа строится из трёх базовых управляющих конструкций: последовательность, ветвление, цикл.

Последовательность — однократное выполнение операций в том порядке, в котором они записаны в тексте программы.

Бертран Мейер поясняет: «Последовательное соединение: используйте выход одного элемента как вход к другому, подобно тому, как электрики соединяют выход сопротивления со входом конденсатора».

Ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения заданного условия.

Цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется заданное условие (условие продолжения цикла).

Принцип 3. В программе базовые управляющие конструкции могут быть вложены друг в друга произвольным образом. Никаких других средств управления последовательностью выполнения операций не предусматривается.

Принцип 4. Повторяющиеся фрагменты программы можно оформить в виде подпрограмм (процедур и функций). Таким же образом (в виде подпрограмм) можно оформить логически целостные фрагменты программы, даже если они не повторяются.

В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция «Вызов подпрограммы». При выполнении такой инструкции работает вызванная подпрограмма. После этого продолжается исполнение основной программы, начиная с инструкции, следующей за командой «Вызов подпрограммы».

Бертран Мейер поясняет: «Преобразуйте элемент, возможно, с внутренними элементами, в подпрограмму, характеризуемую одним входом и одним выходом в потоке управления».

Принцип 5. Каждую логически законченную группу инструкций следует оформить как блок (block). Блоки являются основой структурного программирования.

Блок — это логически сгруппированная часть исходного кода, например, набор инструкций, записанных подряд в исходном коде программы.

BEGIN..END

Понятие блок означает, что к блоку инструкций следует обращаться как к единой инструкции. Блоки служат для ограничения области видимости переменных и функций. Блоки могут быть пустыми или вложенными один в другой. Границы блока строго определены. Например, в if-инструкции блок ограничен кодом (в языке Паскаль) или фигурными скобками {...} (в языке C)

Принцип 6. Все перечисленные конструкции должны иметь один вход и один выход.

Произвольные управляющие конструкции (такие, как в блюде спагетти) могут иметь произвольное число входов и выходов. Ограничив себя управляющими конструкциями с одним входом и одним выходом, мы получаем возможность построения произвольных алгоритмов любой сложности с помощью простых и надежных механизмов[17].

Принцип 7. Разработка программы ведётся пошагово, методом «сверху вниз» (top–down method).

Достоинства структурного программирования

Следование принципам структурного программирования сделало тексты программ, даже довольно крупных, нормально читаемыми. Серьёзно облегчилось понимание программ, появилась возможность разработки программ в нормальном промышленном режиме, когда программу может без особых затруднений понять не только её автор, но и другие программисты. Это позволило разрабатывать достаточно крупные для того времени программные комплексы силами коллективов разработчиков, и сопровождать эти комплексы в течение многих лет, даже в условиях неизбежных изменений в составе персонала.

Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и, что ещё важнее, облегчает понимание её другими разработчиками.

В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет обходиться без блоксхем и других графических форм изображения алгоритмов (по сути, сама программа является собственной блок-схемой).

Сильно упрощается процесс тестирования и отладки структурированных програм.

Модульное программирование — это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определенным правилам. Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Аппаратнозависимые подзадачи могут быть строго отделены от других подзадач, что улучшает мобильность создаваемых программ.

Модуль — функционально законченный фрагмент программы. Во многих языках (но далеко не обязательно) оформляется в виде отдельного файла с исходным кодом или поименованной непрерывной её части. Некоторые языки предусматривают объединение модулей в пакеты.

Модульность программного кода

Принцип модульности является средством упрощения задачи проектирования ПС и распределения процесса разработки ПС между группами разработчиков. При разбиении ПС на модули для каждого модуля указывается реализуемая им функциональность, а также связи с другими модулями. Удобство использования модульной архитектуры заключается в возможности обновления (замены) модуля, без необходимости изменения остальной системы.

Роль модулей могут играть структуры данных, библиотеки функций, классы, сервисы и др. программные единицы, реализующие некоторую функциональность и предоставляющие интерфейс к ней.

Программный код часто разбивается на несколько файлов, каждый из которых компилируется отдельно от остальных. Такая модульность программного кода позволяет значительно уменьшить время перекомпиляции при изменениях, вносимых лишь в небольшое количество исходных файлов, и упрощает групповую разработку. Также это возможность замены отдельных компонентов (таких как jar-файлы, so или dll библиотеки) конечного программного продукта, без необходимости пересборки всего проекта (например, разработка плагинов к уже готовой программе).

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

Модульная система модулей

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

В 2000 году Ксавье Лерой предложил делать системы модулей модульными, то есть параметризуемыми описанием конкретного ядра языка со своей системой типов. В качестве примера он продемонстрировал обобщённую реализацию языка модулей ML (как наиболее развитой системы модулей из известных на данный момент) и примеры её инстанцирования на традиционный для неё язык ML и на язык Си.

Реализация Лероя сама построена посредством языка модулей ML, а именно в виде функтора, параметризованного данными о ядре языка и описанием его механизма проверки согласования типов. Это значит, что при написании компилятора некоторого языка достаточно описать ядро языка и передать его данному функтору (как библиотечной функции) — в результате получится компилятор расширения известного языка системой модулей ML.