Статички полиморфизам, оператори - питања и задаци¶
Истоимени методи¶

Класа
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
нема довољно куглица у бубњу, метод треба да баци изузетак.
Класа треба да буде написана тако да следећи кôд може да се изврши.
Извршавањем датог кôда треба да се добијe резултат попут овог (извучени бројеви зависе од генератора случајних бројева, битно је само да се појаве сви бројеви од 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
, тако да
је њена употреба природна и једноставна.
Написати класу KompleksanВrој
са што сличнијим особинама. Ова класа треба да омогући
четири основне рачунске радње над објектима класе, као и између објеката класе и реалних
променљивих.
Напомена: класа KompleksanВrој
се тражи само ради увежбавања писања оператора. За практичну
употребу препоручујемо да користите готову структуру кад год је могуће.

4. Велики бројеви
У именском простору System.Numerics;
стандардне библиотеке, дефинисана је структура
BigInteger
, која имплементира велике целе бројеве. И ова структура се лако и природно
користи захваљујући дефинисаним операторима и методу ToString
(видети претходни задатак).
Мада вам за практичну употребу и овде препоручујемо да користите готову структуру кад год је
могуће, у овом задатку треба, вежбе ради, да напишете класу VelikiCeoВрој
са што сличнијим
особинама. Ова класа треба да омогући унарни минус, сабирање, одузимање, множење и дељење
објеката класе, као и између објеката класе и целобројних променљивих.

5. Линеарне функције
Написати класу LinFun
, која представља линерану функцију.
Класа треба да има јавни метод double Value(double x)
, који враћа вредност функције за
дато x
. Поред тога, класа треба да омогући сабирање и одузимање линеарних функција, као и
множење линеарне функције реалним бројем (резултат је у сва три случаја нова линеарна функција).
Имплементирати и статички метод LinFun Compose(LinFun a, LinFun b)
. Резултат извршавања овог
статичког метода је нови објекат, тј. нова линеарна функција \(c\), дефинисана са
\(c(x) = a(b(x)), x \in R\).
Класа треба да буде написана тако да следећи кôд може да се изврши.
Извршавањем датог кôда треба да се добијe следећи резултат:
f3(0) = 8, f4(0) = 13
f3(1) = 13, f4(1) = 19
f3(2) = 18, f4(2) = 25
f3(3) = 23, f4(3) = 31