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

3.2 Разработка классов

В данной системе созданы 6 классов, которые взаимодействуют между собой: CelestialBody, Planet, Clot, Gas, Star, Sputnick.

3.2.1 Реализация инкапсуляции

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

Рисунок 3.1 – Заголовочный файл класса Planet

Рисунок 3.2 – Заголовочный файл класса Star

На рисунке 3.1 изображен заголовочный файл класс Planet. Ярким примером инкапсуляции служит то, что его члены расположены в закрытой (private) части класса, таким образом нет прямого доступа к данным из внешнего мира. Методы GetRotate(), GetRotation() и GetDistance() позволяют получать доступ к данным извне.

На рисунке 3.2 изображен заголовочный файл класса Star. У класса 2 члена класса – поля Temperature и Radiate, которые размещены в private части класса. Также есть функции-члены класса, которые расположены в public части класса –GetTemperature и GetRadiate позволяющие получать доступ к членам класса извне.

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

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

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

3.2.2 Реализация наследования

Наследование – это процесс, по средствам которого один объект может наследовать свойства другого и добавить к ним черты, характерные только для него.

Рисунок 3.3– Заголовочный файл класса CelestialBody

В данной объектно-ориентированной системе реализовано два вида наследования: простое и множественное.

При простом наследовании у класса всего один предок. Примером одиночного наследования является public-наследование класса Planet от класса CelestialBody. На рисунке 3.1 изображен заголовочный файл производного класса Planet, а на рисунке 3.3 изображен базовый класс CelestialBody. Класс Planet наследует от класса CelestialBody все поля (Mass, Radius) и методы . Это очень удобно для повторного использования кода. При вызове конструктора класса Planet вызывается конструктор базового класса CelestialBody, при вызове деструктора также вызывается деструктор базового класса. Также класс Planet имеет свои собственные поля и методы, кроме тех, которые наследуются от класса CelestialBody.

Рисунок 3.4 – Заголовочный файл класса Clot

Рисунок 3.5– Заголовочный файл класса Gas

Множественное наследование предусматривает наличие у подкласса нескольких базовых классов. Примером множественного наследования является класс Star, который наследуется сразу от двух базовых классов Gas. Заголовочные файлы классов изображены на рисунке 3.2 – класса Star, рисунке 3.4 – класса Clot и рисунке 3.5. – класса Gas.

Иерархия классов была выбрана, потому что она является наиболее удобной в реализации данной объектно-ориентированной системы.

Верхней ступеней иерархии является класс CelestialBody – от него уже наследуется класс Planet. От классов Clot и Gas наследуется класс Star.