МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение
высшего профессионального образования
«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ «МИФИ»
Озерский технологический институт - филиал НИЯУ МИФИ
Кафедра
прикладной математики
КУРСОВАЯ РАБОТА
по дисциплине «Объектно-ориентированное программирование»
Тема:
«Проектирование иерархии типов: Сласти»
Выполнил студент гр. 1ПО-40Д
К.В. Золотарева
Преподаватель В.В. Пономарев
Аннотация
К.В. Золотарева. Проектирование иерархии типов: Сласти: Курсовая работа. ОТИ НИЯУ МИФИ, 2016, 29 стр., 22 ил.
Библиография - 18 наименований
Вложения - CD-диск с демо-версией.
В курсовой работе спроектирована иерархия типов в предметной области «Сласти», разработано консольное тестирующее приложение.
В иерархии типов:
уровней иерархии - 5;
классов - 92;
абстрактных классов - 13;
неабстрактных классов - 79;
интерфейсов - 0;
шаблонов - 0.
Для построения иерархии типов использована среда проектирования на языке UML Microsoft Visual Studio 2012.
В тестирующем приложении спроектированы четыре
коллекции типов, с помощью которых демонстрируются различные операции с
избранными классами иерархии, а также полиморфность некоторых типов.
Содержание
Обозначения и сокращения
Введение
. Литературный обзор
.1 Исследование предметной области
.2 Объектно-ориентированная парадигма программирования
.3 Средства проектирования на языке UML
.4 Объектно-ориентированные языки программирования
. Расчетно-конструкторская часть
.1 Анализ предметной области
.2 Выбор средств проектирования
.3 Выбор языка программирования
.4 Проектирование классов
.5 Проектирование коллекций
. Экспериментальная часть
Заключение
Список использованных источников
Приложение А (обязательное) Диаграмма
классов UML
Обозначения и сокращения
ООП - объектно-ориентированное программирование.
ЯП - язык программирования.
ПО - программное обеспечение.
ОС - операционная система.
Введение
В разделе «Литературный обзор» приведен краткий обзор предметной области «Сласти», в том числе общих и отличительных черт объектов, связь между ними, принципы организации иерархии. Рассмотрены ключевые понятия объектно-ориентированной парадигмы программирования: инкапсуляция, наследование, полиморфизм, иерархичность, обзор объектно-ориентированных языков программирования, средства проектирования на языке UML.
В разделе «Расчетно-конструкторская часть» все внимание уделяется анализу предметной области, определены абстрактные типы данных, выявленные свойства рассматриваются на предмет их важности по отношению к конкретному классу и распределяются между классами таким образом, чтобы механизм наследования позволил получить конечных представителей классов со всеми необходимыми характеристиками. Максимально кратко и полно писано проектирование классов. Приводится обоснование выбора конкретного ЯП и CASE- средств. Затрагивается также разработка коллекций.
В разделе «Экспериментальная часть» приведено проектирование четырех коллекций, назначение которых - продемонстрировать работоспособность программы и доказать что выбранный подход к разработке проекта - объектно-ориентированный. Кроме того описаны некоторые дополнительные проверки: создание представителя абстрактного класса, добавление элемента в непредназначенную для него коллекцию, выполнение некоторых методов классов.
В разделе «Заключение» подводятся итоги
выполненной работы, оценивается её актуальность и применимость, плюсы и минусы,
определяются перспективные направления в дальнейшем её развитии.
1. Литературный обзор
1.1 Исследование предметной
области
Сласти - старинное русское слово, которое постепенно исчезает из обихода. Его все чаще заменяет похожее по звучанию слово «сладости», хотя это совсем не одно и то же.
Ясно, что «сладость» - это понятие приятного свойства или настроения, чем ощущение, воспринимаемое органом вкуса. Сласти же - это сладкая еда [1]. Так переходим к рассмотрению бесчисленного количества сладких изделий, пытаемся их каким-то образом организовать и систематизировать, согласно их свойствам. Очевидно, что задействовать все известные сласти не удастся, но полученная модель совершенно точно должна быть построена так, чтобы была возможность её расширять по необходимости как вширь, так и вглубь. Только в этом случае разработанная система будет иметь практический смысл.
На данном этапе выделим три основных класса, на которые можно подразделить сласти - это натуральные сласти, кондитерские изделия, замороженные сласти (мороженое).
Натуральные сласти - это продукты, дарованные нам природой. Они используются в косметологии, народной медицине и просто как лакомство. Сюда входит мед, ягоды, фрукты, сухофрукты. Существует большое количество различных ягод, фруктов и сухофруктов. В данной системе они не рассматриваются детально, так как это сами по себе три большие иерархии. Мед бывает двух видов - монофлерный и полифлерный. Это означает, что в процессе получения первого меда был задействовано одно растение - медонос, а второго - несколько. Самые известные полифлерные виды меда - майский и луговой, а монофлерные - липовый, гречишный, акациевый и другие [2]. Самые популярные виды меда включены в иерархию.
Мороженое можно классифицировать по-разному: по способам выработки, по составу, по оформлению поверхности, по количеству применяемых ароматизаторов, но в данной работе будем различать по составу. Виды мороженого: молочное, сливочное, пломбир, сорбет, фруктовый лед [3].
Кондитерские изделия - это ветвь иерархии, которую можно рассматривать до бесконечности, так как она в большей степени связана с кулинарией, кондитерским искусством и созданием новых рецептов. Достаточно хотя бы взглянуть на ассортимент конфет в России.
Принято делить кондитерские изделия на две группы - сахаристые и мучные. Бывает, что кондитерское изделие содержит элементы обеих групп, но только одна считается основной.
Сахаристые включают в себя: безе, вареные сахаристые изделия, желе, зефир, крем, марципан, мусс, помадка, суфле, цукаты, шоколад и конфеты. Из группы вареных сластей можно выделить: варенье, джем, повидло, мармелад, конфитюр [4].
Некоторые из видов сахаристых изделий рассмотрим подробней. Конфеты могут быть: помадные, молочные, фруктовые, желейные, пралиновые, ликерные, сбивные, шоколадные, карамельные. Основные виды шоколада: горький, диабетический, пористый, молочный, в виде порошка, обыкновенный, белый. Отличия можно увидеть во всем, в наборе и процентном соотношении ингредиентов, в технологии и рецепте приготовления. Все отличия отражены в наборе свойств каждого объекта [5].
Мучные изделия - это изделия, в составе которых
непременно есть мука. Это могут быть торты, вафли, печенье, сладкие пироги
(мясные, рыбные и прочие не рассматриваем), пряники, пирожные. Такие сласти как
булка, ватрушка, пончик, кекс, ромовая баба можно смело отнести к сладким
пирогам [4]. Печенье можно разделить на три большие группы: сахарное, затяжное,
сдобное [6]. Пряник бывает: печатный, вырезной, лепной [7]. Виды пирожного:
бисквитное, песочное, сдобное, заварное, сбивное, крошковое [8]. Торт бывает:
настоящего типа, итальянского типа, сборного типа, а сборный типа уже включает
венские, французские, творожные, жидкие, песочные и вафельные торты. Вид теста
- это лишь один из большого количества признаков, отличающих между собой все
вышеуказанные изделия [9]. Стоит повторить, что полученная иерархия - это
минимум из того, что можно получить, рассматривая все многообразие сладких
изделий. Практически каждый класс-лист претендует на возможность иметь
наследников.
1.2 Объектно-ориентированная
парадигма программирования
Подход, используемый в проектировании курсового проекта объектно-ориентированный. Рассмотрим его подробней.
ООП - это парадигма программирования, концепция которой выглядит следующим образом:
все является объектом;
каждый объект имеет независимую память, состоящую из других объектов;
каждый объект является представителем класса, который выражает его общие свойства;
в классе задаются свойства и функциональность объекта;
классы организованы в древовидную структуру - иерархию наследования. Свойства и функциональность, связанные с экземплярами определенного класса, автоматически доступны любому другому классу, расположенному ниже в иерархии.
Основные понятия ООП:
абстракция данных - каждый объект программы представляет из себя идеализированное описание реальных сущностей предметной области, поэтому работать с такими объектами проще, описание объекта происходит исходя из поставленной задачи;
инкапсуляция - согласно этому принципу класс должен быть для пользователя «черным ящиком», скрывая реализацию и предоставляя интерфейс;
сокрытие данных - логическое продолжение инкапсуляции, это инструмент, с помощью которого можно уберечь внутреннее состояние объекта от действий пользователя;
наследование - возможность порождать один класс от другого, с сохранением свойств и методов класса-родителя, добавляя дополнительные свойства и методы;
полиморфизм - явление, при котором один и тот же
код выполняется по-разному в зависимости от того, объектом какого класса он
вызывается [10].
1.3 Средства проектирования на
языке UML
Пользу UML трудно переоценить. Это язык графического описания для моделирования в области программного обеспечения. Мало того, что использование графического изображения будущего проекта подразумевает удобство работы с заказчиками и коллегами, но и может быть сгенерировано в код.
На сегодняшний день существует масса средств проектирования, в которых возможно работать с UML-диаграммами. Одна из самых популярных - это Rational Rose.
Основные возможности систем проектирования UML диаграмм:
поддержка UML;
проверка правильности UML-диаграмм;
генерация исходных кодов по диаграмме;
обратный инжиниринг (получение диаграммы при наличии готового кода);
поддержка процессов разработки [11].
Рассмотрим Rational Rose и Microsoft Visual Studio 2012.
Достоинства Rational Rose:
UML поддерживается на всех этапах разработки;
настройка на различные языки программирования и архитектуры программных систем;
возможность обратного проектирования на основе исходных текстов на различных ЯП;
Возможность конфигурирования системы с помощью модулей расширения;
система может быть полезной при изучении основ UML.
Недостатки Rational Rose:
слабо реализована поддержка проектирования ПО для всех ОС, кроме Windows;
единственная возможность написать приложение не для Windows - это использовать язык Java, производительность которого не самая высокая [12].
Достоинства Microsoft Visual Studio 2012:
возможность построения модели таким образом, чтобы её легко было расширять;
большое внимание уделяется разработкам в сфере кодогенерации;
Недостатки Microsoft Visual Studio 2012:
отстает по функциональности от Rational Rose.
В проекте достаточно было изобразить структуру
иерархии, дабы проще было её представить и описать. Поэтому использовано то,
что было под рукой - Microsoft
Visual Studio
2012. Данная среда позволила без труда построить необходимые классы и связать
их нужным образом [13].
1.4 Объектно-ориентированные
языки программирования
Объектно-ориентированные ЯП - это языки, которые способны реализовать все основные механизмы ООП: инкапсуляцию, наследование, полиморфизм.
Так как парадигма очень популярна, то объектно-ориентированных ЯП большое количество. Самые известные из них: С++, С#, Java, Python, Delphi, Objective-C, PHP, ADA и другие.
Сравним некоторые из них:
Ключевым понятием С++ является класс, Класс - тип, определяемый пользователем. Классы обеспечивают скрытие данных, неявное преобразование типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизм перегрузки операций. При создании языка делались так же попытки модернизировать С, введя в его состав такие современные конструкции, как скалярный тип (enum), передача параметра по ссылке (&) или логический тип (bool). С++ является наиболее раздутым и не систематизированным языком, который использует как принципы ООП так и адресную арифметику.
Java - это «молодой» язык программирования и основной инструмент программирования для Internet. Создатели Java удалили из С все несовременные конструкции, и в то же время сумели удержаться от излишнего “раздувания” языка включением в него новых теоретических разработок. В результате получился не очень объемный, но стройный, “крепко сбитый” язык программирования с ярко выраженной идеологией.
ADA-95 - это
самый мощный из используемых сегодня языков программирования. Создание
компиляторов для него стало крайне трудоемким и дорогостоящим делом. Неудачей
можно считать и попытку реализации ООП в ADA. Писать ООП - программы на ADA-95
конечно, можно, но крайне неудобно. В каком-то смысле этот вывод можно
перенести и на весь язык в целом. Единственным несомненным плюсом ADA можно
считать наиболее полную и подробную стандартизацию, вследствие чего
переносимость программ на ADA наиболее лучшая по сравнению с другими языками
программирования [14].
2
2. Расчетно-конструкторская часть
.1 Анализ предметной области
Каждый объект иерархии имеет свой уникальный набор свойств и методов. Вся сложность организации иерархии классов состоит в том, чтобы распределить эти свойства и методы по уровням иерархии таким образом, чтобы у каждого класса в итоге был корректный набор характеристик. Не должно быть ничего лишнего, незначительного. Не должны отсутствовать ключевые свойства. Учитывая механизм наследования, проследить передачу всего содержимого от родительских классов к наследникам зачастую бывает не просто. Поэтому важно выделить более общие черты объектов и частные.
Рассмотрим корневой класс «Сласть». Выделены следующие атрибуты: наименование, тип класса, калорийность, количество белков, жиров и углеводов. Любую сласть можно попробовать на вкус или угостить друга. Корневой класс имеет два наследника: «Натуральная сласть» и «Кондитерское изделие». В отношении натуральных сладких лакомств можно выделить такие атрибуты, как польза и вред. Вред тесно связан с противопоказаниями. Данные продукты употребляются в качестве угощения, в косметологии и народной медицине. Что касается кондитерских изделий, о пользе там говорить не приходится, ничего кроме минутной радости они не доставляют, а при излишнем употреблении могут нанести вред здоровью. Кондитерские изделия - это творение человека, а не природы, следовательно, выделим атрибуты: история происхождения рецепта, основные ингредиенты, способ украшения. Кондитерское изделие можно приготовить по какому-нибудь рецепту.
В качестве наследников класса «Натуральные сласти» выступят: мед, фрукт, ягода, сухофрукт. Мед, кроме унаследованных от родительского класса, имеет следующие атрибуты: время сбора, качество, консистенция, популярность, цвет. Фрукт характеризует место происхождения и сезон созревания, а среди функций можно, например, отметить такие: «Засушить фрукт» и «Приготовить фруктовый сок». Для ягоды отметим родину ягоды и сезон созревания, кроме того их можно заморозить на зиму или приготовить ягодный джем.