ЛАБОРАТОРНАЯ РАБОТА № 10. Объектно-ориентированное программирование (ООП)



Цель работы: познакомиться с принципами объектно-ориентированного программирования.

Лабораторная работа рассчитана на 4 академических часа.

Теоретическая часть. Основные понятия

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

Класс — это тип данных. Объект класса —переменная типа «класс».

Из определения класса следует первое свойство ООП — инкапсуляция. Инкапсуляция данных означает, что данные являются не глобальными — доступными всей программе, а локальными — доступными только малой ее части. Инкапсуляция автоматически подразумевает защиту данных. Для этого в структуре class используется спецификатор раздела private, содержащий данные и методы, доступные только для самого класса. Если данные и методы содержатся в разделе public, они доступны извне класса. Раздел protected содержит данные и методы, доступные из класса и любого его производного класса:

class Stek {

private: spisok *1; public:

Stek();

void PrintSpisok();

void AddElem(int pos,int element);

void DelElem(int pos);

};

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

class PotomokSteka: public Stek

{

private: spisok *z; public:

PotomokSteka(); void SortSpisok();

} ;

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

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

class Stek

{

private: spisok *1; public:

Stek(); //По умолчанию создается список

//из 10 элементов

Stek(int q); //Количество элементов в списке

//передается в виде параметра

};

Stek: : Stek ()

{

spisok *m,*k; int i;

// randomize ();

k=new spisok; k->elem=random(5); l=k;

for (i=l;i<10;i++)

{

m=new spisok; m->elem=random(5); k->next=m; k=m;

}

k->next=NULL;

}

Stek::Stek(int g)

{

spisok *m,*k; int i;

// randomize();

k=new spisok; k->elem=random(5); l=k;

for (i=l;i<g;i++)< p=""></g;i++)<>

{

m=new spisok; m->elem=random(5); k->next=m; k=m;

}

k->next=NULL;

}

void main()

{

• • •

Stek stl,st2(7); //Создание объектов класса в программе

• • •

}

Существует также понятие деструктора класса. Это метод класса, предназначенный для уничтожения объекта класса. Допустим, он может быть полезен, если нужно удалить динамический список, освободив память:

class Stek

{

private: spisok *1; public:

Stek();

Stek(int q);

~Stek(); //Деструктор

};

Stek::~Stek()

{

spisok *m; m=l ;

{

while (m!=NULL) l=m->next;

delete(m); m=l;

}

cout«"Stek was deleted";

}

Работу деструктора можно увидеть, например, если создать указатель на объект класса «динамический список». Тогда при выполнении операции delete будет вызван деструктор класса:

void main()

{

• • • •

Stek *st3; st3=new Stek;

cout<<endl<<"creat new="" steck:";="" st3-="">PrintSpisok(); delete(st3);</endl<<"creat>

• • •

}

Пример программы на языке C++

#include

#include

#include

#include

struct spisok

{

int elem; spisok *next;

} ;

class Stek

{

private: spisok *1; public:

Stek();

Stek(int q);

~Stek();

void PrintSpisok();

void AddElem(int pos,int element); void DelElem(int pos);

};

Stek: : Stek ()

{

spisok *m,*k; int i;

// randomize();

k=new spisok; k->elem=random(5); l=k;

for (i=l;i<10;i++)

{

m=new spisok; m->elem=random(5); k->next=m; k=m;

}

k->next=NULL;

}

Stek::Stek(int g)

{

spisok *m,*k; int i;

// randomize();

k=new spisok; k->elem=random(5); l=k;

for (i=l;i<g;i++)< p=""></g;i++)<>

{

m=new spisok; m->elem=random(5); k->next=m; k=m;

}

k->next=NULL;

}

void Stek::PrintSpisok()

{

spisok *m;

m=l ;

while (m!=NULL)

{

cout<elem<<' m=m->next;

}

cout«endl;

}

Stek: : ~Stek ()

{

spisok *m; m=l;

while (m!=NULL)

{

l=m->next; delete(m); m=l ;

}

cout«"Stek was deleted";

}

void Stek::AddElem(int pos,int element)

{

spisok *m,*k,*r; int i; m=l;

for (i=l;inext;

k=new spisok;

k->elem=element;

r=m->next;

m->next=k;

k->next=r;

}

void Stek::DelElem(int pos)

{

spisok *m,*k,*r; int i,a;

if (pos==0)

{

m=l;

l=l->next; delete(m);

}

else

{

m=l ;

for(i=l;inext; //Поиск позиции

//удаления

k=m->next; r=k->next;

m->next=r; delete(k);

}

}

class PotomokSteka: public Stek

{

private: spisok *z; public:

PotomokSteka();

};

PotomokSteka::PotomokSteka()

{

spisok *m,*k; int i;

randomize();

k=new spisok; k->elem=random(5); z=k;

for (1=1;i<10;i++)

{

m=new spisok; m->elem=random(5); k->next=m; k=m;

}

k->next=NULL;

void main()

{

clrscr();

Stek stl,st2(7); cout«endl«"stl: stl.PrintSpisok (); cout<<endl<<"st2: st2.printspisok();<="" p=""></endl<<"st2:>

cout<<endl<<"add element="" in="" 1-st="" spisok"«endl;="" stl.addelem(3,1000);="" stl.printspisok();<="" p=""></endl<<"add>

cout<<endl<<"delete element="" from="" 1-st="" spisok"<<="" p=""></endl<<"delete>

Stek *st3; st3=new Stek;

cout<<endl<<"creat new="" steck;";="" st3-="">PrintSpisok (); delete(st3);</endl<<"creat>

PotomokSteka pst4; cout<<endl<<endl<<"pst4: pst4.printspisok="" ();<="" p=""></endl<<endl<<"pst4:>

getch () ;

}

Порядок выполнения работы

· 1. В соответствии с вариантом задания из лабораторной работы № 9 написать программу обработки списка на языке С++ или Delphi.

· 2. Отладить программу.

· 3. Получить результат.

· 4. Показать текст программы и результат ее работы преподавателю.

· 5. Сдать и защитить работу.

Защита отчета по лабораторной работе

Отчет по лабораторной работе должен состоять из:

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

· 2. Блок-схемы программы.

· 3. Текста программы на языке программирования.

· 4. Результата.

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

Контрольные вопросы

· 1. Опишите понятия объектно-ориентированного программирования:

o • класс;

o • объект;

o • инкапсуляция;

o • наследование;

o • полиморфизм.

· 2. Что такое поля и методы классов?

· 3. Как производится объявление переменных и методов public, protected, private?

· 4. Что такое конструктор и деструктор?

Варианты заданий

Лабораторные работы № 1—5 выполняются для одного и того же варианта.

· 1. Разработать программный модуль «Учет успеваемости студентов». Программный модуль предназначен для оперативного учета успеваемости студентов в сессию деканом, заместителями декана и сотрудниками деканата. Сведения об успеваемости студентов должны храниться в течение всего срока их обучения и использоваться при составлении справок о прослушанных курсах и приложений к диплому.

· 2. Разработать программный модуль «Личные дела студентов». Программный модуль предназначен для получения сведений о студентах сотрудниками деканата, профкома и отдела кадров. Сведения должны храниться в течение всего срока обучения студентов и использоваться при составлении справок и отчетов.

· 3. Разработать программный модуль «Решение комбинаторно-оптимизационных задач». Модуль должен содержать алгоритмы поиска цикла минимальной длины (задача коммивояжера), поиска кратчайшего пути и поиска минимального связывающего дерева.

· 4. Разработать приложение ’Утс1о?5 «Органайзер». Приложение предназначено для записи, хранения и поиска адресов и телефонов физических лиц и организаций, а также расписания, встреч и др. Приложение предназначено для любых пользователей компьютера.

· 5. Разработать приложение yindows «Калькулятор». Приложение предназначено для любых пользователей и должно содержать все арифметические операции (с соблюдением приоритетов) и желательно (но не обязательно) несколько математических функций.

· 6. Разработать программный модуль «Кафедра», содержащий сведения о сотрудниках кафедры (ФИО, должность, ученая степень, дисциплины, нагрузка, общественная работа, совместительство и др.). Модуль предназначен для использования сотрудниками отдела кадров и деканата.

· 7. Разработать программный модуль «Лаборатория», содержащий сведения о сотрудниках лаборатории (ФИО, пол, возраст, семейное положение, наличие детей, должность, ученая степень). Модуль предназначен для использования сотрудниками профкома и отдела кадров.

· 8. Разработать программный модуль «Автосервис». При записи на обслуживание заполняется заявка, в которой указываются ФИО владельца, марка автомобиля, вид работы, дата приема заказа и стоимость ремонта. После выполнения работ распечатывается квитанция.

· 9. Разработать программный модуль «Учет нарушений правил дорожного движения». Для каждой автомашины (и ее владельца) в базе хранится список нарушений. Для каждого нарушения фиксируется дата, время, вид нарушения и размер штрафа. При оплате всех штрафов машина удаляется из базы.

· 10. Разработать программный модуль «Картотека агентства недвижимости», предназначенный для использования работниками агентства. В базе содержатся сведения о квартирах (количество комнат, этаж, метраж и др.). При поступлении заявки на обмен (куплю, продажу) производится поиск подходящего варианта. Если такого нет, клиент заносится в клиентскую базу и оповещается, когда вариант появляется.

· 11. Разработать программный модуль «Картотека абонентов АТС». Картотека содержит сведения о телефонах и их владельцах. Фиксирует задолженности по оплате (абонентской и повременной). Считается, что повременная оплата местных телефонных разговоров уже введена.

· 12. Разработать программный модуль «Авиакасса», содержащий сведения о наличии свободных мест на авиамаршруты. В базе должны содержаться сведения о номере рейса, экипаже, типе самолета, дате и времени вылета, а также стоимости авиабилетов (разного класса). При поступлении заявки на билеты программа производит поиск подходящего рейса.

· 13. Разработать программный модуль «Книжный магазин», содержащий сведения о книгах (автор, название, издательство, год издания, цена). Покупатель оформляет заявку на нужные ему книги, если таковых нет, он заносится в базу и оповещается, когда нужные книги поступают в магазин.

· 14. Разработать программный модуль «Автостоянка». В программе содержится информация о марке автомобиля, его владельце, дате и времени въезда, стоимости стоянки, скидках, задолженности по оплате и др.

· 15. Разработать программный модуль «Кадровое агентство», содержащий сведения о вакансиях и резюме. Программный модуль предназначен как для поиска сотрудника, отвечающего требованиям руководителей фирмы, так и для поиска подходящей работы.

Примечание. При разработке программы не ограничиваться функциями, приведенными в варианте, добавить несколько своих функций. Обязательно использование структурного и модульного подходов к программированию. Желательно использование объектного подхода.


Дата добавления: 2020-04-08; просмотров: 275; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!