Квиз¶
У овом примеру представљамо апликацију Квиз. То је конзолна апликација, која омогућава кориснику да одговара на питања из учитаног квиза, а када заврши са одговарањем да види свој резултат.
Апликација приликом покретања нуди корисника да зада путању до фајла са питањима, а затим учитава садржај квиза и приказује прво питање. Корисник у сваком тренутку може да пређе на претходно или следеће питање притиском на тастере PageUp и PageDown. На текућем питању корисник може да зада, или да промени претходно дати одговор.
У питањима са више понуђених одговора, корисник се креће кроз одговоре стрелицама горе/доле. Избор одговора се врши притиском на тастер Space. Постоје две подврсте овог типа питања, а то су питања у којима треба изабрати тачно један одговор и питања у којима треба изабрати нула или више понуђених одговора.
У питањима у којима треба да се упише реч, корисник може да користи тастере Backspace, Delete, стрелице лево и десно, као и слова и цифре.
У питањима у којима треба да се одреди редослед датих појмова, корисник такође може да користи тастере Backspace, Delete, стрелице лево/десно и почетна слова енглеске абецеде (онолико слова колико има појмова).
Притиском на тастер Enter корисник завршава са одговарањем и програм исписује број освојених поена.
Свака врста питања има своје специфичности, тако да се намеће формирање апстрактне класе Question
,
из које ће бити изведене класе за појединачне врсте питања. Те класе су:
ABCQuestion
за питања са више понуђених одговора од којих је један тачан,MultipleAnswersQuestion
за питања са више понуђених одговора, од којих може бити било који број тачних,FillInTheBlanksQuestion
за питања у којима треба да се упише реч, иParsonsQuestion
за питања у којима треба да се одреди редослед датих појмова.
Свака од ових класа на свој начин приказује питање, тумачи улаз корисника, бодује одговор, учитава питање из фајла и претвара га у специјално форматиран текст ради уписа у фајл. Ове радње се најједноставније остварују помоћу метода који су у базној класи апстрактни, а у изведеним класама имплементирани на одговарајући начин. Детаљи имплементације могу да се виде у изворном коду.
Садржај фајла Question.cs
Потребна нам је и једна централна класа, која садржи колекцију питања, омогућава учитавање квиза
из фајла, чување квиза у фајлу (мада не садржи едитор питања), кретање кроз питања, сабирање и
приказ поена. Ту класу смо назвали Quiz
.
У класи Quiz
се не помињу класе које представљају појединачне врсте питања, већ се користи
само апстрактна базна класа Question
, преко које се позивају методи за приказ, руковање
улазом корисника, бодовање итд. Пошто не мора да води рачуна о врстама питања, класа Quiz
је
прилично једноставна.
Садржај фајла Quiz.cs
На крају, ево и класе Program
, од које почиње извршавање. У методу Main
се само учитава
и покреће квиз.
Садржај фајла Program.cs
Апликација би могла да се допуни на разне начине (нпр. да након бодовања прикаже и тачне одговоре, да понуди отварање новог квиза и слично), али и без тога има минималну заокружену функционалност и потпуно је употребљива. Мада као целина није сасвим једноставна, у њој нема нарочито сложених делова – свака класа је довољно мала и може да се детаљно разуме.
Класе нису направљене тако да могу у потпуности да се уклопе у апликацију са другачијим корисничким
интерфејсом, али би њихов значајан део (методи Sample
, FromStream
, ToText
, Evaluate
)
могао да се искористи и у другим апликацијама.