Меню Рубрики

Объект с точки зрения ооп идентичность и жизненный цикл объектов

Программирование как моделирование реальности.

Понятие объекта в ООП.

Объектная нотация UML.

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

Например, кружка на столе находится в состоянии filled (наполнена), поскольку она приспособлена для хранения жидкостей и в ней все еще есть кофе. Когда в ней нет больше кофе, состояние кружки можно определить как empty (пуста). Если она упадет на пол и разобьется, она перейдет в состояние broken (разбита).

Моя кофейная чашка, конечно, пассивна – она не обладает собственным поведением (behavior). Однако, этого нельзя сказать о моей собаке или березе за моим окном. Моя собака лает, дерево растет и т.д. Итак, некоторые объекты реального мира обладают поведением.

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

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

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

Искусственные системы являются моделью реальности. Кофейная чашка на экране моего компьютера всего лишь модель реальной «сущности» так же, как собака или береза на моем экране. Кофейная чашка может быть, таким образом, смоделирована с помощью поведенческих свойств. Она может, к примеру, упасть на пол, если ее уронить. Действие «падения» можно смоделировать как поведенческую операцию (operation) чашки. Еще одним логическим «действием» чашки может быть операция «разбиться» при ударе об пол. Большинство, если не все, объекты в компьютерной системе «оживают» – они обладают поведением.

Понятие объекта

Объект – это экземпляр (instance) некоей «сущности». Он может быть одним из множества экземпляров одной и той же «сущности». Моя чашка – экземпляр множества всевозможных чашек.

Общее описание «сущности» называется классом (class). Поэтому объект является экземпляром класса.

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

понимание прикладной задачи (проблемы);

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

Примеры объектов: форточка, Банк «Империал», Петр Сидоров, дело № 7461, сберкнижка и т.д.

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

Гради Буч дает следующее определение объекта:

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

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

Рассмотрим пример. Любой человек может находиться в некотором положении (состоянии): стоять, сидеть, лежать, и — в то же время совершать какие либо действия.

Например, человек может прыгать, если он стоит, и не может — если он лежит, для этого ему потребуется сначала встать. Также в объектно-ориентированном программировании состояние объекта может определяться наличием или отсутствием связей между моделируемым объектом и другими объектами. (Более подробно все возможные связи между объектами будут рассмотрены в разделе «Типы отношений между классами».)

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

Для рассмотренных выше примеров такими характеристиками, или атрибутами, объекта «Человек» являются:

текущее положение человека (стоит, сидит, лежит);

наличие удочки (есть или нет).

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

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

Состояние объекта характеризуется перечнем всех свойств объекта и текущими значениями каждого из этих свойств

Какие действия можно производить с объектом? (Любые или есть ограничения?)

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

Например, назовите возможные действия с некоторым файлом операционной системы ПК:

читать из файла;

Всегда ли эти действия можно производить?

Результат выполнения действий зависит от состояния объекта на момент совершения действия, т.е. нельзя, например, удалить файл, если он открыт кем-либо (заблокирован). В то же время действия могут менять внутреннее состояние объекта — при открытии или закрытии файла свойство «открыт» принимает значения «да» или «нет», соответственно.

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

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

Поведение (behavior) — действия и реакции объекта, выраженные в терминах передачи сообщений и изменения состояния; видимая извне и воспроизводимая активность объекта.

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

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

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

Наиболее распространенной ошибкой является понимание уникальности как имени ссылки на объект.

Это неверно, т.к. на один объект может указывать несколько ссылок, и ссылки могут менять свои значения (ссылаться на другие объекты).

Уникальность (identity) — свойство объекта; то, что отличает его от других объектов (некоторые авторы переводят этот термин как индивидуальность и даже идентичность, но мы будем говорить уникальность)

Вопрос состоит в том, каким образом объект узнает об уникальности другого объекта, которому требуется отправить сообщение. Каким образом объект Order узнает свой объект Shipment так, чтобы сообщение shipOrder попало к своему адресату?

Ответ заключается в том, что каждому объекту при создании присваивается идентификатор объекта (object identifier OID). Идентификатор объекта (OID) представляет собой дескриптор (handle) объекта – уникальный номер, который остается с объектом на протяжении всего времени его существования. Если объекту X необходимо отправить сообщение объекту Y, объект X каким-либо образом должен узнать OID объекта Y.

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

Постоянная связь по OID.

Временная связь по OID.

Различие между этими видами связи определяется продолжительностью существования объекта. Время жизни некоторых объектов не превышает времени выполнения программы – они создаются программой и уничтожаются во время выполнения программы или по ее завершении. Это так называемые временные объекты (transmit object). Другие объекты «переживают» выполнение программы – после завершения программы они запоминаются в долговременной дисковой памяти и доступны при следующем выполнении программы. Это так называемые постоянные объекты (persistent object).

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

Объект с точки зрения ооп идентичность и жизненный цикл объектов

(3 семестр 2011)
I Теория объектного и объектно-ориентированного подхода:


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

Тенденции развития языков программирования:


  1. смещение акцентов от частного (прогр. деталей) к общему (более крупных компонент);

  2. Развитие и совершенствование инструментария (языков высокого уровня и рабочей среды);

  3. возрастание сложности программных и информационных систем.

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


  1. Fortran-I, AlGOL-58, etc. Область применения ограничена малым объемом памяти и несовершенством системы ввода-вывода; практически полностью математический словарь, относительно простая структура из подпрограмм и данных в глобальной области видимости; нет разделения на разнотипных данных; первые библиотеки подпрограмм.

  2. Fotran-II (подпрограммы, разд. компиляция), ALGOL-60 (блочные структуры, типы данных), COBOL (описание данных, работа с файлами), Lisp (обработка списков, указатели, сборка мусора).
    Выделение подпрограмм как механизма абстрагирования привело к важным последствиям: разработке механизмов передачи параметров; заложены основания для структ.прогр. (языковая поддержка механизмов вложенности подпрограмм, научная разработка структур управления и областей видимости); процедуры как основа проектирования. Статические (архивные) библиотеки.

  3. ALGOL-68, Pascal; Simula (классы, абстрактные данные), Ada, Modula-2, C(возм-ть низкоуровнего управл. памятью – преобр. типов, указатели; препроцессор, макросы).
Читайте также:  Социальное государства с точки зрения права

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


  • Smalltalk, Object Pascal, C++; (IV+) Java, C#.
    Основа – объекты, классы, интерфейсы, модули. Иерархии классов и объектов, инкапсуляция. ООАД, ОО Проектирование.
  • В процедурно-ориентированных языках центральное место занимают данные, а не алгоритмы.
    Основной идеей объектного подхода является объединение данных и производимых над ними операций в класс, данные которого не должны изменятся вне его, доступ к ним осуществляется через методы класса. Т.о. программа, написанная на объектном языке, представляет совокупность объектов, каждый из которых принадлежит к определенному абстрактному типу данных (классу) и имеет интерфейс в виде набора методов для взаимодействия друг с другом (посылки сообщений).

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

    Парадигмы программирования (по Страуструпу):


    • Процедурное: решить, какие требуются процедуры; использовать наилучшие доступные алгоритмы.

    • Модульное: решить, какие требуются модули; разбить программу так, чтобы скрыть данные в модулях.

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

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

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

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

    Основные стили и используемые абстракции:


    • Процедурно-ориентированный (алгоритмы);

    • Объектно-ориентированный (классы и объекты);

    • Логико-ориентированный (цели, исчисления предикатов);

    • Ориентированный на правила («если — то»);

    • Ориентированный на ограничения (инвариантные соглашения).

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


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

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

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

    • иерархия.

    Дополнительные принципы:


    • типизация;

    • параллелизм;

    • сохраняемость.

    1. Основные принципы объектного подхода. Абстрагирование.

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

    сущности: объект представляет собой полезную модель некой сущности в предметной области;


  • поведения: объект состоит из обобщенного множества операций;

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

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


    1. Основные принципы объектного подхода. Инкапсуляция.

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

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

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


    1. Основные принципы объектного подхода. Модульность.

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

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

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

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

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

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


    1. Основные принципы объектного подхода. Иерархия.

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


    • иерархия классов (отношения “is a”) – отношение вида родитель-потомок, общее-частное. Реализуется с помощью наследования типов (генерализации).

    • иерархия объектов (отношения “part of”) – отношения вида целое-часть. Реализуется агрегацией и композицией.

      отношения между классами и компонентами (“is like”) позволяет порождать целые семейства подобных типов.

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


      1. Основные принципы объектного подхода. Типизация.

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

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

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

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

      Статическая типизация (статическое/раннее связывание) – тип адресуемого объекта, как и тип результата любого выражения, определяется на стадии компиляции.
      При динамическом (позднем) связывании тип результата выражения или объекта, на который ссылается указатель или переменная ссылочного типа определяется во время исполнения программы. При этом указатель/ссылка могут ссылаться на объект любого типа, совместимого по иерархии наследования с типом указателя/ссылки. Данное св-во наз-ся полиморфизмом: одно и то же имя может означать объекты разных типов, но имея общего предка, все они имеют и общее подмножество операций (контракт), которые можно над ними выполнить. Мономорфизм характерен для языков с сильной типизацией и статическим связыванием.
      Т.о. определяется виртуальный полиморфизм – результат взаимодействия наследования и динамического связывания; также различают параметрический полиморфизм – св-во языков, позволяющее объявлять и использовать ф-ции с одинаковыми именами, но отличающиеся типами и/или количеством своих аргументов.
      Процесс выбора конкретной функции (метода) во время исполнения, в зависимости от типа объекта или аргументов, наз-ся разрешением полиморфизма.
      С++ и Java явл-ся сильно типизированными языками с динамическим связыванием.


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

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

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

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

      В Java параллелизм обеспечивается средствами языка: volatile переменные, synchronized блоки/методы, класс Tread, интерфейс Runnable, средства синхр. класса Object – wait(), notify(), notifyAll().


      1. Основные принципы объектного подхода. Сохраняемость.

      Любой объект/данные в программной системе существуют во времени и пространстве (память ЭВМ). Спектр их сохраняемости разный:


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

      • локальные переменные/объекты в блоках, а также при вызове процедур и функций (как правило, данные на стеке);

      • статические переменные классов, глобальные переменные и объекты в динамической памяти;

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

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

      • данные, переживающие программу.

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

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

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


      1. Объект с точки зрения ООП. Состояние.

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


      1. Объект с точки зрения ООП. Поведение.

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

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


        конструкторы (методы создания объекта и/или его инициализации);

      деструкторы (методы, освобождающие состояние и ресурсы объекта и/или разруш. сам объект);


    • селекторы (методы, считывающие, но не меняющие состояние объекта);

    • модификаторы (методы, способные изменить состояние объекта);

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

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


    1. Объект с точки зрения ООП. Идентичность и жизненный цикл объектов.

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

    В С++ решение об идентичности можно принимать на основе адреса размещения объекта. В Java можно воспользоваться значением переменной ссылочного типа, которая ссылается на объект, или использовать метода equals() класса Object.

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

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

    Объект в программе на С++ может быть создан, как:

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


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

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

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

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

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

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

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

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

      1. Объект с точки зрения ООП. Взаимоотношения между объектами.

      Все отношения между объектами могут быть сведены к двум типам:


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

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

      Рабочая программа дисциплины (модуля) «Объектно-ориентированное программирование»

      Название Рабочая программа дисциплины (модуля) «Объектно-ориентированное программирование»
      страница 8/8
      Дата публикации 07.02.2015
      Размер 448.1 Kb.
      Тип Рабочая программа

      top-bal.ru > Информатика > Рабочая программа


      1. ОЦЕНОЧНЫЕ СРЕДСТВА ДЛЯ ТЕКУЩЕГО КОНТРОЛЯ УСПЕВАЕМОСТИ, ПРОМЕЖУТОЧНОЙ АТТЕСТАЦИИ ПО ИТОГАМ ОСВОЕНИЯ ДИСЦИПЛИНЫ И УЧЕБНО-МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ САМОСТОЯТЕЛЬНОЙ РАБОТЫ СТУДЕНТОВ

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

      Промежуточная аттестация студентов проводится в виде рейтинг – контроля, который проводится в два этап (устный и письменный).

      Объектный подход.
      ^ ПЕРЕЧЕНЬ ВОПРОСОВ К РЕЙТИНГ – КЛНТРОЛЮ №1


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

      2. Основные принципы объектного подхода. Абстрагирование.

      3. Основные принципы объектного подхода. Инкапсуляция.

      4. Основные принципы объектного подхода. Модульность.

      5. Основные принципы объектного подхода. Иерархия.

      6. Основные принципы объектного подхода. Типизация.

      7. Основные принципы объектного подхода. Параллелизм. Сохраняемость.

      8. Объект с точки зрения ООП. Состояние. Поведение.

      9. Объект с точки зрения ООП. Идентичность и жизненный цикл объектов.

      10. Объект с точки зрения ООП. Взаимоотношения между объектами.

      11. Классы. Природа классов. Метамодель. Инстанцирование.

      12. Классы. Структура класса. Абстрактные классы и интерфейсы.

      13. Классы. Отношения между классами. Ассоциация и агрегация.

      14. Классы. Иерархии классов. Зависимость.

      ^ ПЕРЕЧЕНЬ ВОПРОСОВ К РЕЙТИНГ – КЛНТРОЛЮ №2


      1. Модель памяти и структура программы. Классы памяти. Ссылки.

      2. Средства абстракции C++. Структура класса. Статические члены.

      3. Средства инкапсуляции C++. Инкапсуляция и наследование. Друзья.

      4. Модульность, раздельная компиляция, пространства имен, using директива.

      5. Представление иерархических отношений. Наследование.

      6. Представление иерархических отношений. Агрегация. Зависимость по времени жизни.

      7. Правила преобразования типов в C++. Параметрический и виртуальный полиморфизм.

      8. C++: средства реализации состояния объектов; реализация поведения.

      9. Перегрузка операторов.

      10. Жизненный цикл объекта. Инициализация массивов. Конструкторы и деструкторы. Порядок вызова конструкторов и деструкторов при наследовании.

      11. Варианты реализации отношения клиент-сервер. Объекты при передаче параметров и возврате из методов.

      12. Исключения в C++. Обработка исключений.

      13. Шаблоны классов и шаблоны функций. Специализация.

      14. Основы STL. Структура и назначение. Контейнеры.

      ^ ПЕРЕЧЕНЬ ВОПРОСОВ К РЕЙТИНГ – КЛНТРОЛЮ №3,№4


      1. Виртуальная машина. Структура программ. Типы переменных в Java. Принципы работы ClassLoader.

      2. Средства абстракции Java. Структура класса. Статические члены.

      3. Внутренние и вложенные классы. Статический и динамический контекст. Локальные и анонимные классы.

      4. Средства инкапсуляции Java. Поддержка модульности. Пакеты.

      5. Представление иерархических отношений. Наследование. Интерфейсы и абстрактные классы.

      6. Агрегация и зависимость от времени жизни. Реализация отношений клиент-сервер. Стандартные контейнеры.

      7. Типизация. Правила преобразования типов. instanceof и ClassCastException. Класс Class.

      8. Средства поддержки параллелизма. Активные и пассивные объекты. Класс Object.

      9. Использование Thread и Runnable. Пул потоков, назначение и принципы реализации.

      10. Исключения. Обработка исключительных ситуаций.

      11. Сохраняемость. Serializable и Externalizable. Программирование распределенных приложений.

      12. Модель безопасности Java. Policy, Permissions, AccessController.

      13. Графическая подсистема. Основы AWT, Applet, Swing components. Событийная модель.

      14. Средства поддержки Java машины. System, Runtime, сборка мусора.
      Читайте также:  Сколько стоит операция по коррекции зрения в мнтк

      ^ ПЕРЕЧЕНЬ ВОПРОСОВ ДЛЯ СДАЧИ ЗАЧЕТА/ЭКЗАМЕНА

      ПО ДИСЦИПЛИНЕ «ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ»:


        1. Абстракция – учимся думать и программировать абстрактно.

        2. Эффективное применение инкапсуляции в объектно-ориентированном программировании.

        3. Открытый интерфейс и эффективное сокрытие реализации.

        4. Использование концепции наследования при объектно-ориентированном программировании.

        5. Применение простого наследования.

        6. Использование абстрактных классов при наследовании.

        7. Адаптация объектно-ориентированных программ к изменяющимся требованиям средствами полиморфизма.

        8. Применение полиморфизма включения.

        9. Переопределение – важный тип полиморфизма.

        10. Перегрузка – частный случай полиморфизма.

        11. Необходимое условие эффективного полиморфизма – эффективное применение инкапсуляции и наследования.

        12. Построение UML-диаграмм классов программных продуктов, разрабатываемых в домашних и аудиторных работах.

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

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

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

        16. Практическое применение шаблонов при выполнении объектно-ориентированного программирования.

        17. Программирование пользовательского интерфейса на основе объектно-ориентированного подхода в задачах, разрабатываемых в домашних и аудиторных работах.

        18. Реализация форм тестирования программного кода задач, разрабатываемых в домашних и аудиторных работах.

      1. ^ УЧЕБНО-МЕТОДИЧЕСКОЕ И ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ ДИСЦИПЛИНЫ (МОДУЛЯ)

      п/п


      Наименование (автор, название)
      Год издания
      Наличие в библиотеке

      (кол-во экз.)


      I.Основная литература:
      Ашарина И.В. Объектно-ориентированное программирование в С++ : учебное пособие/ Ашарина И.В- М.: Горячая линия — Телеком
      2012
      ЭБС «IPRbooks»,

        Казанский А.А. Объектно-ориентированное программирование на языке Microsoft Visual С# в среде разработки Microsoft Visual Studio 2008 и .NET Framework. 4.3 : учебное пособие и практикум/ Казанский А.А.—М.: Московский государственный строительный университет
        2011
        ЭБС «IPRbooks»,
        II. Дополнительная литература:
          Бабушкина И.А. Практикум по объектно-ориентированному программированию/ Бабушкина И.А., Окулов С.М.—М.: БИНОМ. Лаборатория знаний
          2012
          Мацяшек, Лешек А. Анализ и проектирование информационных систем с помощью UML. Пер. с англ. – М.: ООО «И. Д. Вильямс»
          Троелсен Э. Язык программирования C# 2010 и платформа .NET 4.0. Пер. с англ. – С.-Пб: ООО «И. Д. Вильямс»
          Грэди Буч, Майкл У. Энгл, Роберт А. Максимчук. Объектно-ориентированный анализ и проектирование с примерами приложений. Пер. с англ. – М.: ООО «И. Д. Вильямс».
          2008
          Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. —Харьков: Фолио, Ростов н/Д: Феникс,
          1997
          Мухортов В.В., Рылов В.Ю. Объектно-ориентированное программирование,

          анализ и дизайн. Методическое пособие. ИМ СО РАН


          2002
          Г. Буч Объектно ориентированный анализ и проектирование с примерами

          приложений на С++, 2-е изд./Пер. с англ. — СПб.; М.: «Невский Диалект» —

          «Издательство БИНОМ»


          1999
          Скотт Мейерс, Эффективное использование C++. 50 рекомендаций по

          улучшению ваших программ и проектов, Пер. с англ. — ДМК


          2006
          Скотт Мейерс, Эффективное использование С++. 35 новых способов

          улучшить стиль программирования, Пер. с англ. — ДМК


          2006
          Интернет-ресурсы
          1.
          Забудский Е.И. ^ Учебно-методический комплекс дисциплины «Объектно-ориентиро­ван­ное программирование». М.: Кафедра АПС ГУ-ВШЭ. Кафедра КиМ РУДН, 2005 … н/в. Internet-ресурс: – http://new.hse.ru/C7/C17/zabudskiyei/default.aspx ;– http://zei.narod.ru/New_Web_Page_ZEI.pdf
          Новые книги раздела C#http://books.dore.ru/bs/f6sid16.html .

          8. МАТЕРИАЛЬНО-ТЕХНИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ФОРМ УЧЕБНОЙ РАБОТЫ ПО ДИСЦИПЛИНЕ (МОДУЛЮ): «Объектно-ориентированное программирование»


          1. Практические занятия

            1. Компьютерный класс.

            2. Комплект электронных презентаций/слайдов.

            3. Аудитория, оснащенная презентационной техникой (проектор, экран, компьютер/ноутбук, телевизор, DVD).

            4. Лингафонный кабинет (1, 2 корпус)

            5. Пакеты ПО общего назначения (текстовые редакторы, графические редакторы для лингафонного кабинета).

            6. Специализированные ПО для лингафонного кабинета.

          Учебно-методический комплекс по дисциплине «Объектно-ориентированное программирование» составлен в соответствии с требованиями Федерального Государственного образовательного стандарта ВПО с учетом рекомендаций ПрООП ВПО по направлению подготовки 230700.62 Прикладная информатика

          Автор(ы): Анисимов Д.А.
          Рецензент(ы): Хакулов В.А.

          Заведующий кафедрой: Анисимов Д.А.
          Рабочая программа рассмотрена на заседании учебно-методического совета института протокол № 9 от «27» мая 2014 г. и признан соответствующим требованиям Федерального Государственного образовательного стандарта и учебного плана по направлению 230700.62 Прикладная информатика

          Председатель УМС ______________ Хараева Ф.Ф.
          Программа согласована с УМУ института ______________ Шаваева Ф. Я.

          Идентичность объектов

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

          [x]. (I1) Два различных объекта могут иметь абсолютно одинаковые поля.

          [x]. (I2) Напротив, поля данного объекта могут изменяться в процессе выполнения системы, но это не влияет на идентификацию объекта.

          Эти наблюдения свидетельствуют о неоднозначности высказывания «a обозначает тот же объект, что и b«. Можно подразумевать различные объекты с одинаковыми данными (I1) или состояния одного и того же объекта до и после изменения значений полей (I2). Мы будем использовать второе толкование и считать, что значения полей заданного объекта могут изменяться в процессе выполнения, а он остается «тем же самым объектом». В случае (I1) будем говорить о равных (но различных) объектах, точное определение понятия равенства будет дано позже.

          В соответствии с определением I2 можно сказать, что поля объекта могут изменяться и это не будет ошибкой. Термин «поле» обозначает одно из значений, составляющих объект, а не соответствующий идентификатор поля — имя одного из атрибутов порождающего класса.

          Каждому атрибуту класса соответствует поле объекта (1832 для атрибута date класса BOOK3 на рис.8.6 ). Атрибуты неизменны в процессе выполнения, как неизменно и деление объекта на поля, а значения полей меняться могут. Любой экземпляр BOOK3 будет всегда содержать четыре поля, соответствующие атрибутам title, date, page_count, author. Значения этих полей могут меняться у каждого экземпляра.

          Изучение того, как сделать объекты сохранямыми (persistent), заставит нас продолжить изучение свойств идентичности объектов. (См. «Идентичность объектов», лекция 13 курса «Основы объектно-ориентированного проектирования»)

          Объект с точки зрения ооп идентичность и жизненный цикл объектов

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

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

          Книга: Основы объектно-ориентированного программирования

          Идентичность объектов

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

          [x]. (I1) Два различных объекта могут иметь абсолютно одинаковые поля.

          [x]. (I2) Напротив, поля данного объекта могут изменяться в процессе выполнения системы, но это не влияет на идентификацию объекта.

          Эти наблюдения свидетельствуют о неоднозначности высказывания «a обозначает тот же объект, что и b«. Можно подразумевать различные объекты с одинаковыми данными (I1) или состояния одного и того же объекта до и после изменения значений полей (I2). Мы будем использовать второе толкование и считать, что значения полей заданного объекта могут изменяться в процессе выполнения, а он остается «тем же самым объектом». В случае (I1) будем говорить о равных (но различных) объектах, точное определение понятия равенства будет дано позже.

          В соответствии с определением I2 можно сказать, что поля объекта могут изменяться и это не будет ошибкой. Термин «поле» обозначает одно из значений, составляющих объект, а не соответствующий идентификатор поля — имя одного из атрибутов порождающего класса.

          Каждому атрибуту класса соответствует поле объекта (1832 для атрибута date класса BOOK3 на рис.8.6 ). Атрибуты неизменны в процессе выполнения, как неизменно и деление объекта на поля, а значения полей меняться могут. Любой экземпляр BOOK3 будет всегда содержать четыре поля, соответствующие атрибутам title, date, page_count, author. Значения этих полей могут меняться у каждого экземпляра.

          Изучение того, как сделать объекты сохранямыми (persistent), заставит нас продолжить изучение свойств идентичности объектов. (См. «Идентичность объектов», лекция 13 курса «Основы объектно-ориентированного проектирования»)

          Источники:
          • http://reforef.ru/outozuc/3+%D1%81%D0%B5%D0%BC%D0%B5%D1%81%D1%82%D1%80+2011+I+%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F+%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE%D0%B3%D0%BE+%D0%B8+%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE+%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D0%B0c/main.html
          • http://top-bal.ru/informatika/93650/index.html?page=8
          • http://it.wikireading.ru/52360
          • http://wm-help.net/lib/b/book/1454380247/271