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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 22.09.2022
Размер файла 2,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

Введение

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

1.1 Основные понятия ООП

2. Проектирование приложения

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

3. Разработка

3.1 Реализация структуры DailyItem

2.2 Класс DailySchedule

2.3 Реализация главной функции

2.4 Тестирование программы

Заключение

Список используемой литературы

Аннотация

В курсовой работе кратко изложен теоретический материал к заданию по соответствующей теме и приведены решения по практической части в соответствии с индивидуальным вариантом.

В курсовой работе описан класс DailySchedule реализующий однонаправленный линейный список для работы с данными, а так же описан интерфейс класса реализующий следующие действия:

* ведение линейного списка;

* поиск поездов, отправляющихся после времени, введенного с клавиатуры в течении ближайших двух часов;

* поиск поездов, отправляющихся в пункт назначения, введенный с клавиатуры.

Введение

Главная цель проекта - закрепление материала пройденного в течение учебного семестра. Помимо этого можно выделить следующие цели:

· Углубленное изучение стандартной библиотеки шаблонов;

· Получение навыков работы с пользовательскими типами данных;

· Изучение материала для работы с файлами и потоками;

· Навыки написания пользовательского интерфейса;

· Написание многострочного проекта способствует развитию внимания;

· И, наконец, для совершенствования навыков программирования.

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

1.1 Основные понятия ООП

ООП - новая технология программирования, основанная на моделировании реального мира, при котором детали его реализации скрыты; либо взгляд на программирование, основанный на данных, в котором данные и поведение жестко связаны.

В ООП существует три основных принципа построения классов:

1. Инкапсуляция - это свойство, позволяющее объединить в классе и данные, и методы, работающие с ними и скрыть детали реализации от пользователя.

2. Наследование - это свойство, позволяющее создать новый класс-потомок на основе уже существующего, при этом все характеристики класса родителя присваиваются классу-потомку.

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

Класс линейный клавиатура интерфейс

Классы в С++ - это абстракция описывающая методы, свойства, ещё не существующих объектов. Объекты - конкретное представление абстракции, имеющее свои свойства и методы. Созданные объекты на основе одного класса называются экземплярами этого класса. Эти объекты могут иметь различное поведение, свойства, но все равно будут являться объектами одного класса.

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

Структура

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

Структура объявляется после ключевого слова struct, её объявления завершается точкой с запятой.

Указатель this

Каждый объект содержит свой экземпляр полей класса. Методы класса находятся в памяти в единственном экземпляре и используются всеми объектами совместно, поэтому необходимо обеспечить работу методов с полями именно того объекта, для которого они были вызваны. Это обеспечивается передачей в функцию скрытого параметра this, в котором хранится константный указатель на вызвавший функцию объект. Указатель this неявно используется внутри метода для ссылок на элементы объекта. В явном виде этот указатель применяется в основном для возвращения из метода указателя (return this;) или ссылки (return *this;) на вызвавший объект.

Vector

Вектор в C++ - это замена стандартному динамическому массиву, память для которого выделяется вручную. Класс vector является частью стандартной библиотеки C++.

Для использования вектора необходимо включить заголовочный файл:

#include <vector>

Для доступа к отдельным элементам вектора применяется операция взятия индекса. Так же мы можем узнать размерность вектора, используя функцию size(), и проверить, пуст ли вектор, с помощью функции empty().

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

vector< int > ivec(10, -1);

В данном примере все десять элементов вектора будут равны -1.

Еще одним отличием вектора от массива встроенного типа является возможность инициализации одного объекта типа vector другим и использования операции присваивания для копирования объектов.

Функция

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

Кроме того, что в С++ предусмотрено объявление своих функций, также можно воспользоваться функциями определёнными в стандартных заголовочных файлах языка программирования С++. Чтобы воспользоваться функцией, определённой в заголовочном файле, нужно его подключить. Например, чтобы воспользоваться функцией, которая возводит некоторое число в степень, нужно подключить заголовочный файл <сmath> и в запустить функцию pow() в теле программы.

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

Для того, чтобы воспользоваться функцией из стандартного заголовочного файла С++ необходимо выполнить два действия:

1) Подключить необходимый заголовочный файл;

2) Запустить нужную функцию.

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

1) Функции, которые не возвращают значений

2) Функции, возвращающие значение

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

// структура объявления функций не возвращающих значений

void /*имя функции*/(/*параметры функции*/) // заголовок функции

{

// тело функции

}

Функции, возвращающие значения, будут отличаться наличием зарезервированного слова return, после которого идет возвращаемое значение.

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

Конструктор

Конструктор (англ. construct - создавать) - это специальный метод класса, который предназначен для инициализации элементов класса некоторыми начальными значениями.

Важно помнить, что:

· Конструктор мы всегда объявляем в разделе public;

· При объявлении конструктора тип возвращаемого значения не указывается;

· Имя класса и конструктора должно быть одинаковым;

· Допустимо создавать несколько конструкторов в одном классе. Если мы не передаем в конструктор параметров, он считается конструктором по умолчанию.

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

Конструктор срабатывает сразу, при создании объектов класса.

Деструктор

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

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

Деструктор срабатывает в тот момент, когда завершается работа программы и уничтожаются все данные.

Multimap

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

Элементами multimap и map являются объекты pair - пары ключей и соответствующих им значений. Порядок сортировки ключей в контейнере определяется компараторным объектом-функцией less<тип>. В контейнере multimap допускается дублирование ключей. Это означает, что несколько значений могут быть ассоциированы с одним ключом (отношение "один ко многим").

Контейнер multimap поддерживает двунаправленные итераторы. Для работы с контейнерным классом multimap необходимо подключить заголовочный файл <map>.

2. Проектирование приложения

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

Необходимо реализовать программу с использованием класса DailySchedule и некоторой структуры, выполняющую следующие функции:

1. Добавление новой записи в расписание;

2. Удаление существующей записи;

3. Изменение существующей записи;

4. Поиск свободного времени в расписании;

5. Вывод списка невыполненных дел (С помощью создания нового объекта);

6. Вывод списка дел на экран и в файл;

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

· Время начала записи

· Время окончания записи

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

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

Также будет создан класс DailySchedule содержащий список объектов структуры.

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

Приступим к выполнению задачи.

Анализ задания

Для решения задачи нам понадобится класс DailyScedule и структура DailyItem.

Создадим проект с главным файлом A_Diary. Добавим к проекту файлы DailySchedule.h и DailySchedule.cpp, содержащие объявление класса и структуры, а также определение полей класса. По условию программы, нас необходимо работать с данными, представляющие время, поэтому для удобства создадим новый файл Time.h со структурой Time.

В итоге проект будет содержать следующие файлы:

- A_Diary - Главный файл проекта с функцией main;

- DailySchedule.h - Объявление класса DailySchedule и структуры DailyItem;

- DailySchedule.cpp - Определение методов класса;

- Time.h - Вспомогательная структура для работы со временем.

Представим иерархию файлов проекта:

3. Разработка

3.1 Реализация структуры DailyItem

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

Рисунок 2 - поля структуры DailyItem

Для определения полей создадим конструктор с аргументами и будем присваиваем полям структуры аргументы, переданные при создании экземпляра. Также будет конструктор без аргументов и деструктор.

Рисунок 3 - конструкторы и деструктор структуры DailyItem

Теперь у нас есть всё необходимое и самое время перейти к созданию класса DailySchedule.

2.2 Класс DailySchedule

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

Рисунок 3.1 - поле класса DailySchedule

Класс будет содержать конструктор и деструктор без аргументов.

Для выполнения необходимых задач, создадим в классе методы.

Метод Add_Work запрашивает ввод переменных у пользователя и добавляет их в вектор методом push_back(). Наряду с этим функция осуществляет проверку уникальности записи на определенное время (не должно быть пометок с пересекающимся временем) и проверяется ввод времени начала записи и окончания, чтобы начальное время не было больше конечного.

Рисунок 3.2 - метод добавления новой записи

Добавление записи есть, теперь напишем функцию удаления записи. Метод будет осуществлять поиск объекта в векторе и производить его удаление методом erase();

Рисунок 3.3 - метод удаления записи

Следующая задача - изменение записи, для этого напишем метод Amend на основе функции Add_Work, только с поиском необходимого элемента в векторе.

Самая сложная задача программы - поиск свободного времени. Для реализации этой задачи напишем функцию Search_Time, для поиска и вывода свободного времени. Задача довольно тривиальна, но требует особого подхода. Оптимальным решением будет контейнерный класс multimap, в который поместим время начала и конца записей в дневнике. Класс сам упорядочит ключи по возрастанию (ключом является время начала записи). В другой multimap будем помещать конечное время записи и начальное время следующей записи, тем самым мы найдем свободные интервалы. Найдя время входящее в пользовательский интервал и превышающее минимальное количество времени, выведем свободное время на экран.

Рисунок 3.4 - основной код метода Search_Time

Для генерации объекта Redo на основе существующего объекта DailySchedule создадим функцию Gen, принимающую в качестве аргумента существующий экземпляр класса. И записываем в Redo только невыполненные задачи.

Рисунок 3.5 - метод для заполнения объекта Redo

Все задачи выполнены, теперь организуем вывод на экран и в файл. Для этого определим методы Print и Write_In_File, выводящие информацию.

Рисунок 3.6 - метод вывода информации из вектора на экран в удобном для пользователя виде

Рисунок 3.7 - метод записи информации в файл

2.3 Реализация главной функции

Создание класса позади, осталось вызвать методы, используя экземпляр класса.

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

Рисунок 3.8 - пользовательский интерфейс

Реализуем управление с помощью switch и функции getch(), вызывая в каждом case необходимый метод класса, не забывая про break.

Рисунок 3.9 - множественный выбор с помощью switch, где x-экземпляр класса DailySchedule

2.4 Тестирование программы

Осталось провести тест программы, для этого запустим, предварительно выполнив сборку проекта.

Программа запустилась и пред нами предстало меню:

Рисунок 3.10 - интерфейс программы

Осуществив добавление записей и проведя остальные функции, выведем полученные данные на экран.

Рисунок 3.11 - работоспособность программы проверена

Заключение

В процессе выполнения курсового проекта были выполнены следующие задачи:

- изучена необходимая теория;

- закреплены теоретические знания, полученные из курса лекций;

- получены навыки работы с классами и структурами;

- повышены общие навыки программирования;

- получены умения создания пользовательского интерфейса.

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

Список используемой литературы

1. Павловская Т.А. П 12 С/С++. Программирование на языке высокого уровня - СПб.: Питер, 2004. - 461 с.: ил. ISBN 5-94723-568-4.

2. Павловская Т.А., Щупак Ю.А. П 12 С/С++. Структурное программирование: Практикум. - СПб.: Питер, 2003. - 240 с.: ил. ISBN 5-94723-447-5.

3. Павловская Т.А. П 12 С/С++. Программирование на языке высокого уровня - СПб.: Питер, 2004. - 461 с.: ил. ISBN 5-94723-568-4.

4. Наследование классов: [Электронный ресурс]. М., 2015 URL: http://cppstudio.com. (Дата обращения: 15.05.2016).

5. Указатель this: [Электронный ресурс]. С., 2000-2015 URL: http://www.cyberforum.ru. (Дата обращения: 16.05.2016).

6. Объединение файлов: [Электронный ресурс]. С., 2000-2015 URL: http://www.programmersforum.ru. (Дата обращения: 17.05.2016).

Размещено на Allbest.ru

...

Подобные документы

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

    курсовая работа [475,2 K], добавлен 26.02.2015

  • Объектно-ориентированное программирование как методология программирования, опирающаяся на инкапсуляции, полиморфизме и наследовании. Общая форма класса. Наследование как процесс, посредством которого один объект получает свойства другого объекта.

    презентация [214,9 K], добавлен 26.10.2013

  • Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.

    курсовая работа [1,0 M], добавлен 26.12.2013

  • Использование скриптового языка программирования для разработки web-приложений (сценариев). Изучение основ объектно-ориентированного программирования в языке PHP. Ознакомление со специальными методами для работы с классами. Назначение интерфейсов.

    контрольная работа [25,1 K], добавлен 14.03.2015

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

    презентация [65,2 K], добавлен 05.01.2014

  • Характеристики и свойства языков программирования. Исследование эволюции объектно-ориентированных языков программирования. Построение эволюционной карты механизмов ООП. Разработка концептуальной модели функционирования пользовательского интерфейса.

    курсовая работа [2,6 M], добавлен 17.11.2014

  • Составные части учебной программы. Функции классов в соответствии с конкретным заданием. Предоставление студенту задач до контроля знаний и оценка ответа. Введение учебного материала. Интерфейс окна чтения лекции. Алгоритм программы и инструкция.

    курсовая работа [3,0 M], добавлен 07.05.2009

  • Концепция объектно-ориентированного программирования. Объектно-ориентированные языки программирования: Smalltalk, Object Pascal, CLOS и C++. Понятие "Объект" и "Класс". Управление доступом к элементам данных классов. Определение функций-членов класса.

    реферат [24,5 K], добавлен 28.10.2011

  • Методология объектно-ориентированного программирования в Java. Понятия класса, объекта и объектной переменной. Динамическая и статическая объектные модели. Логическое структурирование приложения. Наследование в Java. Отличия интерфейсов от классов.

    курс лекций [547,2 K], добавлен 01.05.2014

  • Использование основных свойств объектно-ориентированного языка программирования C ++ при написании программы по реализации списка футболистов разных амплуа. Руководство пользователя и руководство программиста. Работа со списком, программный интерфейс.

    курсовая работа [516,5 K], добавлен 20.07.2014

  • Изучение принципов объектно-ориентированного программирования, в котором основными концепциями являются понятия классов и объектов. Свойства этого вида программирования: инкапсуляция, полиморфизм, наследование. Описание класса. Конструкторы и деструкторы.

    презентация [74,8 K], добавлен 14.10.2013

  • Понятие алгоритма и его характеристики как основного элемента программирования. Формы представления алгоритмов, основные алгоритмические структуры. Структурное и событийно-ориентированное программирование. Объектно-ориентированное программирование.

    реферат [86,0 K], добавлен 17.07.2008

  • Объектно-ориентированное программирование в Java. Базовый класс Object – сравнение, описание, разрушение, строковое представление объектов, их синхронизация. Неизменяемые строки в Java – класс String. Работа с массивами. Конструкция try-catch-finally.

    лекция [306,3 K], добавлен 01.05.2014

  • Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.

    контрольная работа [51,7 K], добавлен 22.01.2013

  • Понятие объектно-ориентированного программирования, общая характеристика языков высокого уровня. Разработка программного обеспечения для реализации компьютерной игры "пинбол" с помощью императивного программирования в среде Microsoft Visual Basic.

    курсовая работа [428,9 K], добавлен 19.09.2012

  • Создание программы для обработки информации об объектах предметной области "Бытовая техника" в среде визуального программирования C++. Иерархия родственных классов. Описание логической структуры программы. Реализация файлового ввода/вывода данных.

    курсовая работа [711,4 K], добавлен 27.07.2014

  • Предмет исследования – современные методы разработки программ таких, как объектно-ориентированное программирование и визуальное проектирование, а также структурное и модульное программирование. C++ - универсальный язык программирования. Ключевые понятия.

    курсовая работа [1,1 M], добавлен 10.01.2009

  • Написание программы, исходя из конкретных данных. Создание двунаправленного линейного списка. Main - главная программа, содержащая меню. Занесение данных в память списка. Результирующий файл. Значения всех числовых данных из диапазона целого типа данных.

    курсовая работа [2,3 M], добавлен 22.12.2010

  • Почему C++. Возникновение и эволюция языка C++. Сравнение языков С++ и С. Эффективность и структура. Процедурное программирование. Модульное программирование. Абстракция данных. Объектно-ориентированное программирование. Улучшенный С.

    реферат [26,4 K], добавлен 03.06.2004

  • Объектно-ориентированное программирование как новый подход к созданию приложений. Разработка Windows-приложения для поиска информации в хэш-таблице. Анализ использования хеширования для поиска данных и линейного зондирования для разрешения конфликтов.

    курсовая работа [915,5 K], добавлен 06.03.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.