Обстоятельства появления объектно-ориентированного программирования

  • ID: 43951 
  • 40 страниц

Содержание:


Введение

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

Начало развитию объектно-ориентированного подхода положил язык Simula 67, который был разработан в конце 60-х гг. в Норвегии. Несмотря на то, что язык намного опередил свое время, современники (программисты 60-х гг.) оказались не готовы воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком Fortran).

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

Объектно-ориентированный подход возник в первую очередь в ответ на растущую сложностьпрограммного обеспечения. На заре компьютерной эры возможности компьютеров были ограничены и было очень трудно написать большую программу. В 60–70-е гг. эффективность применения компьютеров резко возросла, и стало все больше создаваться прикладных программ повышенной сложности. Наибольшее распространение в это время получило структурное проектирование по методу сверху вниз. Однако через некоторое время оказалось, что структурный подход не работает, если объем программы превышает приблизительно 100 тыс. строк. Как результат – выход проектов за рамки установленных сроков и бюджетов и, более того, их несоответствие начальным требованиям. Для решения этих проблем и стали применять объектно-ориентированный подход.

2. Объектная модель и принципы ее построения

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

– абстрагирование;

– инкапсуляция;

– модульность;

– иерархичность.

2.1 Абстрагирование

Люди развили чрезвычайно эффективную технологию преодоления сложности – абстрагирование. Если человек не в состоянии полностью воссоздать сложный объект, то ему приходится игнорировать не слишком важные детали; в результате чего он имеет дело с обобщенной, идеализированной моделью объекта.

2.2 Инкапсуляция

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

2.3 Модульность

называют набор связанных процедур вместе с данными, которые они обрабатывают.

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

2.4 Иерархичность

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

2.5 Типизация

– это способ защититься от использования объектов одного класса (типа) вместо другого, или, по крайней мере, управлять таким использованием.

Идея согласования типов занимает в понятии типизации центральное место. Возьмем, к примеру, физические единицы измерения. Разделив расстояние на время, мы ожидаем получить скорость, а не вес. В умножении температуры на силу смысла нет, а в умножении расстояния на силу есть. Все это примеры сильной типизации, когда прикладная область диктует правила и ограничения на использование и сочетание абстракций.

2.6 Параллелизм

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

2.7 Сохраняемость

Любой программный объект существует в памяти и живет во времени.

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

– промежуточные результаты вычисления выражений;

– локальные переменные в вызове процедур;

– глобальные переменные и динамически создаваемые данные;

– данные, сохраняющиеся между сеансами выполнения программы;

– данные, сохраняемые при переходе на новую версию программы;

– данные, которые переживают программу.

3. Понятие объекта и его основные характеристики

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

3.1. Состояние

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

3.2. Поведение

Объекты не существуют изолированно, а подвергаются воздействию или сами воздействуют на другие объекты.

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

– это услуга, которую можно запросить у любого объекта класса для воздействия на его поведение.

3.3. Идентичность

– это такое свойство объекта, которое отличает его от всех других объектов.

Источником ошибок в объектно-ориентированном программировании является неумение отличать имя объекта от самого объекта.

3.4. Отношения между объектами

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

4. Понятие класса и его взаимосвязь с объектами

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

– это множество объектов, имеющих общую структуру и общее поведение. Любой конкретный объект является экземпляром класса.

4.1 Ассоциация

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

4.2 Агрегация

Агрегация является частным случаем ассоциации. Отношение агрегации между классами имеет непосредственное отношение к агрегации между их экземплярами.

4.3 Обобщение

– это такое отношение между классами, когда один класс повторяет структуру и поведение другого класса (одиночное наследование) или других классов (множественное наследование).

4.4 Зависимость

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

4.5. Инстанцирование

– подстановка фактических параметров шаблона вместо формальных. В результате создается конкретный класс, который может иметь экземпляры.

4.6. Переменные и операции класса

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

4.7. Интерфейсы

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

4.8. Группирование классов

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

5. Язык программирования СИ++

Рассмотрим особенности использования объектно-ориентированных языков программирования на примере СИ++.

5.1 Основные этапы развития языка

Первые версии языка программирования Си++ (тогда он назывался "Си с классами") были разработаны в начале 80-х годов Бьярном Страуструпом, сотрудником знаменитой AT&T Bell Labs, где ранее были разработаны такие шедевры программирования, как операционная система UNIX и язык программирования Си.

5.2 История стандартизации

Объединенный ANSI-ISO (ANSI X3J16; ISO WG21/N0836) комитет начал функционировать в конце 1989 года. Целью его работы является создание единого стандарта для языка Си++ и его библиотечных средств. За основу проекта стандарта было взято описание языка, данное в ARM, и книга. В работе объединенного комитета, функционирующего и по сей день, значительное место занимает изучение (с последующим принятием или отказом от) возможных изменений текста проекта стандарта, а также уточнение различных правил языка. Позволим себе напомнить, что непосредственный предшественник Си++ - язык Си прошел успешно процесс стандартизации. Работа по его стандартизации завершилась в 1989 году, и стандартизованный вариант сейчас известен под именем ANSI Си.

5.3 Современное состояние СИ++

Усилиями фирм Microsoft и Borland программирование на Си++ выходит на новый, более высокий уровень.

Поскольку в последнее время основное внимание уделяется языку Java, многие стали забывать о том, что Си++ продолжает оставаться "рабочей лошадкой" программистов. Две существенно обновленные версии компиляторов Си++ и Visual C++ фирмы Microsoft и C++Builder компании Borland - отличаются поистине уникальными простотой использования и гибкостью. При разработке VisualC++ основное значение придавалось средствам для подготовки и редактирования управляющих элементов ActiveX, а создатели C++Builder сосредоточили свои усилия на средствах RAD (ускоренная разработка программного обеспечения) для программирования на Си++.

Заключение

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

Литература

Бадд Т. Объектно-ориентированное программирование в действии. – СПб.: "Питер", 1997.

Боггс У., Боггс М. UML и Rational rose. – М.: Лори, 2000.

Буч Г. Объектно-ориентированное проектирование с примерами применения. – М.: Конкорд, 1992.

Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. – М.: "Издательство Бином", СПб.: "Невский диалект", 1998.

Буч Г., Рамбо Д., Джекобсон А. Язык UML. Руководство пользователя. – М.: ДМК, 2000.

Пол А. Объектно-ориентированное программирование на С++. – СПб.; М.: "Невский диалект" – "Издательство Бином", 1999.

Романовский К.Ю., Кузнецов С.В., Кознов Д.В. Объектно-ориентированный подход и диаграммы классов в UML // Объектно-ориентированное визуальное моделирование. – CПб: Изд-во С.-Петербургского ун-та, 1999.

Страуструп Б. Язык программирования С++. – СПб.; М.: "Невский диалект" – "Издательство Бином", 1999.

Фаулер М., Скотт К. UML в кратком изложении. Применение стандартного языка объектного моделирования. – М.: Мир, 1999.

Фридман А.Л. Основы объектно-ориентированной разработки программных систем. – М.: Финансы и статистика, 2000.

Лафоре Роберт. Объектно-ориентированное программирование в C++. СПб.: Питер, 2004.

Лесневский А.С. Объектно-ориентированное программирование для начинающих. М: Бином, 2005.

http://ru.wikibooks.org/wiki Викиучебник. Объектно-ориентированное программирование.