Софтуерно Инженерство
Loading...
+ Нов въпрос
kaloyan_kolev avatar kaloyan_kolev 8 Точки

Преработка на кода на задачата Military Elite

Здравейте,

 

за първи път качвам кода на задача, която минава 100/100 в Judge, но за всичко си има първи път. laugh Днес събрах кураж и седнах да пиша задачата Military Elite. Старах се през цялото време да следвам конвенциите и принципите, които сме учили, но при крайните класове и интерфейси, може би си личи, че съм изпушил, а да не говорим за Engine класа. Ще съм много благодарен, ако някой колега може да ми помогне с рефакторирането на кода. Все още не съм сигурен кога да запазвам в интерфейс, и кога в клас. Затова на някои места е каша. Качвам кода и условието.

https://github.com/kaloyantihomirov/CSharp-OOP/tree/master/MilitaryElite

https://softuni.bg/downloads/svn/csharp-fundamentals/2019-May/CSharp-OOP-June-2019/04.%20CSharp-OOP-Interfaces-and-Abstraction/04.%20CSharp-OOP-Interfaces-And-Abstraction-Exercises.docx

0
C# OOP Advanced
TeodorStefanovPld avatar TeodorStefanovPld 1258 Точки

е тя е доста straightforward тая задача, като цяло е ок но тоя engine class.. С switch case ще е много по чист.. Ако ти е се заиграва с reflection ще стане доста по кратък, иначе по класовете и другите неща няма кои знае какво да се пипне но те са и доста simple.

0
kaloyan_kolev avatar kaloyan_kolev 8 Точки

Благодаря за отговора! Има ли на места, където мога да вдигна абстракцията и да запазя обекта в интерфейс? Говоря за Add методите в интерфейсите (AddMission и другите) и листовете.

0
19/07/2019 10:50:45
TeodorStefanovPld avatar TeodorStefanovPld 1258 Точки

обект в интерфейс айде не....  

IReadOnlyCollection<Mission> Missions { get; }
 

 това в командо интерфейса е безумие... тея неща не се държат там.. Сега теоритично може да се слагат структури и properties в интерфейсите но не се прави не е добра практика. А колко повече да вдигаш абстракцията няма смисъл.То идеята и е да вдигнеш общите неща. Сега това че командото има addmission ами ок да си стой само при него.

Дали ти трябва отделен интерфейс icommando не можеше всичките да са просто soldier или isoldier.  Абстракцията е хубаво нещо ама човек не трябва да се увлича в нея.

0
kaloyan_kolev avatar kaloyan_kolev 8 Точки

Така ни го показаха на упражнението, така го правим (ICommando интерфейса с Add метода в него). Условието на задачата гласи да направим за всеки клас интерфейс.

обект в интерфейс айде не....

Извинявай за фрапантната грешка! Мисля, че се разбра какво исках да кажа:

public interface IAnimal {}

public abstract class Mammal {}

public class Person : Mammal, IAnimal {}

Animal person = new Person();

Mammal personOne = new Person();

Person personTwo = new Person();

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

0
19/07/2019 14:52:40