ЕЛЕКТРОТЕХНИЧКИ ФАКУЛТЕТ Одсеци за СИ, ИР, ОС и ОФ Београд, 25.05.2019. Други домаћи задатак из Објектно оријентисаног програмирања 2 У сваком задатку: Грешке пријављивати изузецима типа класа које садрже текст поруке. На располагању стоји класа Citaj у пакету usluge. НАПОМЕНЕ: а) Домаћи задатак је намењен студентима за самосталну вежбу ради припреме за 3. лабораторијску вежбу. б) Домаћи задатак се не оцењује, али један од задатака ће представљати основу за 3. лабораторијску вежбу; на вежби ће бити потребно реализовати неке класе, са или без модификације, из оригиналне поставке задатка, као и неке додатне класе везане за исти проблем. 1) Написати на језику Java следећи пакет типова: Приказивач на придруженој вишередној текстуалној компоненти графичке корисничке површи може да прикаже један текстуални (String) податак. Може да се постави садржај текста на нову вредност и да се на постојећи садржај додаје још текста. Активан апстрактан актер одређује вредност броја у задатом броју итерација. После сваког задатог броја итерација, придруженом приказивачу се додаје један ред текста који садржи укупан број итерација, тренутну приближну вредност и апсолутну вредност разлике у односу на претходну итерацију. Рад актера може да се прекине и превремено. Ојлер је актер који за рачунање броја користи приложену Ојлерову формулу. Круг је актер који вредност броја одређује тако што генерише тачке са случајним координатама у опсегу од 0 до 1 и броји колико њих пада унутар четвртине круга, са центром у координатном почетку и јединичним полупречником, у првом квадранту. Ако од укупно n тачака m пада унутар тог исечка, узима се да је 4 m / n. Програм коришћењем графичке корисничке површи према слици приказује рад претходних класа. У менију Komande налазе се команде Kreni, Prekini и Zavrsi. 6 n k= 1 1 2 k
2) Написати на језику Java следећи пакет типова: Апстрактан активан актер понавља одређену апстрактну радњу. При свакој промени стања приказује свој текстуални опис на задатој графичкој компоненти типа натписа (Label). Рад актера може да се заустави, да се настави даље и да се дефинитивно прекине. Станица је актер који генерише путнике и има своје име. У станицу у случајним временским интервалима између задате најкраће и најдуже вредности стиже по један путник. Може да се дохвати име и број путника у станици и да се смањи број путника за задати број. Текстуални опис станице садржи име станице и број путника који чекају. Возило је актер који има своју ознаку и капацитет. Креће се наизменично од почетка до краја и назад дуж линије градског саобраћаја. Вожња до наредне станице траје случајно време између задатог најкраћег и најдужег времена. Задржавање у станици траје задато фиксно време. Тада прво из возила излази случајан број путника од 0 до 100% и после улази највећи могући број путника од оних који чекају у станици. Текстуални опис возила садржи ознаку возила, назив станице ка којој се возило креће или у којој се налази и број путника у возилу. Линија градског саобраћаја садржи известан број станица и возила које ствара на основу задатог низа имена станица, заједничког најмањег и најдужег времена између долазака путника, низа ознака возила, заједничког капацитета, времена задржавања у станицама и најкраћег и најдужег времена вожње између две станице. Својим актерима придружује по један графички натпис које распоређује на задате две графичке плоче (Panel), за станице на једну и за возила на другу. Може да се дохвати број станица и станица са задатим редним бројем и да се управља радом свих актера у линији (крени, стани, прекини). Програм на графичкој корисничкој површи симулира рад линије градског саобраћаја помоћу 5 станица у које путници стижу после сваких 0,5 до 1 s и два возила капацитета 40 путника, временом задржавања од 1 s и временом вожње између две станице од 2 до 4 s.
3) Написати на језику Java следећи пакет типова: Тачка у равни се задаје реалним координатама које могу да се дохвате. Параметарска крива предвиђа израчунавање тачке у равни на основу задатог реалног параметра t и састављање текстуалног описа који садржи назив врсте криве. Цртеж је графичка компонента по којој може да се црта задата крива задатом бојом мењајући параметар t од tmin до tmax са кораком Δt. Приликом стварања цртежа задају се опсези координата који се пресликају на целу компоненту и који касније не могу да се промене, тако да изглед криве зависи од актуелне величине компоненте. Спирала је крива задата формулама x=a t cos(b t+c) и y=a t sin(b t+c). Коефицијенти a, b и c се задају приликом стварања спирале. Полином је крива задата формулама x=t и y=poli(t). При стварању се задаје низ коефицијената. Програм на графичкој корисничкој површи црта одабрану криву с одабраним параметрима. Опсег координата на цртежу дуж обе осе је ±10. Садржај податка s типа String може да се разложи на редове методом String[] s.split("\n").
4) Написати на језику Java следећи пакет типова: Функција предвиђа израчунавање вредности реалне функције f(x) и састављање текстуалног описа функције. Синусоида је функција која на основу задатих реалних параметара a, b и c израчунава a sin(b x+c). Текстуални облик је a*sin(b*x+c). Збир функција је функција која може да садржи произвољан број функција. Ствара се празан после чега се функције додају једна по једна. Могу одједном да се избаце све функције. Вредност је једнака збиру вредности свих садржаних функција за дато x. Текстуални опис садржи текстуалне описе садржаних функција, једна функција по реду. Активан график је графичка компонента која сваких 10 ms у задатом броју тачака црта задату функцију f(x+v t), где је t [s] време протекло од почетка цртања, а v параметар који може да се поставља. Приликом стварања цртежа задају се опсези координата који се пресликају на целу компоненту и који касније не могу да се промене, тако да изглед криве зависи од актуелне величине компоненте. Рад графика може да се заустави, да се настави даље и да се дефинитивно прекине. Програм на графичкој корисничкој површи према слици може да саставља један збир функција и да управља цртањем те функције. Опсег координата на цртежу дуж обе осе је ±10. Цртање се врши у 200 тачака. Промена параметра v има тренутно дејство. У компоненти у горњем левом углу се само приказује текстуални опис функције.
5) Написати на језику Java следећи пакет типова: Производ има јединствен, аутоматски генерисан идентификациони број. Текстуални облик производа садржи само његов идентификациони број. Складиште производа може да смести задати број производа. Ствара се празно, после чега може да се додаје и узима по један производ. При покушају стављања у пуно складиште односно узимања из празног складишта нит извршиоца радње се привремено блокира. Текстуални облик складишта састоји се од низа текстуалних облика садржаних производа, један производ по реду. Апстрактан механизам предвиђа извођење неке радње. Машина је механизам чија се радња састоји од стварања једног производа и његовог стављања у складиште које је задато приликом стварања машине. Текстуални облик садржи слово М и текстуални облик производа који је управо стављен у складиште. Покретна трака је механизам чија се радња састоји од узимања једног производа из складишта које је задато приликом стварања траке. Текстуални облик садржи слово Т и текстуални облик производа који је управо узет из складишта. Активан мотор понавља радњу једног механизма, који се задаје приликом стварања мотора, у случајним временским интервалима t±20% ms (на почетку је t=100 ms и може да се промени за време живота мотора). Рад мотора може да се привремено заустави, да се настави и да се дефинитивно прекине. Графичко складиште је складиште које се иницијализује графичким текстуалним простором (TextArea) на коме приказује сваку промену стања складишта. Графички мотор је мотор који се иницијализује графичком плочом (Panel) коју попуњава компонентама тако да може зауставити и наставити рад мотора, променити временски интервал t (промена има ефекта одмах) и приказати текстуални облик придруженог механизма. Радионица је програм који на графичкој корисничкој површи према слици приказује рад с једним складиштем капацитета 20, три машине и две покретне траке.
6) Написати на језику Java следећи пакет типова: Апстрактaн симбол има боју којом може да се исцртава на датом графичком контексту (Graphics). Непопуњена елипса, осмокрака звезда и изломљена линија су симболи. Елипса и звезда се задају координатама центра и страницама описаног правоуганика, а изломљена линија низом x и низом y координата тачака које чине њена темена. Галерија може да садржи задати број симбола. Ствара се празна. Може да се дода један симбол (грешка је ако се галeрија препуни) и да се дохвати симбол по случајном избору (грешка је ако је галерија празна). Активан приказивач је графичко платно (Canvas) на којем се у једнаким временским интервалима на белој подлози исцртава један насумице одабран симбол из задате галерије. Може да се дохвати тренутно приказан симбол, да се приказивач покрене, да се заустави и да се дефинитивно прекине рад приказивача. Слот машина је графичка плоча (Panel) са сивом подлогом која садржи три приказивача које приказује са 40 50 пиксела и користи задату галерију. Симболи на појединим приказивачима се мењају у случајним временским интервалима између 50 и 200 ms. Могу истовремено да се покрену и зауставе сви приказивачи и да се машина уништи. Покретање машине у покрету и заустављање машине која стоји нема никаквог ефекта. Може да се дохвати низ симбола који су тренутно приказани на приказивачима. Може да се одреди добитак који износи 1000 ако сва три приказивача садрже исте симболе, 10 ако постоје два иста симбола и 0 ако су симболи различити. Програм на графичкој корисничкој површи према слици користи једну слот машину и галерију са неколико симбола. Приказује се збир добитака у тренуцима заустављања машине који може да се анулира. Не може да се покрене машина у покрету, односно да се заустави машина која стоји.
7) Написати на језику Java следећи пакет типова: Апстрактна фигура у равни предвиђа дохватање тренутних координата и исцртавање фигуре на графичкој сцени. Активна сцена је графичка компонента која може да садржи призвољан број фигура које исцртава сваких 40 ms. Ствара се празна, после чега се фигуре могу појединачно додавати. Из сцене може да се избаци одабрана фигура. Фигуре у сцени могу да се дохватају једна по једна, по редоследу додавања. Стрела је фигура која се исцртава као водоравна дуж задате боје и дужине. Ствара се са задатим координатама врха после чега се креће задатом реалном брзином удесно. Стрела се избацује из сцене када напусти видљиви део сцене. Лук је фигура која се исцртава задатом бојом унутар кавдрата задате дужине ивица тако да једно теме показује удесно ( ). Ствара се са задатим координатама средине леве ивице после чега може да се помера за унапред задати корак нагоре или надоле, али само до ивица сцене. Може да испали стрелу задате дужине задатом реалном брзином. Балон је фигура која се исцртава као попуњен круг задате боје и пречника. Ствара се са задатим координатама центра после чега се креће задатом реалном брзином нагоре. Кад центар балона пређе горњу ивицу сцене, поново се појављује на доњој ивици на истој усправној линији као и пре. Кад балон буде пробушен неком стрелом, промени боју у другу унапред задату боју после чега се избацује из сцене. Сматра се да је стрела пробушила балон кад врх стреле доспе у круг балона. Игра на графичкој корисничкој површи према слици поставља један лук плаве боје у тачки (5, 20) у односу на горњи леви угао сцене унутар квадрата дужине ивица 10 p (pixel). Лук може да се помера нагоре и надоле с кораком 10 p. Стреле црне боје дужине 16 p испаљују се брзином 0,2 p/ms. На захтев, одједном се додаје 5 зелених балона пречника 16 p на доњој ивици сцене од десне ивице улево на међусобном размаку од по 30 p. Балони се крећу брзинама између 0,06 p/ms и 0,08 p/ms. Кад буду пробушени, боја им се мења у црвено.
8) Написати на језику Java следећи пакет типова: Апстрактна параметарски задата функција предвиђа израчунавање вредности две реалне функције x(p) и y(p) с реалним аргументом p. Спирала је функција која израчунава x = a p cos(b p+c) и y = a p sin(b p+c). Апстрактан график може да се исцртава и да му се прекине цртање. Платно је графичка компонента типа Canvas која може да садржи произвољан број графика и која на својој површи приказује опсег реалних координата [xmin,xmax] и [ymin,ymax]. Може да се поставља приказани опсег координата, да се израчунају целобројне координате у пикселима за задате реалне координате (две методе), да се додаје график који се одмах исцртава, да се затражи исцртавање и прекидање исцртавања свих садржаних графика. Крива је график која на задатом платну задатом бојом исцртава задату функцију мењајући параметар p од pmin до pmax са кораком Δp. Цртање се врши у засебној нити са паузом од 5 ms после сваког корака. Цртање може да се прекине пре времена. Захтев за новим цртањем прекида евентуално цртање у току. Програм на графичкој корисничкој површи према слици црта три спирале са параметрима a=b=1, c=2 i/3 (i=0,1, 2), pmin=0, pmax=5, и Δp= /100 користећи редом црну, црвену и плаву боју. Промена опсега координата дејствује тек при новом захтеву за цртањем.
9) Написати на језику Java следећи пакет типова: Графички приказивач садржи графичку компоненту типа TextComponent на којој може да прикаже задати текст. Бафер може да садржи призвољан број једноредних порука типа String. Ствара се празан после чега могу да се додају поруке једна по једна, да се поруке узимају једна по једна (по редоследу додавања) и да се састави текстуални опис садржаја бафера. Ако при узимању у баферу нема поруке, нит читаоца се привремено зауставља. Текстуални опис бафера садржи све тренутне поруке, по једну поруку у сваком реду. После сваке промене садржаја бафера исти се приказује на вишередном приказивачу који се задаје приликом стварања бафера. Апстрактан актер у петљи извршава неку апстрактну акцију. Може да се дохвати назив врсте актера, да се постави једноредни приказивач за приказ стања, да се рад актера започне, привремено заустави, настави даље и заврши. Предајник је актер који генерише поруке случајне дужине од 2 до 10 знакова састављене само од великих слова. Генерисање сваког слова траје 40 ms. Поруке ставља у предајни бафер и на придруженом приказивачу приказује управо послату поруку. Линија је актер који поруке из предајног бафера преноси у пријемни бафер. Пренос сваке поруке траје 240 ms. Управо пренета порука се приказује на придруженом приказивачу. Пријемник је актер који у случајним временским интервалима између 120 и 360 ms из пријемног бафера узима по једну поруку и приказује на придруженом приказивачу. Графичка командна плоча је компонента типа Panel која садржи једног актера, коме придружује приказивач и која може да покреће и зауставља рад актера пољем за потврду. Програм на графичкој корисничкој површи према слици приказује пренос текстуалних порука од предајника до пријемника уз помоћ преносне линије.
10) Написати на језику Java следећи пакет типова: Упоређивач предвиђа испитивање да ли се цео број a налази налази испред броја b. Мање и веће су упоређивачи код којих је a испред b, ако је a<b, односно a>b, респективно. Уређивач предвиђа уређивање задатог низа целих бројева коришћењем задатог упоређивача, као и могућност прекидања поступка уређивања. Избор је уређивач који примењује алгоритам избора за уређивање низа. Програм на графичкој корисничкој површи према слици уређује једноцифрене низове целих бројева задате дужине по растућем или опадајућем редоследу. Низови се приказују са по 20 елемената у једном реду. Дугме "Napuni" ствара низ задате дужине "duz" напуњен случајним цифрама. Обезбедити да дугме "Prekini" делује за време уређивања.
11) Написати на језику Java следећи пакет типова: Кап кише има задате целобројне координате (x,y) и реалну тежину q. Приказива ствар може да се исцртава на задатом графичком контексту (Graphics). Активaн приказив талас се на задатој бари (видети ниже) исцртава у облику концентричних кругова са задатим центром (x,y) и корацима промене полупречника r и промене боје b. Талас је у почетку црн и временом бледи до беле боје, после чега нестане из баре. Сваких 40 ms полупречник исцртаваног круга се повећава за r, а све три компоненте боје (црвена, зелена и плава) се повећавају за b (почев од 0 док не постану 1). Нит таласа може да се прекине. Површ је графичка компонента (Canvas). Може да се дохвати ширина и висина површи и да се региструје пад капи на површ. Активна површина баре је површ која може да садржи произвољан број таласа које ствара приликом пада капи. Центар таласа се поклапа са местом пада капи. Корак промене полупречника таласа је r=0,05 q, a боје b=0,05/q, где је q тежина капи. Бара сваких 40 ms исцртава "живе" талсе (који имају траг), а одстрањује таласе који више нису. Нит баре може прекине и тада се прекидају и нити свих затечених таласа. Активан облак у случајним временским интервалима од задате најмање до задате највеће вредности пушта једну кап на задату површ. Створене капи имају случајне координате унутар габарита површи и случајну тежину између 2 и 8. Нит облака може да се привремено заустави, настави даље и да се трајно прекине. Програм на графичкој корисничкој површи према слици приказује понашање једне баре и облака. Време између два пуштања капи је од 200 до 500 ms.
12) Написати на језику Java следећи пакет типова: Аутомобил има јединствен, аутоматски генерисан целобројан идентификатор, задат капацитет резервоара и тренутну количину горива. Сви подаци могу да се дохвате. Почетна количина горива је случајна вредност између 10% и 30% капацитета резервоара. У аутомобил може да се сипа задата количина горива. Грешка је ако се резервоар препуни (тада се резервоар напуни и пријави грешка). Приказивач предвиђа приказивање података о задатом аутомобилу. Активан аутопут има задату бензинску станицу. У случајним временским интервалима од 0,5 s до 1 s ствара по један аутомобил капацитета резервоара 50 l који додаје тој станици. Може да се прекине рад аутопута када се прекида и рад његове станице. Активна пумпа се ствара за задату бензинску станицу. Пумпи може да се придружи задати приказивач у произвољном тренутку. Пумпа циклички дохвата по један аутомобил из реда своје станице и сипа му потребну количину горива до пуног резервоара, брзином од 1 l на сваких 100 ms. Завршетак сипања дојави бензинској станици. Стање аутомобила приказује на придруженом приказивачу после сваке промене количине горива. Бензинска станица има четири пумпе и ред за чекање за највише 20 аутомобила. Станица може да се отвори и затвори, може да се прекине њен рад, да јој се дода задати аутомобил, да се извади један аутомобил из њеног реда и да јој се дојави завршетак пуњења једног аутомобила. Ако је станица затворена или је ред пун, додавање аутомобила се занемари. Ако је ред празан, при узимању се сачека да се појави неки аутомобил. Приликом затварања, прекида се чекање возила у реду и чека се да се заврши сипање горива које је у току. Приликом прекидања прекида се и рад свих пумпи станице. Графички приказивач је приказивач и компонента типа Canvas на којој се, према слици, исцртава светлосива трака чија је дужина пропорционална количини горива у придруженом аутомобилу. На почетном делу те траке исцртава се идентификатор аутомобила. Графичка станица је станица која садржи графичку плочу (Panel) која може да се дохвата. Уз леву ивицу, према слици, приказује идентификаторе аутомобила који чекају у реду за чекање после сваке промене садржаја реда. Преостали део плоче попуњава са по једним графичким приказивачем за за сваку садржану бензинску пумпу. Програм на графичкој корисничкој површи према слици приказује стање једне бензинске станице. Не сме да се отвори отворена, односно затвори затворена станица.