Разработка объектно-ориентированного приложения с использованием класса DailySchedule

Автор работы: Пользователь скрыл имя, 23 Мая 2015 в 17:34, курсовая работа

Описание работы

В данной курсовой работе целью является закрепление материала по объектно-ориентированному программированию, в частности:
углубленное изучение материала по теме работы;
овладение навыками системного подхода к решению вопросов, связанных с разработкой приложений;
совершенствование навыков самостоятельной работы с литературой, умение делать выводы по результатам анализа материала;
совершенствование навыков разработки объектно-ориентированных моделей предметных областей;

Содержание работы

Введение 4
Глава I. Объектно-ориентированное программирование 5
Понятие и свойства ООП 5
Классы 7
Описание класса 8
Указатель this 10
Конструкторы и деструкторы 10
Функции 12
Дружественные функции 13
Перегрузка операций 14
Глава II. Проектирование приложения, содержащего класс
DailySchedule 16
Постановка задачи 16
Реализация класса DailySchedule 18
Реализация методов класса DailySchedule 20
Заключение
Список используемой литературы

Файлы: 1 файл

Kursovik_1.docx

— 365.66 Кб (Скачать файл)

Указатель this можно также применять для идентификации поля класса в том случае, когда его имя совпадает с именем формального параметра метода. Другой способ идентификации поля использует операцию доступа к области видимости.



1.5  Конструкторы и деструкторы

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

  • конструктор не возвращает значений, даже типа void, нельзя получить указатель на конструктор;
  • класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации;
  • конструктор, вызываемый без параметров, называется конструктором по умолчанию;

конструкторы не наследуются;

 

 

 

  • параметры конструктора могут иметь любой тип, кроме этого же класса.  Можно задавать значения параметров по умолчанию, их может содержать только один из конструкторов;
  • если не указано ни одного конструктора, компилятор создаст его автоматически;
  • конструкторы нельзя описывать с модификаторами const, virtual, static;
  • конструктор вызывается, если в программе встретилась какая-либо из синтаксических конструкций:

имя_класса имя_объекта [(список параметров)];

 // Список параметром не должен быть пустым

имя_класса (список параметров);

 // Создается объект без имени (список может быть пустым)

имя_класса имя_объекта = выражение;

// Создается объект без имени  и копируется

Деструктор – это особый вид метода, применяющийся для освобождения памяти, занимаемой объектом. Деструктор вызывается автоматически, когда объект выходит из области видимости:

  • для локальных объектов – при выходе из блока, в котором они объявлены;
  • для глобальных – как часть процедуры выхода из main;
  • для объектов, заданных через указатели, деструктор вызывается неявно при использовании операции delete;

При выходе из области действия указателя на объект автоматический вызов деструктора объекта не производится. Имя деструктора начинается с тильды (~), непосредственно за которой следует имя класса.

Деструктор:

  • не имеет аргументов и возвращаемого значения;
  • не может быть объявлен как const или static;

 

  • не наследуется;
  • может быть виртуальным.

Если деструктор явным образом не определен, компилятор автоматически создает пустой деструктор. Описывать в классе деструктор явным образом требуется в случае, когда объект содержит указатели на память, выделяемую динамически – иначе при уничтожении объекта память, на которую ссылались его поля-указатели, не будет помечена как свободная. Указатели на деструктор определить нельзя.

1.6  Функции

Функция – это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция может принимать параметры и возвращать значение. Любая программа состоит из функций, одна из которых должна иметь имя main (с нее начинается выполнение программы).

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

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

[класс] тип имя ([список_параметров])[throw (исключения)]

  { тело функции }

 

 

 

 

 

Рассмотрим составные части определения:



с помощью необязательного модификатора класс можно явно задать область видимости функции, используя ключевые слова extern (глобальная видимость во всех модулях программы) и static (видимость только в пределах модуля, в котором определена функция);

  • тип возвращаемого функцией значения может быть любым, кроме массива и функции. Если функция не должна возвращать значение, указывается тип void;
  • список параметром определяет величины, которые требуется передать в функцию при ее вызове. Элементы списка параметров разделяются запятыми. Для каждого параметра, передаваемого в функцию, указывается его тип и имя;

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

 

 



1.7  Дружественные функции

Иногда желательно иметь непосредственный доступ извне к скрытым полям класса, то есть расширить интерфейс класса. Для этого служат дружественные функции и дружественные классы.

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

 

Ниже перечислены правила описания и особенности дружественных функций:

  • дружественная функция объявляется внутри класса, к элементам которого ей нужен доступ, с ключевым словом friend. В качестве параметра ей должен передаваться объект или ссылка на объект класса, поскольку указатель this ей не передается;
  • дружественная функция может быть обычной функцией или методом другого ранее определенного класса. На нее не распространяется действие спецификаторов доступа, место размещения ее объявления в классе безразлично;
  • одна функция может быть дружественной сразу нескольким классами.

Отношение дружественности существует только между теми классами (классом и функцией), для которых оно явно объявлено в коде, и действует только в том направлении, в котором оно объявлено.

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

 

1.7  Перегрузка  операций

C++ позволяет  переопределить действие большинства  операций так, чтобы при использовании  с объектами конкретного класса они выполняли заданные функции. Эта дает возможность использовать собственные типы данных точно так же, как стандартные. Обозначения собственных операций вводить нельзя. Можно перегружать любые операции, существующие в C++, за исключением:  .   .*   ?:   ::   #   ##   sizeof



Перегрузка операций осуществляется с помощью методов специального вида (функций-операций) и подчиняется нижеследующим правилам:

 

 

  • при перегрузке операций сохраняются количество аргументов, приоритеты операций и правила ассоциации (справа налево или слева направо), используемые в стандартных типах данных;
  • для стандартных типов данных переопределять операции нельзя;
  • функции-операции не могут иметь аргументов по умолчанию;

  • функции-операции наследуются (за исключением =);
  • функции-операции не могут определяться как static.

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

Функция-операция содержит ключевое слово operator, за которым следует знак переопределяемой операции:

тип operator операция (список параметров) { тело функции }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Глава II. Проектирование приложения, содержащего класс DailySchedule

2.1 Постановка задачи

В интересах Н-ской фирмы (учреждения) разработать фрагмент автоматизированной информационной системы поиска и поддержки принятия решения. В качестве пользователя выступает сотрудник структурного подразделения.

В заданиях требуется реализовать определение нового класса. Во всех заданиях необходимо реализовать конструктор инициализации и конструктор без аргументов. Указанные в задании операции реализуются посредством перегрузки подходящих операций. В заданиях обязательно должны быть реализованы соответствующие операции с присваиванием, ввод с клавиатуры, вывод на экран, преобразования в строку toString. Хранение введенных данных в файле на жестком диске компьютера. Поиск данных по заданному условию согласно варианта. Отображение всех данных, хранящихся в системе. Отображение результатов поиска данных по условию. Отображение всех данных, хранящихся в системе. Отображение результатов поиска данных по условию.

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

Перегрузка операций выполняется двумя способами:

  • все операции реализуются как внешние дружественные функции;
  • подходящие операции реализуются как методы класса, а остальные как внешние дружественные функции.

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

 

 

 

 

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

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

Программа должна загружать массивы из файла, сохранять изменения в файле.



2.2 Реализация класса DailySchedule

В задании необходимо создать класс 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;

Информация о работе Разработка объектно-ориентированного приложения с использованием класса DailySchedule