Главная » Java, Структуры данных и алгоритмы » Принципы объектно-ориентированного программирования

0

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

•            абстракция,

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

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

Абстракция

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

графический пользовательский интерфейс (GUI — Graphical User Interface) обычного текстового редактора содержит абстракцию меню «редактирование», определяющую несколько операций обработки текста, в том числе размещение в буфер и вставка из буфера частей текста и графических объектов. Концепции удаления и вставки вполне просты и понятны и не требуют детального описания способа, с помощью которого GUI представляет и отображает текст и графические объекты. Операция размещения в буфер удаляет выделенный участок текста и заносит его в буфер обмена. А операция вставки помещает содержимое этого буфера в определенное место текста. Таким образом, абстрактное описание возможностей меню «редактирование», а также применяемых в нем операций удаления и вставки приведено достаточно четко и понятно, но в то же время вполне просто — «абстрагировано» от излишних деталей. Благодаря подобному сочетанию четкости и простоты обеспечивается устойчивость, так как становится возможным применять понятные и верные функции программ.

Рис. 2.2.

Использование данной парадигмы в отношении проектирования структур данных привело к возникновению абстрактных типов данных (Abstract Data Type — ADT) (АТД). АТД является математической моделью структуры данных, в которой указан тип содержащихся данных, выполняемые над ними операции и тип параметров, используемых в этих операциях. АТД описывает, что выполняет каждая операция, а не то. как она это выполняет. В Java АТД может быть интерфейсом, в котором просто перечислены заявленные методы (интерфейсы Java рассматриваются подробнее в разделе 2.4).

Инкапсуляция

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

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

Модульность

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

Полученная таким образом модульная структура обеспечивает возможность многократного применения программного обеспечения. Если отдельные модули программы созданы с помощью абстрактного представления и предназначены для решения общих задач, то они могут использоваться и в тех случаях, когда подобные задачи возникают в другом контексте. Например, структурное описание стены — несколько деревянных брусков 5×10 см, размещаемых на определенном расстоянии, и так далее — опытный архитектор может использовать для разных домов. При повторении такого определения Для некоторых частей может потребоваться новое описание, например, стена в офисном здании подобна стене жилого дома, однако система электропитания может быть другой. Итак, архитектор организует разные структурные компоненты, например, электропитания, в виде иерархической структуры, при которой схожие абстрактные описания группируются по уровням, начиная с базовых и заканчивая общими описаниями на самой вершине иерархии. Подобные иерархические описаний зачастую используются при-отображении структуры организации, где каждая восходящая связь обозначает «является», как, например, «дача — это дом, это здание» (см. рис. 2.3). Подобные иерархии могут быть использованы и при проектировании программного обеспечения, так как в них наиболее общие функциональные свойства группируются на самых верхних уровнях иерархии, а частные методы рассматриваются как расширения общего.

Источник: Гудрич М.Т. Г93 Структуры данных и алгоритмы в Java / М.Т. Гудрич, Р. Тамассия; Пер. с англ. A.M. Чернухо. — Мн.: Новое знание, 2003. — 671 е.: ил.

По теме:

  • Комментарии