Автор работы: Пользователь скрыл имя, 23 Мая 2015 в 17:34, курсовая работа
В данной курсовой работе целью является закрепление материала по объектно-ориентированному программированию, в частности:
углубленное изучение материала по теме работы;
овладение навыками системного подхода к решению вопросов, связанных с разработкой приложений;
совершенствование навыков самостоятельной работы с литературой, умение делать выводы по результатам анализа материала;
совершенствование навыков разработки объектно-ориентированных моделей предметных областей;
Введение 4
Глава I. Объектно-ориентированное программирование 5
Понятие и свойства ООП 5
Классы 7
Описание класса 8
Указатель this 10
Конструкторы и деструкторы 10
Функции 12
Дружественные функции 13
Перегрузка операций 14
Глава II. Проектирование приложения, содержащего класс
DailySchedule 16
Постановка задачи 16
Реализация класса DailySchedule 18
Реализация методов класса DailySchedule 20
Заключение
Список используемой литературы
Указатель this можно также применять для идентификации поля класса в том случае, когда его имя совпадает с именем формального параметра метода. Другой способ идентификации поля использует операцию доступа к области видимости.
1.5 Конструкторы и деструкторы
Конструктор – это метод класса, имеющий такое же имя, как класс, предназначен для инициализации объекта и вызывается автоматически при создании объекта. Ниже перечислены основные свойства конструкторов.
конструкторы не наследуются;
имя_класса имя_объекта [(список параметров)];
// Список параметром не должен быть пустым
имя_класса (список параметров);
// Создается объект без имени (список может быть пустым)
имя_класса имя_объекта = выражение;
// Создается объект без имени и копируется
Деструктор – это особый вид метода, применяющийся для освобождения памяти, занимаемой объектом. Деструктор вызывается автоматически, когда объект выходит из области видимости:
При выходе из области действия указателя на объект автоматический вызов деструктора объекта не производится. Имя деструктора начинается с тильды (~), непосредственно за которой следует имя класса.
Деструктор:
Если деструктор явным образом не определен, компилятор автоматически создает пустой деструктор. Описывать в классе деструктор явным образом требуется в случае, когда объект содержит указатели на память, выделяемую динамически – иначе при уничтожении объекта память, на которую ссылались его поля-указатели, не будет помечена как свободная. Указатели на деструктор определить нельзя.
1.6 Функции
Функция – это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция может принимать параметры и возвращать значение. Любая программа состоит из функций, одна из которых должна иметь имя main (с нее начинается выполнение программы).
Функция начинает выполняться в момент вызова. Любая функция должна быть объявлена и определена. Как и для других величин, объявлений может быть несколько, а определение только одно. Объявление функции должно находиться в тексте раньше ее вызова для того, чтобы компилятор мог осуществить проверку правильности вызова.
Объявление функции (прототип, заголовок, сигнатура) задает ее имя, тип возвращаемого значения и список передаваемых параметров. Определение функции содержит, кроме объявления, тело функции, представляющее собой последовательность операторов и описаний в фигурных скобках:
[класс] тип имя ([список_параметров])[throw (исключения)]
{ тело функции }
Рассмотрим составные части определения:
с помощью необязательного модификатора класс можно явно задать область видимости функции, используя ключевые слова extern (глобальная видимость во всех модулях программы) и static (видимость только в пределах модуля, в котором определена функция);
В определении, в объявлении и при вызове одной и той же функции типы и порядок следования параметров должны совпадать.
1.7 Дружественные функции
Иногда желательно иметь непосредственный доступ извне к скрытым полям класса, то есть расширить интерфейс класса. Для этого служат дружественные функции и дружественные классы.
Дружественные функции применяются для доступа к скрытым нолям класса и представляют собой альтернативу методам. Метод, как правило, используется для реализации свойств объекта, а в виде дружественных функций оформляются действия, не представляющие свойства класса, но концептуально входящие в его интерфейс и нуждающиеся в доступе к его скрытым полям.
Ниже перечислены правила описания и особенности дружественных функций:
Отношение дружественности существует только между теми классами (классом и функцией), для которых оно явно объявлено в коде, и действует только в том направлении, в котором оно объявлено.
Использование дружественных функций нужно по возможности избегать, поскольку они нарушают принцип инкапсуляции и, таким образом, затрудняют отладку и модификацию программы.
1.7 Перегрузка операций
C++ позволяет
переопределить действие
Перегрузка операций осуществляется с помощью методов специального вида (функций-операций) и подчиняется нижеследующим правилам:
Функцию-операцию можно определить тремя способами: она должна быть либо методом класса, либо дружественной функцией класса, либо обычной функцией. В двух последних случаях функция должна принимать хотя бы один аргумент, имеющий тип класса, указателя или ссылки на класс.
Функция-операция содержит ключевое слово operator, за которым следует знак переопределяемой операции:
тип operator операция (список параметров) { тело функции }
Глава II. Проектирование приложения, содержащего класс DailySchedule
2.1 Постановка задачи
В интересах Н-ской фирмы (учреждения) разработать фрагмент автоматизированной информационной системы поиска и поддержки принятия решения. В качестве пользователя выступает сотрудник структурного подразделения.
В заданиях требуется реализовать определение нового класса. Во всех заданиях необходимо реализовать конструктор инициализации и конструктор без аргументов. Указанные в задании операции реализуются посредством перегрузки подходящих операций. В заданиях обязательно должны быть реализованы соответствующие операции с присваиванием, ввод с клавиатуры, вывод на экран, преобразования в строку toString. Хранение введенных данных в файле на жестком диске компьютера. Поиск данных по заданному условию согласно варианта. Отображение всех данных, хранящихся в системе. Отображение результатов поиска данных по условию. Отображение всех данных, хранящихся в системе. Отображение результатов поиска данных по условию.
Также надо реализовать операции инкремента и декремента в обеих формах, если они имеют смысл для реализуемого типа.
Перегрузка операций выполняется двумя способами:
Для демонстрации работы с объектами нового типа требуется написать главную функцию. Объявление класса и реализация методов класса должны быть выполнены в отдельных файлах.
В программе должны быть продемонстрированы различные способы создания объектов и массивов объектов. В тех задачах, где возможно, реализовать конструктор инициализации строкой.
Программа должна демонстрировать использование всех функций и методов. Созданные массивы объектов должны хранится во внешнем файлы
Программа должна загружать массивы из файла, сохранять изменения в файле.
2.2 Реализация класса
В задании необходимо создать класс DailySchedule, содержащий список. Для хранения данных элементов списка, а именно: время начала и окончания работы, описание и признак выполнения; нужно создать дополнительную структуру (по заданию DailyItem). Таким образом, будут реализованы класс и структура с полями и методами как показано на рис. 2 и рис. 3.
Рис.2
Рис. 3
Связь файлов в проекте показана на рис.4
Рис.4
Класс DailySchedule будет содержать указатель на первый элемент списка, каждый элемент списка содержит указатель на следующий элемент списка. Элемент списка, указывающий на NULL – конец списка. Таким образом хранение данных организовано с помощью односвязного списка.
Так как поля класса DailySchedule находятся в приватном доступе, то этому классу необходим конструктор или функция, для присвоения значений этим переменным.
В данном классе присутствует стандартный конструктор.
Для более удобной работы со стандартным потоком вывода информации об объектах создадим функцию вывода для данного класса.
void DailySchedule::display()
Для добавления, удаления и изменения планируемой работы необходимо реализовать методы. Собрав всё это получим готовый класс DailySchedule.
2.3 Реализация методов класса DailySchedule
Реализация методов класса определена в файле “DailyScheduleMethods.ccp”. К нему подключается файл, содержащий сам класс “DailySchedule.h”, описываются методы и функции класса. Рассмотрим некоторые из их:
int int_time(string t_time)
{
int s = 0;
s += (int(t_time[0]-'0') * 10 + int(t_time[1]-'0')) * 3600;
s += (int(t_time[3]-'0') * 10 + int(t_time[4]-'0')) * 60;
s += int(t_time[6]-'0') * 10 + int(t_time[7]-'0');
return s;
}
В данном методе происходит преобразование времени, хранящегося в строке, в число, для удобства проверки времени в программе.
string str_time(int t_time)
{
string s = "";
s += char('0'+t_time / 36000); t_time = t_time % 36000;
s += char('0' + t_time / 3600); t_time = t_time % 3600;
s += ":";
s += char('0' + t_time / 600); t_time = t_time % 600;
s += char('0' + t_time / 60); t_time = t_time % 60;
s += ":";
s += char('0' + t_time / 10); t_time = t_time % 10;