Материал: Проектирование иерархии типов: Сласти

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Проектирование иерархии типов: Сласти

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение

высшего профессионального образования

«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ «МИФИ»

Озерский технологический институт - филиал НИЯУ МИФИ

Кафедра прикладной математики




КУРСОВАЯ РАБОТА

по дисциплине «Объектно-ориентированное программирование»

Тема: «Проектирование иерархии типов: Сласти»


Выполнил студент гр. 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 Анализ предметной области

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

Рассмотрим корневой класс «Сласть». Выделены следующие атрибуты: наименование, тип класса, калорийность, количество белков, жиров и углеводов. Любую сласть можно попробовать на вкус или угостить друга. Корневой класс имеет два наследника: «Натуральная сласть» и «Кондитерское изделие». В отношении натуральных сладких лакомств можно выделить такие атрибуты, как польза и вред. Вред тесно связан с противопоказаниями. Данные продукты употребляются в качестве угощения, в косметологии и народной медицине. Что касается кондитерских изделий, о пользе там говорить не приходится, ничего кроме минутной радости они не доставляют, а при излишнем употреблении могут нанести вред здоровью. Кондитерские изделия - это творение человека, а не природы, следовательно, выделим атрибуты: история происхождения рецепта, основные ингредиенты, способ украшения. Кондитерское изделие можно приготовить по какому-нибудь рецепту.

В качестве наследников класса «Натуральные сласти» выступят: мед, фрукт, ягода, сухофрукт. Мед, кроме унаследованных от родительского класса, имеет следующие атрибуты: время сбора, качество, консистенция, популярность, цвет. Фрукт характеризует место происхождения и сезон созревания, а среди функций можно, например, отметить такие: «Засушить фрукт» и «Приготовить фруктовый сок». Для ягоды отметим родину ягоды и сезон созревания, кроме того их можно заморозить на зиму или приготовить ягодный джем.