Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вариант_№29.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
403.97 Кб
Скачать

Технологии программирования Структурное и объектно-ориентированное программирование

Разработка программного обеспечения (ПО) ЭВМ в настоящее время осу­ществляется с использованием двух основных технологий — структурного (процедурного) программирования и объектно-ориентированного программиро­вания (ООП).

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

Данная технология предполагает вы­полнение последовательности этапов разработки программ для решения задач с ис­пользованием ЭВМ.

  1. Постановка задачи – формулирование задачи и целей ее решения на естественном языке и установление критериев решения задачи. Результат этапа – техническое задание на разработку ПО.

  2. Формализация задачи с использованием математического аппарата и по­лучение ее абстрактной математической модели в виде формул и уравне­ний.

  3. Выбор численного метода из возможных вариантов с учетом требований по времени и точности решения и занимаемого объема памяти ЭВМ.

  4. Алгоритмизация – построение общего плана решения, т. е. алгоритма за­дачи в виде логической последовательности этапов (шагов, действий, операций), приводящих от исходных данных к искомому результату за ко­нечное время на языке понятном человеку. Могут быть использованы раз­личные способы представления алгоритма – словесный, графический (схемы алгоритмов), алгоритмический язык высокого уровня (ЯВУ). ЯВУ – формализованный язык для описания данных и набор правил (инструкций, операторов) их обработки для реализации алгоритма задачи. Типичные ЯВУ структурного программирования – Си, Паскаль.

  5. Программирование – перевод алгоритма задачи на язык ЭВМ (систему команд), т.е. кодирование алгоритма. Процесс разработки программы де­лится на следующие этапы: 1) запись алгоритма на ЯВУ в виде исходного файла в памяти (например, prog1.cpp); 2) компиляция и редактирование свя­зей (объектный файл – prog1.obj); 3) загрузка программы в оперативную память (исполняемый файл – prog1.exe); 4) исполнение программы; 5) получение результатов программы.

  6. Отладка программы – поиск и исправление ошибок в программе. Этот процесс разбивается на два этапа: 1) синтаксическая отладка – исправле­ние формальных ошибок, связанных с нарушением норм языка програм­мирования, с помощью ЭВМ; 2) семантическая отладка – исправление логических (смысловых) ошибок с применением специальных тестовых данных.

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

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

Существование программы можно разделить на три периода: 1) разработка (этапы 1– 4); 2) реализация (этапы 5, 6); 3) сопровождение (этапы 7, 8).

Функциональная декомпозиция.

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

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

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

Для структурного программирования характерно то, что данные и методы их обработки (функции, процедуры) отделены. Данные рассматриваются как пассивные элементы, обрабатываемые функциями.

Концепции объектно-ориентированного программирования (ООП).

Идеи ООП впервые были выдвинуты и реализованы в 60-е годы 20-го века авто­рами языков Simula-67 (Дал и Нигард) и Smaltalk.

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

ООП базируется на следующих ключевых понятиях: 1) объект (object); 2) класс (class); 3) инкапсуляция (encapsulation); 4) наследование (inharitance); 5) полиморфизм (polimorphism); 6) абстракция типов (abstraction).

Раскроем эти понятия в общем плане.

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

Класс. Объекты, обладающие некоторым общим набором атрибутов (от­личительных черт) и схожим поведением объединяют в классы объектов. Например, из реального мира, в котором существует множество конкретных со­бак, можно выделить абстрактный класс СОБАКА, отличающийся от классов других животных. Такой подход позволяет разрабатывать и развивать идеи, ка­сающиеся собак, абстрагируясь от особенностей отдельной особи. Таким об­разом, класс – это новый обобщенный тип объектов. Он определяет, каким об­разом ведут себя любые объекты этого типа, как они создаются (порождаются), как с ними взаимодействуют другие объекты, как они уничтожаются. После описания класса можно объявить его конкретные экземпляры-объекты.

Инкапсуляция – это объединение набора данных и структур данных с группой методов (функций) манипулирования этими данными в единое целое, называемое классом, в котором также определены механизмы защиты данных и функций, которые могут быть частными (private), общими (public), или защи­щенными (protected) и установлены права доступа к данным.

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

Например, СОБАКА

____________________|____________________

| | |

сторожевая охотничья домашняя ...

| | |

овчарка .... лайка ... болонка ...

Из производного класса можно получить определенный доступ к данным и функциям базового класса. Таким образом, наследование дает возможность передачи некоторых свойств одного объекта другому. Его важной особенностью является возможность поддержки концепции классификации объектов. Насле­дование позволяет строить иерархию объектов, переходя от более общего к бо­лее частному, уточняя и конкретизируя объект.

Полиморфизм по своей сути означает то, что одно и то же имя может быть использовано для логически связанных, но различных целей, т.е. имя определяет порядок действий, которые в зависимости от типа данных могут существенно отличаться. Например, можно определить функцию вычисления суммы двух величин, которая будет получать це­лые или вещественные аргументы summa(x, y). При вызове функции анализируется тип аргументов и выполняется код, соответствующий этому типу. В языке С++ полиморфизм поддерживается на этапе компиляции и на этапе выполнения программы (раннее и позднее связывание).

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

Резюме.

Рассмотренные ключевые понятия класса позволяют сказать, что в ООП введено понятие класса объектов и реализованы механизмы формализации, поз­воляющие: 1) описывать структуру объекта; 2) описывать действия с объектами; 3) использовать специальные правила наследования объектов; 4) устанавливать различную степень защиты компонентов объектов и опреде­лять различные права доступа к ним; 5) передавать свойства одних объектов другим; 6) передавать сообщения между объектами.

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

Важное место в ООП занимает структура программы. Необходима большая работа на предварительных этапах по созданию классов объектов с це­лью формирования эффективных библиотек классов. Эти этапы носят название объектно-ориентрованная разработка (ООР) классов.

Использование подходов, принятых в ООП, дает следующие преимуще­ства.

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

  2. Стиль написания программ повышает доступность ее восприятия и упро­щает внесение возможных изменений (модификация программ).

  3. Существенно упрощается процедура поиска ошибок. Повышается надеж­ность программ.

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

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

ОСОБЕННОСТИ ЯЗЫКА С++

Язык С++ является надстройкой над языком С (его надмножеством). Он сохраняет все алгоритмические возможности структурного (процедурного) про­граммирования и дополняет их идеями ООП. С++ расширяет существующие конструкции языка С. Программы на С могут компилироваться в среде С++, но не наоборот. Появляются новые средства для ввода-вывода данных и известных в С операций, а также совсем новые конструкции и правила организации про­грамм для реализации концепций ООП. Помимо возможностей предоставляе­мых С, С++ обеспечивает гибкие и эффективные средства определения новых типов. Можно разделить программу на несколько фрагментов, определив но­вые типы, отражающие базовые концепции предметной области. Такой способ разработки программ часто называют абстракцией данных. Объекты типов, определяемых пользователем, содержат необходимую информацию, свою для каждого типа. Такие объекты можно удобно и безопасно использовать даже в контексте, где их тип нельзя определить во время компиляции. Подобные мето­ды дают более короткие и простые в сопровождении программы.

Ввод-вывод в С++

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