Как корректно реализовать код?

Нужно написать программу, рассчитывающую стоимость и калорийность гамбургера. Использовать ООП подход. Есть пример работы кода:

// маленький гамбургер c начинкой с сыром //
var hamburger = new Hamburger(Hamburger .SIZE_SMALL, Hamburger.STUFFING_CHEESE);

// добавка майонеза
hamburger.addTopping(Hamburger.TOPPING_MAYO);

// спрашиваем сколько калорий
console.log('Calories: ' + hamburger.calculate ());

// тут я передумал и решил добавить еще приправу
hamburger.addTopping(Hamburger .TOPPING_SAUCE);

// Сколько теперь стоит?
console.log('Price with sauce:' + hamburger.calculatePrice());

Пробовал написать сам не очень понимаю как реализовать и рассчитывать цену и калории. Прикрепляю пример моего кода то что пытался сам написать.
class Hamburger {
    constructor() {}
    static SIZE_SMALL (price,calories) {};
    static SIZE_HUGE (price,calories) {};
    static STUFFING_CHEESE (price,calories) {};
    static STUFFING_SALAD (price,calories) {};
    static STUFFING_POTATOE (price,calories) {};
    static TOPPING_SAUCE (price,calories) {};
    static TOPPING_MAYO (price,calories) {};
    addTopping (TOPPING_MAYO) {};
    calculate () {

    }
    calculatePrice () {

    }

}
//_______Размеры гамбургеров_______//
Hamburger.SIZE_SMALL(50,20);
Hamburger.SIZE_HUGE(100,40);

//_______Начинки гамбургеров_______//
Hamburger.STUFFING_CHEESE(10,20);
Hamburger.STUFFING_SALAD(20,5);
Hamburger.STUFFING_POTATOE(15,10);

//_______Добавки к гамбургерам_______//
Hamburger.TOPPING_SAUCE(15,0);
Hamburger.TOPPING_MAYO(20,5);

// маленький гамбургер с начинкой з сыру //
let hamburger = new Hamburger(Hamburger.SIZE_SMALL, Hamburger.STUFFING_CHEESE);

// добавка майонеза
hamburger.addTopping(Hamburger.TOPPING_MAYO);

// спрашиваем сколько калорий
console.log('Calories: ' + hamburger.calculate ());

// тут я передумал и решил добавить еще приправу
hamburger.addTopping(Hamburger .TOPPING_SAUCE);

// Сколько теперь стоит?
console.log('Price with sauce:' + hamburger.calculatePrice());
  • Вопрос задан
  • 427 просмотров
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
class Hamburger {
    constructor(size, stuffing) {
        this.size = size;
        this.stuffing = stuffing;
        this.toppings = [];
    }

    static get SIZE_SMALL() {
        return { name: 'SIZE_SMALL', price: 50, calories: 20 };
    }

    static get SIZE_HUGE() {
        return { name: 'SIZE_HUGE', price: 100, calories: 40 };
    }

    static get STUFFING_CHEESE() {
        return { name: 'STUFFING_CHEESE', price: 10, calories: 20 };
    }

    static get STUFFING_SALAD() {
        return { name: 'STUFFING_SALAD', price: 20, calories: 5 };
    }

    static get STUFFING_POTATOE() {
        return { name: 'STUFFING_POTATOE', price: 15, calories: 10 };
    }

    static get TOPPING_SAUCE() {
        return { name: 'TOPPING_SAUCE', price: 15, calories: 0 };
    }

    static get TOPPING_MAYO() {
        return { name: 'TOPPING_MAYO', price: 20, calories: 5 };
    }

    addTopping(topping) {
        this.toppings.push(topping);
        return this;
    }

    calculateCalories() {
        const toppingCalories = this.toppings.reduce((total, topping) => total + topping.calories, 0);
        return this.size.calories + this.stuffing.calories + toppingCalories;
    }

    calculatePrice() {
        const toppingPrice = this.toppings.reduce((total, topping) => total + topping.price, 0);
        return this.size.price + this.stuffing.price + toppingPrice;
    }
}

const hamburger = new Hamburger(Hamburger.SIZE_SMALL, Hamburger.STUFFING_CHEESE);

hamburger.addTopping(Hamburger.TOPPING_MAYO);
console.log('Calories:', hamburger.calculateCalories());

hamburger.addTopping(Hamburger.TOPPING_SAUCE);
console.log('Calories:', hamburger.calculateCalories());

console.log('Price with sauce:', hamburger.calculatePrice());
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
В подобного рода задчах - стоит цель просто продемонстрировать все что вы знаете про ООП. В данном случае ООП+JS. Поэтому берете любой учебнок по ООП и затаскиваете в ваш гамбургер все-что что там есть. Наследование. Билдер. Декоратор.

Практическая польза от такого кода - нулевая. Потому что справочники размеров бургеров, топпингов и добавок не выделены в отдельные сущности. Тоесть UI не владеет этой информацией и не может корректно наполнить бургер. Или в противном случае UI будет должен каким-то образом (каким?) синхронизироваться с кодом.

Или вы думаете что пользователь в бургерной будет стоять перед терминалов и в Java консоли код набирать?

В реальном бизнес проекте классификатор продуктов может занимать до сотен тысяч позиций. Одних бургеров может быть до 1000 из которых например 300 - в будущих акциях а 400 - удалены с продаж но еще существуют
в справочниках для аналитики. Будут абсолютные дубли по названиям но отличающиеся по цене. Будут товары недоступные любым а только VIP и так далее. Вот такие вот дела.

Поэтому здесь что бургер что кот-собака или человек-обезьяна все едино. Демонстрируйте ООП в вакууме.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы