08. Military Elite from "Interfaces and Abstraction" Differences Explanation
Привет колеги!
Реших да се завърна на една задача, която преди докарах до 80/100 и зарязах. Предполагам,. всеки ердин от вас си я спомня, но ето линк за исловието:
https://softuni.bg/downloads/svn/csharp-oop-advanced/July-2017/01.%20CSharp-OOP-Advanced-Interfaces-And-Abstraction/01.%20CSharp-OOP-Advanced-Interfaces-And-Abstraction-Exercises.docx
Успях да я докарам дп 100/100, но имам големи разлики с авторското решение в github на курса. Исках да ви питам, каква е разликата и дали моето е добре направено? Дали на изпита и моето би минало?
Основните разликa и тя е в цялата структура е:
1.Аз съм правил класове само за изпозваните в самата програма типове войници. Пример: аз НЕ съм правил клас за Soldier (абстрактен е в авторкото решение) или SpecialisedSoldier, а направих само интерфейси ISoldier и ISpecialisedSoldier,
като ISpecialisedSoldier : ISoldier
и ICommando : ISpecialisedSoldier
и public class Commando : ICommando
в авторското решение:
Soldier : ISoldier
Private : Soldier, IPrivate
ISpecialisedSoldier : IPrivate
SpecialisedSoldier : Private, ISpecialisedSoldier
Commando : SpecialisedSoldier, ICommando
Защо ни е да правим абстрактен клас Soldier и абстрактен клас SpecializedSoldier, при условие,че може да наследим направо интерфейсите?
моят код: https://github.com/ivanduzunov/CSharpOOPAdvancedCourse/tree/master/Interfaces%20and%20Abstraction%20-%20Exercise/08.%20Military%20Elite
авторското решение: https://github.com/CSharpFundamentals/CSharp-OOP-Advanced_July2017/tree/master/MillitaryElite/MilitaryElite
Благодаря!
А добре, защо тогава е нужен абстрактен клас Soldier, при условие,че си имаме интерфейс ISoldier?
Защото този абстрактен клас е вече моделът за всички войници - има си конструктор, override ToString() и каквото друго е нужно.
Значи идеята е да имаме в класовете максимално малко неща, тоест структурата да ни е максимално абстрактна, нали така?