[C# OOP Basics] Encapsulation - Problem 5. Pizza Calories
Искам да предупредя тези, които евентуално са имали проблем с тази задача, че в стъпка 5 от условието има крайно подвеждащи инструкции. По-конкретно:
...Create the class using a proper constructor, expose a method for adding a topping, a public setter for the dough and a getter method for the total calories.
Проблем номер 1: Expose a public setter for the dough - ако изпълните това условие, един тест в Judge няма да ви мине.
Всъщност системата очаква да имате private setter за тестото и да създадете отделен публичен метод, чрез който подавате готово тесто на пицата, а именно:
private Dough Dough { get; set; }
public void SetDough(Dough dough) { Dough = dough; }
Тук пропускам проверката за това дали вече не е зададено тесто, която асистента добави по време на упражнението, защото до нея никога не се стига. Ако на програмата бъде подадено второ тесто тя просто гърми с FormatException, тъй като на съответния ред очаква да получи данни за гарнитура.
Проблем номер 2: Expose a getter method for the total calories - тук на пръв поглед няма нищо съмнително, но това изискване не може да бъде изпълнено, освен ако не бъдат нарушени две предходни:
От стъпка 1 - Create a Dough Class - ... Everything that the class should expose is a getter for the calories per gram.
От стъпка 3 - Create a Topping Class - ... Everything that the class should expose is a getter for the calories per gram.
Не знам за вас, но аз не мога да изпълня тези две условия и след това да изпълня и третото от стъпка 5, защото няма как да видя теглото на тестото и общото тегло на всички гарнитури, след като са приложени куп private access modifier-и.
В тази връзка решението, което асистента ни показа на 20-Фев-2018 не изпълнява условието на задачата.
При него въобще няма getter-и за калории на грам тегло в класовете за тесто и гарнитура, а на тяхно място са създадени property-та за общ брой калорий, които не присъстват никъде в условието, а отгоре на това са и публични.
Не знам, може би. Днес е лекцията за абстракция. Ще гледам, ще слушам и ще разбера - става ли, не става ли.