Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
25
Добавлен:
02.05.2014
Размер:
40.45 Кб
Скачать

4

Здесь ответ на вопрос 7

Понятия ООП

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

ПЕРЕМЕННАЯ ТИП ПРОЦЕДУРА ВЫЗОВ ПРОЦЕДУРЫ

ОБЪЕКТ КЛАСС МЕТОД СООБЩЕНИЕ

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

Итак, ООП - это подход, в котором данные и поведение (методы обработки данных) жестко связаны в одной структуре. Каждая используемая в программе переменная имеет смысл только тогда, когда она может принимать какие-либо значения. Множество значений, которые может принимать переменная, является определяющей характеристикой переменной, и называется ее типом. Тип переменной, в свою очередь определяет набор операций, которые можно применять к переменной. (Эти положения полностью согласуются с основами структур данных).

В ООП базовыми единицами программ являются классы.

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

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

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

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

  • поддается хранению и обработке;

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

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

ООП базируется на 3 основных принципах: инкапсуляции, наследовании и полиморфизме.

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

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

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

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

Сокрытие данных обеспечивается ключевым словом class и ключевыми словами, связанными с правами доступа: public, private и protected. Класс - это способ инкапсуляции типов данных и связанных с ними функций. Разрешение частной (private) и общей (public) видимости для членов класса дает программисту возможность управлять тем, какие части структуры данных будут модифицируемы. Private части скрыты от кода пользователя, a public - доступны. Члены класса со статусом доступа protected занимают промежуточное положение: они доступны как внутри класса, так и во всех производных от него классах.

Определение класса схематически описывается в виде

Class Имя_класса

{ Раздел атрибутов;

Раздел операций; }

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

По умолчанию все члены класса считаются закрытыми и доступ к ним могут получить только функции-члены этого класса. Если необходимо изменить тип доступа к членам класса, перед ними следует указать один из спецификаторов доступа public, protected или private.

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

Соседние файлы в папке Ответы на госэкзамен