Меню Рубрики

Чем характеризуется объект с точки зрения объектно ориентированного подхода

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

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

Рисунок 1. Семантика и прагматика

Семантика — смысл программы с точки зрения выполняющего ее компьютера.

Прагматика — смысл программы с точки зрения ее пользователей.

Модель содержит не все признаки и свойства представляемого ею предмета (понятия), а только те, которые существенны для разрабатываемой программной системы. Тем самым модель «беднее», а, следовательно, проще представляемого ею предмета (понятия). Но главное даже не в этом, а в том, что модель есть формальная конструкция: формальный характер моделей позволяет определить формальные зависимости между ними и формальные операции над ними. Это упрощает как разработку и изучение (анализ) моделей, так и их реализацию на компьютере. В частности, формальный характер моделей позволяет получить формальную модель разрабатываемой программной системы как композицию формальных моделей ее компонентов.

Таким образом, объектно-ориентированный подход помогает справиться с такими сложными проблемами, как:

• уменьшение сложности программного обеспечения;

• повышение надежности программного обеспечения;

• обеспечение возможности модификации отдельных компонентов

• программного обеспечения без изменения остальных его компонентов;

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

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

Объектно-ориентированный подход имеет два аспекта:

• объектно-ориентированная разработка программного обеспечения;

• объектно-ориентированная реализация программного обеспечения.

Объект определяется как осязаемая реальность (tangible entity) — предмет или явление, имеющие четко определяемое поведение. Объект обладает состоянием, поведением и индивидуальностью; структура и поведение схожих объектов определяют общий для них класс. Термины «экземпляр класса» и «объект» являются эквивалентными. Состояние объекта характеризуется перечнем всех возможных (статических) свойств данного объекта и текущими значениями (динамическими) каждого из этих свойств. Поведение характеризует воздействие объекта на другие объекты и наоборот относительно изменения состояния этих объектов и передачи сообщений. Иначе говоря, поведение объекта полностью определяется его действиями.

Индивидуальность — это свойства объекта, отличающие его от всех других объектов.

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

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

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

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

Nav view search

Как пользоваться:

Сайт участвует

Подробности Опубликовано 10.02.2012 04:24 Просмотров: 12786

§12 Пользовательский интерфейс

Основны е темы параграфа :

дружественный пользовательский инт ерфейс;

бъектно -ориентированный интерфей с;

Дружественный пользовательский интерфейс

А теперь познакомьтесь с новым для вас понятием — пользовательский интерфейс.

Разработчики современного программного обеспечения стараются сделать работу пользователя за компьютером удобной , простой, наглядной . Потребительские качества лю­бой программы во многом определяются удобством ее взаи­модействия с пользователем .

Форму взаимодействия программы с пользователем называют пользовательским интерфейсом . Удобная для пользователя форма взаимодействия называется дружественным пользовательским интерфейсом .

Интерфейс современных системных и прикладных про­грамм носит название объектно-ориентированного интерфей ­са . Прим ером операционной систем ы t в которой реализован объектно-ориентированный подход, является Windows .

Операционная система работает с множеством объекто в, к числу которых относятся: документы, программы, дисково ­ды , принтеры и другие объект ы, с которыми мы имеем дело, ра ботая в операционной системе.

Документы содержат некоторую информацию: текст, звук, картинки и т. д. Программы используются для обра­ботки документов. Отдельные программы и документы не­разрывно связаны между собой: текстовый редактор работа­ет с текстовыми документами, графический редактор — с фотографиями и иллюстрациям и, программа обработки звука позволяет записывать, исправлять и прослушивать звуковые файлы .

Документы и программы — это информационные объек­ты. А такие объект ы, как дисководы и принтеры , я вляются аппаратными (физическими) объектами . С объектом опера ­ционная система связывает:

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

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

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

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

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

В меню на рис . 2.12 все пункты , кроме последнего , отно ­сятся к действиям , которые можно выполнить с документом. Выбор нужного пункта меню производится с помощью кла ­виш управления курсором или манипулятора (например , мыши) . Если выбрать пункт меню «Свойства », то на экран будет выведен список свойств данного объекта .

Коротко о главном

Пользовательским интерфейсом называется форма взаи ­модействия программы с пользователем . Современное ПО оснащается дружественным интерфейсом .

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

Интерфейс современных системных и прикладных про ­грамм: — объектно-ориентированный .

Инициировать действие над объектом или узнать его свой­ства можно через контекстное меню.

Вопросы и задания

1.Что такое пользовательский интерфейс?

2.Чем характери зуется объект (с точки зрения объектно -орие нти­ров анного подхода)?

3.Каки м образом можно у знать свойства объекта или выпол нить действие над ними?

Чему вы должны нау чт ься , изучив главу 2

Го товить к работе внешние устройства, имеющиеся в компьютерном классе, уметь ими пользоваться.

Вставлять сменные диски в накопители . Просматривать на экране каталоги диск а.

Инициализировать выполнение программ из программ­ных файлов.

Выполнять основные операции с файлами: копирование , перемещение , удаление , переименование.

Ориентиро ваться в среде пользовательского интерфейса операционной системы.

Особенности объектно-ориентированного подхода

Читайте также:

  1. IV. ЭТНИЧЕСКАЯ ИСТОРИЯ И ОСОБЕННОСТИ КУЛЬТУРЫ НАРОДОВ ЗАПАДНОГО И ЦЕНТРАЛЬНОГО КАВКАЗА 1 страница
  2. IV. ЭТНИЧЕСКАЯ ИСТОРИЯ И ОСОБЕННОСТИ КУЛЬТУРЫ НАРОДОВ ЗАПАДНОГО И ЦЕНТРАЛЬНОГО КАВКАЗА 2 страница
  3. IV. ЭТНИЧЕСКАЯ ИСТОРИЯ И ОСОБЕННОСТИ КУЛЬТУРЫ НАРОДОВ ЗАПАДНОГО И ЦЕНТРАЛЬНОГО КАВКАЗА 3 страница
  4. IV. ЭТНИЧЕСКАЯ ИСТОРИЯ И ОСОБЕННОСТИ КУЛЬТУРЫ НАРОДОВ ЗАПАДНОГО И ЦЕНТРАЛЬНОГО КАВКАЗА 4 страница
  5. VI.9. Особенности организации производства туристского продукта
  6. XVI. ОСОБЕННОСТИ ПРИМЕНЕНИЯ МЕСТНОГО ОБЕЗБОЛИВАНИЯ В СТОМАТОЛОГИЧЕСКОЙ ПРАКТИКЕ У ДЕТЕЙ
  7. А. Интонационные особенности английского предложения
  8. А. Особенности речевой коммуникации
  9. Автоматизированные консультативные системы для помощи в принятии решений на основе интеллектуального (экспертного) подхода
  10. Аграрная реформа 1861г. Особенности ее осуществления в Беларуси.
  11. Адвокатский кабинет. Особенности налогообложения и бухгалтерского учета в адвокатских кабинетах. 1 страница
  12. Адвокатский кабинет. Особенности налогообложения и бухгалтерского учета в адвокатских кабинетах. 2 страница

Объектно-ориентированный подход

Одним из самых распространенных видов моделирования в настоящее время является моделирование с применением различных информационных технологий, т.е. построение и использование компьютерных моделей в виде прикладных программ различного назначения (программных приложений). Создание этих приложений может осуществляться традиционными методами, основанными на алгоритмах, процедурах и данных, а также более современными – объектно-ориентированными, основанными на концептуальном моделировании предметной области. При этом общепризнанно, что «если код приложения генерируется не на основе описания предметной области, то невозможно построить эффективное приложение со сложной бизнес-логикой» [77,с. 215].

Рассмотрим в соответствии с [13, 78 – 87] основные понятия объектно-ориентированной методологиисоздания программного обеспечения (ПО), а также средства стандартного унифицированного языка объектного моделирования (UML – Unified Modelling Language).

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

Объектно-ориентированное моделирование и разработка ПО осуществляются путем последовательного выполнения [13, 78]:

Объектно-ориентированного анализа (object-oriented analysis – OOA),при котором моделируемая и разрабатываемая системы анализируются с точки зренияклассовиобъектов,выявленных в предметной области.

Объектно-ориентированного проектирования (object-oriented design – OOD), при котором путемобъектной декомпозициисоздаетсяобъектная модельразрабатываемой системы.

Объектно-ориентированного программирования (object-oriented programming – OOP), при котором программа представляется в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

В соответствии с требованиями OOA и OOD для построения объектной модели сложной системы её необходимо представить в канонической форме. Эта форма представления системы включает в себя две ортогональных иерархии: иерархию классов и иерархию объектов [13, 78]. Предполагается, что такая объектно-ориентированная декомпозиция системы, позволяет вскрыть ее полную архитектуру, т.е. структуру классовиструктуру объектов.

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

При этом свойства (состояние и поведение) объектов, как экземпляров классов, в объектной модели, определяет соответствующий класс в иерархии классов, описывающей моделируемую предметную область. Главной же задачей OOA и OOD считается «выбор правильного набора абстракций для описания заданной предметной области» [13, с. 56], что подчеркивает важность концептуального классификационного моделирования в процессе объектно-ориентированной разработки.

Концептуальная база методологии объектно-ориентированного моделирования включает в себя четыре главных взаимосвязанных понятия [13, 78 – 82]: абстрагирование, иерархия, инкапсуляция и модульность.

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

Иерархия – способ упорядочения абстракций (классов) по уровням.

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

Модульность – способ разложения системы на связанные, но относительно самостоятельные части (модули).

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

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

Читайте также:  Что есть в сперме полезного с медицинской точки зрения

Между классами могут существовать следующие отношения:

Наследование – такое отношение между классами, при котором класс повторяет описание состояния и поведения суперкласса (одного – одиночное наследование; нескольких – множественное наследование). Данное отношение является основным при выявлении иерархии классов предметной области. Узкие, специализированные классы в иерархии, от которых создаются экземпляры (объекты), называются конкретными классами. Общие классы, от которых экземпляры не производятся, называются абстрактными классами. Самый общий класс в иерархии классов называется базовым или корневым.

Ассоциация – отношение семантической зависимости, показывающее какие роли классы играют друг для друга. Ассоциации различаются по мощности: «один-к-одному», «один-ко-многим», «многое-ко-многим».

Агрегация – отношение, соответствующее отношению «часть-целое» между объектами данных классов.

Использование – может рассматриваться как разновидность отношения ассоциации, при котором одна из сторон (клиент) пользуется услугами или ресурсами другой стороны (сервера). Кроме того, использование может рассматриваться как один из аспектов отношения наследования, так как подкласс, наследуя состояние и поведение класса, выступает в роли его клиента. Так же клиентом класса является его экземпляр (объект), который использует атрибуты и операции данного класса.

При этом операция рассматривается как услуга, которую класс может предоставить своим клиентам. Как правило, эти операции бывают следующих видов:

Модификатор – операция изменения состояния объекта.

Селектор – операция считывания состояния объекта (без изменения состояния).

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

Конструктор – операция создания и/или инициализации объекта.

Деструктор – операция, освобождающая состояние объекта и/или разрушающая сам объект.

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

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

При выявлении структуры объектов моделируемой системы между объектами устанавливаются различные связи(посредством передачи сообщений), представляющие собой «физическое или концептуальное соединение между объектами». Связи обозначают равноправные или «клиент-серверные» отношения между объектами. «Наиболее желательной является функциональная связность, при которой все элементы…тесно взаимодействуют в достижении определенной цели» [13, с. 139]. Участвуя в связях, объект может выполнять одну из трех ролей:

актора – при которой объект может воздействовать на другие объекты, но сам никогда не подвергается их воздействию (активный объект);

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

агента – при которой объект может быть и активным, и пассивным.

Кроме того, между объектами могут быть выявлены иерархические отношения, а именно отношение «часть-целое», т.е. агрегация. При этом, идя от целого (агрегата), можно придти к его частям (атрибутам). Агрегация означает физическое или концептуальное вхождение одного объекта в другой.

Классы и объекты выявляются (обнаруживаются, открываются) на этапе OOA и в совокупности составляют словарь предметной области. На этапе OOD могут понадобиться новые классы, объекты и механизмы их взаимодействия для обеспечения поведения, требуемого моделью, которые приходится уже изобретать.

При проведении OOA и OOD необходимо осуществлять декомпозицию области приложения и разрабатываемой информационной системы. Для обеспечения такой декомпозиции в соответствии с объектно-ориентированным подходом (ООП) используются абстрагирование и иерархия [13, 78]. Однако в настоящее время задача объектно-ориентированной декомпозиции и выделения классов и объектов не имеет законченного формального решения. «Объектно-ориентированная методика позволяет значительно повысить качество и продуктивность разработки программного обеспечения. Однако извлечь из нее выгоду можно только тогда, когда правильно определено множество объектов. Подходящее множество объектов для конкретной области приложения обеспечивает повторное применение системы и возможности ее расширения, а также гарантирует качество и продуктивность потенциальных улучшений, присущих объектно-ориентированной парадигме. Без формальных методов определения объектов разработчики программного обеспечения рискуют остаться просто хакерами на объектном уровне» [32, с. 23].

При этом в литературе по объектно-ориентированному подходу отмечается, что «к сожалению, пока не разработаны строгие методы классификации и нет правила, позволяющего выделять классы и объекты. … Как и во многих технических дисциплинах, выбор классов является компромиссным решением» [13, с. 147]. Существующие методики OOA на сегодняшний день предлагают эвристические правила идентификации классов и объектов, основанные на опыте классификации в других науках. При этом разные авторы предлагают различные наборы базовых классов для объектного моделирования и проектирования. Например, в работе [88] предлагается набор: Осязаемые предметы, Роли, События, Взаимодействие. В работе [89] предлагается следующий набор: Люди, Места, Предметы, Организации, Концепции, События. В работе [90] предлагается такой набор: Структуры, Другие системы, Устройства, События, Разыгрываемые роли, Места, Организационные единицы.

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

Дата добавления: 2014-12-27 ; Просмотров: 559 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Распространение объектно-ориентированного подхода на информационную безопасность

Основные понятия объектно-ориентированного подхода

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

Что же понимается под объектом и каковы другие основополагающие понятия данного подхода?

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

Объект — это элемент класса , то есть абстракция определенной сущности.

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

К активности объектов мы еще вернемся.

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

Основным инструментом борьбы со сложностью в объектно-ориентированном подходе является инкапсуляция — сокрытие реализации объектов (их внутренней структуры и деталей реализации методов ) с предоставлением во вне только строго определенных интерфейсов.

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

Наследование означает построение новых классов на основе существующих с возможностью добавления или переопределения данных и методов . Наследование является важным инструментом борьбы с размножением сущностей без необходимости. Общая информация не дублируется, указывается только то, что меняется. При этом класс -потомок помнит о своих «корнях».

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

Мы еще вернемся к механизму наследования при рассмотрении ролевого управления доступом . Пополним рассмотренный выше классический набор понятий объектно-ориентированного подхода еще двумя понятиями: грани объекта и уровня детализации .

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

Понятие уровня детализации важно не только для визуализации объектов , но и для систематического рассмотрения сложных систем , представленных в иерархическом виде. Само по себе оно очень простое: если очередной уровень иерархии рассматривается с уровнем детализации n > 0, то следующий — с уровнем (n — 1). Объект с уровнем детализации 0 считается атомарным.

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

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

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

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

Компонентные объектные среды обладают всеми достоинствами, присущими объектно-ориентированному подходу :

  • инкапсуляция объектных компонентов скрывает сложность реализации, делая видимым только предоставляемый вовне интерфейс;
  • наследование позволяет развивать созданные ранее компоненты , не нарушая целостность объектной оболочки;
  • полиморфизм по сути дает возможность группировать объекты , характеристики которых с некоторой точки зрения можно считать сходными.

Понятия же компонента и контейнера необходимы нам потому, что с их помощью мы можем естественным образом представить защищаемую ИС и сами защитные средства. В частности, контейнер может определять границы контролируемой зоны (задавать так называемый » периметр безопасности «).

На этом мы завершаем описание основных понятий объектно-ориентированного подхода .

Чем характеризуется объект с точки зрения объектно ориентированного подхода

Объектное и объектно-ориентированное программирование (ООП) возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Кроме того, в современном объектно-ориентированном программировании часто большое значение имеют понятия события (так называемое событийно-ориентированное программирование) и компонента (компонентное программирование).

Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке объектно-ориентированным языком программирования.

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

Главные понятия и разновидности

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

Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования.

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

Основные понятия

Определение ООП и его основные концепции

Сложности определения

ООП имеет уже более чем сорокалетнюю историю, но, несмотря на это, до сих пор не существует чёткого общепринятого определения данной технологии. Основные принципы, заложенные в первые объектные языки и системы, подверглись существенному изменению (или искажению) и дополнению при многочисленных реализациях последующего времени. Кроме того, примерно с середины 1980-х годов термин «объектно-ориентированный» стал модным, в результате с ним произошло то же самое, что несколько раньше с термином «структурный» (ставшим модным после распространения технологии структурного программирования) — его стали искусственно «прикреплять» к любым новым разработкам, чтобы обеспечить им привлекательность. Бьёрн Страуструп в 1988 году писал, что обоснование «объектной ориентированности» чего-либо, в большинстве случаев, сводится к силлогизму: «X — это хорошо. Объектная ориентированность — это хорошо. Следовательно, X является объектно-ориентированным».

Тимоти Бадд пишет [1] :

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

Определение ООП

По мнению Алана Кея, создателя языка Smalltalk, которого считают одним из «отцов-основателей» ООП, объектно-ориентированный подход заключается в следующем наборе основных принципов (цитируется по вышеупомянутой книге Т. Бадда [1] ).

  1. Всё является объектом.
  2. Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.
  3. Каждый объект имеет независимую память, которая состоит из других объектов.
  4. Каждый объект является представителем (экземпляром) класса, который выражает общие свойства объектов.
  5. В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.
  6. Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.
Читайте также:  Найдите среди данных слов четвертое лишнее с грамматической точки зрения

Таким образом, программа представляет собой набор объектов, имеющих состояние и поведение. Объекты взаимодействуют посредством сообщений. Естественным образом выстраивается иерархия объектов: программа в целом — это объект, для выполнения своих функций она обращается к входящим в неё объектам, которые, в свою очередь, выполняют запрошенное путём обращения к другим объектам программы. Естественно, чтобы избежать бесконечной рекурсии в обращениях, на каком-то этапе объект трансформирует обращённое к нему сообщение в сообщения к стандартным системным объектам, предоставляемым языком и средой программирования.

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

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

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

Отдельного пояснения требует понятие обмена сообщениями. Первоначально (например, в том же Smalltalk) взаимодействие объектов представлялось как «настоящий» обмен сообщениями, то есть пересылка от одного объекта другому специального объекта-сообщения. Такая модель является чрезвычайно общей. Она прекрасно подходит, например, для описания параллельных вычислений с помощью активных объектов, каждый из которых имеет собственный поток исполнения и работает одновременно с прочими. Такие объекты могут вести себя как отдельные, абсолютно автономные вычислительные единицы. Посылка сообщений естественным образом решает вопрос обработки сообщений объектами, присвоенными полиморфным переменным — независимо от того, как объявляется переменная, сообщение обрабатывает код класса, к которому относится присвоенный переменной объект.

Однако общность механизма обмена сообщениями имеет и другую сторону — «полноценная» передача сообщений требует дополнительных накладных расходов, что не всегда удобно. Поэтому в большинстве ныне существующих объектно-ориентированных языков программирования используется концепция «отправка сообщения как вызов метода» — объекты имеют доступные извне методы, вызовами которых и обеспечивается взаимодействие объектов. Данный подход реализован в огромном количестве языков программирования, в том числе C++, Object Pascal, Oberon-2. В настоящий момент именно он является наиболее распространённым в объектно-ориентированных языках

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

Особенности реализации

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

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

Классы могут наследоваться друг от друга. Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными либо переопределять уже имеющиеся. Большинство языков программирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), но в C++ допускается множественное наследование — порождение класса от двух или более классов-родителей. Множественное наследование порождает целый ряд проблем, как логических, так и чисто реализацинных, поэтому в полном объёме его поддержка не распространена. Вместо этого в 1990-е годы появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса. Интерфейс — это класс без полей и без реализации, включающий только заголовки методов. Если некий класс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в него методы. Использование интерфейсов предоставляет относительно дешёвую альтернативу множественному наследованию.

Взаимодействие объектов в абсолютном большинстве случаев обеспечивается вызовом ими методов друг друга.

Инкапсуляция обеспечивается следующими средствами

Контроль доступа Поскольку методы класса могут быть как чисто внутренними, обеспечивающими логику функционирования объекта, так и внешними, с помощью которых взаимодействуют объекты, необходимо обеспечить скрытость первых при доступности извне вторых. Для этого в языки вводятся специальные синтаксические конструкции, явно задающие область видимости каждого члена класса. Традиционно это модификаторы public, protected и private, обозначающие, соответственно, открытые члены класса, члены класса, доступные только из классов-потомков и скрытые, доступные только внутри класса. Конкретная номенклатура модификаторов и их точный смысл различаются в разных языках. Методы доступа Поля класса, в общем случае, не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне), а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа. Такие методы либо возвращают значение того или иного поля, либо производят запись в это поле нового значения. При записи метод доступа может проконтролировать допустимость записываемого значения и, при необходимости, произвести другие манипуляции с данными объекта, чтобы они остались корректными (внутренне согласованными). Методы доступа называют ещё аксессорами (от англ. access — доступ), а по отдельности — геттерами (англ. get — чтение) и сеттерами (англ. set — запись). Свойства объекта Псевдополя, доступные для чтения и/или записи. Свойства внешне выглядят как поля и используются аналогично доступным полям (с некоторыми исключениями), однако фактически при обращении к ним происходит вызов методов доступа. Таким образом, свойства можно рассматривать как «умные» поля данных, сопровождающие доступ к внутренним данным объекта какими-либо дополнительными действиями (например, когда изменение координаты объекта сопровождается его перерисовкой на новом месте). Свойства, по сути — не более чем синтаксический сахар, поскольку никаких новых возможностей они не добавляют, а лишь скрывают вызов методов доступа. Конкретная языковая реализация свойств может быть разной. Например, в C# объявление свойства непосредственно содержит код методов доступа, который вызывается только при работе со свойствами, то есть не требует отдельных методов доступа, доступных для непосредственного вызова. В Delphi объявление свойства содержит лишь имена методов доступа, которые должны вызываться при обращении к полю. Сами методы доступа представляют собой обычные методы с некоторыми дополнительными требованиями к сигнатуре.

Полиморфизм реализуется путём введения в язык правил, согласно которым переменной типа «класс» может быть присвоен объект любого класса-потомка её класса.

Подходы к проектированию программ в целом

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

Объектно-ориентированное проектирование основывается на описании структуры и поведения проектируемой системы, то есть, фактически, в ответе на два основных вопроса:

  • Из каких частей состоит система.
  • В чём состоит ответственность каждой из частей.

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

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

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

Родственные методологии

Компонентное программирование

Компонентно-ориентированное программирование — это своеобразная «надстройка» над ООП, набор правил и ограничений, направленных на построение крупных развивающихся программных систем с большим временем жизни. Программная система в этой методологии представляет собой набор компонентов с хорошо определёнными интерфейсами. Изменения в существующую систему вносятся путём создания новых компонентов в дополнение или в качестве замены ранее существующих. При создании новых компонентов на основе ранее созданных запрещено использование наследования реализации — новый компонент может наследовать лишь интерфейсы базового. Таким образом компонентное программирование обходит проблему хрупкости базового класса.

Прототипное программирование

Прототипное программирование, сохранив часть черт ООП, отказалось от базовых понятий — класса и наследования.

  • Вместо механизма описания классов и порождения экземпляров язык предоставляет механизм создания объекта (путём задания набора полей и методов, которые объект должен иметь) и механизм клонирования объектов.
  • Каждый вновь созданный объект является «экземпляром без класса». Каждый объект может стать прототипом — быть использован для создания нового объекта с помощью операции клонирования. После клонирования новый объект может быть изменён, в частности, дополнен новыми полями и методами.
  • Клонированный объект либо становится полной копией прототипа, хранящей все значения его полей и дублирующей его методы, либо сохраняет ссылку на прототип, не включая в себя клонированных полей и методов до тех пор, пока они не будут изменены. В последнем случае среда исполнения обеспечивает механизм делегирования — если при обращении к объекту он сам не содержит нужного метода или поля данных, вызов передаётся прототипу, от него, при необходимости — дальше по цепочке.

Производительность объектных программ

Гради Буч указывает [2] на следующие причины, приводящие к снижению производительности программ из-за использования объектно-ориентированных средств:

Динамическое связывание методов. Обеспечение полиморфного поведения объектов приводит к необходимости связывать методы, вызываемые программой (то есть определять, какой конкретно метод будет вызываться) не на этапе компиляции, а в процессе исполнения программы, на что тратится дополнительное время. При этом реально динамическое связывание требуется не более чем для 20 % вызовов, но некоторые ООП-языки используют его постоянно. Значительная глубина абстракции. ООП-разработка часто приводит к созданию «многослойных» приложений, где выполнение объектом требуемого действия сводится к множеству обращений к объектам более низкого уровня. В таком приложении происходит очень много вызовов методов и возвратов из методов, что, естественно, сказывается на производительности. Наследование «размывает» код. Код, относящийся к «оконечным» классам иерархии наследования (которые обычно и используются программой непосредственно) — находится не только в самих этих классах, но и в их классах-предках. Относящиеся к одному классу методы фактически описываются в разных классах. Это приводит к двум неприятным моментам:

  • Снижается скорость трансляции, так как компоновщику приходится подгружать описания всех классов иерархии.
  • Снижается производительность программы в системе со страничной памятью — поскольку методы одного класса физически находятся в разных местах кода, далеко друг от друга, при работе фрагментов программы, активно обращающихся к унаследованным методам, система вынуждена производить частые переключения страниц.
Читайте также:  Существует точка зрения согласно которой абстрактные умозаключения

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

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

Критика ООП

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

Обычно сравнивают объектное и процедурное программирование:

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

Критические высказывания в адрес ООП:

  • Исследование Thomas E. Potok, Mladen Vouk и Andy Rindos [1] показало отсутствие значимой разницы в продуктивности разработки программного обеспечения между ООП и процедурным подходом.
  • Кристофер Дэйт указывает на невозможность сравнения ООП и других технологий во многом из за отсутствия строгого и общепризнанного определения ООП (C. J. Date, Introduction to Database Systems, 6th-ed., Page 650)
  • Александр Степанов, в одном из своих интервью, указывал на то, что ООП «методологически неправильно» и что «… ООП практически такая же мистификация как и искусственный интеллект…» ([2]).
  • Фредерик Брукс (Frederick P. Brooks, Jr.) в своей статье «No Silver Bullet. Essence and Accidents of Software Engineering» (Computer Magazine; April 1987) указывает на то, что наиболее сложной частью создания программного обеспечения является « … спецификация, дизайн и тестирование концептуальных конструкций, а отнюдь не работа по выражению этих концептуальных конструкций…». ООП (наряду с такими технологиями как искусственный интеллект, верификация программ, автоматическое программирование, графическое программирование, экспертные системы и др), по его мнению, не является «серебряной пулей», которая может снизить сложность разработки программных систем. По его мнению «…ООП позволяет сократить только привнесённую сложность в выражение дизайна. Дизайн остаётся сложным по своей природе…». ([3])
  • Эдсгер Дейкстра указывал: «… то о чём общество в большинстве случаев просит — это змеиное масло. Естественно, „змеиное масло“ имеет очень впечатляющие имена, иначе будет очень трудно что-то продать: „Структурный анализ и Дизайн“, „Программная инженерия“, „Модели зрелости“, „Управляющие информационные системы“ (Management Information Systems), „Интегрированные среды поддержки проектов“, „Объектная ориентированность“, „Реинжиниринг бизнес-процессов“…» — EWD 1175: The strengths of the academic enterprise
  • Никлаус Вирт считает, что ООП — не более чем тривиальная надстройка над структурным программированием, и преувеличение её значимости, выражающееся, в том числе, во включении в языки программирования всё новых модных «объектно-ориентированных» средств, вредит качеству разрабатываемого программного обеспечения.
  • Патрик Киллелиа в своей книге «Тюнинг веб-сервера» писал: «… ООП предоставляет вам множество способов замедлить работу ваших программ …»

Если попытаться классифицировать критические высказывания в адрес ООП, можно выделить несколько аспектов критики данного подхода к программированию.

Критика рекламы ООП. Критикуется явно высказываемое или подразумеваемое в работах некоторых пропагандистов ООП, а также в рекламных материалах «объектно-ориентированных» средств разработки представление об объектном программировании как о некоем всемогущем подходе, который магическим образом устраняет сложность программирования. Как замечали многие, в том числе упомянутые выше Брукс и Дейкстра, «серебряной пули не существует» — независимо от того, какой парадигмы программирования придерживается разработчик, создание нетривиальной сложной программной системы всегда сопряжено со значительными затратами интеллектуальных ресурсов и времени. Из наиболее квалифицированных специалистов в области ООП никто, как правило, не отрицает справедливость критики этого типа. Оспаривание эффективности разработки методами ООП. Критики оспаривают тезис о том, что разработка объектно-ориентированных программ требует меньше ресурсов или приводит к созданию более качественного ПО. Проводится сравнение затрат на разработку разными методами, на основании которого делается вывод об отсутствии у ООП преимуществ в данном направлении. Учитывая крайнюю сложность объективного сравнения различных разработок, подобные сопоставления, как минимум, спорны. Производительность объектно-ориентированных программ. Указывается на то, что целый ряд «врождённых особенностей» ООП-технологии делает построенные на её основе программы технически менее эффективными, по сравнению с аналогичными необъектными программами. Не отрицая действительно имеющихся дополнительных накладных расходов на организацию работы ООП-программ (см. раздел «Производительность» выше), нужно, однако, отметить, что значение снижения производительности часто преувеличивается критиками. В современных условиях, когда технические возможности компьютеров чрезвычайно велики и постоянно растут, для большинства прикладных программ техническая эффективность оказывается менее существенна, чем функциональность, скорость разработки и сопровождаемость. Лишь для некоторого, очень ограниченного класса программ (ПО встроенных систем, драйвера устройств, низкоуровневая часть системного ПО) производительность остаётся критическим фактором. Критика отдельных технологических решений в ООП-языках и библиотеках. Эта критика многочисленна, но затрагивает она не ООП как таковое, а приемлемость и применимость в конкретных случаях тех или иных реализаций её механизмов. Одним из излюбленных объектов критики является язык C++, входящий в число наиболее распространённых промышленных ООП-языков.

Объектно-ориентированные языки

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

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

  • Объявление классов с полями (данными — членами класса) и методами (функциями — членами класса).
  • Механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООП-языков поддерживают только единичное наследование.
  • Средства защиты внутренней структуры классов от несанкционированного использования извне. Обычно это модификаторы доступа к полям и методам, типа public, private, обычно также protected, иногда некоторые другие.
  • Полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той же переменной экземпляры различных классов.
  • Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООП-языках все методы классов являются виртуальными.

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

  • Конструкторы, деструкторы, финализаторы.
  • Свойства (аксессоры).
  • Индексаторы.
  • Интерфейсы — как альтернатива множественному наследованию.
  • Переопределение операторов для классов.

Часть языков (иногда называемых «чисто объектными») целиком построена вокруг объектных средств — в них любые данные (возможно, за небольшим числом исключений в виде встроенных скалярных типов данных) являются объектами, любой код — методом какого-либо класса и невозможно написать программу, в которой не использовались бы объекты. Примеры подобных языков — Java или Ruby. Другие языки (иногда используется термин «гибридные») включают ООП-подсистему в исходно процедурный язык. В них существует возможность программировать, не обращаясь к объектным средствам. Классические примеры — C++ и Delphi Pascal.

Примечания

  1. 12 Бадд Т. Объектно-ориентированное программирование в действии / Перев. с англ. — СПб.: Питер, 1997. ISBN 5-88782-270-8
  2. Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на C++. 2-е изд. / Пер. с англ. — М.:»Издательство Бином», СПб:»Невский диалект», 1998 г. ISBN 5-7989-0067-3, ISBN 5-7940-0017-1, стр. 276—278
  • Объектно-ориентированное проектирование
  • Прототипное программирование — стиль ООП, при котором вместо классов используются прототипы.
  • базами данных
  • Сравнение языков программирования
  • Парадигма
  • Доменный объект
  • Геттер (программирование)

Литература

  • Иан Грэхем Объектно-ориентированные методы. Принципы и практика = Object-Oriented Methods: Principles & Practice. — 3-е изд. — М.: «Вильямс», 2004. — С. 880. — ISBN 0-201-61913-X
  • Антони Синтес Освой самостоятельно объектно-ориентированное программирование за 21 день = Sams Teach Yourself Object-Oriented Programming in 21 Days. — М.: «Вильямс», 2002. — С. 672. — ISBN 0-672-32109-2

Разработка программного обеспечения

Шаги процесса Анализ требований • Проектирование программного обеспечения • Программирование • Формальные методы • Тестирование программного обеспечения • Внедрение программного обеспечения • Сопровождение программного обеспечения Концепции Моделирование данных • Архитектура программного обеспечения • Functional specification • Язык моделирования • Парадигма программирования • Программное обеспечение • Архитектура программного обеспечения • Методология разработки программного обеспечения • Цикл разработки программного обеспечения • Качество программного обеспечения • Обеспечение качества программного обеспечения • Структурный анализ программного обеспечения Направления Гибкая методология разработки • Аспектно-ориентированное программирование • Объектно-ориентированное программирование • Проблемно-ориентированное программирование • Онтология • Сервисно-ориентированная архитектура • Цикл разработки программного обеспечения Модели

Модели разработки: Гибкая методология разработки • Cleanroom • Итеративная разработка • RUP • Scrum • MSF • Спиральная модель • Модель водопада • XP • : CMMI • Модель данных • Function model • UML

Выдающиеся
деятели Kent Beck • Гради Буч • Фред Брукс • Barry Boehm • Уорд Каннингем • Оле-Йохан Даль • Tom DeMarco • Эдсгер Вибе Дейкстра • Дональд Кнут • Мартин Фаулер • Чарльз Энтони Ричард Хоар • Watts Humphrey • Michael A. Jackson • Ivar Jacobson • Craig Larman • James Martin • Bertrand Meyer • David Parnas • Winston W. Royce • James Rumbaugh • Никлаус Вирт • Эдвард Йордан Связанные
статьи Информатика • Компьютерная инженерия • Организационная инженерия • История разработки ПО • Конфигурационное управление • Менеджмент • Документирование • Математика • Управление проектами • Управление программами • Всеобщее управление качеством • Эргономика • Системотехника • Обратная разработка

Wikimedia Foundation . 2010 .

Смотреть что такое «Объектно-ориентированный подход» в других словарях:

Агентно-ориентированный подход — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия

Объектно-ориентированное программирование — Эта статья во многом или полностью опирается на неавторитетные источники. Информация из таких источников не соответствует требованию проверяемости представленной информации, и такие ссылки не показывают значимость темы статьи. Статью можно… … Википедия

Объектно-реляционная СУБД — Эта статья должна быть полностью переписана. На странице обсуждения могут быть пояснения. Объектно реляционная СУБД (ОРСУБД) реляционная СУБД (РСУБД), поддерживающая неко … Википедия

Класс (объектно-ориентированное программирование) — Класс, наряду с понятием «объект», является важным понятием объектно ориентированного подхода в программировании (хотя существуют и бесклассовые объектно ориентированные языки, например, Прототипное программирование). Под классом подразумевается… … Википедия

ОРСУБД — Объектно реляционная СУБД (ОРСУБД) реляционная СУБД (РСУБД), поддерживающая некоторые технологии, реализующие объектно ориентированный подход. Разница между объектно реляционными и объектными СУБД: первые являют собой надстройку над реляционной… … Википедия

ОСУБД — Объектно ориентированная СУБД реализующая объектно ориентированный подход. Эта система управления обрабатывает данные как абстрактные объекты, наделённые свойствами, в виде неструктурированных данных, и использующие методы взаимодействия с… … Википедия

ООАП — Объектно ориентированное программирование (ООП) парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием прототипов). Класс это тип, описывающий… … Википедия

Событийно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия

Класс (Java) — Класс, наряду с понятием «объект», является важным понятием объектно ориентированного подхода в программировании (хотя существуют и бесклассовые объектно ориентированные языки, например, Прототипное программирование). Под классом подразумевается… … Википедия

Класс (ООП) — Класс, наряду с понятием «объект», является важным понятием объектно ориентированного подхода в программировании (хотя существуют и бесклассовые объектно ориентированные языки, например, Прототипное программирование). Под классом подразумевается… … Википедия

Источники:
  • http://txtbooks.ru/informatika/8-klass/95-semakin-8-klass/171-15-12-polzovatelskij-interfejs.html
  • http://studopedia.su/14_105803_osobennosti-ob-ektno-orientirovannogo-podhoda.html
  • http://www.intuit.ru/studies/courses/10/10/lecture/298?page=2
  • http://dic.academic.ru/dic.nsf/ruwiki/1071245