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

4.4.4. Сохраняемость

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

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

/////////////////////////////////////////////////////////////////////////////

// запись

void Lens::write(ostream& out) const

{

out<<m_r1<<" "<<m_r2<<" "<<m_d<<" "<<m_D<<" "<<m_n<<endl;

}

/////////////////////////////////////////////////////////////////////////////

// чтение

void Lens::read(istream& in)

{

in>>m_r1>>m_r2>>m_d>>m_D>>m_n;

CalculateParaxial();

}

/////////////////////////////////////////////////////////////////////////////

5.1. Типы наследования. Видимость членов классов

5.1.1. Наследование

Наследование - такое отношение между классами, когда один из них наследует (повторяет) структуру и поведение другого. Содержание (переменные-члены) и поведение (функции-члены) наследуются и становятся членами другого класса (наследника).

Например, оптические детали линза и зеркало могут быть реализованы, как обычные классы. Но они имеют несколько атрибутов, которые характеризуют их, как оптическую деталь вообще.

// класс Линза

class Lens

{

Position m_p; // положение линзы в пространстве

double m_D; // диаметр линзы

Media m_media; // оптическая среда линзы

double m_R1, m_R2; // радиусы кривизны линзы

double m_d; // толщина линзы (осевое расстояние)

};

// класс Зеркало

class Mirror

{

Position m_p; // положение зеркала в пространстве

double m_D; // диаметр зеркала

double m_R; // радиус кривизны зеркала

};

Имеет смысл воспользоваться принципом наследования и реализовать, базовый класс Detail.

Создание базовых классов и классов-наследников в языке С++ осуществляется следующим образом.

class Detail

{

protected:

Position m_p; // положение детали в пространстве

double m_D; // диаметр детали

};

// класс-наследник Линза

class Lens : public Detail

{

Media m_media; // оптическая среда линзы

double m_R1, m_R2; // радиусы кривизны линзы

double m_d; // толщина линзы (осевое расстояние)

};

// класс-наследник Зеркало

class Mirror : public Detail

{

double m_R; // радиус кривизны зеркала

};

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

Таким образом, и Lens и Mirror являются деталями, а параметры детали наследуются, и в результате также являются членами этих классов.