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

Как люди, мы постоянно сталкиваемся с бесчисленными фактами и впечатлениями, что мы должны понять. Для этого мы должны абстрагировать глубинную структуру далеко от поверхностных подробных данных и обнаружить фундаментальные отношения на работе. Абстракции показывают причины и следствия, представляют образцы и платформы, и разделяют то, что важно от того, что не. Объектная ориентация обеспечивает абстракцию данных, на которые Вы воздействуете; кроме того, это обеспечивает конкретную группировку между данными и операциями, которые можно выполнить с данными — в действительности предоставление поведения данных.

Данные и операции

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

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

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

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

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

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

Интерфейс и реализация

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

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

  Интерфейс рисунка 2-1 и реализация

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

Основные модули абстракции на языке C являются структурами и функциями. Оба, по-разному, скрывают элементы реализации:

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

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

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

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

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

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

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

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

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

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

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