[[HOMEWORK][OOP - June 2015]OOP-Encapsulation-and-Polymorphism-Homework
Ето ги моите решения на задачите:
Отворен съм към всякакви критики и въпроси.
Ето ги моите решения на задачите:
Отворен съм към всякакви критики и въпроси.
За банката някой да поясни за interest rate и interest (лихвата)
А = money * (1 + interest rate * months) какво трябва да бъде - проценти, крайна сума или ...?
money -> това текущия баланс ли е или е независима променлива?
Струва ми се, че твоите клиенти ще започнат да теглят заеми от минус 5000, и в сметките им магически парите ще започнат да се увеличават :)
В решението ти на първа задача си писал класа Circle като child class на BasicShape. Така ли трябва да четем условието на задачата? Аз реших, че Circle е отделен клас, който просто имплементира IShape, понеже не е експлицитно указано, че е subclass на BasicShape...
Точно така, кръга няма ширина или някакви други дивотии, той не е BasicShape, но е IShape. Стандартна грешка, която всички випуски са правили до момента в тази задача.
Мерси!
Аз го направих да не наследява BasicShape обаче после като натъпках всичките формички в масив от обекти ришарпъра взе да реве, че трябвало да ползвам as за кастване и да правя и null проверка като цикля масива. Тва кво значи да създам една променлива, дето да каствам текущия обект към BasicShape и ако е null да правя друга променлива дето да каствам текущия обект към Circle и ако и там не е null да си печатам резултата, така ли?
Иначе програмата работи.
04.OOP-Encapsulation-and-Polymorphism-Homework/01.Shapes/Shapes.cs
Здравей колега,
Относно втора задача и конкретно метода CalculateInterest(). При Loan accounts се иска да се сметне лихвата, като се вземе на предвид, че при индивидуален клиент първите 3 месеца са без лихва, а при корпоративни първите 2 месеца са без лихва. В твоя случай, ти правиш проверка, че ако месеците са по-малко от 3, да се връща 0, което е вярно, но мисля че ти трябва още една проверка, която да е за по-дълъг период от време. Като същото се отнася и за Моrtgage accounts.
Пример:
if (months > 3 && this.Customers == Customers.Individual)
{
return this.InterestRate = this.Balance * (1 + (this.InterestRate * (months - 3)));
}
else if (months > 2 && this.Customers == Customers.Company)
{
return this.InterestRate = this.Balance * (1 + (this.InterestRate * (months - 2)));
}
Това със сигурност не трябва да става със if/else/switch, на 20тия вид клиент ще резултираш с някакъв огромен чаршаф if/else... Това е нарушение на така наречение Open/Closed principle
В конкретния случай, може да се симплифицира като тези месеци се изнесат в customer-а, съответно ще е само един IF - if(months > this.Customer.Requiredmonths) { /// }
Имам чувството и че погрешно си кръстил пропъртито в множествено число, не става ли въпрос за един клиент? Ако става въпрос за множество такива, едва ли можеш да използваш оператора за сравнение ==
https://github.com/onefen/Homework-EncapsulationAndPolymorphism/tree/master/EncapsulationAndPolymorphism
Първите две задачи. Третата е To Do дет се вика
Въпреки всичко не можах добре да схвана каква е ползата от интерфейсите. Така или иначе методите ги пишеш вътре в съответния клас, ако си декларираш един метод като абстрактен в абстрактния клас си длъжен да го овъррайднеш в класа наследник. Какъв е смисъла да ги изброяваш методите и в интерфейса?
Аз се позаиграх малко повече от необходимото с втора задача, поне като гледам решенията на колегите. Не съм имплементирал капитализиране на лихва и тем подобни(макар че има някакъв жалък опит), но поне се опитах да обвържа всякакви банкови операции с конкретни дати, на които са извършени. Със сигурност има пропуски и недомислици, ама нямах време да обмислям и структурирам нещата като хората.
ЦЪК!!! за който има интерес.
Здравей Сашо,
на задача 3.Game Engine, класа Healer нещо ми се струва недовършен.
Най-малкото му липсва ToString() метода и може би за това ти дава некоректни резултати с примера, който е в домашното.
Да, пропуснал съм ToString() метода, благодаря :) Инаяе го разгледах и нищо друго не съм пропуснал(или поне на мен така ми изглеьда)
Здравейте, аз имам едно въпросче относно Mortgage класа в 2-ра...
Тъй като малко се оплетох с тоя Рейт, това като вариант на метода CalculateInterests правилен ли е ?
public override double CalculateInterest(int months)
{
double interests = this.Balance * (1 + this.Rate * months);
if (months < 6 && this.CustomerType == Customer.Individuals)
{
this.Rate = 0;
}
else if (months < 12 && this.CustomerType == Customer.Companies)
{
this.Rate = interests / 2;
}
else
{
this.Rate = interests;
}
return this.Rate;
}
Хубаво е функциите да правят само едно нещо. Имаш метод CreateCharacter(), койо също добавя играча. Според мен е по-добре само да връщаш инстанция от този играч и в ExecuteCommand() да го добавиш. При AddItem() също.
Също е добре CreateCharacter() да не знае колко трябва да е Health-a и другите пропъртита на играчите, а те сами да си знаят. Можеш да си направиш константи с default-ните пропъртита и да ги слагаш директно в конструктура, без да приемаш параметри за съответните prop.
Ето ти моите Mage и CustomEngine
Имам едно питане. Не трябва ли пропъртито Balance да е абстрактно, тъй като Balance за Deposit може да е само положителен или 0(при откриването на такав акаунт баланса ти е 0. Депозираш си някви пари в банката и после си ги теглиш когато ти трябват, а банката ти дава лихва за времето за което парите ти стоят в нея) Също така метода CalculateInterest() мисля, че трябва да е virtual тъй като има различни условия за различните акаунти кога има и кога нямат лихва и трябва да се ovvertite в отделните класове.
Или бъркам?
Гледайки формулата interest rate трябва да е подадено като процент, т.е. 7% == 0.07. money е текущия баланс, а A е баланса с начислена лихва.