Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
answer_1_20.docx
Скачиваний:
1
Добавлен:
29.09.2019
Размер:
311.21 Кб
Скачать

1. Об’єктна та функціональна декомпозиції. Приклад об’єктної декомпозиції складної системи.

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

Объектная декомпозиция

  • Цели

    • Расширяемость

    • Возможность повторного использования

    • Совместимость

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

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

Функциональная декомпозиция – это первая интеграция процесса моделирования, которая начинается после определения области моделирования. Функциональная декомпозиция позволяет объединить и организовать диаграммы в иерархические структуры, в которых диаграммы наверху модели менее детализированы, чем диаграммы нижних уровней. Модель системы представляется в виде древовидной структуры диаграмм, где верхняя диаграмма является наиболее общей, а самые нижние наиболее детализированы. При функциональной декомпозиции отдается предпочтение подробному показу требуемых ограничений на функции системы, а не их последовательности.

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

  • При подходе сверху вниз система строится с помощью последовательных уточнений.

  • У реальной системы нет "вершины"!

  • Метод не способен учесть эволюционную природу программных систем.

  • Проектирование сверху вниз часто стремится использовать в качестве основы для структуры самый поверхностный аспект системы - ее внешний интерфейс.

  • Каждое уточнение развертывает часть абстрактной структуры в более подробную архитектуру управления, задающую порядок выполнения различных функций

  • Ограничения (при проектировании целых систем):

    • Сомнительной является сама идея охарактеризовать всю систему посредством только одной функции. У реальной системы нет "вершины"!

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

    • Архитектура системы должна основываться на содержании, а не на форме. Но проектирование сверху вниз часто стремится использовать в качестве основы для структуры самый поверхностный аспект системы - ее внешний интерфейс.

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

метод плохо приспособлен для разработки систем

  • остается полезной парадигмой для небольших программ и отдельных алгоритмов

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

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

2. Основні обчислювальні алгоритми сортування. Приклад реалізації одного з алгоритмів сортування на мові програмування С++.

Алгоритм сортировки — это алгоритм для упорядочения элементов в списке. В случае, когда элемент списка имеет несколько полей, поле, служащее критерием порядка, называется ключом сортировки. На практике в качестве ключа часто выступает число, а в остальных полях хранятся какие-либо данные, никак не влияющие на работу алгоритма.

Оценка алгоритма сортировки

Алгоритмы сортировки оцениваются по скорости выполнения и эффективности использования памяти:

  • Время — основной параметр, характеризующий быстродействие алгоритма. Называется также вычислительной сложностью. Для упорядочения важны худшее, среднее и лучшее поведение алгоритма в терминах мощности входного множества A. Если на вход алгоритму подаётся множество A, то обозначим n = |A|. Для типичного алгоритма хорошее поведение — это O(n log n) и плохое поведение — это O(n2). Идеальное поведение для упорядочения — O(n). Алгоритмы сортировки, использующие только абстрактную операцию сравнения ключей всегда нуждаются по меньшей мере в Ω(n log n) сравнениях. Тем не менее, существует алгоритм сортировки Хана (Yijie Han) с вычислительной сложностью O(n log log n log log log n), использующий тот факт, что пространство ключей ограничено (он чрезвычайно сложен, а за О-обозначением скрывается весьма большой коэффициент, что делает невозможным его применение в повседневной практике). Также существует понятие сортирующих сетей. Предполагая, что можно одновременно (например, при параллельном вычислении) проводить несколько сравнений, можно отсортировать n чисел за O(log2 n) операций. При этом число n должно быть заранее известно;

  • Память — ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. Как правило, эти алгоритмы требуют O(log n) памяти. При оценке не учитывается место, которое занимает исходный массив и независящие от входной последовательности затраты, например, на хранение кода программы (так как всё это потребляет O(1)). Алгоритмы сортировки, не потребляющие дополнительной памяти, относят к сортировкам на месте.

Алгоритмы устойчивой сортировки

  • Устойчивость (stability) — устойчивая сортировка не меняет взаимного расположения равных элементов.

Сортировка выбором (Selection sort) — Сложность алгоритма: O(n2); поиск наименьшего или наибольшего элемента и помещение его в начало или конец упорядоченного списка

Сортировка пузырьком (англ. Bubble sort ) — сложность алгоритма: O(n2); для каждой пары индексов производится обмен, если элементы расположены не по порядку.

Сортировка вставками (Insertion sort) — Сложность алгоритма: O(n2); определяем где текущий элемент должен находиться в упорядоченном списке и вставляем его туда

Сортировка слиянием (Merge sort) — Сложность алгоритма: O(n log n); требуется O(n) дополнительной памяти; выстраиваем первую и вторую половину списка отдельно, а затем — сливаем упорядоченные списки

Сортировка с помощью двоичного дерева (англ. Tree sort) — Сложность алгоритма: O(n log n); требуется O(n) дополнительной памяти

Алгоритмы неустойчивой сортировки

  • Сортировка выбором (Selection sort) — Сложность алгоритма: O(n2); поиск наименьшего или наибольшего элемента и помещение его в начало или конец упорядоченного списка

  • Сортировка Шелла (Shell sort) — Сложность алгоритма: O(n log2 n); попытка улучшить сортировку вставками

  • Пирамидальная сортировка (Сортировка кучи, Heapsort) — Сложность алгоритма: O(n log n); превращаем список в кучу, берём наибольший элемент и добавляем его в конец списка

  • Быстрая сортировка (Quicksort), в варианте с минимальными затратами памяти — Сложность алгоритма: O(n log n) — среднее время, O(n2) — худший случай; широко известен как быстрейший из известных для упорядочения больших случайных списков; с разбиением исходного набора данных на две половины так, что любой элемент первой половины упорядочен относительно любого элемента второй половины; затем алгоритм применяется рекурсивно к каждой половине. При использовании O(n) дополнительной памяти, можно сделать сортировку устойчивой.

Сортировка пузырьком

template< class T >

void bubbleSort(T* arr, int size)

{

    T tmp;

 

    for(int i = 0; i < size - 1; ++i) // i - номер прохода

    {            

        for(int j = 0; j < size - 1; ++j) // внутренний цикл прохода

        {    

            if (arr[j + 1] < arr[j])

            {

                tmp = arr[j + 1];

                arr[j + 1] = arr[j];

                arr[j] = tmp;

            }

        }

    }

}

  1. Основні елементі об’єктної моделі. Успадкування, множинне успадкування, віртуальне успадкування, абстрактні класи. Приклади об’явлення ієрархії класів.

Абстракция выделяет существенные характеристики некоторого объекта, отличающие его от всех других видов объектов и, таким образом, четко определяет его концептуальные границы с точки зрения наблюдателя

Инкапсуляция - это процесс отделения друг от друга элементов объекта, определяющих его устройство и поведение; инкапсуляция служит для того, чтобы изолировать контрактные обязательства абстракции от их реализации

Модульность - это свойство системы, которая была разложена на внутренне связные, но слабо связанные между собой модули (Модульность позволяет хранить абстракции раздельно)

Иерархия - это упорядочение абстракций, расположение их по уровням

Насле́дование — механизм объектно-ориентированного программирования (наряду с инкапсуляцией, полиморфизмом и абстракцией), позволяющий описать новыйкласс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]