Skip to content

Latest commit

 

History

History
executable file
·
56 lines (54 loc) · 5.84 KB

README.md

File metadata and controls

executable file
·
56 lines (54 loc) · 5.84 KB

Приложение для ресторана "Cтарый Рим"

Автор: Тетюшкин Максим КИ22-16/1Б

Краткое описание

Проект выполненен в рамках предмета "Проектирование программного обеспечения".

Приложение создано для вымышленной сети "Старый Рим". Пользовтель в приложении может ознакомиться с меню сети, также предусмотрена оболочка администратора, в котором ответсвенный за работу приложения может редактировать(добавлять) меню ресторанов сети.

Запуск приложения

Для полноценной работы приложения необходимо следующее:

  1. Иметь на компьютере PostgreSQL. Данная СУБД по умолчанию работает с портом 5432, поэтому если этот порт работает с другим процессом, осовбодить его от данного процесса.
  2. Создать базу данных на PostgreSQL под именем gui. База данных в PostgreSQL должна принадлежать пользователю с именем maxim и паролем 12345. Также этот пользователь(роль) должен иметь доступ к созданию таблиц и их редакции в это бд
  3. Создать таблицу item со столбцами id, name, description, photourl(Фотографии блюд будут хранить в директории media, лежащей в корневой папке проекта). Для представления работы меню добавить несколько записей, при этом фотографии блюд разместить в папке media вручную. Шаблон путей для photourl: media/название_фото
  4. Создать таблицу admin со столбцами superuser, password. Для работа оболочки админа также заполнить таблицу хотя бы 1 записью(1 записью также рекомендуется).
  5. Иметь jre или jdk для запуска приложения Для запуска программы, необхдимо через командную строку зайти в корневой каталог проекта ввести:
    java -jar target/NewRome.jar

Соблюдение принципов SOLID

Single Responsibility Principle

Каждый класс в проекте выполняет строго определённую функцию. Например, класс Menu реализует страницу со списокм меню сети, а класс SqlConnection работает с базой данных

Open/Closed Principle

Каждый класс в проекте разработан так, чтобы его можно было расширять, без изменения существующего кода. Например класс ChangeMenu и Login расширяют функционал класса Admin, не меняя код последнего.

Liskov Substitution Principle

Классы проекта разрабатывались так, чтобы наследники расширяли функционал родителей, а не замещали. Так наследники класса Base расширили его функционал, при этом компоненты Base используются в каждом классе

Interface Segregation Principle

В проекте нет интерфейсов, однако использовался встроенный интерфейс ActionListener, чьи методы были реализованы так, чтобы каждый был применим в проекте и не оказался лищним.

Dependency Inversion Principle

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

Паттерн "Одиночка"

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

public class Main {
    public static void main(String[] args) {
        GUI();
    }
    private static void GUI() {
        JFrame main = new JFrame("Старый Рим");
        main.setSize(800, 600);
        main.setLocation(500, 250);
        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        main.setVisible(true);
        main.setContentPane(new Menu(main));
    }
}

Паттерн "Наблюдатель"

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