Изпитни задачи


5

Ето Тук са моите решения на някои от миналите изпити. Давайте забелешки.




Отговори



2

В ExtensionInteractionManager имаш повторение на код, например в метода CreateItem повтаряш кода от базовия клас за armor. За да не се получава така може в default да извикаш метода от базовия клас например така:

default:
    return base.CreateItem(itemTypeString, itemNameString, itemLocation, item);

Вероятно не си забелязала, но в диаграмата имаше клас GatheringLocation и интерфейс IGatheringLocation. Forest и Mine би трябвало да наследяват този клас - така "производството" на items става доста по-лесно и без повторение на кода. По принцип в този тип задачи е изключително важно да се разгледа всичко - няма нито един случаен ред код :)

Иначе като цяло задачата е супер - Браво!!!

Вярвам, че си ударила стоте точки :)

Успех и на изпита!


от wnvko (3123 точки)


1

 При тези задачи като че ли най-важно е да се разбере как работят командите и ДА СЕ ВНИМАВА С ПЕЧАТАНЕТО. Също копи-пейст на кода е много опасен. Засега реших 10-на задачи, искаше ми се да мина всички ма май няма да стигне времето. 

 Бих отбелязал също, че на повечето задачи които реших няма брутални тестове за разлика от C#2. Общо взето ако се вземе нулевия тест се вадят 100 точки. Ето моите произведения:

 https://github.com/vonko/VonkoProjects/tree/master/C%23/25.OOP%20Exam%20Preparation


от ivan.mihov1 (4988 точки)


1
Много добре ,пробвай се на Infestation ;)

от IvayloAndonov (1994 точки)

0
Да, и аз съм любопитен някой бутнал 100% да сподели решението, защото повече от 75 не мога да взема :(

от todorm85 (1347 точки)



2

Само Furniture разгледах и като препоръки:

- set методите да ги държиш с минимално ниво на достъп и само ако се наложи, да го вдигаш. Примерно моделът на мебелите или пък краката на столовете съвсем спокойно могат да са ти private, не е нужно да са protected, тъй като се set-ват само при създаването на обектите (т.е. от конструктора в съответния базов клас). Виж вече при Height-а има смисъл да е protected (задължително е всъщност), тъй като по условие ти е казано, че ConvertibleChair-ът си сменя височината чрез метод. Т.е. само това би следвало да те накара да разшириш достъпа до set метода на полето Height, така че и наследниците да го виждат. :) /Разбира се, ако ти е в интерфейса, ясно е, че не го пипаш/

- не се предоверявай на дадените неща "на готово". ToString методите на всички наследници трябва да преизползват ToString-а на базовия клас и само да добавят специфичните за тях неща (примерно столовете - само броя на краката). 

- не си си защитила колекцията с мебели на компанията. Видях, че сте го разисквали вече в друга твоя тема, така че това няма да го повтарям. :)


от IlianaB (1137 точки)


3

Пускам едно решение на Infestation, понеже гледам, че има интерес. 

Задачата действително е доста объркваща на пръв поглед, но постепенно се изяснява с решаването. Най-трудният момент, като че ли (след като препрочетеш 3 пъти условието и най-накрая започне леко да ти просветва що за чудо е това), е съобразяването на методите, които трябва да се override-нат, за съответните атаки - в Marine, Parasite и Queen (последните два в един общ абстрактен клас - Infestor при мен). Weapon и InfestationSpores override-ват ReactTo, за което човек трябва да се ориентира по това, че в условието на задачата е посочено, че имат някакви по-особени реакции в случай, че Unit-а притежава някой конкретен Supplement. След което остава extend-ването на HoldingPen (ExtendedPen), където се добавят новите обекти, които сме създали, новият тип атака - Infest и имплементирането на ExecuteAddSupplementCommand, в който трябва да се съобрази, че не могат да се добавят InfestationSpores и WeaponrySkill (по условие). Май е това. Нищо работа. :D


от svetlai (1438 точки)


0

Три часа и половина отделих за Infestation и добутах 62/100 точки. Лично за мене това е най-тудната, с най-заплетеното условие, и както са казали някои трейнъри, има грешки в условието..


от g.yonchev (2087 точки)


0
Аз открих само една грешка - царицата трябва да избира за infest този обект, който е с най-много здраве от възможните за infest обекти, а не както е в условието - с най-малко здраве (като паразита). Ако се спазва условието, нулевият тест не минава и, на мен поне, ми дава в bgcoder 75/100, но с малко дебъг обаче се вижда кое не е наред (ако всичко останало е вярно, разбира се). Иначе, и аз смятам, че е най-трудна от задачите досега.

от vassildinev (365 точки)

0

При мен царицата си избира обекта с най-малко здраве и си минава.

При теб, най-вероятно, я няма проверката за това дали вида на обекта, който се опитва да infest-не може да infest-ва обект от типа на целта (target).

Затова не ти минава коректно първия тест.

Виж "InfestationRequirements.cs" класа (има го и в условието) - кои обекти какъв тип могат да infest-ват.


от nasko717 (180 точки)


0

 Току що реших тази най-известна задача infestation.

 Тъй като всички много я похвалихте и отделих доста време и я четох по-внимателно от всички досега. След 4 часа я докарах до 75 точки и после бях сигурен, че има изцепка в условието! Отворих темата, оправих условието за царицата и 100 точки.

 Честно казано не е много трудна задачата, ама ако изпита беше 8 часа :)

Ето решението:

  https://github.com/vonko/VonkoProjects/tree/master/C%23/25.OOP%20Exam%20Preparation/12.Infestation


от ivan.mihov1 (4988 точки)


0

Колега,

Мисля, че и при теб е същата ситуация като горния коментар.

Царицата трябва да избира минималния health, НО има и друго условие, според което определен вид може да инфества точно определен друг вид.

В случая царицата може да инфества 'UnitClassification.Mechanical' и 'UnitClassification.Psionic' , но не може да инфества "UnitClassification.Biological.


от nasko717 (180 точки)

0
 Сори, нещо съм объркал. ИСках да кажа, че като оправих това за  макс health на царицата, което дори не Е ЗАГАТНАТО В УСЛОВИЕТО, решението изкара 100. Другото си го пише черно на бяло.

от ivan.mihov1 (4988 точки)



1
https://github.com/danielpetrov/Furniture
Много добро решение от мен на Furniture спазващо принципите на ООП с четим код и 100/100 в БГКодер. Все пак приемам критика ако някой не е прекалено зает. Един съвет от мен - използвайте региони за Полета, Пропъртита и Методи. Затваряте ги и така няма да си изцикляте очите като после търсите нещо, а и кода ви е по-четим и за трейнърите. Другите бла-бла използвайте максимално ООП ги знаете. В задачката трика е, че Enum като стринг си връща стойноста както е. Има разминаване в главните букви на материялите и ако не изпозлвате функцията с enum-те после ще трябва да правите магии за да вдигнете само първата буква от стринговете на модел.



2
Регионите като цяло са лоша практика...

от ivaylo.kenov (30760 точки)

0

А писане на коментари преди всяко добра практика ли е? Например:
//fields
..
..
//properties
..
..
//constructors
...


от jumarto (808 точки)