Добавлен: 09.01.2024
Просмотров: 245
Скачиваний: 15
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство образования и науки Российской Федерации федеральное государственное бюджетное образовательное учреждение высшего образования «Российский экономический университет имени Г.В. Плеханова»
Высшая школа кибернетики, математики и статистики
(факультет)
Кафедра прикладной информатики
(кафедра)
КУРСОВАЯ РАБОТА
по дисциплине «Основы объектно-ориентированное программирования»
на тему «Модель солнечной системы»
Москва - 2022 г.
Оглавление
Введение 2
Глава 1. Основные понятия. 4
1.1.Теоретические основы ООП 4
1.2.Обоснование выбора языка программирования, графической библиотеки и среды разработки 5
Глава 2. Реализация модели солнечной системы 9
2.1. Описание процесса программы 9
2.2. Краткое описание классов 10
2.3. Основные функции 11
Заключение 24
Список литературы 26
Введение
В современном мире вычислительные технологии занимают не последнее место в жизни человека. Мы живем в информационном обществе, в котором компьютеры присутствуют в нашей жизни, практически в каждой сфере нашей деятельности. Сложно представить нашу жизнь без компьютеров в медицине, строительстве, банковской сфере и многих других. Сфера распространения использования компьютера безгранична и этого нельзя отрицать. Вычислительные технологии позволяют нам моделировать различные сложные и не совсем процессы, явления, что позволяет человеку наглядно изучать те или иные области.
Целью данной работы - объектно-ориентированное программирование астрономической модели солнечной системы. В проекте будет представлена модель планет и их спутников, которые вращаются вокруг солнца и двигаются по своим орбитам с правильным соотношением скоростей.
Задачами данной работы являются:
-
Изучить соответствующий материал, литературу, понятия, которые имеют отношение к теме; -
Научиться работать с графическими библиотеками; -
Изучить основные подходы объектно-ориентированного программирования на C++; -
Спроектировать модель солнечной системы на основе классов.
Актуальность выбранной темы построения солнечной системы заключается в том, что в нашей жизни мы часто лучше понимаем многие вещи и моменты, если перед нами есть наглядное представление чего-то. Так и здесь, возможно эта модель сможет кому-то помочь наглядно разобраться как в целом устроена наша вселенная, из каких планет и спутников она состоит, как примерно работает. Возможно, после этой работы, кто-то еще больше заинтересуется в изучении вселенной, в которой мы живем.
Помимо этого, данная работа важна с точки зрения практики. С помощью нее можно попрактиковать все знания и навыки, которые были получены при изучении предмета «Основы объектно-ориентированного программирования». Кроме всего этого, это возможность узнать что-то новое и получить уникальный опыт.
Глава 1. Основные понятия.
-
Теоретические основы ООП
Как известно, программисты ранее и более 20 лет назад создавали реализовывали проекты с помощью непосредственного написания кода. Однако из-за всевозрастающей сложности проектов, стало понятно, что данный поход не совсем удачен. Поэтому были выработаны новые концепции программирования. К одной из этих концепций относится объектно-ориентированное программирование (ООП).
Объектно-ориентированное программирование:
-
Позволяет внедрять какие-либо изменения без надобности переписывать всю программу; -
Способствует структурировании информации; -
Способствует повышению управляемости программой; -
Способствует лучшему пониманию кода; -
Благодаря такому подходу, получается более лучше и быстрее масштабировать программу под разные задачи.
Для того чтобы, код был не такой сложный, то программу разбивают на объекты. Таким образом, главным звеном в ООП можно назвать объект.
Чтобы объединять объекты, которые обладают схожими свойствами, есть классы. По сути, класс описывает свойства объекта.
Помимо всего прочего, объект обладает набором атрибутов(переменных) и методов(функций).
Центральной идеей ООП является реализация понятия "абстракция". Ее смысл заключается в том, что сущностьпроизвольной сложности можно рассматривать и производить определенные действия над ней, как над единым целым, не вдаваясь в детали внутреннего построения и функционирования. Абстракция - наличие у объекта методов и свойств, к которым мы можем обратиться в других частях программы.
Во всех объектно-ориентированных языках программирования реализованы следующие основные постулаты ООП:
1)Инкапсуляция
2)Наследование
3)Полиморфизм
Инкапсуляция – механизм, который помогает связывать вместе код и данные, которыми он манипулирует, и одновременно защищать их от произвольного доступа со стороны другого кода.
Наследование – механизм, с помощью которого один объект способен приобретать свойства другого объекта (родительского, базового класса).
Полиморфизм – механизм, который позволяет использовать один и тот же интерфейс для общего класса действий.
-
Обоснование выбора языка программирования, графической библиотеки и среды разработки
Для реализации курсовой работы по теме, связанной с построением солнечной системы, была выбрана среда разработки Microsoft Visual Studio. Среда имеет следующие достоинства:
— обеспечение интуитивно расширяемой, понятной среды для языка, конструкторов;
— предоставление высокопроизводительных инструментальных средств для всех этапов жизненного цикла разработки -- от определения требований до последующего сопровождения продукта.
В качестве языка программирования для выполнения курсовой работы был выбран язык С++.
Данный язык программирования является высокоуровневым компилируемым языком программирования, который может подходить для реализации и создания различных приложений. Это не секрет, что сегодня это пожалуй один из самых популярных языков программирования.
Язык C++, унаследовав язык C (стандарт С90), был разработан его автором Бьерном Страуструпом с наиболее возможной реализацией теоретических концепций ООП. Вначале С++ просто служил дополнением к языку Си некоторыми возможностями ООП. Сам создатель назвал его как «Си с классами», в 1983 году переименованный в С++. Он стал полноценным языком программирования со своими особенностями и возможностями.
Основные преимущества данного языка:
1)Поддержка объектно-ориентированного программирования;
2) С++ используется практически везде;
3)Для С++ существует много компиляторов и библиотек;
4)Высокая скорость;
5) Есть возможность работы на низком уровне с адресами и памятью;
6)эффективность;
7)поддержка разных технологий и стилей программирования.
Разумеется, у С++ есть и недостатки. Например, сложности с управлением памятью, синтаксис, который зачастую провоцирует ошибки.
С++ очень быстрый и эффективный язык программирования. Данный язык будет продолжать быть популярным из-за своей производительности, эффективности. Помимо этого, этот язык программирования помогает понять лучше и глубже, как компьютеры работают и думаю. Также С++ дает возможность узнать и познакомиться с низкоуровневыми концепциями программирования.
Таким образом, исходя из всего вышесказанного в работе над своим проектом был выбран язык С++.
Свою историю OpenGL ведет с 1992 года. OpenGL — это программный интерфейс, который применяется для получения высококачественных, программно-генерируемых и интерактивных изображений.
OpenGL считается графическим стандартом в области компьютерной графики. На данный момент он является одним из самых популярных графических стандартов во всём мире.
Основной задачей OpenGL является возможность создания моделей из небольшого набора графических примитивов: точек, линий, многоугольников.
Характерные особенности OpenGL:
1) Легкость использования. Стандарт ОреnGL имеет достаточно продуманную структуру и довольно понятный интерфейс. Это позволяет с меньшими затратами создавать эффективные приложения, которые будут содержать меньше строк кода, чем если использовать другие графические библиотеки.
2) Надежность. Приложения, которые используют ОpеnGL , могут гарантировать одинаковый результат. Так будет происходить вне зависимости от типа операционной системы и организации отображения информации.
3) Переносимость. Эти приложения могут выполняться на персональных компьютерах, на рабочих станциях, суперкомпьютерах.
4) Стабильность. Дополнения и изменения в стандарте реализуются таким образом, чтобы сохранить совместимость с разработанным ранее программным обеспечением.
Функции библиотеки OpenGL можно разделить на пять основных категорий:
-
Функции описания примитивов (точек, линий, многоугольников и так далее); -
Функции задания атрибутов (помогают понять, как будут выглядеть на экране отображаемые объекты); -
Функции описания источников света; -
Функции визуализации (помогают задавать положение наблюдателя и задать параметры объектива камеры); -
Функции геометрических преобразований (отвечает за преобразование объектов – поворот, масштабирование, перенос)
Таким образом, для работы был выбран OpenGL.
Глава 2. Реализация модели солнечной системы
2.1. Описание процесса программы
В данной курсовой работе представлено объектно-ориентированное программирование астрономической модели солнечной системы. Модель будет описывать Солнце и планеты Меркурий, Венеру, Землю, Марс, Юпитер, Сатурн, Уран, Нептун и спутники Луна, Фобос и Деймос (спутники Марса), Ио и Европа (спутники Сатурна), Тритон (Спутник Нептуна). Программа будет работать следующим образом: на экране изображается Солнце и планеты со своими спутниками. Они располагаются вокруг Солнца на своих астрономических местах. Планеты начинают вращаться вокруг Солнца по своим орбитам с правильным соотношением скоростей. В то же время спутники начинают вращаться вокруг своих планет по траекториям, складывающимся из двух вращательных движений: вращение планеты вокруг Солнца и вращение спутника вокруг планеты.
Полностью код программы можно посмотреть, перейдя по ссылке:
https://github.com/Shoronovaanastasia/term-paper-model-of-the-solar-system-.git
Результат работы в виде картинки:
2.2. Краткое описание классов
Мы вводим класс для каждой планеты и для спутников. Например для Солнца:
class Sun {
private:
float R; // Радиус
public:
Sun() {
R = 2.5;
}
float getR() const {
return R;
}
};
Введем еще класс для планеты Земля и для ее спутника. В методах мы получаем эти данные(геттер).
class Earth {
public:
float R = 1; // Радиус
float V = 15; //Время, за которое спутник делает оборот
float S = 10; // Расстояние спутника до её планеты
float getR() const {
return R;
}
float getV() const {
return V;
}
float getS() const {
return S;
}
};
class Moon {
public:
float R = 0.4; // Радиус
float V = 15; //Время, за которое спутник делает оборот
float SSun = 10; // расстояние до солнца
float S = 1.7; // Расстояние спутника до её планеты
float getR() const {
return R;
}
float getV() const {
return V;
}
float getS() const {
return S;
}
float getSSun() const {
return SSun;
}
};
Проделываем все те же действия для других планет и спутников.
2.3. Основные функции
Базовые функции, которые потребуются нам, работая с применением графической библиотеки OpenGL:
void initGL() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); //задает значения очистки цветом, задает очистку цвета в черный цвет
}
// RGB Red Green Blue
// По умолчанию тест глубины отключен. Включим его.
void initRendering() { // Рендер. Обычно в OpenGL рендеринг используется для отрисовки в 3Д для предварительного просмотра визуализации
glEnable(GL_DEPTH_TEST); // Запуск функции из gl. А именно: Тест глубины. С помощью данной функции в целом подключается буффер глубины
}
// Теперь, с включенным тестом глубины OpenGL будет автоматически сохранять значения глубины
// для всех прошедших тест фрагментов и отбрасывать не прошедшие.
void handleResize(int w, int h) {
glViewport(0, 0, w, h); // Функция задает окно просмотра.
glMatrixMode(GL_PROJECTION); //Функция указывает, на то какая матрица является текущей матрицей.
// Применение последующих операций с матрицей к стеку матрицы проекции.
glLoadIdentity(); //Функция замены текущей матрицы матрицей идентификаторов.
gluPerspective(45.0, (double)w / (double)h, 1.0, 200.0); // Функция,которая настраивает матрицу перспективной проекции.