Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Дерево – формула: построение, использование





Одно из применений бинарного дерева – метод представления математического выражения, содержащего операнды и операторы в виде бинарного дерева (дерево-формула).

Дерево–формула это разновидность бинарного дерева, вершинами кот являются операторы, а операнды – листья.

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

Пример. (A+B*C)^((A+B)*C);

1) прямой (К-Л-П): ^+A*BC*+ABC;

2) обратный (Л-К-П): A+B*C^A+B*C;

3) концевой (Л-П-К): ABC*+AB+C*^

 

^
*
*
В
С
А
+
С
А
В
+

 

9. Объектно-ориентированное программирование. Основные определения.

Основные принципы объектно-ориентированного программирования.

Составляющие класса: поля, свойства и методы.

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

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

Абстракция (abstraction) – характеристика сущности, которая отличает ее от других сущностей. Абстракция определяет границу представления соответствующего элемента модели и применяется для определения фундаментальных понятий ООП, таких как класс и объект.

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

Ключевые черты ООП хорошо известны. Первая – инкапсуляция – это определение классов — пользовательских типов данных, объединяющих своё содержимое в единый тип и реализующих некоторые операции или методы над ним.

Основные принципы ООП: абстракция, наследование, инкапсуляция и полиморфизм.

Абстракция (abstraction) – характеристика сущности, которая отличает ее от других сущностей. Абстракция определяет границу представления соответствующего элемента модели и применяется для определения фундаментальных понятий ООП, таких как класс и объект.

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

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

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

Поле класса или атрибут – переменная, связанная с классом или объектом. Все данные объекта хранятся в его полях. Доступ к полям осуществляется по их имени. Обычно тип данных каждого поля задаётся в описании класса, членом которого является поле. Статические поля - поля, общие для всех объектов класса.

Свойства – способ доступа к внутреннему состоянию объекта, имитирующий переменную некоторого типа. Обращение к свойству объекта выглядит так же, как и обращение к структурному полю, но, в действительности, реализовано через вызов функции. При попытке задать значение данного свойства вызывается один метод, а при попытке получить значение данного свойства – другой. По своей сути, свойства предназначены для того, чтобы свести программирование к операциям над свойствами, скрывая вызовы методов. Принято называть методы свойств именем свойства с приставками get и set.

Метод – это функция или процедура, принадлежащая какому-то классу или объекту.

Методы могут быть статическими (static – по умолчанию), виртуальными (virtual) или динамическими (dynamic). Виртуальные и динамические методы могут быть перекрытыми (override) и абстрактными (abstract). Эти спецификаторы (designators) методов играют роль тогда, когда объектом является класс-наследник. Они определяют, какая именно реализация метода будет вызвана в том или ином случае. Методы являются статическими по умолчанию и слово static не указывается. Когда вызывается статический метод, для определения конкретной реализации метода используется информация времени компиляции. Для того чтобы сделать метод виртуальным или динамическим, надо добавить соответствующую директиву в его описание.

 

10. Понятия эффективности и технологичности программного обеспечения.

Модули и их свойства (сцепление и связность модулей)

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

- уровнем независимости модулей.

- стилем программирования.

- степенью повторения использования кодов.

- проработанностью модулей.

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

Разумный подход к обеспечению эффективности разрабатываемого ПО состоит в том, чтобы в первую очередь оптимизировать те элементы программы, которые существенно влияют на характеристики эффективности. Для уменьшения времени выполнения программы в первую очередь следует проанализировать циклические алгоритмы с большим числом повторений. Необходимо помнить, что многие способы снижения временных затрат приводит к увеличению объема памяти и наоборот. Не следует “платить” за увеличение эффективности снижением технологичности ПО, исключения возможны только при очень жестких требованиях и наличии соответствующего контроля за качеством. Частично проблему эффективности программ решают за программиста компиляторы. Средства оптимизации, используемые компиляторами, делят на две группы:

- машинно-зависимые (ориентированы на конкретный машинный язык; выполняют оптимизацию кодов на уровне машинных команд).

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

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

1) когда размер программы был невелик, и все подпрограммы компилировались отдельно, под модулем понималась подпрограмма.

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

Сцепление является мерой взаимозависимости модулей, которая определяет, насколько хорошо модули отделены друг от друга. Модули независимы, если каждый из них не содержит о другом никакой информации. 5 типов сцепления:

1) по данным – модули обмениваются данными, представленными скалярными значениями. При небольшом количестве передаваемых параметров этот тип обеспечивает наилучшие технологические характеристики ПО.

2) сцепление по образцу – модули обмениваются данными, объединенными в структуры. Здесь характеристики хуже, чем в первом случае, так как уменьшается прозрачность между модулями.

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

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

5) сцепление по содержимому. Один модуль содержит обращение к внутренним компонентам другого (передает управление внутрь, читает и/или изменяет внутренние данные или сами коды, что противоречит блочно-иерархическому подходу).

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

Размещение сильно связанных элементов в одном модуле уменьшает межмодульные связи, то есть взаимное влияние модулей. Помещение сильно связанных элементов в разные модули усиливает межмодульные связи и усложняет понимание их взаимодействия. Объединение слабо связанных элементов также уменьшает технологичность модуля. Виды связности (в порядке убывания уровня):

1) Функциональная – все объекты модуля предназначены для выполнения одной функции.

2) Последовательная.

3) Информационная (коммуникативная).

4) Процедурная.

5) Временная.

6) Логическая – базируется на объединении данных или функций в одну логическую группу.

7) Случайная.

 

 

11. Средства описания структурных алгоритмов (псевдокоды, блок-схемы

алгоритмов, Flow-формы, диаграммы Насси-Шнейдермана)

После того, как в 60-х годах было доказано, что любой сколь угодно сложный алгоритм можно представить с использованием трех основных управляющих конструкций, в языках программирования высокого уровня появились управляющие операторы для реализации этих конструкций. К базовым конструкциям относятся: 1) следования, 2) ветвления, 3) цикл “пока”.

Кроме базовых процедурные языки программирования обычно используют еще три конструкции, которые можно составить из базовых: 1) выбор – case, 2) цикл “до”, 3) цикл for.

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

1) L t1UKDXHTtVBSKC5JzEtJzMnPS7VVqkwtVrK34+UCAAAA//8DAFBLAwQUAAYACAAAACEAJi7cI8cA AADcAAAADwAAAGRycy9kb3ducmV2LnhtbESPS2sCQRCE7wH/w9BCbnHWaF6bHSUEQnIQMSqeOzu9 D9zuWXZGd+OvzwQCORZV9RWVLQdu1Jk6XzsxMJ0koEhyZ2spDex3bzePoHxAsdg4IQPf5GG5GF1l mFrXyyedt6FUESI+RQNVCG2qtc8rYvQT15JEr3AdY4iyK7XtsI9wbvRtktxrxlriQoUtvVaUH7cn NrD5mm+4X10KXl3mB25O7w+H9cyY6/Hw8gwq0BD+w3/tD2tg9nQHv2fiEdCLHwAAAP//AwBQSwEC LQAUAAYACAAAACEA8PeKu/0AAADiAQAAEwAAAAAAAAAAAAAAAAAAAAAAW0NvbnRlbnRfVHlwZXNd LnhtbFBLAQItABQABgAIAAAAIQAx3V9h0gAAAI8BAAALAAAAAAAAAAAAAAAAAC4BAABfcmVscy8u cmVsc1BLAQItABQABgAIAAAAIQAzLwWeQQAAADkAAAAQAAAAAAAAAAAAAAAAACkCAABkcnMvc2hh cGV4bWwueG1sUEsBAi0AFAAGAAgAAAAhACYu3CPHAAAA3AAAAA8AAAAAAAAAAAAAAAAAmAIAAGRy cy9kb3ducmV2LnhtbFBLBQYAAAAABAAEAPUAAACMAwAAAAA= ">

условие
Действие1
да
нет
условие
Действие 1
Действие 2
да
нет
2) 3)

Действие1
Действие2

 

 


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

Кроме схем для описания алгоритмов можно использовать псевдокоды, flow-диаграммы и диаграммы Насси - Шнейдермана. Все эти нотации базируются на тех же основных структурах, но допускают разные уровни детализации.

1) Псевдокод – это формализованное текстовое описание алгоритма. Текстовая нотация. В литературе предложено несколько вариантов псевдокодов.

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

3) Диаграммы Насси - Шнейдермана являются развитием flow-форм. Основное отличие в том, что область обозначений условий и вариантов ветвления изображается в виде треугольников.

Условие   Да Нет   <Д1> <Д2>

 

Общим недостатком flow-форм и диаграмм Насси - Шнейдермана является сложность построения изображений для больших алгоритмов.

 

 

12. Методология функционального проектирования IDEF0. Функциональные

диаграммы. Количественный анализ проектируемой системы (коэффициент

декомпозиции, коэффициент сбалансированности, коэффициент применения

элементарных функций)

Отражают взаимосвязи функций разрабатываемого ПО. Пример – активностная модель Д. Росса (1973 г.), он предложил ее в составе методологии SADT (технология структурного анализа и проектирования).

Отображение взаимосвязи функций активностной модели, осуществляется путем построения иерархии функциональных диаграмм. Каждый блок диаграммы соответствует некоторой функции, для которой определены исходные данные, результаты управляемой инф-ции, механизм ее осуществления. Все функции представляются дугами, тип связи и направление строго определены. Дуги должны подходить к блокам с определенной стороны. Блоки размещаются по ступенчатой системе в соответствии с последовательностью их работы или доминирования. 5 типов влияний блоков друг друга:

Ф
Исходные данные
управление
результаты
механизмы
Ф1
Ф2
1). Вход-выход блока подается на вход блока с меньшим доминированием
Ф1
Ф2
2). Управление – выход блока используется как управление следующим блоком
Ф1
Ф2
3). Обратная связь по входу - выход блока подается на вход предыдущего
Ф1
Ф2
4). Обратная связь по управлению – выход блока используется как управляющая информация для предыдущего
Ф1
Ф2
5). Выход – исполнитель – выход блока используется как механизм для другого блока

Date: 2015-08-15; view: 1798; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию