Способ распределения памяти

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

Достоинства:

- возможен прямой доступ к элементу данных;

- простота реализации;

- меньшие дополнительные затраты памяти.

Недостатки:

- невозможность или логическая сложность динамического изменения размера структуры данных;

- временная сложность операций, связанных с изменением набора элементов структуры данных (вставка или удаление);

- логическая сложность представления и реализации нелинейных структур данных.

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

Достоинства:

- отсутствие ограничений на размер структуры данных и простота его изменения;

- простота представления динамически меняющихся структур данных.

- простота представления нелинейных структур данных.

Недостатки:

- доступ к элементам строго последовательный (приводит к неэффективности по времени некоторых алгоритмов);

- дополнительные затраты памяти на указатели;

- большая сложность реализации и отладки программ.

Элемент структуры данных в общем виде состоит из двух полей: информационного поля (поля данных) и поля указателей.

Способ выделения памяти (для структур данных в последовательной памяти).

Статическое выделение – при заранее предсказуемом размере данных и «времени жизни», сравнимом с временем выполнения программы (подпрограммы для локальных данных);

Динамическое выделение – при незначительном «времени жизни» или при значительном и непредсказуемом количестве операций включения/исключения элементов данных.

Проектирование программного обеспечения при объектном подходе.

Объектный подход

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

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

Логико-ориентированный имеет в виду цели, выражаемые на языке логических предикатов (язык Prolog).

Наконец, объектно-ориентированное программирование абстрагирует классы и объекты (язык С++). В чем же состоит его суть?

Известный теоретик Грейди Буч так определяет этот подход:

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

В "строго” объектно-ориентированных языках объектами являются решительно все элементы программы, в том числе она сама. Таковы программы на языке Java. Язык C++ сохраняет все возможности процедурного языка С. В C++ можно создать, например, совершенно отдельно стоящую глобальную переменную, да и главная функция main() – совершенно "внеклассовая”. Такая универсальность C++ может быть как преимуществом, так и недостатком. У программиста, впервые применяющего объектный подход в С++, всегда имеется тенденция мыслить старыми, процедурными категориями.

Итак, центральным элементом абстракции объектно-ориентированной методологии является объект.

Объект

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

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

Состояние объекта

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

Таким образом, состояние программного объекта полностью определяется некоторым набором (структурой) характеристик и их текущими значениями. Эти характеристики называют полями или (в C++) элементами данных объекта. Но не все характеристики состояния объекта должны быть непосредственно видимы извне. Классический пример, который неизменно приводят американские авторы, – автомобиль. С точки зрения водителя у него есть приборный щиток, отражающий скорость, обороты, температуру двигателя и т. д., и органы управления. Но в автомобиле масса деталей, спрятанных под капотом, состояние которых не исчерпывается показаниями приборов и эти детали водителю не интересны, пока автомобиль «на ходу».

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

Поведение объекта

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: