Професионална програма
Loading...
+ Нов въпрос
mihayloff14 avatar mihayloff14 825 Точки

[Judge] OOP - Валидация и exception-и по време на изпит

Здравейте,

В момента се подготвям за изпита и забелязах един куриозен случай. Когато трябва да се валидира нещо, се изисква да се хвърлят дадени exception-и в определен формат. Например в моя случай:

Throw appropriate exception when data validation fails. When there is an error in a parameter (such as a missing required parameter), throw an ArgumentException, and when there is a forbidden or meaningless method, throw an InvalidOperationException.

The messages for the exceptions should be as follows:

  • For required parameters: The <parameter> is required.
  • For parameters with only positive values: The <parameter> must be positive.

Мисълта ми е, доколко съобщенията, които съдържат exception-ите трябва да отговарят на тези изисквания, тъй като всички знаем, че judge системата изисква абсолютна точност при форматиране на стрингове. Освен това, не ми е ясно какви точно exception-и се хвърлят в различните случаи. Според моето тълкуване, ArgumentException се хвърля винаги при валидация на някакви данни в property-та, докато InvalidOperationException - при грешки в някои методи. Така ли е наистина или се бъркам?

Като цяло, бих искал да разбера дали тези изисквания трябва да се спазват, за да може да минат тестовете в judge или може би те ще бъдат оценявани от проверяващите, за да знаем доколко да се придържаме стриктно към подобни изисквания.

1
C# OOP Basics 02/03/2015 10:36:24
a_rusenov avatar a_rusenov 1103 Точки

Задължително се прави валидация. Ако съобщенията трябва да бъдет в определен формат, то ще бъде казано в условието. В противен случай, правите си редовна валидация с подходящ тип exception + смислено съобщение.

Относно кога какъв exception да хвърляш:

  • ArgumentException - при невалиден аргумент (т.е. причината за възникналата грешка е подаденият аргумент)
  • InvalidOperationException - при изпълняване на някое непозволено действие

В случая на тази задача се изисква хвърлянето на тези 2 ексепшъна (предполагам, защото само те се catch-ват), но това далеч не означава, че са най-подходящите попринцип.

0
28/02/2015 16:52:04
RoYaL avatar RoYaL Trainer 6847 Точки

Long story short, като имаш примерно да създадеш AirTicket и рейнджа на цената е от 10 лв до 3000 лв и инпута идва то потребителя (judge-a) и ти съответно имаш във валидацията на пропъртито Price хвърляне на ексепшън ако value < 10 || value > 3000, този ексепшън ще се появи в конзолата когато някой ти подаде "AirTicket 8000 Sofia Varna". И ако е различен текста, от този който е заложен като expected output ще фейлнеш в judge-а. Така, че да - текстовете трябва да са същите. Типовете ексепшъни трябва да са подходящи, защото после ще има проверка на ръка - и съответно ще ти се вземат точки, ако примерно си хвърлил NullReferenceException за цената, при положение, че е примерно InvalidArgumentException по-правилният.

0
mihayloff14 avatar mihayloff14 825 Точки

Добре, но в случая форматите, които са казани в условието са:

 The <parameter> must be positive. или The <parameter> is required.

На повечето валидации, този формат е подходящ, но има случаи в които валидацията е ралична от това да провериш дали дадено число е положително или дали даден стринг е празен. Например както в случая с AirTicket, който даде като пример как трябва да бъде форматирано съобщението? 

The AirTicket must be between 10 and 3000 или The AirTicket cannot be less than 10 or more than 3000? - примерно.

0
28/02/2015 17:07:16
RoYaL avatar RoYaL Trainer 6847 Точки

Ако имаш такъв случай, най-вероятно ще ти е дадено и в условието какво трябва да пишеш :) Например ще пише, че всички задължителни са "The parameter <name> is required" и че всички, които са в даден рейндж са "The parameter <name> must be between <min> and <max>"

0
28/02/2015 17:28:56
mihayloff14 avatar mihayloff14 825 Точки

В случая не е дадено това.

Става въпрос за задача MusicShopManager от поправката по ООП - 19 януари.

Във частта, в която се казва каква да е валидацията пише следното:

Guitar validity rules:

  • Body and fingerboard wood are required (cannot be missing or blank)
  • Guitars generally have six strings (bass guitars have only four)

В посочените формати не е описано как трябва да изглежда съобщението за този exception. Това което съм направил е да изисквам точно 6 струни освен в случаите когато китарата е bass, но не съм сигурен как да го опиша.

 

0
iordan_93 avatar iordan_93 Trainer 407 Точки

Здравей,

Валидацията в тези задачи (Restaurant Manager и Music Shop Manager) е направена само заради ръчната проверка. Естествено, че в реална ситуация ще хвърляш подходящите exception-и.

Указанията за типовете exception-и, които трябва да се хвърлят в отделните случаи са само за улеснение на студентите, защото това е изпитна задача Така от една страна студентите не се чудят кой точно exception е най-подходящ, от друга страна проверяващите гледат по-малко бисери laughing.

0