Loading...

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

GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

[Homework] OOP - Inheritance and Abstraction - юни 2015

Отварям тема и за домашното за  наследяването, че тук ще е голямото писане и обсъждане.

ТУК са моите решения на задача 1 и задача 2.

Задача 3 - Done

 

Edit: От коментарите на yanchev_i  и на nikola.m.nikolov успях да дооправя кода. Благодаря и на двамата и ако имате време огледайте го отново, възможно е да съм пропуснала да фиксна нещо.

Edit: Добавих и Enumerator за Gender в клас Cat и съответно се наследи от Kitten i Tomcat... пак с наставленията на nikola.m.nikolov. :)

Кодът е ТУК.

Тагове:
4
C# OOP Basics 10/06/2015 21:26:08
yanchev_i avatar yanchev_i 16 Точки

Здравей,

за задача 2 в условието е посочено, че трябва да се даде усреднената възраст за всеки един вид отделно, а не за всички животни, т.е. първо да се групират и после да се изчисли:

            foreach (var kind in allAnimal.GroupBy(x => x.GetType()))
            {
                double averageAge = kind.Select(x => x.Age).Average();
                Console.WriteLine("Animal : {0}, AverageAge: {1}", kind.Key, averageAge);
            }

Също така дали не е по-удачно интерфейса ISoundProducible да се имплементира на главния клас Animal, и да се унаследява надолу, тъй като той е присъщ за всички подкласове?

Поздрави,

И.

1
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

Да, наистина е по-прегледно интерфейсът да е имплементиран в абстрактния клас  Animal. Ще го поправя. Що се отнася до усреднената възраст вероятно не съм прочела добре условието, така че и него ще фикс-на.
Благодаря!

 

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Хубаво е абстрактните класове да имат protected конструктори. Вторият ми съвет е винаги да използваш interface-и т.е. вместо List<Animal> използвай IList<Animal>. На класовете винаги слагай Access Modifier-ите. Винаги използвай this. Магическите числа ги изкарвай в константи. Пример:

if (value.ToString().Length < 5 || value.ToString().Length > 10)

5 и 10 са такива числа. А и после ги използваш при хвърлянето на грешката, така че ако са константа ще е още по-удобно.

2
09/06/2015 17:21:55
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

Водейки се от съветите и забележките коригирах кода. Благодаря!

п.п може нещо да съм пропуснала, защото да си призная Access Modifiers са ми леко в мъгла и някои правила при наследяването ми убягват

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Доста по-добре е. Другият ми съвет е Gender да ти е Enumerator.

1
trysth avatar trysth 44 Точки

nikola.m.nikolov, гледах в решенията на предишните групи, че също използват Enumerators,  за да дефинират в случая gender, department в зад. 3 и тн. Това ли е правилния начин? Питам, защото не сме ги учили и искам да знам, дали да им обърна внимание.

0
Viktor_Boyanov avatar Viktor_Boyanov 21 Точки

Едно въпросче, защо създаваш този interface в първата задача? Не може ли да се използва FirsName и LastName от абстрактния клас Human?

0
09/06/2015 23:19:30
WindWallk avatar WindWallk 95 Точки

Може, просто се заиграх и забравих да го премахна и да го върна само в първия клас да е така

0
nstanevski avatar nstanevski 37 Точки

Just my 2 cents:

1. Котките могат да бъдат или мъжки (Tomcat) или женски (Kitten). Следователно, класът Cat може да е абстрактен и да има Gender в конструктора си. Tomcat наследява Cat инициализирайки Gender = Gender.Male, а Kitten - Gender.Female. Не че твоят подход е грешен, но по този начин дизайнът става една идея по-абстрактен.

2. В animals.cs към  GetType() може да добавиш свойството Name, т.е. да извикваш GetType().Name и по този начин ще получиш името на типа без префикс за namespace.

0
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

И по двете точки има резон. Да си призная и аз се чудех дали Cat да го правя abstract и реших, че някой може да иска да си направи безполова котка :)  За GetType() ще го променя, защото наистина ще изглежда по-прегледно. :)

0
sashkooooy avatar sashkooooy 26 Точки

Здравейте, аз имам един проблем с трета задача (Company Hierarchy)... В Main метода създавам manager, към него добавям developer и му създавам няколко проекта и след като пусна програмата, на конзолата ми изкарва информация само за мениджъра... Предполагам, че грешката ми е някаде в override на ToString(), но не съм сигурен, още не мога да го разбера как да ми изкарва цялата йерархия. Ето линк към задачката:

https://github.com/sashkooooy/MyRepo/tree/master/Homework3-InheritanceAndAbstraction/3.CompanyHierarchy

Ще се радвам ако някой ми помогне да схвана логиката :).

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