ЛАБОРАТОРНАЯ РАБОТА № 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!