Курсовая работа: Разработка классов для работы с геометрическими фигурами

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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

Пензенский государственный университет

Факультет вычислительной техники

Кафедра «Компьютерные технологии

КУРСОВАЯ РАБОТА

по дисциплине: «Объектно-ориентированные языки и системы программирования»

на тему: «Разработка классов для работы с геометрическими фигурами»

Выполнила: ст. гр. 14ВГ1 Мартышкина Н.А.

Пенза 2015

Содержание

  • Введение
  • 1. Постановка задачи
  • 2. Описание класса

2.1 Открытые и закрытые члены класса

  • 2.2 Поля класса
    • 2.3 Объявление класса
  • 3. Описание методов класса
    • 3.1 Конструкторы
    • 3.2 Виртуальные функции
  • 4. Описание работы программы
  • Заключение
  • Список литературы
  • Приложение

Введение

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

Этими принципами являются:

· инкапсуляция;

· полиморфизм;

· наследование;

Инкапсуляция - объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются переменными или полями объекта, а алгоритмы - функциями или методами объекта.

Наследование - свойство объектов порождать своих потомков. Объект-потомок автоматически наследует от родителей все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.

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

Бьярн Страуструп оценил этот подход и на его основе разработал язык, получивший название «Си с классами». Вскоре язык Си с классами превратился в отдельный язык С++ (Си плюс плюс), который был представлен общественности в 1983 г.

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

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

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

Целью данной работы является использование объектно-ориентированного подхода программирования и алгоритмический язык C++ для реализации программы обработки класса «Треугольник».

Для достижения поставленной цели предполагается выполнить следующие задачи:

· реализовать описание класса;

· реализовать методы класса;

· разработать программу.

1. Постановка задачи

Создать класс треугольник, члены класса - длины 3-х сторон. Предусмотреть в классе конструктор, методы проверки существования треугольника, вычисления и вывода сведений о фигуре - длины сторон, углы, периметр, площадь. Создать производный класс - равносторонний треугольник, перегрузить в классе проверку, является ли треугольник равносторонним и метод вывода сведений о фигуре. Написать программу, демонстрирующую работу с классом: дано K треугольников и L равносторонних треугольников, найти среднюю площадь для K треугольников и наибольший равносторонний треугольник. Разработать графический интерфейс.

2. Описание класса

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

class <имя>{

[ private: ]

<описание скрытых элементов>

public:

<описание доступных элементов>

protected:

<описание защищенных элементов >

}; // Описание заканчивается точкой с запятой

2.1 Открытые и закрытые члены класса

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

· открытые, также называемые публичными, (public). Их вызов осуществляется с помощью оператора . («точка»);

· закрытые, или приватные(private), доступ, к которым возможен только с помощью открытых методов;

· защищенные (protected) методы, являются промежуточными между private и public. Их мы рассмотрим в уроке про наследование.

По умолчанию функции и данные, объявленные внутри класса, считаются закрытыми и доступны лишь функциям - членам этого класса. Спецификатор public открывает доступ к функциям и данным класса из других частей программы. Спецификатор доступа protected необходим только при наследовании классов. Зона влияния спецификатора доступа простирается до следующего спецификатора или до конца объявления файла.

Функции, объявленные внутри класса, называются функциями-членами. Они имеют доступ ко всем элементам своего класса, включая закрытые члены. Переменные, объявленные внутри класса, называются переменными-членами, данными-членами или полями. Класс - это фактически новый тип данных. Для создания переменной типа класс служит оператор: name_class name;

Здесь name_class - имя класса, name - имя переменной. В дальнейшем переменную типа class будем называть объект или экземпляр класса. Объявление переменной типа class (в нашем примере переменная name типа name_class) называется созданием объекта.

После описания переменной можно обращаться к членам и методам класса. Это делается аналогично обращению к полям структуры с помощью оператора . (точка). В дальнейшем переменную типа class будем называть «объект» или «экземпляр класса». Объявление переменной типа class(в нашем примере переменная name типа name_class) называется созданием (инициализацией) объекта (экземпляра класса).

2.2 Поля класса

Как правило, все данные-члены объявляют закрытыми. Это обеспечивает инкапсуляцию данных. Однако существуют ситуации, в которых некоторые переменные следует объявлять открытыми. Например, если некоторая переменная используется очень часто, открытый доступ выполняется намного быстрее.

Поля класса:

· могут иметь любой тип, кроме типа этого же класса (но могут быть указателями или ссылками на этот класс);

· могут быть описаны с модификатором const, при этом они инициализируются только один раз (с помощью конструктора) и не могут изменяться;

· могут быть описаны с модификатором static, но не как auto, extern и register.

2.3 Объявление класса

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

class triangle

{

public:

double side_a, side_b, side_c;

triangle ();

triangle (double a, double b, double c);

virtual void check (double &k);

virtual void output (double &A, double &B, double &C, double &P, double &S);

};

Класс описан следующим образом. В секции public объявлены три переменные типа double являющимися длинами сторон треугольника; функции-члены для работы с полями класса, а именно: два конструктора; функции: проверки существования треугольника и определения длин сторон, углов, периметра и площади треугольника.

3. Описание методов класса

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

В приведенном классе содержатся определения методов, среди которых два конструктора. Если тело метода определено внутри класса, то он является встроенным. Как правило, встроенными делают короткие методы. Если внутри класса записано только объявление (заголовок) метода, сам метод должен быть определен в другом месте программы с помощью оператора доступа к области видимости: triangle::triangle();

Методы можно перегружать (это одно из проявлений полиморфизма), а также объявлять либо константными, либо статическими (но не одновременно).

3.1 Конструкторы

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

· Конструктор не возвращает значение, даже типа void. Нельзя получить указатель на конструктор.

· Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется механизм перегрузки).

· Конструктор, вызываемый без параметров, называется конструктором по умолчанию.

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

· Если программист не указал ни одного конструктора, компилятор создает его автоматически. Такой конструктор вызывает конструкторы по умолчанию для полей класса и конструкторы по умолчанию базовых классов (см. раздел "Простое наследование"). В случае, когда класс содержит константы или ссылки, при попытке создания объекта класса будет выдана ошибка, поскольку их необходимо инициализировать конкретными значениями, а конструктор по умолчанию этого делать не умеет.

· Конструкторы не наследуются.

· Конструкторы нельзя описывать с модификаторами const, virtual и static.

· Конструкторы глобальных объектов вызываются до вызова функции main. Локальные объекты создаются, как только становится активной область их действия. Конструктор запускается и при создании временного объекта (например, при передаче объекта из функции).

· Конструктор вызывается, если в программе встретилась какая-либо из синтаксических конструкций:

имя_класса имя_объекта [(список параметров)];

// Список параметров не должен быть пустым

имя_класса (список параметров);

// Создается объект без имени (список может быть пустым)

имя_класса имя_объекта = выражение;

// Создается объект без имени и копируется

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

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

· при инициализации;

· при выполнении операции присваивания;

· для задания значений параметров по умолчанию;

· при создании динамических объектов;

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

Первый конструктор в нашем классе является конструктором по умолчанию, который присваивает переменным side_a и side_b значение 0. Если мы создаем новый объект класса и не инициализируем его поля, то вызывается конструктор по умолчанию и инициализирует переменные значением 0.

triangle::triangle ()

{

side_a=0.0; side_b=0.0; side_c=0.0;

}

Второй конструктор принимает три аргумента типа double, если мы передаем эти три аргумента при создании объекта, то для создаваемого объекта вызывается второй наш конструктор, которые присваивает значения, переданные конструктору.

triangle::triangle (double a, double b, double c)

{

side_a=a; side_b=b; side_c=c;

}

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

Источник: https://otherreferats.allbest.ru/download/1126370/