Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 14.05.2023

Просмотров: 418

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Введение

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

Глава 1 Эволюция методологий программирования

1.1 Поколения языков программирования

1.1.1 Начало начал, или первое поколение языков программирования

1.1.2 Развитие алгоритмических абстракций. Второе поколение языков программирования.

1.1.3 Модульность, как единица построения программных систем, или третье поколение языков программирования

1.2. ЗАРОЖДЕНИЕ ОБЪЕКТНОЙ МОДЕЛИ

1.2.1 Объектные языки программирования

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

1.2.3 Объектно-ориентированный анализ, дизайн и проектирование

1.3 Парадигмы программирования

Глава 2 Составные части объектного подхода

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

2.2. ИНКАПСУЛЯЦИЯ

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

2.4. ИЕРАРХИЯ

2.5 Типизация

2.5. ТИПИЗАЦИЯ

2.6. ПАРАЛЛЕЛИЗМ

Глава 3 Объекты

3.1 Что такое объект с точки зрения ООП

3.3. ПОВЕДЕНИЕ

3.3.1 Классификация методов объектов

3.3.2 Роли объектов

3.3.3 Связь объектов и автоматов, активные и пассивные объекты

3.4 Идентичность

3.5 Жизненный цикл объекта

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

Заключение

Литература

3.4 Идентичность

Буч приводит следующее определение по Хошафяну и Коуплэнду: Идентичность - это такое свойство объекта, которое отличает его от всех других объектов. Они отмечают, что «в большинстве языков программирования и управления базами данных для различения временных объектов их именуют, тем самым путая адресуемость и идентичность. Большинство баз данных различают постоянные объекты по ключевому атрибуту, тем самым смешивая идентичность и значение данных». Источником множества ошибок в объектно-ориентированном программировании является неумение отличать имя объекта от самого объекта. Идентичность (уникальность) объекта является очень важной его характеристикой. Практически всегда объекты можно различить хотя- бы потому, что они занимают отдельное место в памяти ЭВМ. При этом мы имеем дело с уникальностью, основанной на адресуемости. Разные языки могут предоставлять различные средства для поддержки идентичности объектов. Например, в C++ можно принимать решение об идентичности как на основе конкретного адреса размещения объекта, так и на основе результата определяемого пользователем оператора operator ==. В Java мы можем воспользоваться значением переменной ссылочного типа, которая ссылается на объект, а можем использовать метод equals() определенный в классе Object. Иногда, для идентификации объекта заводят специальное поле, в котором содержится уникальный ключ. Особенно часто такой метод встречается в приложениях, работающих с базами данных. В подобной ситуации всегда нужно отдавать себе отчет в том, насколько оправ- дано включение такого ключевого поля в класс объекта. Например, если для идентификации сотрудника используется табельный номер, то такой подход вполне оправдан, так как подобный ключ существует в реальной жизни и является существенной характеристикой объекта. В противном случае, данное решение выглядит «некрасиво» с точки зрения объектного подхода, так как порождает неявные связи между абстракциями. Для идентификации объекта во время исполнения программы, в большинстве случаев, достаточно использовать ссылку или указатель на объект. Потребность в ключевых полях возникает при решении задачи сохранения иерархии объектов в неструктурированном хранилище данных, когда, впоследствии, необходимо восстанавливать взаимосвязи между объектами. В любом случае, всегда лучше возложить обязанности по сохранению/восстановлению взаимосвязей на специально выделенный уровень сохранения, нежели вносить поля-ключи в объекты бизнес-логики. Здесь следует сказать, что по умолчанию решение об эквивалентности объектов в методе equals() класса Object принимается на основе адреса размещения объекта. Этот метод можно перегрузить, взяв контроль за уникальностью на себя. Так, например, классы String, Float, Integer, Double и им подобные перегружают этот метод и принимают решение об идентичности объектов на основе их содержимого, а не адреса.


3.5 Жизненный цикл объекта

Как мы уже говорили, объект существует в пространстве уже хотябы потому, что для сохранения его состояния требуется оперативная память. Мы не будем сейчас рассматривать ситуацию, когда объект существует в хранилище данных в некотором «сериализованном» виде, так как в конечном счете объект должен оказаться в оперативной памяти для того, чтобы с ним можно было работать. Поэтому, будем считать, что с точки зрения программы на этапе исполнения объект рождается тогда, когда под него выделяется память и происходит инициализация его состояния. Объект заканчивает свой жизненный путь тогда, когда высвобождаются занятые им ресурсы, и память возвращается в систему для дальнейшего использования. В разных объектно-ориентированных языках существуют разные механизмы управляющие рождением и уничтожением объектов. Вкратце перечислим основные моменты, присущие C++ и Java. Как уже было сказано, в C++ для управления процессом создания и уничтожения объектов используются конструкторы, деструкторы, а также операторы operator new и operator delete. Объект в программе на C++ может быть создан, как:

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

• Объект в свободной памяти (куче), который создается с помощью оператора new и уничтожается с помощью оператора delete.

• Нестатическое часть -поле другого объекта, которое создается и уничтожается одновременно с объектом, его содержащим.

• Элемент массива, который создается и уничтожается одновременно с самим массивом.

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

• Глобальный объект, член namespace, или статический член класса. При этом объект создается в момент загрузки и запуска программы и уничтожается, когда программа завершает свою работу.

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


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

• Член объединения.

Как видно из приведенного списка, C++ является довольно сложным языком в вопросах управления жизненным циклом объектов. В отличие от C++, в Java меньше ситуаций, когда возможно создание объекта:

• Объект может быть создан при помощи оператора new.

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

• Объект класса String может быть создан как промежуточный ре- зультат выполнения операции конкатенации строк с использованием оператора +.

• «Immediately enclosing instance of» объект создается во время вычисления «primary» конструкции при создании экземпляра класса, родитель которого является внутренним (inner) классом другого класса.

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

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

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

• Ассоциация (связь) — отношение, позволяющее реализовать взаимодействие клиент-сервер.

• Агрегация (композиция) — отношение, служащее для определения понятия целое-часть и организации иерархий объектов.

Заключение

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

Литература

[1] Г. Буч Объектно ориентированный анализ и проектирование с при- мерами приложений на С++, 2-е изд./Пер. с англ. — СПб.; М.: «Нев- ский Диалект» — «Издательство БИНОМ», 1999 г.