# StackApp Решение состоит из 2-х проектов: * StackApp.GUI (каталог StackApp) * StackApp.StackModel Целевая платформа: .Net Framework 4.7.2 ## StackApp.StackModel Данный проект - это библиотека классов. Здесь содержатся классы: * Node * Operations * Stack * NotInitializedException * AlreadyInitializedException * EmptyStackException Классы Node, Stack и методы класса Operations - шаблонные, поэтому при использовании стека мы можем выбирать, какой тип данных он будет хранить. ### Node Данный класс представляет из себя ячейку стека. Имеет 2 поля * Value - значение, хранимое в ячейке * Next - следующая ячейка ### Stack Данный класс хранит всю информацию о стеке, а так же его верхний элемент. Имеет 3 поля: * Head - верхний элемент * Count - количество элементов * Initialized - был ли стек инициализирован Также имеет переопределение метода ToString. ### Operations Статичный класс, методы которого реализуют все операции над стеком. Каждый метод является шаблонным, а также методом расширения. Т.е. вызов этих методов можно производить двумя способами: * stack.Push(value); * Operations.Push(stack, value); ### NotInitializedException Пользовательский класс исключения, который должен выбрасываться, когда производится попытка совершить операцию с неинициализированным стеком. ### AlreadyInitializedException Пользовательский класс исключения, который должен выбрасываться, когда производится попытка совершить инициализацию уже инициализированного стека. ### EmptyStackException Пользовательский класс исключения, который должен выбрасываться, когда производится попытка совершить операцию удаления или получения верхнего элемента с пустым стеком. ## StackApp.GUI GUI для взаимодействия со стеком. Сам объект стека хранится в классе Program, как публичное статическое поле. MainForm - это класс главного окна программы. Все операции, кроме добавления нового элемента, происходит в нём. AddForm - это класс окна добавления нового элемента. Когда оно открывается, главное окно становится недоступным, пока окно AddForm не закроется. Вывод всех результатов производится через MessageBox.