На этом шаге мы рассмотрим сохраняемость.
Любой программный объект существует в памяти и живет во времени. Существуют объекты, которые присутствуют лишь во время вычисления выражений, а есть и такие, которые существуют независимо от программы. Весь спектр сохраняемых объектов можно поделить на следующие группы:
Традиционно первыми тремя группами занимаются языки программирования, а последними - базы данных.
Унификация принципов параллелизма для объектов позволила создать параллельные языки программирования. Аналогично, введение сохраняемости как составной части объектного подхода привело к созданию объектно-ориентированных баз данных, в которых обращение к базе данных и другие операции выполняются в терминах объектов.
Языки программирования, как правило, не поддерживают понятия сохраняемости (за исключением языка Smalltalk). С другой стороны, сохранение объектов в неструктурированных файлах - подход, пригодный только для небольших программ. Чаще всего, вместе с данными имеет смысл сохранять и классы, чтобы можно было правильно интерпретировать эти данные.
До сих пор мы говорили о сохранении объектов во времени. Для распределенных систем желательно обеспечивать возможность перенесения объектов в пространстве, чтобы их можно было переносить с одной машины на другую и даже, при необходимости, изменять форму представления объекта в памяти.
В заключение определим сохраняемость следующим образом:
Мы закончили рассмотрение принципов, с учетом которых строится объектная модель. Эти принципы применяются при создании приложения с использованием конструкций, предназначенных для реализации:
Мы не будем останавливаться на описании конкретных конструкций, реализующих перечисленные свойства, а поясним понятие полиморфизма.
Объект определяется не только данными, но и "поведением", то есть при создании объекта определяется функция (или несколько функций), описывающая реакцию объекта на то или иное событие.
В ООП, где механизм наследования реализуется при помощи специальных синтаксических конструкций, классы-потомки (дочерние классы) автоматически наследуют все свойства объекта, в том числе и функции, описывающие его поведение. При этом учитывается тот факт, что реализация одного и того же поведения объектов разных классов может быть различной. Например, если для геометрических фигур "круг" и "квадрат" определена операция "перемещение", то это не значит, что эта операция осуществляется одним и тем же кодом. Наоборот, реализующая перемещение квадрата функция может не иметь ничего общего с функцией, перемещающей круг. Однако ООП позволяет регистрировать функцию, реализующую конкретное поведение объекта, под именем, общим для объектов этого и старших классов.
Присвоив имя какому-то поведенческому свойству объекта, конкретный код, реализующий это поведение, определяется на иерархическом уровне каждого конкретного объекта. Этот механизм называется полиморфизмом.
Более подробную информацию о инкапсуляции, наследовании и полиморфизме можно получить здесь.
На последнем шаге мы поговорим о структуре коллектива разработчиков.