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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,16 Мб
  • Опубликовано:
    2016-03-11
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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

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

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

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

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

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




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

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

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


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

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

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

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

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

Среди наследников класса «Монофлерный мед» укажем: «Донниковый мед», «Акациевый мед», «Каштановый мед», «Липовый мед», «Мятный мед», «Малиновый мед», «Клеверный мед», «Гречишный мед», «Шалфейный мед», «Одуванчиковый мед», «Подсолнечниковый мед». У всех этих классов различия только в одном атрибуте, характеризующем только особенности данного класса.

Переходим к кондитерским изделиям. Среди кондитерских изделий принято выделять три большие группы: «Сахаристые», «Мороженое», «Мучные изделия». В классе «Мороженое» можно отметить такой атрибут, как вид упаковки (стаканчик пластмассовый, вафельный стаканчик и др.). Среди функций можно отметить такие: «Таять на солнце», «Облизнуть мороженое». Мучное изделие обязательно подразумевает приготовление теста, следовательно «Вид теста» - один из важных атрибутов данного класса. Еще один атрибут - «Определение мучного изделия» подразумевает краткую характеристику и описание конкретного мучного изделия. Для сахаристых кондитерских изделий тоже отметим похожий атрибут «Определение сахаристого изделия». Кроме того, важны «Популярность» и «Срок годности».

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

Согласно литературным источникам, сахаристые кондитерские изделия подразделяют на такие сласти, как марципан, атрибут которого - метод приготовления, безе со своей особенностью, который можно использовать, например, как верхний слой другого десерта, вареные сахаристые изделия, в которых важна консистенция готового продукта, желе с атрибутом «Цвет желе», зефир, в котором можно отметить атрибут «Польза», помадка с атрибутом «Вид помадки», суфле с атрибутом «Вид суфле», крем с атрибутом «Вид крема», мусс с атрибутом «Основание мусса», конфета с атрибутами «Конфетная основа», «Упаковка», «Форма конфеты», шоколад с атрибутами «Ароматическая добавка» и «Пищевая добавка», цукат с атрибутом «Фруктовая основа». Что касается методов, то крем можно использовать для украшения сласти, а цукаты добавлять в начинку.

К вареным сахаристым изделиям относятся: джем, повидло, конфитюр, мармелад, варенье.

Яркие представители мучных изделий: торт, вафля, сладкий пирог, пирожное, пирожное и печенье. Торт характеризуется числом коржей и его можно украсить свечами. Вафля характеризуется размером клетчатого узора. Сладкий пирог характеризуется видом по степени открытости и способом приготовления (печь или жарить), кроме того, без пирога редко обходятся обряды. Пирожное внешне может напоминать декорированное печенье или кусочек торта - поэтому добавляем свойство «Внешне напоминает». Пряник характеризуется формой. Печенье имеет атрибуты «Добавки», «Начинка» и «Форма печенья». Так же его в процессе приготовления некой сласти можно покрошить для дальнейшего использования.

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

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

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

Шоколад бывает: горький, в порошке, пористый, молочный, диабетический, белый. Шоколад в порошке может так же иметь вид.

UML диаграмма классов, представленная отдельными фрагментами (рисунки А.1 - А.17), наглядно демонстрирует, какие были в ходе проектирования выделены методы и свойства.

иерархия коллекция программирование объектный

2.1    

2.2     Выбор средств проектирования

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

Моделирование UML диаграммы классов осуществлялось с использованием Microsoft Visual Studio 2012. Вполне вероятно есть средства разработки, способные предоставить большее количество возможностей, но в данном проекте диаграмма нужна скорее для демонстрации и представления результата разработки в графическом виде, а не, например, для генерации кода. Поэтому долго выбирать не пришлось, использовалось то, что всегда под рукой.

Почему выбор пал на IDE NetBeans? Просто потому что было интересно попробовать что-то новое. Кроме того, согласно многим источникам, эта среда имеет ряд замечательных свойств и достаточно широкий круг возможностей:

это ПО бесплатное;

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

большой спектр инструментов, шаблонов и образцов;

быстрое интеллектуальное редактирование кода;

легкое и эффективное управление большими проектами;

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

наличие механизмов для выявления и исправления распространенных ошибок в коде;

поддержка большого количества платформ, так как эта среда сама написана на языке Java;

пользователи сами могут дополнять среду своими подключаемыми модулями, так как она расширяема и имеет обширную документацию [15].

Вероятней всего, половина этих возможностей не понадобятся в рамках данного проекта, но из любопытства можно попробовать поработать на этот раз с NetBeans.

2.3     Выбор языка программирования

Язык Java на сегодняшний день широко используется, востребован и имеет большое количество поклонников. Рассмотрим основные положительные и отрицательные свойства:

переносимость - возможность выполнения программ на разных платформах;

безопасность - выполнение программы полностью контролируется виртуальной машиной Java;

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

наличие «сборщика мусора» - автоматическое освобождение памяти при работе программы;

поддержка объектно-ориентированного подхода;

большое число стандартных библиотек;

механизм для автоматической генерации документации;

многообразие типов приложений.

Минусы:

не самое эффективное использование возможностей платформы по сравнению с программой, написанной на родном машинном языке;

при интенсивной работе программы «сборщик мусора» иногда не успевает освободить используемые области памяти, что приводит к ошибкам;

чрезмерная нагрузка на оперативную память компьютера;

отсутствие библиотеки необходимой версии может препятствовать запуску приложения [16][18].

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

2.4     Проектирование классов

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

В некоторых классах определены значения свойств, дабы подчеркнуть, что в рамках курсового проектирования изучалось не только наличие или отсутствие отдельных характеристик, но и конкретные черты объектов. Готовый проект отвечает всем требованиям объектно-ориентированного подхода. На это указывает следующее:

использование абстрактных классов (абстрагирование);

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

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

возможна различная реализация однотипных действий через единый интерфейс, при условии, что данный интерфейс наследуется всеми видами реализации (полиморфизм).

2.5     Проектирование коллекций

Коллекции - это очень мощный и исключительно полезный механизм. Поэтому средства работы с коллекциями в Java так развиты. В рамках этого языка коллекции разбиты на три больших категории: List (список), Set (множество), Map (отображение) [17].

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

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

3       

3. Экспериментальная часть

Один из важных этапов разработки конечного программного продукта - это тестирование.

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

Рисунок 1 - Ошибка при попытке создать представителя абстрактного класса

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

Продемонстрируем результат работы одной из коллекций, например второй. Результат на рисунке 2.

Рисунок 2 - Результат работы с коллекцией номер два

Приведем пример полиморфизма. В корневом классе Sweet есть метод Treat_friend(String name), который возвращает сообщение «Угостили друга (имя друга)». Создадим экземпляр класса «Джем» и экземпляр класса «Торт». Разница между ними в том, что в классе «Торт» метод Treat_friend(String name) переопределен и вызывает сообщение «Угостили тортиком друга (имя друга)», а для класса «Джем» - нет. Вызовем метод для того и другого представителя. Результат на рисунке 3.

Рисунок 3 - Демонстрация полиморфизма

Попробуем добавить в коллекцию конфет булочку (рисунок 4).

Рисунок 4 - Попытка добавить в коллекцию посторонний элемент

Результат на рисунке 5.

Рисунок 5 - Коллекция не пополняется посторонними элементами

Заключение

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

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

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

Но у этой системы есть один существенный недостаток - на данном этапе она не применима. Во-первых, для такой обширной предметной области 95 классов - это крайне мало. В зависимости от сферы применения содержимое классов необходимо будет подкорректировать. Если она будет применяться для изучения рынка сластей в стране, то каждое новое изделие необходимо будет как-то фиксировать в системе, кроме того среди свойств появится информация о производителе, положении на рынке, популярности, технологиях производства, спросе. Если модель применить для планирования ассортимента кондитерского магазина, то важна будет информация о популярности тех или иных сластей, цене, популярности среди возрастных категорий, срок годности и др. По модели можно изучать историю развития кондитерского искусства. Тогда появятся свойства исторического характера: время появления, родина рецепта, создатель, информация об усовершенствованных формах сласти и новых технологиях приготовления. Изменится и функциональная составляющая.

Список использованных источников

1. (#"866732.files/image006.jpg">

Рисунок А.1 - Наследники корневого класса «Сласть»

Рисунок А.2 - Наследники класса «Натуральная сласть»

Рисунок А.3 - Наследники класса «Мед»

Рисунок А.4 - Наследники класса «Полифлерный мед»

Рисунок А.5 - Наследники класса «Монофлерный мед»

Рисунок А.6 - Наследники класса «Кондитерское изделие»

Рисунок А.7 - Наследники класса «Мороженое»

Рисунок А.8 - Наследники класса «Сахаристое изделие»

Рисунок А.9 - Наследники класса «Вареное сахаристое изделие»

Рисунок А.10 - Наследники класса «Шоколад»

Рисунок А.11 - Наследники класса «Конфета»

Рисунок А.12 - Наследники класса «Мучное изделие»

Рисунок А.13 - Наследники класса «Торт»

Рисунок А.14 - Наследники класса «Печенье»

Рисунок А.15 - Наследники класса «Сладкий пирог»

Рисунок А.16 - Наследники класса «Пирожное»

Рисунок А.17 - Наследники класса «Пряник»

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!