Статички полиморфизам, оператори – питања и задаци¶
Истоимени методи¶
Класа
Stringима мноштво метода који се појављују у више облика, тј. могу да се позивају на различите начине. Покушајте да се сетите неколико примера.Да ли знате неке примере два или више истоимених метода у некој другој класи из стандардне библиотеке?
Наведите примере класе која има више конструктора. Пошто су конструктори једне класе увек истоимени, ово је такође вид статичког полиморфизма.
1. Извлачење бројева
Написати класу Bubanj према опису који следи. Класа треба да симулира
случајан избор једног или више бројева из неког скупа, као у играма на срећу.
Класа има следеће јавне методе и својства:
Конструктор класе, који прихвата један позитиван цео број
n. Овај број представља величину скупа, односно број куглица које се на почетку налазе у бубњу. Куглице су означене бројевима од 1 доn. На пример, објекат генерисан помоћуBubanj(5)може касније да врати бројеве од 1 до 5.Метод
Prazanбез аргумената, који враћа логичку вредност. МетодPrazanвраћа вредностtrueако је из симулираног бубња већ извучено свихnкуглица, тј. ако је до тренутка позива тог метода враћено укупноnбројева у позивима методаIzvuci(видети ниже).Целобројно својство
BrojKuglica, само за читање. Вредност овог својства представља број куглица које се још увек налазе у симулираном бубњу.Метод
Izvuciбез аргумената, који враћа један од бројева који до тада нису враћени као резултат неког од методаIzvuci, тј. један од оних бројева који су и даље у бубњу.Метод
Izvuciса једним целобројним аргументомk, који враћа низ одkбројева који до тада нису враћени као резултат неког од методаIzvuci, тј. низ од некихkбројева који нису били извучени до тада.
Бројеви које враћају методи Izvuci се бирају на случајан начин, тако да сви
бројеви који су још у игри имају једнаке шансе да буду извучени (у складу са
квалитетом генератора случајних бројева). Ако при позиву неког од метода Izvuci
нема довољно куглица у бубњу, метод треба да баци изузетак.
Класа треба да буде написана тако да следећи кôд може да се изврши.
Извршавањем датог кода треба да се добије резултат попут овог (редослед извучених бројева зависи од генератора случајних бројева, битно је само да се појаве сви бројеви од 1 до 5, сваки по једном):
Izvucen je broj 1
False
Broj preostalih kuglica: 4
Izvuceni su brojevi 3 5 4
Izvucen je broj 2
True
Broj preostalih kuglica: 0
Оператори¶
2. Време и оператори
Проширити класу Vreme са странице Енкапсулација - задаци следећим операторима:
Оператор који израчунава разлику два времена и враћа га као цео број секунди.
Оператор који израчунава збир времена и броја секунди и враћа нови објекат типа
Vreme.
Након имплементације ових оператора сабирања и одузимања, следећи кôд треба да се компајлира
без грешака и извршава (програм треба да испише 3724, а затим 02:17:11).
Vreme t1 = new Vreme(1, 15, 7);
Vreme t2 = new Vreme(2, 17, 11);
int dt = t2 - t1;
Console.WriteLine(dt);
Vreme t3 = t1 + dt;
Console.WriteLine(t3);
1. Искористите ово проширење класе за ново решење задатка
Чекање, тако да се у решењу користи одузимање
објеката класе Vreme.
2. Приметимо да запис Vreme t3 = dt + t1; није синтаксно исправан (не може да се компајлира).
Објасните зашто се добија синтаксна грешка и шта би требало урадити да би овакав запис постао
синтаксно исправан.
3. Комплексни бројеви
У именском простору System.Numerics; стандардне библиотеке дефинисана је структура
Complex, која имплементира комплексне бројеве. Ова структура има дефинисане бинарне
операторе +, -, *, /, унарни минус, као и метод ToString, тако да
је њена употреба природна и једноставна.
Написати класу KompleksanBroj са што сличнијим особинама. Ова класа треба да омогући
четири основне рачунске радње над објектима класе, као и између објеката класе и реалних
променљивих.
Напомена: класа KompleksanBroj се тражи само ради увежбавања писања оператора. За практичну
употребу препоручујемо да користите готову структуру кад год је могуће.
4. Велики бројеви
У именском простору System.Numerics; стандардне библиотеке, дефинисана је структура
BigInteger, која имплементира велике целе бројеве. И ова структура се лако и природно
користи захваљујући дефинисаним операторима и методу ToString (видети претходни задатак).
Мада вам за практичну употребу и овде препоручујемо да користите готову структуру кад год је
могуће, у овом задатку треба, вежбе ради, да напишете класу VelikiCeoBroj са што сличнијим
особинама. Ова класа треба да омогући унарни минус, сабирање, одузимање, множење и дељење
објеката класе, као и између објеката класе и целобројних променљивих.
5. Линеарне функције
Написати класу LinFun, која представља линеарну функцију.
Класа треба да има јавни метод double Value(double x), који враћа вредност функције за
дато x. Поред тога, класа треба да омогући сабирање и одузимање линеарних функција, као и
множење линеарне функције реалним бројем (резултат је у сва три случаја нова линеарна функција).
Имплементирати и статички метод LinFun Compose(LinFun a, LinFun b). Резултат извршавања овог
статичког метода је нови објекат, тј. нова линеарна функција, дефинисана са
\(c(x) = a(b(x)), x \in R\).
Класа треба да буде написана тако да следећи кôд може да се изврши.
Извршавањем датог кода треба да се добије следећи резултат:
f3(0) = 8, f4(0) = 13
f3(1) = 13, f4(1) = 19
f3(2) = 18, f4(2) = 25
f3(3) = 23, f4(3) = 31