Объектно-ориентированное программирование
Цель: Изучить основы объектно-ориентированного программирования (далее – ООП).
Базовые понятия ООП: инкапсуляция, наследование и полиморфизм. Основное понятие класс.
Класс – это структурированный тип, включающий в себя в качестве элементов типизированные данные и функции, применяемые к этим данным. Таким образом, инкапсуляция заложена в составе элементов класса. Тип класса устанавливается для объектов.
Синтаксис объявления класса:
class имя
{тип переменных;
public:
функции;
};
В конце обязательно ставится точка с запятой – это оператор.
Не все элементы класса считаются закрытыми, существует режим доступа к элементам. Для этого перед элементами класса записывается спецификатор:
private: /*частный, устанавливается по умолчанию, часто используется для переменных*/
public: //общедоступный, часто используется для функции
protected: /*защищенный, используется для переменных при наличии наследования*/.
Методы работы с переменными класса реализуются через функции, описание которых производится отдельно. При этом нужно указывать к какому классу принадлежит данная функция. Для этого используется операция – ::. Обращение к элементам класса происходит при помощи составного имени (через точку).
Наследование позволяет формировать иерархию. Класс-наследник получает свойства класса-предка. В классе-наследнике могут быть добавлены дополнительные элементы и методы. Функция потомка перекрывает соответствующую функцию предка.
Формат задания класса-потомка:
сlass имя-потомка: режим доступа имя-предка
{элементы};
Листинг11.
/*объявляются класс четырехугольников и классы наследники параллелограммов и ромбов*/
#include<iostream.h>
#include <math.h>
class fourangle //базовый класс
{protected: //переменные класса
double x1, y1. x2, y2, x3, y3, x4, y4,
a, b, c, d, d1, d2,
p, s;
public: //методы класса
void vvod(void);
void storony(void);
void diagonali(void);
void perimetr(void);
void ploshad(void);
void vyvod(void);
};
class parall:public fourangle //класс параллелограммов – наследник
{public:
void storony(void);
void perimetr(void);
void ploshad(void);
};
class romb:public parall //класс ромбов – наследник
{public:
void storony(void);
void perimetr(void);
};
void fourangle::vvod(void) /*описание функции ввода для класса четырехугольников*/
{cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;}
void fourangle::storony (void)
{a=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
b=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
c=sqrt((x4-x3)*(x4-x3)+(y4-y3)*(y4-y3));
d=sqrt((x4-x1)*(x4-x1)+(y4-y1)*(y4-y1));}
void fourangle::diagonali (void)
{d1=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
d2=sqrt((x2-x4)*(x2-x4)+(y2-y4)*(y2-y4));}
void fourangle::perimetr (void)
{ p=a+b+c+d;}
void fourangle::ploshad (void)
{double per1,per2;
per1=(a+d+d2)/2;
per2=(b+c+d2)/2;
s=sqrt(per1*(per1-a)*(per1-d)*(per1-d2))+
+sqrt(per2*(per2-b)*(per2-c)*(per2-d2));}
void fourangle::vyvod (void)
{cout<<”a=”<<a<<”\tb=”<<b<<”\tc=”<<c<<”\td=”<<d;
cout<<”\np=”<<p<<”\ts=”<<s;
cout<<”\nd1=”<<d1<<”\td2=”<<d2;}
void parall::storony (void)
{a=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
b=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
c=a;
d=b;}
void parall::perimetr (void)
{ p=2*(a+b);}
void parall::ploshad (void)
{double per;
per=(a+d+d2)/2;
s=2*sqrt(per1*(per1-a)*(per1-d)*(per1-d2));}
void romb::storony (void)
{a=b=c=d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));}
void romb::perimetr (void)
{ p=4*a;}
//основная функция, по координатам вершин вычисляет все //параметры ромба
void main()
{romb obj;
obj.vvod();
obj.storony();
obj.diagonali();
obj.perimetr();
obj.ploshad();
obj.vyvod();
}
Практическая работа
Построить систему классов для описания элементов в какой-либо области. Предусмотреть различные методы для созданных классов. Написать программу в соответствии с задуманным вариантом. Количество переменных класса, их тип и название определить самостоятельно. Минимальные требования: два класса, два метода наследуются и два не изменяются. Проанализировать результат работы программы.
Контрольные вопросы
1. Как задаются переменные класса и режимы доступа к ним?
2. Формат задания класса потомка.
3. Как происходит обращение к элементам класса?
Список Литературы
1. Павловская, Т. А. С/С++. Программирование на языке высокого уровня: учеб. для студентов высш. учеб. завед./Т. А. Павловская. –СПб. : Питер, 2008 .— 460 с.
2. Подбельский, В. В. Язык СИ++: учебное пособие для студентов высших учебных заведений /В. В. Побельский. – М. : Финансы и статистика, 2007 .— 559 с.
3. БД Сургутский Государственный университет «Книги» [Электронный ресурс]. – URL: http://www.lib.surgu.ru/abis.php.
4. Лысенкова, С. А., Назина, Н. Б. Численные методы: учеб.-метод. пособие /С. А. Лысенкова, Н. Б. Назина. – Сургут : ИЦ СурГУ, 2014. – 56 с.
Учебное издание
Лысенкова Светлана Александровна
Шайторова Ирина Анатольевна
ПРОГРАММИРОВАНИЕ.
Учебно-методическое пособие