Объектно-ориентированное программирование

Цель: Изучить основы объектно-ориентированного программирования (далее – ООП).

Базовые понятия ООП: инкапсуляция, наследование и полиморфизм. Основное понятие класс.

Класс – это структурированный тип, включающий в себя в качестве элементов типизированные данные и функции, применяемые к этим данным. Таким образом, инкапсуляция заложена в составе элементов класса. Тип класса устанавливается для объектов.

Синтаксис объявления класса:

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 с.

Учебное издание

Лысенкова Светлана Александровна

Шайторова Ирина Анатольевна

ПРОГРАММИРОВАНИЕ.

Учебно-методическое пособие

Наши рекомендации