Материал: 4970

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

41

Примечание: функции-элементы и методы класса имеют доступ ко всем эле- ментам-данным класса, следовательно, если сами функции-элементы и методы класса будут открыты, то и доступ к закрытым данным класса может быть получен посредством таких функций.

Для реализации схем доступа к элементом класса в интерфейсе класса применяются соответствующие атрибуты доступа: private, public, protected. Эти атрибуты следует ставить перед элементами (или группами элементов) в классе (в языке C++). При этом: private – указывает на закрытость элемента; public – указывает на открытость элемента; protected – указывает на доступность элемента в производных классах.

Смысл атрибутов доступа следующий:

- private – член класса с атрибутом private может использоваться только методами собственного класса и функциями-"друзьями" этого же класса; - protected – то же, что и private, но дополнительно член класса может

использоваться методами и функциями, а также “друзьями" производного класса, для которого данный класс является базовым;

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

Примечание: «друзьями» класса называются функции или другие классы; цель внесения в класс «дружественных» элементов – расширение видимости закрытых элементов класса для таких «друзей», при этом «дружественность» не наследуется; для выделения «друзей» применяется ключевое слово friend.

Принцип размещения описания интерфейса класса идентичен правилу описания интерфейса функций в языке Си. Приведём пример состава программного модуля в случае инкапсуляции некоторого класса:

1)начало программного модуля;

2)объявление класса;

3)определение функций класса;

4)окончание программного модуля.

Разработанный подобным образом программный модуль при необходимости создания экземпляра инкапсулированного класса (т.е. объекта класса) может быть использован в другом модуле посредством директивы #include.

Если классы – это группы однородных объектов, то группы классов – есть совокупность классов, объединённых по принципу общего использования элементов, принадлежащих определённым классам в группе (своеобразная «общественная собственность элементов» в группе классов). В случае использования

42

несколькими классами содержимого одного класса из группы говорят о «наследовании» содержимого такого класса (т.е. его данных и методов) другими классами группы. Класс, который предоставляет свои элементы для общего использования в группе, называется «базовым»; класс, который использует чужые элементы, называется «производным». Основная цель наследования – перенести базовые значения или характеристики в вершину иерархии классов и сделать эти характеристики достоянием всех последующих классов и экземпляров классов в иерархии. Этот принцип позволяет присоединять новую реализацию функций, инкапсулированных в базовом классе, на этапе дальнейшей разработки программного кода. Таким образом, каждая стадия разработки проекта на очередном итерационном шаге и представленная в виде артефакта – программного кода, может быть откомпилирована, отлажена и скомпонована в рабочий исполняемый программный комплекс. При этом добавление новых функциональных возможностей, спроектированных и разработанных на новой стадии проекта, осуществляется без перекомпиляции ранее отлаженного кода путём наращивания новых возможностей на имеющееся базовое ядро проектируемой информационной системы.

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

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

В ООП (объектно-ориентированная парадигма) имеется два основных вида наследования одиночное и множественное. Если класс наследует свойства или функции более чем у одного базового класса, то говорят о множественном наследовании. В противном случае имеет место одиночное наследование. Пример разновидностей одиночного наследования приведён на рисунке 9.

Пример разновидностей множественного и одиночного наследования приведён на рисунке 10.

//cl1 имя базового класса //atr1 атрибут наследования
//private, public, protected // скобки [ ] означают //«не обязательно».

 

43

 

 

а)

б)

в)

 

Базовый класс

Базовый класс

Базовый класс

А

В

С

 

Производный

Производный

Производный

Производный

 

 

 

класс АА

класс ВВ

класс А

класс В

 

 

 

 

Производный

Производный

Производный

 

класс ВВВ

класс АА

класс ВВ

Схемы наследования:

 

 

а) явное одиночное наследование;

 

 

б) неявное одиночное наследование;

 

 

в) неявное одиночное наследование;

 

 

Рисунок 9 – Примеры одиночного наследования в иерархии классов

Пример описания иерархии наследования на языке С++ (см. рисунок 9): class AA: public A{}; // одиночное наследование, схема а

class ВВ: public В{}; // одиночное наследование, схема б class ВBВ: public ВВ{}; // одиночное наследование, схема б class А: public С{}; // одиночное наследование, схема в.

Общая схема синтаксических элементов описания наследуемости в иерархии посредством языка С++:

class cl3: atr1 cl1[, atr2 cl2]{};

Атрибут наследования осуществляет управление доступом к элементам базового класса (наследуемым элементам) внутри производного класса и влияет на дальнейшее наследование таких элементов.

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

44

Таблица 1Схема разграничения и управления доступом при наследовании

Значение атрибута

Значение

атрибута

Доступ в производном классе к

наследования

доступа в

базовом

наследуемым элементам

 

классе

 

 

Private

private

 

доступа нет

 

protected

 

доступ есть

 

public

 

доступ есть

Protected

Private

 

доступа нет

 

protected

 

доступ есть

 

public

 

доступ есть

Public

Private

 

доступа нет

 

protected

 

доступ есть

 

public

 

доступ есть

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

Стимулом к изучению языка С++, как средства реализации объектноориентированной парадигмы, является возможность применения мощных библиотек классов MFC (Microsoft Foundation Classes) при осуществлении программных разработок в различных средах программирования (Visual Basic, ASP.NET, Microsoft Visual Studio и т.д.). Следует упомянуть также среду разработки (конфигуратор) модулей популярной системы 1С, в которой в качестве средства программирования применяется предметно-ориентированный язык, построенный на объектно-ориентированных принципах.

45

а)

 

Базовый класс

 

Базовый класс

 

 

А

 

В

 

 

 

 

 

 

 

 

Производный класс АВ

б)

 

 

 

Базовый

 

 

Базовый

 

 

 

 

 

класс А

 

 

класс В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Производный

 

 

Производный

 

 

 

 

 

класс АА

 

 

класс ВВ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Производный

 

 

 

 

 

 

 

класс АВС

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в)

 

 

 

Базовый

 

 

 

 

 

 

 

 

 

класс А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Производный

 

 

 

Производный

 

 

 

 

 

класс АА

 

 

класс ВВ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Производный класс АВС

Схемы наследования:

а) явное множественное наследование; б) неявное одиночное и множественное наследование;

в) неявное одиночное и множественное наследование.

Рисунок 10 – Примеры множественного и одиночного наследования в иерархии классов

Источник: https://studfile.net/preview/16710630/