Проектирование программ со сложной структурой
Проектирование
программ со сложной
структурой.
Содержание:
- Введение.
- Программа со сложной структурой.
- Объектно-ориентированное программирование.
- Структурное программирование.
- Пример программы со сложной структурой «Microsoft Office».
- Вывод.
Введение.
Для того что
бы ответить на вопрос что же такое
программа со сложной структурой
и в чем заключаются принципы
проектирования такой программы, следует
вспомнить что такое
Компью́терная програ́мма — последовательность инструкций, предназначенная для исполнения устройством управления вычислительной машины. Чаще всего образ программы хранится в виде исполняемого модуля (отдельного файла или группы файлов). Из этого образа, находящегося как правило на диске, исполняемая программа в оперативной памяти может быть построена программным загрузчиком. В зависимости от контекста, рассматриваемый термин может относиться также и к исходным текстам программы.
Вместе с процедурами и правилами, а также документацией, относящихся к функционированию систем обработки данных, программы составляют программное обеспечение.
В системном программировании существует более формальное определение программы как размещённых в оперативной памяти компьютера данных и машинных кодов, исполняемых процессором для достижения некоторой цели. Здесь подчёркиваются две особенности: нахождение программы в памяти и её исполнение процессором.
Большинство пользователей компьютеров используют программы, предназначенные для выполнения конкретных прикладных задач, таких как подготовка и оформление документов, математические вычисления, обработка изображений и т. п. Соответствующие программные средства называют прикладными программами или прикладным программным обеспечением. Управление компонентами вычислительной системы и формирование среды для функционирования прикладных программ берёт на себя системное программное обеспечение, наиболее важной составляющей которого является операционная система.
Все выше сказанное
общее понятие того что такое
программа, но не дает четкого ответа
что такое программа со сложной
структурой и как ее проектировать.
В данной работе я предлагаю ответить
на эти вопрос, что такое программа
со сложной структурой и как ее
проектировать.
Программа со сложной структурой.
Написанная на
многих языка программирования программа
будет иметь в своем полном
варианте примерно такую структуру
показанную ниже:
Имя Программы;
Список используемых библиотек (модулей);
Список меток в основном блоке программы;
Определение констант
Описание типов;
Определение глобальных переменных программы;
ОПИСАНИЕ ПРОЦЕДУР;
ОПИСАНИЕ ФУНКЦИЙ;
BEGIN
Основной блок программы (операторы)
END.
Таким образом, программа содержит два раздела: (I) раздел описаний и (II) исполняемую часть (основной блок). Раздел описаний, в принципе, не является обязательным и может вовсе отсутствовать.
Например, самая
короткая "программа" на языке
Турбо Паскаль выглядит следующим
образом:
BEGIN
END.
Она не выполняет не какой прикладной задачи, но работает.
Основной блок - это собственно программа, использующая все, что было описано и объявлено выше. Он часто начинается, словом BEGIN и заканчивается словом END с точкой. Любой текст после завершающей точки игнорируется компилятором. Структура же более сложной программы будет иметь такой же вид, за исключением того что в нее будет вложено больше операторов, циклов, функций и процедур. Такие программы разрабатывает чаше всего один программист, и они все же просты. Более правильным определением программы со сложной структурой будет следующее определение.
Программа
со сложной структурой – это крупный
программный комплекс, разрабатываемый
командой программистов. Где каждый из
членов команды создает отдельный компонент
комплекса (свою «простую» программу).
Далее которые объединение в конечный
продукт. Такая программа может решать
более сложные прикладные задачи и
даже несколько задач.
Объектно-ориентированное программирование.
Для проектирования и создания программы со сложной структурой идеально подходит метод объектно-ориентированного программирования.
Объектно-ориентиированное программиирование (ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов.
Класс — это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления.
Объект — сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса.
Прототип — это объект-образец, по образу и подобию которого создаются другие объекты.
Объектное и
объектно-ориентированное
В настоящее
время количество прикладных языков
программирования, реализующих объектно-
Основные понятия
Инкапсуляция
Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов. Принцип инкапсуляции (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.
Сокрытие данных
Сокрытие данных — неотделимая часть ООП, управляющая областями видимости. Является логическим продолжением инкапсуляции. Целью сокрытия является невозможность для пользователя узнать или испортить внутреннее состояние объекта.
Наследование
Наследованием называется возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (прародителя, иногда его называют суперклассом) и добавляя, при необходимости, новые свойства и методы. Набор классов, связанных отношением наследования, называют иерархией. Наследование призвано отобразить такое свойство реального мира, как иерархичность.
Полиморфизм
Полиморфизмом называют явление, при котором функции (методу) с одним и тем же именем соответствует разный программный код (полиморфный код) в зависимости от того, объект какого класса используется при вызове данного метода. Полиморфизм обеспечивается тем, что в классе-потомке изменяют реализацию метода класса-предка с обязательным сохранением сигнатуры метода. Это обеспечивает сохранение неизменным интерфейса класса-предка и позволяет осуществить связывание имени метода в коде с разными классами — из объекта какого класса осуществляется вызов, из того класса и берётся метод с данным именем. Такой механизм называется динамическим (или поздним) связыванием — в отличие от статического (раннего) связывания, осуществляемого на этапе компиляции.
Особенности реализации
Как уже говорилось
выше, в современных объектно-
Поля данных
Параметры объекта (конечно, не все, а только необходимые в программе), задающие его состояние (свойства объекта предметной области). Иногда поля данных объекта называют свойствами объекта, из-за чего возможна путаница. Физически поля представляют собой значения (переменные, константы), объявленные как принадлежащие классу.
Методы
Процедуры и функции, связанные с классом. Они определяют действия, которые можно выполнять над объектом такого типа, и которые сам объект может выполнять.
Взаимодействие объектов в абсолютном большинстве случаев обеспечивается вызовом ими методов друг друга.
Инкапсуляция обеспечивается следующими средствами
Контроль доступа
Поскольку методы
класса могут быть как чисто внутренними,
обеспечивающими логику функционирования
объекта, так и внешними, с помощью
которых взаимодействуют
Методы доступа
Поля класса, в общем случае, не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне), а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа. Такие методы либо возвращают значение того или иного поля, либо производят запись в это поле нового значения. При записи метод доступа может проконтролировать допустимость записываемого значения и, при необходимости, произвести другие манипуляции с данными объекта, чтобы они остались корректными (внутренне согласованными). Методы доступа называют ещё аксессорами (от англ. access — доступ), а по отдельности — геттерами (англ. get — чтение) и сеттерами (англ. set — запись)[2].
Свойства объекта
Псевдополя, доступные для чтения и/или записи. Свойства внешне выглядят как поля и используются аналогично доступным полям (с некоторыми исключениями), однако фактически при обращении к ним происходит вызов методов доступа. Таким образом, свойства можно рассматривать как «умные» поля данных, сопровождающие доступ к внутренним данным объекта какими-либо дополнительными действиями (например, когда изменение координаты объекта сопровождается его перерисовкой на новом месте). Свойства, по сути — не более чем синтаксический сахар, поскольку никаких новых возможностей они не добавляют, а лишь скрывают вызов методов доступа. Конкретная языковая реализация свойств может быть разной. Например, в C# объявление свойства непосредственно содержит код методов доступа, который вызывается только при работе со свойствами, то есть не требует отдельных методов доступа, доступных для непосредственного вызова. В Delphi объявление свойства содержит лишь имена методов доступа, которые должны вызываться при обращении к полю. Сами методы доступа представляют собой обычные методы с некоторыми дополнительными требованиями к сигнатуре.
Полиморфизм реализуется путём введения в язык правил, согласно которым переменной типа «класс» может быть присвоен объект любого класса-потомка её класса.
Подходы к проектированию программ в целом
ООП ориентировано на разработку крупных программных комплексов, разрабатываемых командой программистов (возможно, достаточно большой). Проектирование системы в целом, создание отдельных компонент и их объединение в конечный продукт при этом часто выполняется разными людьми, и нет ни одного специалиста, который знал бы о проекте всё.
Объектно-ориентированное
проектирование состоит в описании
структуры и поведения
- Из каких частей состоит система.
- В чём состоит ответственность каждой из частей.
Выделение частей производится таким образом, чтобы каждая имела минимальный по объёму и точно определённый набор выполняемых функций (обязанностей), и при этом взаимодействовала с другими частями как можно меньше.
Дальнейшее уточнение
приводит к выделению более мелких
фрагментов описания. По мере детализации
описания и определения ответственности
выявляются данные, которые необходимо
хранить, наличие близких по поведению
агентов, которые становятся кандидатами
на реализацию в виде классов с
общими предками. После выделения
компонентов и определения
Большое значение
имеет правильное построение иерархии
классов. Одна из известных проблем
больших систем, построенных по ООП-технологии —
так называемая проблема
хрупкости базового
класса. Она состоит в том, что на поздних
этапах разработки, когда иерархия классов
построена и на её основе разработано
большое количество кода, оказывается
трудно или даже невозможно внести какие-либо
изменения в код базовых классов иерархии
(от которых порождены все или многие работающие
в системе классы). Даже если вносимые
изменения не затронут интерфейс базового
класса, изменение его поведения может
непредсказуемым образом отразиться на
классах-потомках. В случае крупной системы
разработчик базового класса не просто
не в состоянии предугадать последствия
изменений, он даже не знает о том, как
именно базовый класс используется и от
каких особенностей его поведения зависит
корректность работы классов-потомков.
Объектно-ориентированные языки
Многие современные
языки специально созданы для
облегчения объектно-ориентированного
программирования. Однако следует отметить,
что можно применять техники
ООП и для не-объектно-
Современный объектно-ориентированный язык предлагает, как правило, следующий обязательный набор синтаксических средств:
- Объявление классов с полями (данными — членами класса) и методами (функциями — членами класса).
- Механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООП-языков поддерживают только единичное наследование.
- Средства защиты внутренней структуры классов от несанкционированного использования извне. Обычно это модификаторы доступа к полям и методам, типа public, private, обычно также protected, иногда некоторые другие.
- Полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той же переменной экземпляры различных классов.
- Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООП-языках все методы классов являются виртуальными.
Видимо, минимальным традиционным объектно-ориентированным языком можно считать язык Оберон, который не содержит никаких других объектных средств, кроме вышеперечисленных (в исходном Обероне даже нет отдельного ключевого слова для объявления класса, а также отсутствуют явно описываемые методы, их заменяют поля процедурного типа). Но большинство языков добавляют к указанному минимальному набору те или иные дополнительные средства. В их числе:
- Конструкторы, деструкторы, финализаторы.
- Свойства (аксессоры).
- Индексаторы.
- Интерфейсы (например, в Java используются также как альтернатива множественному наследованию — любой класс может реализовать сколько угодно интерфейсов).
- Переопределение операторов для классов.
Часть языков (иногда называемых «чисто объектными») целиком построена вокруг объектных средств — в них любые данные (возможно, за небольшим числом исключений в виде встроенных скалярных типов данных) являются объектами, любой код — методом какого-либо класса, и невозможно написать программу, в которой не использовались бы объекты. Примеры подобных языков — C#, Smalltalk, Java, Ruby. Другие языки (иногда используется термин «гибридные») включают ООП-подсистему в исходно процедурный язык. В них существует возможность программировать, не обращаясь к объектным средствам. Классические примеры — C++ и Delphi.
Структурное программирование.
Так же можно при создании программы прибегнуть к структурному программированию.
Структурное программирование
— методология разработки программного
обеспечения, в основе которой лежит
представление программы в виде
иерархической структуры
Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:
последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;
ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).
В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
Повторяющиеся
фрагменты программы (либо не повторяющиеся,
но представляющие собой логически
целостные вычислительные блоки) могут
оформляться в виде т. н. подпрограмм
(процедур или функций). В этом случае
в тексте основной программы, вместо
помещённого в подпрограмму фрагмента,
вставляется инструкция вызова подпрограммы.
При выполнении такой инструкции
выполняется вызванная
Разработка программы ведётся пошагово, методом «сверху вниз».
Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.
Модульное программирование.
Модульное программирование
является развитием и совершенствованием
процедурного программирования и библиотек
специальных программ. Основная черта
модульного программирования - стандартизация
интерфейса между отдельными программными
единицами. - это отдельная функционально-
Модульное программирование - это искусство разбиения задачи на некоторое число различных модулей, умение широко использовать стандартные модули путем их параметрической настройки, автоматизация сборки готовых модулей из библиотек, банков модулей.
Основные концепции модульного программирования:
-каждый модуль
реализует единственную
-каждый модуль
имеет единственную точку
-размер модуля по возможности должен быть минимизирован;
-каждый модуль
может быть разработан и
-вся система построена из модулей;
-модуль не
должен давать побочных
-каждый модуль не зависит от того, как реализованы другие модули.
При таком подходе
сложная система разделяется
на несколько частей, одновременно
создаваемых различными программистами.
Каждый модуль реализует единственную
функцию. Размер модуля невелик, поэтому
тестирование управляемо и может
быть проведено тщательным образом.
После кодирования и
При сопровождении тестируется и отлаживается только тот модуль, который плохо работает. Очевидны преимущества в облегчении написания и тестирования программ, уменьшается стоимость их сопровождения.
Концепция модульного программирования реализована в ряде языков, таких как Modula 2, Turbo Pascal 5.0.
Отличие в реализации процедурного программирования от модульного состоит в том, что модуль не виден программе. В отличие от стандартных языков процедурного программирования, в модульных языках лишние модули просто не прикомпановываются на этапе сборки.
Microsoft Word.
Примером программы со сложной структурой можно считать Microsoft Word.
Microsoft Word (часто — MS Word, WinWord или просто Word) — это текстовый процессор, предназначенный для создания, просмотра и редактирования текстовых документов, с локальным применением простейших форм таблично-матричных алгоритмов. Текстовый процессор, выпускается корпорацией Microsoft в составе пакета Microsoft Office. Первая версия была написана Ричардом Броди для IBM PC, использующих DOS, в 1983 году. Позднее выпускались версии для Apple Macintosh (1984), SCO UNIX и Microsoft Windows (1989).
- Проектирование промышленного здания в Макеевке
- Проектирование промышленные предприятий
- Проектирование процесса пластической деформации при изготовлении трансверсально-изотропных композиционных электропроводников
- Проектирование процесса управления организацией на примере ООО"Happy Story"
- Проектирование процесса управления хлебопекарни
- Проектирование процессов кузовного ремонта в организации фирменного обслуживания (в сервисной зоне дилерского центра)
- Проектирование рамы манипулятора с помощью современных САПР
- “Проектирование пользовательского интерфейса и разработка проекта” “Гостиница. номера
- Проектирование преднапряженной фермы
- Проектирование предприятия автомобильного транспорта
- Проектирование привода шнекового пресса
- Проектирование приемного устройства
- Проектирование приемного устройства
- Проектирование: принципы и методы создания АИС