Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №2 2015.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
221.17 Кб
Скачать

Отношения между классами

Классы могут взаимодействовать друг с другом, как на этапе проектирования, так и на этапе выполнения программы. Существуют следующие, основные, отношения между классами:

  • Наследование. Позволяет описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса наследуются новым классом. Например: у класса «Автомобиль» есть свойство «Количество колёс». Если класс «Автобус» является наследником класса «Автомобиль», то он также наследует и свойство «Количество колёс»;

Опредедение наследования класса выглядит следующим образом:

class Child : Parent

{

}

В данном примере, класс «Child» объявляется как наследник класса «Parent»;

Различают следующие виды наследования:

    • Простое наследование. Пример данного наследования показан выше. При простом наследовании дочерний класс наследуется от одного родительского;

    • Множественное наследование. При множественном наследовании дочерний класс может наследовать свойства и функционал нескольких родительских классов. Возможность реализации данного наследования реализовано в языке C++;

  • Ассоциация. Объекты классов вступают во взаимодействие между собой. Т.е. методы одного класса могут создавать и использовать экземпляры (объекты) другого класса;

Пример ассоциации выглядит следующим образом:

Class Client

{

string _name = “Иванов Иван Иванович”;

float _rest = 0.0f;

void LoadRest()

{

Account acc = new Account();

_rest = acc.LoadRestForClient(_name);

}

}

В данном примере в методе «LoadRest» класса «Client» используется класс «Account» для получения информации по остатке на счёте клиента.

  • Агрегация. Объекты одного класса входят в объекты другого. В данном случае, подразумевается, что данными одного класса являются экземпляры других классов. Например: Есть класс «Двигатель», который содержит данные и методы, характеризующие двигатели. У класс «Автомобиль» есть аналогичное свойство, которое принимает значение одного из экземпляров класса «Двигатель»;

Пример ассоциации выглядит следующим образом:

Class Engine

{

}

Class Car

{

Engine _engine;

}

В данном примере класс «Car» содержит поле с типом «Engine», что является агрегацией.

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

Области доступа

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

  • private (закрытая составляющая класса) – обращения допускаются только из методов класса, в котором определена данная составляющая. Например, если в классе «Автомобиль» есть закрытая составляющая «Серийный номер», то прочитать её значение можно только в методах этого же класса. Ни дочерние классы, ни те, которые будут создавать экземпляр «Автомобиль» доступа к данному свойству получить не могут;

Закрытые составляющие класса объявляются следующим образом:

class Parent

{

private int _value;

private int Calculate(int parAmount)

{

reutrn _value + parAmount;

}

}

В данном поле и метод класса объявлены как закрытые;

  • protected (защищённая, внутренняя составляющая иерархии классов) – обращения допускаются из методов класса, а также из методов всех дочерних классов. Например, если в классе «Автомобиль» есть закрытая составляющая «Серийный номер», то прочитать её значение можно только в методах этого класса и в методах любых дочерних классов. Если другие классы будут создавать экземпляр класса «Автомобиль», то они не смогут получить доступ к данному свойству;

Защищённые составляющие класса объявляются следующим образом:

class Parent

{

protected int _value;

protected int Calculate(int parAmount)

{

return _value + parAmount;

}

}

В данном поле и метод класса объявлены как закрытые;

  • public (открытый член класса) – обращения к составляющей класса возможны из любого кода.

Открытые составляющие класса объявляются следующим образом:

class Parent

{

public int _value;

public int Calculate(int parAmount)

{

return _value + parAmount;

}

}

В данном поле и метод класса объявлены как закрытые;

Если область доступа не указывается явно, то она устанавливается в соответствии с настройками среды разработки (область доступа по умолчанию).

Помимо области доступа составляющих класса, у самого класса также есть область доступа:

  • internal – При данной области доступа, к классу можно обращаться только внутри библиотеки/программы, где он объявлен. Т.е. если класс объявлен в одной библиотеке с доступом internal, то его нельзя будет использовать в других библиотеках, приложениях;

  • public – При данной области доступа, к классу можно обращаться из любых модулей;

Пример объявления области доступа класса:

public class Parent

{

}