ООП. KursRab. Модель электронного справочника

В этой курсовой работе я делал модель электронного справочника.

ОГЛАВЛЕНИЕ

ОГЛАВЛЕНИЕ.. 2

1.ВВЕДЕНИЕ.. 3

2.ПОСТАНОВКА ЗАДАЧИ.. 4

2.1.Наименование и область применения. 4

2.2.Основания для разработки. 4

2.3.Назначение разработки. 4

2.4.Технические требования к программе или программному обеспечению. 4

3.ВЫБОР СПОСОБА, МЕТОДА РЕШЕНИЯ ПОСТАВЛЕННОЙ ЗАДАЧИ.. 5

3.1.Выбор структуры данных. 5

4.2.Класс CObject 6

4.2.1.Описание. 6

4.2.2.Поля. 6

4.2.3.Методы.. 6

4.3. Класс CObjectListItem.. 7

4.3.1.Описание. 7

4.3.2.Поля. 7

4.3.3.Методы.. 7

4.4.Класс CObjectList 7

4.4.1.Описание. 7

4.4.2.Поля. 7

4.4.3.Методы.. 7

4.5.Класс CHandbook. 7

4.5.1.Описание. 7

4.5.2.Поля. 8

4.5.3.Методы.. 8

4.6.Строки. 8

4.ТЕОРЕТИЧЕСКИЙ РАЗДЕЛ.. 9

4.1.Список. 9

4.1.1.Список. 9

4.1.2.Поиск элемента в списке. 9

4.1.2 Вставка элемента в список. 9

4.1.3 Удаление элемента из списка. 10

4.2.Указатель на базовый класс. 10

4.3.Инкапсуляция. 10

4.4.Наследование. 11

4.5.Полиморфизм.. 11

5.ВЫВОДЫ ПО РАБОТЕ.. 12

6.СПИСОК ЛИТЕРАТУРЫ… 13

  1. ПРИЛОЖЕНИЯ.. 14

 

 

 

1.ВВЕДЕНИЕ

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

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

Суть основных компонент можно раскрыть следующим образом:

  1. Объект (Object). Вот несколько определений объекта.

* В наиболее широком смысле это совокупность данных, существующих в машинном представлении как единое целое, допускающее обращение по имени, указателю или ссылке.

* В смысле ООП объект – это сущность, обладающая состоянием и поведением.

* Объект – это инкапсулированная абстракция, которая включает информацию о состоянии и четко определенное множество протоколов доступа.

  1. Сообщение (Message) – это специальный символ, идентификатор или ключевое слово с параметром или без, которое представляет выполняемое объектом действие.
  2. Класс (Class). Представляет тип данных, определяемых программистом, который специфицирует как представление объектов этого класса, так и операции, которые можно выполнять с объектами. Во многих случаях класс следует понимать как абстрактный тип данных.
  3. Экземпляр (Instance) – объект, принадлежащий конкретному классу.
  4. Метод (Method) – функция, вызываемая в ответ на запрос к объекту некоторого класса совершить какое-либо действие. Можно сказать, что метод определяет реакцию объекта на сообщение. Совокупность методов класса определяет поведение объектов данного класса.

Несколько слов об основных свойствах ООП.

  1. Инкапсуляция (Encapsulation) – сокрытие информации или определение пользователем новых типов данных. Каждый такой тип содержит определение набора значений и операций, которые могут быть выполнены над этими значениями, и образует так называемый абстрактный тип данных.
  2. Наследование (Inheritance) – это механизм, позволяющий строить иерархию типов. Механизм наследования предполагает определение базового типа, а затем использование его для построения производных типов. Причем каждый из производных типов наследует все свойства базового типа, включая характеристики (данные) и набор операций (методов, функций).
  3. Полиморфизм (Polymorphism) – свойство объекта отвечать на направленный к нему запрос сообразно своему типу.

Новизна ООП позволяет отбросить старые способы мышления и привычки, которые в течение многих лет были присущи в традиционным языкам программирования.

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

 

2.ПОСТАНОВКА ЗАДАЧИ

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

 

2.1.Наименование и область применения

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

 

2.2.Основания для разработки.

Основанием для разработки модели электронного справочника является выданное в соответствии с вариантом задание на курсовую работу по дисциплине «Объектно-ориентированное программирование».

2.3.Назначение разработки.

Разработка предназначена для хранения и модификации данных о предметах: название, описание, изображение, поиска информации по справочнику.

 

2.4.Технические требования к программе или программному обеспечению.

3.1.Требования к функциональным характеристикам.

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

3.2.Требования к надёжности.

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

3.3.Условия эксплуатации.

Заданные характеристики в пункте 3.2 характеристики должны обеспечиваться при температурно-климатических условиях, приемлемых для ЭВМ, на которой запущена программа.

Программа должная быть рассчитана на опытного пользователя Microsoft Windows 2000.

3.4.Требования к составу и параметрам технических средств. Программа должна корректно работать на IBM-совместимой ЭВМ. Наличие манипулятора «мышь» и   sVGA монитора обязательно.

3.5. Требования к информационной и программной совместимости.

Программа должна быть разработана с использованием среды разработки Microsoft Visual C++ 6.0.

3.6.Требования к маркировке и упаковке.

Диски с копиями программы должны быть маркированы товарными знаками Заказчика.

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

 

 

 

3.ВЫБОР СПОСОБА, МЕТОДА РЕШЕНИЯ ПОСТАВЛЕННОЙ ЗАДАЧИ

3.1.Выбор структуры данных

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

  1. Список[6]
  2. Массив[1][4][5]
  3. Дерево[6]

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

Можно использовать цифровой поиск, поиск в АВЛ деревьях, в красно-чёрных деревьях.

Представление с помощью деревьев имеет высокую производительность при поиске и не имеет ограничения на количество данных (ограниченно только ресурсами вычислительной машины)

Отрицательная сторона — сложность реализации по сравнению с остальными методами.

Массив в данном случае не подходит из-за ограниченности его размеров. Однако существует у него и положительные стороны.

  • Простота реализации
  • быстрота поиска, особенно при использовании хеширования. при использовании других методов поиска (бинарный в упорядоченной таблице, поиск Фибоначчи) быстрота несколько ниже, но также остаётся достаточно высокой

 

 

 

Список достаточно прост в реализации и у него нет ограничения на количество данных. Его слабая сторона – время поиска. Но поскольку по заданию требуется построить модель электронного справочника, а не реальный электронный справочник то будет реализован этот вариант. Благодаря быстродействию современный компьютеров он будет работать достаточно быстро и на сравнительно больших объёмах данных.

Вообще можно взять готовый стандартный шаблон для работы со списком list, также в используемой графической библиотеке wxWidgets[3] есть класс wxList[3]. Легче всего было бы использовать один из них. Но тогда непонятно: куда применить классы и наследование в программе. Поэтому класс список будет реализован самостоятельно.

Будет реализован самый простой список, но упорядоченный. Хотя вообще-то можно было бы использовать некоторые методы для ускорения операций со списком. Например, можно было хранить указатели на объект, который является первым в списке, с этой первой буквой:

рисунок 1

Но как уже говорилось выше будет реализован самый простой список.

Схема классов, реализованных для данной программы:

Схема классов

4.2.Класс CObject

4.2.1.Описание

Класс CObject представляет собой единичный объект базы данных (одну запись). Сама база данных справочника состоит из множества экземпляров класса CObject.

4.2.2.Поля

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

Класс CObject имеет следующий поля для хранения названия предмета, описания предмета, изображения предмета. Таким образом достигается практически универсальность справочника. Можно в справочнике хранить список книг (Записывая в название предмета название книги, а в описании — о чём та книга, в изображении привести, например, обложку), телефоны (название – ФИО, описание – телефое, изображение — фотография) и т. д.

4.2.3.Методы

Какие методы необходимы для класса CObject? Поскольку используется инкапсуляция, то естественно необходимы методы для доступа к полям.

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

4.3. Класс CObjectListItem

4.3.1.Описание

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

4.3.2.Поля

Построен на основе CObject и наследует от него все поля и методы. Добавляются поля-указатели на предыдущий и следующий элемент

4.3.3.Методы

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

4.4.Класс CObjectList

4.4.1.Описание

Класс CObjectList представляет собой прообраз базы данных. он содержит в себе информацию о всех объектах базы данных модели электронного справочника.

По сути он представляет собой реализацию списка объектов.

4.4.2.Поля

Класс CObjectList имеет в своём составе указатели на голову и хвост списка, поле для хранения количества элементов и методы для работы со списком: вставка, удаление, поиск.

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

  1. Написать метод подсчёта количества объектов в списке;
  2. Иметь переменную в которой будет постоянно хранится и корректироваться при выполнении операций удаления в вставки количество объектов

Понятно, что второй метод предпочтительнее, так как в первом методе при подсчёте будет проходить время пропорциональное n, где n — количество объектов в списке.

4.4.3.Методы

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

 

4.5.Класс CHandbook

4.5.1.Описание

Класс CHandbook построен на основе CObjectList и имеет все методы, необходимые для работы модели электронного справочника. Он осуществляет связь пользовательского интерфейса и остальной программы. То есть он является чем-то средним между классом интерфейса и внутренней программы.

4.5.2.Поля

Добавляются поля для хранения информации о поиске объекта. То есть о признаках, по которым необходимо найти объект. Для этого используется класс CObject. Подразумевается, что соответствующее поле соответствует нулю типа этого поля (для строк им является строка “”, то есть пустая строка). В противном случае там хранится информация, которая должная содержатся в этом поле в найденном объекте. Это сделано для того, чтобы после осуществления первого поиска элемента, для поиска следующего элемента необходимо было нажать только одну кнопку FindNext.

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

4.5.3.Методы

Добавляется методы для поиска первого элемента и поиска следующего элемента.

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

Есть метод установки текущего элемента и номера текущего элемента (тоже нужно использовать с осторожностью).

Для перемещения по записям методы перехода к предыдущему элементу и следующему элементу.

Также перегружаются методы добавления и удаления объекта, которые после (или перед) вызова метода базового класса CObjectList корректируют добавленные в этом классе поля.

4.6.Строки

Этот вопрос является актуальным при программировании на С++. Поскольку в С++ есть много способов для хранения строк.

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

К счастью в стандартной библиотеке С++ есть класс string, который заметно облегчает работу со строками. Но в используемой графической библиотеке wxWidgets[3] есть ещё один класс wxString[3]. Во избежании проблем с графической оболочкой будет использоваться именно он.

 

 

4.ТЕОРЕТИЧЕСКИЙ РАЗДЕЛ

4.1.Список

4.1.1.Список

Список строится на основе структуры, в которой имеется поле с данными и поле, указывающее на следующий элемент списка (Next).

Односвязный список

Можно также добавить и указатель на предыдущий элемент списка (Previous) (так и сделано в этой курсовой работе).

двусвязный список

4.1.2.Поиск элемента в списке

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

4.1.2 Вставка элемента в список

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

Список перед вставкой нового элемента:

Двусвязный список перед вставкой элемента

Пусть P (от слова Previous, предыдущий) — предыдущий элемент списка, то есть элемент, после которого необходимо вставить новый. Пусть N (от слова Next, следующий) — следующий элемент списка, то есть элемент, перед которым необходимо вставить новый. C (Current) —вставляемый элемент списка.

Корректировка указателей происходит по следующему алгоритмы:

P.Next:=C;

C.Previous=P;

N.Previous=C;

C.Next=C;

Список после вставки нового элемента:

Двусвязный список после вставки элемента

Описанный случай происходит при вставке в середину списка. В случае вставки в начало списка, то есть когда С становится первым элементом списка полю С.Previous присваивается NIL и убираются все операции с P. А в случае вставки в конец списка убираются все действия с N и полю C.Next:=NIL.

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

4.1.3 Удаление элемента из списка

При удалении элемента из списка происходит следующая коррекция указателей:

Если существует следующий за С элемент N, то N.Previous:=C.Previous

Если существует предыдущий для С элемент P, то P.Next=C.Next

Только после этого освобождается память из-под элемента С.

Список перед удалением элемента:

Двусвязный список перед удалением элемента

Список после удаления элемента:

Двусвязный список после удаления элемента

4.2.Указатель на базовый класс

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

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

4.3.Инкапсуляция

Класс содержит не только данные, но и методы для их обработки. Для каждого класса требуется реализовать все действия над его данными, могущие понадобиться при работе с экземпляром данного класса. Инкапсуляция[1] подразумевает запрет на прямой доступ к данным класса. Обработка информационных полей экземпляра класса в таком случае может быть осуществлена лишь с помощью методов данного класса. Подразумевается, что методы класса предоставляют возможность производить над экземпляром класса все необходимые действия.

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

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

 

4.4.Наследование

Наследование[1] — возможность создания иерархии классов, когда потомки наследуют все свойства своих предков, могут их изменять и добавлять новые. Свойства при наследовании повторно не описываются, что сокращает объём программы. Выделение общих черт различных классов в один класс-предок является мощным механизмом абстракции — ведь и любая наука начинается с абстрагирования и классификации, которые помогают справиться со сложностью рассматриваемой предметной области.

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

4.5.Полиморфизм

Третьим китом, на котором стоит ООП, является полиморфизм[1] — возможность использовать в различных классах иерархии одно и то же имя для обозначения сходных по смыслу действий и гибко выбирать требуемое действие во время выполнения программы.

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

 

 

5.ВЫВОДЫ ПО РАБОТЕ

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

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

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

Использование объектно-ориентированного программирования удобно, а в ряде случаев практически необходимо создании больших программных продуктов.

Созданная в данной работе программа показала эффективность объектно-ориентированного программирования при создании модели электронного справочника.

 

6.СПИСОК ЛИТЕРАТУРЫ

 

  1. Павловская Т. А. C/C++. Программирования на языке высокого уровня – СПб.: Питер, 2004. – 461с. ил.
  2. MSDN Library Visual Studio 6.0
  3. wxWidgets Manual
  4. Ишкова Э. А. С++. Начала программирования. Изд. 3-е перераб. и доп. — М.: ООО «Бином-Пресс», 2004. —368 с.: ил.
  5. Глушаков С. В., Коваль А. В., Смирнов С. В. Язык программирования С++: Учебник курс / Худож. – оформитель А. С. Юхьман. — Харьков: Фолио; М.: ООО «Издательство АСТ», 2001. — 500 с. — (Домашняя б-ка).
  6. Структуры данных и алгоритмы. :Пер. с англ. : Уч. пос. — М. : Издательский дом «Вильямс», 2000. —384 с. : ил. — Парал. Тит. англ.

 

7. ПРИЛОЖЕНИЯ

Тексты основных файлов:

Файл «object.h»:

Файл «object.cpp»:

Файл «objectlist.h»:

Файл «objectlist.cpp»:

Файл «handbook.h»:

Файл «handbook.cpp»:

 

Скачать ZIP-архив с исходными кодами

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *