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

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

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

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

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

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

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

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

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

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

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

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

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

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 - Наследники класса «Сахаристое изделие»