Homework - Принципи на ООП - част II


2

Ето го моето домашно за втората част от принципите на ООП.


в C# OOP от wnvko (3123 точки)


Отговори



3
Eто и моите решения на задачите.

от baretata (934 точки)


2
Пускам и моите ТУК :)

от dentia (12519 точки)


3

И от мен - тук.

Задача 1: Подобна на демото за полиморфизъм.

Задача 2: Абстрактен клас Account, наследяван от останалите видове сметки, всяка от които override-ва абстракния метод за изчисляване на лихвата. Интерфейс за Withdraw, задължаващ конкретните сметки да имплементират метода.

Задача 3: Generic клас InvalidRangeException, който наследява Exception и override-ва Message property-то + две пропъртита за горна и долна граница на интервала.


от svetlai (1438 точки)


0

Homework myHomework = new PrincipleOOPHomework(task1, taks2, task3);

Малко полиморфизъм :)


от g.yonchev (2087 точки)


0
Ето го и моето домашно. Понеже така и не намерих демо с virtual property, реших да експериментирам малко и направих virtual property-то Height в първа задача. За да може квадратчето (или кръгчето, все тая) допълнително да си валидира данните, като провери дали Height-а му съвпада с вече set-натия Width и ако не - да хвърли подходящ Exception. Разбира се, set-ърите са protected, а не private, за да може наследникът да извика set-ъра на родителя. С два breakpoint-а в property-тата и дебъгъра може да се проследи последователността на преминаване през конструкторите и property-тата - на мен ми беше интересно. :)))

от IlianaB (1137 точки)


1

Здравейте, за да не отварям нова тема с един въпрос ,ще го задам тук по темата:

На 1-ва задача Shapes, е посочено класа Shape да е абстрактен и да съдържа само един абстрактен метод CalcSurface();

След това е написано ,че Triangle и Rectangle трябва да имплементират виртуален метод ,който да връща лицето според зависимостта на вигурата.

Последно кое да избера за метода CalculateSurface()  в Shape , abstract или virual ?

След това имплементацията в класовете наследници е ясна ,с override ,но как да избера кое от двете да е главния метод и как да ги разграничавам за напред? Аз лично клоня към virtual..  Мерси


от IvayloAndonov (1994 точки)


4
Абстрактният метод е виртуален (обратното не е в сила). Всъщност можеш да разглеждаш абстрактният метод като декларация на виртуален метод (т.е. без имплементация). :) В случая мисля, че е по-уместно да бъде абстрактен метода, тъй като всяка фигура изчислява лицето си по различна формула. Ако имаха нещо общо, тогава можеше да се направи виртуален метод в родителя и евентуално наследниците да го пренаписват.

от IlianaB (1137 точки)

1

По-скоро се насочи към абстрактен метод по 2 причини:

1. Абстрактният метод CalculateSurface() няма default implementation, понеже Shape e general figure. Дори да направиш метода virtual, каква ще е базовата ти имплементация?

2. Triangle, Rectangle & Circle са "задължени" да имплементират своя версия на CalculateSurface(), което е логично, имайки предвид, че трите фигури имат различни формули за пресмятане на лице.


от lnikod4s (6538 точки)



1
Homework - много не разбрах частта с exceptions, ако някой види нещо нередно, може да сподели :)

от antoanelenkov (1047 точки)


0

В класа на ексепшъна ти имаш и полета и автоматични пропъртита, а няма нужда да имаш и 2-те.В конструктора така или иначе използваш само полето и така пропъртитата за Старт и Енд не ги използваш никъде.

В този случай може да направиш валидация на полетата в тези пропъртита и да подадеш тях в конструктора за да има смисъл и от 2-те.


от baretata (934 точки)

0
Така е, мерси за поправката, от невнимание съм го направил. :)

от antoanelenkov (1047 точки)


0

Ето моите решения. Моля за критика, защото никой не ми е оценявал домашните и не знам как се справям.


от newmast (116 точки)


0
Не знам до колко е удачно Customer да ти е Enumeration. Така описано заданието е ок - но ако беше реален проект, смятам, че трябва да са отделни класове в който ще имаш съответните пропъртита според типа на клиента. Супер е домашното :).



0

от kon.simeonov (5238 точки)


0
Ето и моите решения

Ще се радвам на забележки/коментари. : ]]

от dilyantraykov (1005 точки)