Файл: Применения объектно-ориентированного подхода при проектировании информационной системы.pdf
Добавлен: 24.04.2023
Просмотров: 620
Скачиваний: 3
Введение
Компьютерные и информационные технологии без преувеличения можно назвать наиболее динамичной областью современных знаний, которые концентрируют в себе самые последние достижения в сфере науки и техники. Появление новых процессоров и комплектующих, версий операционных систем и программного обеспечения происходит на фоне постоянного усложнения не только отдельных физических и программных компонентов, но и лежащих в их основе концепций. Разработка и совершенствование информационных систем приводит к необходимости поддержания единого стиля для различных версий программ при их постоянной доработки и модификации.
В момент появления первых ЭВМ предметом внимания была прежде всего аппаратура, особенности архитектуры ЭВМ. И программы разрабатывались в двоичных кодах. Со временем вычислительные машины становились мощнее и надежнее. Одновременно с этим возрастала сложность решаемых с их помощью задач, что в свою очередь вызвало совершенствование технологий разработки программ. Важнейший прорыв произошел в конце 50-х годов, когда появились языки программирования высокого уровня: Фортран, Ангол и др. Их появление в свою очередь позволило решать более сложные задачи. Требования возросли, что опять потребовало совершенствования технологий и т.д.
Существующие на данный момент языки программирования высокого уровня можно разделить на четыре поколения в зависимости от того, какие языковые конструкции впервые в них появились.
Языки первого поколения ориентировались на научно-инженерные применения (1954-1958). Во втором поколение языков высокого уровня основной тенденцией стало развитие алгоритмических абстракций (1959-1961). Языки третьего поколения стали поддерживать абстракцию данных, что позволило программистам описывать свои собственные типы данных (1962-1970).
Четвертое поколение (1970-1980) знаменовалось всплеском активности создания новых языков. Было создано около 2-х тысяч языков и их диалектов. Именно в этом поколении появились языки, называемые объектными или объектно-ориентированными.
Целью данной курсовой работы и является изучение принципа объектно-ориентированного подхода. Его составляющие, основные концепции, достоинства и недостатки. Так же рассмотреть примеры языков программирования, которые строятся на основе объектно-ориентированного подхода.
I. История развития объектно-ориентированного программирования
На протяжении всех лет существования практика программирования требовала совершенствования технологических приемов и создания на их основе таких средств программирования, которые упростили бы процесс разработки программ, позволяя создавать все более сложные программные системы.
Первые программы были организованны очень просто. Они состояли из собственно программы на машинном языке и обрабатываемых данных. Сложность программ ограничивалась способностью программиста одновременно мысленно отслеживать последовательность выполняемых операций и местонахождение большого количества данных.
Создание сначала ассемблеров, а затем и языков высокого уровня сделало программу более обозримой за счет снижения уровня детализации и естественно позволило увеличить ее сложность.
Появление в языках средств, позволяющих оперировать подпрограммами, существенно снизило трудоемкость разработки программ. Подпрограммы можно было сохранять и использовать в других программах. В результате были накоплены огромные библиотеки расчетных и служебных подпрограмм, которые по мере надобности вызывались из разрабатываемой программы (рис 1).
Рис. 1 Архитектура программы, использующей глобальную область данных
Слабым местом такой архитектуры было то, что при увеличении количества подпрограмм возрастала вероятность искажения части глобальных данных какой-либо подпрограммой.
Необходимость исключения таких ошибок привела к идее использования в подпрограммах локальных данных (рис 2).
Рис. 2 Архитектура программы, использующей подпрограммы с локальными данными
И вновь сложность разрабатываемого программного обеспечения стала ограничиваться возможностью программиста отслеживать процессы обработки данных уже на новом уровне. К этому добавились проблемы согласования интерфейса при ведении разработки несколькими программистами. В результате встал вопрос создания технологии разработки сложных программных продуктов, снижающей вероятность появления ошибок.
Усилиями многих авторов такая технология была создана и получила название «структурное программирование».
Структурное программирование представляло собой совокупность рекомендуемых технологических приемов, охватывающих выполнение всех этапов разработки программного обеспечения.
В основе структурного программирования лежит декомпозиция (разбиение на части) сложных систем с целью последующей реализации в виде отдельных небольших подпрограмм. В отличие от используемого ранее интуитивного подхода к декомпозиции, структурный подход требовал представления задачи в виде иерархии подзадач простейшей структуры, для получения которой рекомендовалось применять метод пошаговой детализации (рис 3).
Рис. 3 Основные структуры процедурной декомпозиции
Поддержка принципов структурного программирования была заложена в основу так называемых процедурных языков программирования. Как правило, они включали основные «структурные» операторы управления, поддерживали вложение подпрограмм, локализацию и ограничение области «видимости» данных.
Дальнейший рост сложности и размеров разрабатываемого программного обеспечения потребовал развития структурирования данных и в языках появляется возможность определения пользовательских типов данных. Одновременно усиливается стремление разграничить доступ к глобальным данным программы для уменьшения количества ошибок. Результатом было появление и развитие технологии модульного программирования.
Модульное программирование предполагает выделение групп подпрограмм, использующих одни и те же глобальные данные, в отдельно компилируемые модули (рис. 4).
Рис. 4 Архитектура программы, состоящей из модулей
Использование модульного программирования существенно упрощает ведение разработки программ несколькими программистами, каждый из которых разрабатывает свои модули.
Структурный подход в сочетании с модульным программированием позволяет получать достаточно надежные программы, размер которых не превышает 100 000 операторов. При увеличении размера программы свыше 100 000 операторов обычно возрастает сложность межмодульных интерфейсов, и предусмотреть взаимовлияние отдельных частей программы становится практически невозможно.
Стремление уменьшить количество связей между отдельными частями программы привело к появлению объектно-ориентированного подхода (ООП).
Объектно-ориентированное или объектное программирование (ООП) это программирование, основанное на представлении программы в виде совокупности объектов, которые взаимодействуют между собой; каждый из объектов является экземпляром определенного класса, а классы являются членами иерархии наследования.
Как следует из определения основными понятиями объектно-ориентированного программирования являются объекты и классы.
II. Понятие объекта и класса
1. Объекты
Программные системы призваны решать задачи, которые возникают в разнообразных областях деятельности человека. Программные системы создаются с помощью средств разработки программ — языков программирования, систем управления базами данных, операционных систем. Все эти средства имеют под собой прежде всего математическое основание — логику, теорию конечных автоматов, алгебру и т. д. Соответственно удобнее всего с их помощью решать математические, вычислительные задачи именно с них и начиналось программирование.
Программные системы предназначены для моделирования реальных систем, поэтому очень важно, в каких терминах мы пытаемся описывать эти реальные системы. Объектно-ориентированный подход предлагает описывать системы в виде взаимодействия объектов.
Как пример возьмем операцию снятия денег через банкомат. В данной операции задействованы три объекта «клиент Иванов», «банкомат на Тверской» и «счет 66579801», который открыт в данном банке. Подойдя к банкомату и засунув свою карточку, объект «клиент Иванов» посылает банкомату сообщение «Начать работать». Получив такое сообщение банкомат запрашивает код доступа. «Банкомат на Тверской» посылает сообщение «клиенту Иванову»: «Сообщите идентификационный номер». Если идентификация прошла успешно, «клиент Иванов» просит выдать ему 1000 рублей. Он посылает сообщение банкомату, а тот в свою очередь посылает сообщение объекту «счет № 66579801». Приняв это сообщение, объект «счет № 66579801» проверяет, если ли у него 100 рублей, и, если есть, пересылает разрешение на снятие денег, одновременно уменьшая свой баланс на соответствующую сумму. Банкомат передает деньги, и на этом процедура заканчивается (рис. 5).
Данный пример показывает взаимодействие объектов. Объекты выполняют необходимые действия, передавая друг другу сообщения.
Рис. 5 Схема взаимодействия объектов
Наличие в объектно-ориентированных языках программирования средств для реализации понятия объекта позволяет сравнительно просто перевести описание работы банкомата в работающую программу. Таким образом, объектно-ориентированный подход выполняет свою первую задачу — сокращение семантического разрыва между языком предметной области и языком программирования.
Но что же такое «объект»? Дать четкое и приемлемое для всех определение этому понятию невозможно. Объект — это слишком общее понятие. Так, например, Гради Буч дает следующее определение: «Что -то с чем-то можно оперировать. У объекта есть состояние, поведение и возможность отличить его от других объектов.
1. Состояние объекта.
Каждый объект характеризуется своим состоянием. Состояние объекта характеризуется текущим значением его атрибута, при этом атрибутами могут быть не только простейшие величины: числа, логические значения и т. п., но и сложные величины, объекты.
2. Идентификация объекта.
Метод идентификации объекта должен отвечать на вопрос, как отличить один объект от другого. Иными словами, если имеются два объекта, как можно определить, что эти объекты разные.
3. Интерфейс объекта.
Важнейшей характеристикой объекта является описание того, как он может взаимодействовать с окружающим миром. Это описание и называется интерфейсом объекта.
Объекты взаимодействуют между собой с помощью сообщений. Принимая сообщение, объект выполняет соответствующее действие. Эти действия обычно называются методами.
Наряду с методами и атрибутами, входящими в интерфейс и доступными другим объектам, у объекта могут быть методы или атрибуты, предназначенные для «внутреннего употребления», к которым может обращаться только сам объект.
2. Классы
В системе обычно функционирует множество объектов. Некоторые из них «похожи» или однотипны. Однотипные объекты объединяют в классы.
Понятие класса позволяет существенно упростить разработку и реализацию системы.
Все объекты одного и того же класса обладают одинаковым интерфейсом и реализуют этот интерфейс одним и тем же способом. Два объекта одного класса могут отличаться только текущим состоянием, причем всегда теоретически возможно так изменить состояние одного объекта, чтобы он стал равным другому объекту.
Индивидуальные объекты называются экземплярами класса, а класс — это шаблон, по которому строятся объекты (рис. 6). Термины «объект» и «экземпляр» эквивалентны.
Рис. 6 Классы, используемые в банковской системе
В чем же отличие понятия класса от таких понятий, как «интерфейс» и «тип»?
Интерфейс — это внешняя часть класса. Интерфейс определяет, как объекты данного класса могут взаимодействовать с другими объектами этого или других классов. Однако, если у двух объектов совпадают интерфейсы, это еще не означает, что они принадлежат к одному и тому же классу. Кроме совпадения интерфейсов необходимо совпадение реализаций этих интерфейсов, совпадение поведения объектов.