Концепция модульного программирования
Концепцию модульного программирования можно сформулировать в виде нескольких понятий и положений:
- Функциональная декомпозиция задачи — разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач — модулей. Модули связаны между собой только по входным и выходным данным.
- Модуль — основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой «черный ящик» с одним входом и одним выходом. Модульный подход позволяет безболезненно производить модернизацию программы в процессе ее эксплуатации и облегчает ее сопровождение. Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединять их в единый загрузочный модуль.
- Реализуемые решения должны быть простыми и ясными. Если назначение модуля непонятно, то это говорит о том, что декомпозиция начальной или промежуточной задачи была проведена недостаточно качественно. В этом случае необходимо еще раз проанализировать задачу и, возможно, провести дополнительное разбиение на подзадачи. При наличии сложных мест в проекте их нужно подробнее документировать с помощью продуманной системы комментариев. Этот процесс нужно продолжать до тех пор, пока действительно не удастся добиться ясного понимания назначения всех модулей задачи и их оптимального сочетания.
- Назначение всех переменных модуля должно быть описано с помощью комментариев по мере их определения.
Главные понятия и разновидности
Структура данных «класс», представляющая собой объектный тип данных, внешне похожа на типы данных процедурно-ориентированных языков, такие как структура в языке Си или запись в Паскале или QuickBasic. При этом элементы такой структуры (члены класса) могут сами быть не только данными, но и методами (то есть процедурами или функциями). Такое объединение называется инкапсуляцией [ источник не указан 210 дней ] . Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования. Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм. Язык Self, соблюдая многие исходные положения объектно-ориентированного программирования, ввёл альтернативное классам понятие прототипа, положив начало прототипному программированию, считающемуся подвидом объектного.
Концепция модульного программирования
Модульное программирование – это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определенным правилам.
Концепцию модульного программирования можно сформулировать в виде нескольких понятий и положений:
- Функциональная декомпозиция задачи – разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач – модулей. Модули связаны между собой только по входным и выходным данным.
- Модуль – основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой «черный ящик» с одним входом и одним выходом. Модульный подход позволяет безболезненно производить модернизацию программы в процессе ее эксплуатации и существенно облегчает ее сопровождение (тестирование и обнаружение ошибок). Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединять их в единый загрузочный модуль. Кроме того, такие модули могут использоваться как строительные блоки в других программах.
- Реализуемые решения должны быть простыми и ясными. Если назначение модуля непонятно, то это говорит о том, что декомпозиция начальной или промежуточной задачи была проведена недостаточно качественно. В этом случае необходимо еще раз проанализировать задачу и при необходимости провести дополнительное разбиение на подзадачи. При наличии сложных мест в проекте их нужно подробнее документировать с помощью продуманной системы комментариев. Этот процесс нужно продолжать до тех пор, пока действительно не удастся добиться ясного понимания назначения всех модулей задачи и их оптимального сочетания.
- Назначение всех переменных модуля должно быть описано с помощью комментариев по мере их определения.
Здесь следует заметить, что нужно различать использование слова «модуль» когда имеется в виду синтаксическая конструкция языков программирования (например, Unit в Паскале), и когда имеется в виду единица дробления большой программы на отдельные блоки (в виде процедур или функций).
Еще в 1972 году Дэвид Парнас в двух своих статьях выдвинул концепцию скрытия информации в программировании. Однако существовавшие в те годы синтаксические конструкции (такие как процедура и функция) не могли обеспечить надежного скрытия информации, поскольку подвержены влиянию глобальных переменных, поведение которых в сложных программах зачастую бывает трудно предсказуемым. Поэтому необходимо было разработать новую синтаксическую конструкцию, которая не подвержена влиянию глобальных переменных, но в то же время объединяла и надежно скрывала детали реализации определенной подзадачи. Такая конструкция была создана и названа модулем. Количество модулей в программе должно определяться только декомпозицией поставленной задачи на независимые подзадачи (вплоть до одной процедуры в модуле).
Таким образом, выполняемые процедурами модуля локальные действия были бы гарантированно независимым от влияния других частей программы при любых изменениях и коррекциях. Такое использование модуля характерно для класса задач реального времени, в которых критерий надежности и предсказуемости поведения программы является ключевым.
3.Концепция модульного программирования
Идея ООП заключается в стремлении связать данные с обрабатывающими эти данные процедурами в единое целое — объект. ООП основано на трех важнейших принципах, придающих объектам новые свойства.
Этими принципами являются инкапсуляция, наследование и полиморфизм.
- Инкапсуляция — объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы — объектными методами.
- Наследование — свойство объектов порождать своих «потомков». Объект — «потомок» автоматически наследует от «родителей» все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы «родителя» или дополнять их.
- Полиморфизм — свойство родственных объектов (т.е. объектов, имеющих одного общего «родителя») решать схожие по смыслу проблемы разными способами.
- ОБЪЕКТЫ. Базовым понятием в объектном подходе является
понятие КЛАССА объектов — такого множества предметов реального мира, что
все предметы в нем имеют одни и те же характеристики (данные) и правила3
поведения (методы обработки данных). Тогда ОБЪЕКТ — это типичный
представитель (экземпляр, абстрактный представитель) своего класса.
2. ИНКАПСУЛЯЦИЯ. Данные скомбинированы и объединены с
процедурами и функциями, которые манипулируют этими данными, в единую
целостную структуру для получения нового типа данных — объекта.
3. НАСЛЕДОВАНИЕ. Это определение объекта и затем использование
его для построения иерархии производных объектов, причем каждый
производный объект («потомок») наследует доступ к коду и данным всех
своих «прародителей». Создать новые классы можно наследуя уже
существующие (иерархическое наследование)
4. ОГРАНИЧЕНИЕ ДОСТУПА. При наследовании свойств базовых
классов часть методов и характеристик можно спрятать внутри реализации
класса, так что обратиться к этим характеристикам и методам можно будет
только из методов данного или производных от него классов.
5. ПОЛИМОРФИЗМ. Некоторому действию придается одно имя,
которое совместно используется объектами всей иерархии, причем каждый
объект иерархии реализует это действие своим собственным, подходящим
6. АБСТРАГИРОВАНИЕ — создание абстрактных классов, имеющих не
реализованные методы, которые используют в качестве базовых классов для
образования других, имеющих тот же набор методов, но уже
7. УСТОЙЧИВОСТЬ. Под устойчивостью понимают продолжительное
время существования объектов в системе. Это свойство реализуется в
основном в языках объектно-ориентированных баз данных.
ООП имеет свой собственный «арсенал» концепций, Это частично
обусловлено появлением ООП в (несколько замкнутой) сфере
исследовательских разработок, но в основном просто нетрадиционным и