Loading...
StaVykoV avatar StaVykoV 169 Точки

[Java - OOP Advanced - Exercises] Problem08 - MilitaryElite

Здравейте!

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

Тъй като field-овете на Soldier, по условието на задачата, ще се достъпват само от наследниците му и то за toString() метода. Има ли смисъл да правим гетърите публични и съответно въобще да имаме интерфейс ISoldier?

Поздрави!

П.П. Всъщност ако ползваме гетърите само за toString(), реално ни стигат да са private за всички класове нали?

Тагове:
0
C# OOP Basics 15/07/2016 03:00:18
Ivan_Pashkulev avatar Ivan_Pashkulev 20 Точки

Да, така е, освен за toString() не се достъпват от никъде и могат да са private. Явно идеята е да упражним интерфейсите и да свикнем да програмираме към интерфейси.

0
IvelinTenev avatar IvelinTenev 51 Точки

Поправете ме ако греша, но toString() методите не трябва да са private. Доколкото разбирам, @Override toString() се прави за да дефинира как се отпечатва даден обект. Примерно: System.out.print(soldier)

Също, ако не се лъжа, toString() няма нужда да се декларират в интерфейса, защото се наследяват от Object.

Поздрави,

Ивелин Тенев

0
Ivan_Pashkulev avatar Ivan_Pashkulev 20 Точки

Да прав си, така е - toString си е публичен метод на Object. Няма как да бъде private. Става дума за публичните гетъри от класовете на войниците. Понеже ги пишем към интерфейси, интерфейса ни задължава те да са публични, но иначе за целите на задачата можеше да си останат private защото единственото място където се ползват е в toString() метода на войника. В случая се упражняваме да пишем класовете към интерфейси.

0
IvelinTenev avatar IvelinTenev 51 Точки

Да, не бях разбрал напълно предишния ти пост. Снощи до 3 си играх с това и още не съм се преборил :)

Доколкото разбирам правилата са следните:

  • Ако поле се ползва само от неговия клас, няма нужда от getter към него.
  • Ако имаме getter, няма идея той да не е public. В абстрактните класове property-тата могат да са protected, въпреки че няма голяма идея, тъй като абстрактните класове не могат да се инстанциират.
  • Private пропертита нямат смисъл.

Към ОП: Ако не се лъжа, field-вете на Soldier не трябва да се достъпват от наследниците му, а да се преизползва super.toString() метода.

Поздрави,

Ивелин Тенев

0
17/07/2016 16:29:41
IvelinTenev avatar IvelinTenev 51 Точки

Съжалявам, че прихващам темата, но смятам че на ОП вече е отговорено, и че е по-добре да не се отварят много теми за една задача.

Може ли някой с решение за 100 точки да го качи да го разгледаме, че доста време си блъскам главата безрезултатно. За първи тест стана ясно, че водещите нули в кода на Spy не трябва да се отпечатват, макар това да е пропуснато в условието. Трети тест ми гърми с Runtime error, а четвърти - Incorrect answer.

Благодаря предварително! 

0
kosio197 avatar kosio197 104 Точки

Привет,

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

https://github.com/kosio197/InterfacesAndAbstraction/tree/master/src/bg/softuni/militaryelite

 

0
IskrenPenev avatar IskrenPenev 177 Точки

http://pastebin.com/4DmX09KY

Това е моето решение - работната версия която качих в джъджа(всички класове и интерфейси са в 1 файл). Иначе дава 100/100.

 

0
17/07/2016 22:05:20
kaloyannikov avatar kaloyannikov 531 Точки

Github , като цяло задачката е добра и има доста за писане.

Иначе единствено може би ти дава NullPointerException . Не знам как ти е имплементирана логиката , провери различните кейсове.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.