Објектно оријентисано програмирање

Σχετικά έγγραφα
Objektno orijentisano programiranje

Теорија електричних кола

налазе се у диелектрику, релативне диелектричне константе ε r = 2, на међусобном растојању 2 a ( a =1cm

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА МАТЕМАТИКА ТЕСТ

Објектно орјентисано програмирање. Владимир Филиповић Александар Картељ

2. Наставни колоквијум Задаци за вежбање ОЈЛЕРОВА МЕТОДА

7. ЈЕДНОСТАВНИЈЕ КВАДРАТНЕ ДИОФАНТОВE ЈЕДНАЧИНЕ

Анализа Петријевих мрежа

СИСТЕМ ЛИНЕАРНИХ ЈЕДНАЧИНА С ДВЕ НЕПОЗНАТЕ

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ И НАУКЕ ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

Први корак у дефинисању случајне променљиве је. дефинисање и исписивање свих могућих eлементарних догађаја.

Tестирање хипотеза. 5.час. 30. март Боjана Тодић Статистички софтвер март / 10

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

ТЕСТ МАТЕМАТИКА УПУТСТВО ЗА ПРЕГЛЕДАЊЕ

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

6.2. Симетрала дужи. Примена

1.2. Сличност троуглова

b) Израз за угиб дате плоче, ако се користи само први члан реда усвојеног решења, је:

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ И НАУКЕ ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

ЗАШТИТА ПОДАТАКА Шифровање јавним кључем и хеш функције. Diffie-Hellman размена кључева

ТЕСТ МАТЕМАТИКА УПУТСТВО ЗА ПРЕГЛЕДАЊЕ

Положај сваке тачке кружне плоче је одређен са поларним координатама r и ϕ.

ТРАПЕЗ РЕГИОНАЛНИ ЦЕНТАР ИЗ ПРИРОДНИХ И ТЕХНИЧКИХ НАУКА У ВРАЊУ. Аутор :Петар Спасић, ученик 8. разреда ОШ 8. Октобар, Власотинце

Теорија електричних кола

Решења задатака са првог колоквиjума из Математике 1Б II група задатака

Упутство за избор домаћих задатака

8. ПИТАГОРИНА ЈЕДНАЧИНА х 2 + у 2 = z 2

г) страница aa и пречник 2RR описаног круга правилног шестоугла јесте рац. бр. јесу самерљиве

5.2. Имплицитни облик линеарне функције

2.3. Решавање линеарних једначина с једном непознатом

Објектно орјентисано програмирање. Владимир Филиповић Александар Картељ

Једна од централних идеја рачунарства Метода која решавање проблема своди на решавање проблема мање димензије

КРУГ. У свом делу Мерење круга, Архимед је први у историји математике одрeдио приближну вред ност броја π а тиме и дужину кружнице.

ТАНГЕНТА. *Кружница дели раван на две области, једну, спољашњу која је неограничена и унутрашњу која је ограничена(кружницом).

ОБЛАСТИ: 1) Тачка 2) Права 3) Криве другог реда

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ И НАУКЕ ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

ЛИНЕАРНА ФУНКЦИЈА. k, k 0), осна и централна симетрија и сл. 2, x 0. У претходном примеру неке функције су линеарне а неке то нису.

2. EЛЕМЕНТАРНЕ ДИОФАНТОВЕ ЈЕДНАЧИНЕ

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ И НАУКЕ ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ТЕСТ МАТЕМАТИКА

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

1. 2. МЕТОД РАЗЛИКОВАЊА СЛУЧАЈЕВА 1

МАТРИЧНА АНАЛИЗА КОНСТРУКЦИЈА

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

8.2 ЛАБОРАТОРИЈСКА ВЕЖБА 2 Задатак вежбе: Израчунавање фактора појачања мотора напонским управљањем у отвореној повратној спрези

3.1. Однос тачке и праве, тачке и равни. Одређеност праве и равни

6.5 Површина круга и његових делова

предмет МЕХАНИКА 1 Студијски програми ИНДУСТРИЈСКО ИНЖЕЊЕРСТВО ДРУМСКИ САОБРАЋАЈ II ПРЕДАВАЊЕ УСЛОВИ РАВНОТЕЖЕ СИСТЕМА СУЧЕЉНИХ СИЛА

Скупови (наставак) Релације. Професор : Рака Јовановић Асиситент : Јелена Јовановић

Семинарски рад из линеарне алгебре

4. Троугао. (II део) 4.1. Појам подударности. Основна правила подударности троуглова

Вектори vs. скалари. Векторске величине се описују интензитетом и правцем. Примери: Померај, брзина, убрзање, сила.

Cook-Levin: SAT је NP-комплетан. Теодор Најдан Трифунов 305M/12

Факултет организационих наука Центар за пословно одлучивање. PROMETHEE (Preference Ranking Organization Method for Enrichment Evaluation)

Теорија одлучивања. Анализа ризика

Хомогена диференцијална једначина је она која може да се напише у облику: = t( x)

Динамика. Описује везу између кретања објекта и сила које делују на њега. Закони класичне динамике важе:

7.3. Површина правилне пирамиде. Површина правилне четворостране пирамиде

Скрипта ријешених задатака са квалификационих испита 2010/11 г.

TAЧКАСТА НАЕЛЕКТРИСАЊА

УНИВЕРЗИТЕТ УНИОН РАЧУНАРСКИ ФАКУЛТЕТ

РЕШЕЊА ЗАДАТАКА - IV РАЗЕД 1. Мањи број: : x,

ПОВРШИНа ЧЕТВОРОУГЛОВА И ТРОУГЛОВА

L кплп (Калем у кплу прпстпперипдичне струје)

ЗАШТИТА ПОДАТАКА. Шифровање јавним кључем и хеш функције. Diffie-Hellman размена кључева

Ваљак. cm, а површина осног пресека 180 cm. 252π, 540π,... ТРЕБА ЗНАТИ: ВАЉАК P=2B + M V= B H B= r 2 p M=2rp H Pосн.пресека = 2r H ЗАДАЦИ:

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ И НАУКЕ ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА

6. ЛИНЕАРНА ДИОФАНТОВА ЈЕДНАЧИНА ах + by = c

Количина топлоте и топлотна равнотежа

Ротационо симетрична деформација средње површи ротационе љуске

Аксиоме припадања. Никола Томовић 152/2011

6.1. Осна симетрија у равни. Симетричност двеју фигура у односу на праву. Осна симетрија фигуре

4.4. Паралелне праве, сечица. Углови које оне одређују. Углови са паралелним крацима

Испитвање тока функције

Теорија одлучивања. Циљеви предавања

Теорија друштвеног избора

Предмет: Задатак 4: Слика 1.0

Слика бр.1 Површина лежишта

Слика 1. Слика 1.2 Слика 1.1

Примена првог извода функције

6.3. Паралелограми. Упознајмо још нека својства паралелограма: ABD BCD (УСУ), одакле је: а = c и b = d. Сл. 23

ВОЈИСЛАВ АНДРИЋ МАЛА ЗБИРКА ДИОФАНТОВИХ ЈЕДНАЧИНА

ТАЧКЕ КОЈЕ ЕКСПЛОДИРАЈУ ПОГЛАВЉЕ 5 ДЕЉЕЊЕ ПОЧИЊЕМО

I Линеарне једначине. II Линеарне неједначине. III Квадратна једначина и неједначина АЛГЕБАРСКЕ ЈЕДНАЧИНЕ И НЕЈЕДНАЧИНЕ

АНАЛОГНА ЕЛЕКТРОНИКА ЛАБОРАТОРИЈСКЕ ВЕЖБЕ

Дух полемике у филозофији Јован Бабић

У н и в е р з и т е т у Б е о г р а д у Математички факултет. Семинарски рад. Методологија стручног и научног рада. Тема: НП-тешки проблеми паковања

4. ЗАКОН ВЕЛИКИХ БРОЈЕВА

ПОГЛАВЉЕ 3: РАСПОДЕЛА РЕЗУЛТАТА МЕРЕЊА

Имплементациjа монада у програмском jезику Swift 1.1

Поређење егзактних и хеуристичких метода за решавање неких оптимизационих проблема

МАСТЕР РАД УНИВЕРЗИТЕТ У БЕОГРАДУ МАТЕМАТИЧКИ ФАКУЛТЕТ. Тема: ГОРЊА И ДОЊА ГРАНИЧНА ВРЕДНОСТ НИЗА И НИЗА СКУПОВА И ЊИХОВЕ ПРИМЕНЕ У РЕЛНОЈ АНАЛИЗИ

Површине неких равних фигура

Тангента Нека је дата крива C са једначином y = f (x)

Универзитет у Крагујевцу Факултет за машинство и грађевинарство у Краљеву Катедра за основне машинске конструкције и технологије материјала

Aлати и основне функције

(1) Дефиниција функције више променљивих. Околина тачке (x 0, y 0 ) R 2. График и линије нивоа функције f: (x, y) z.

Transcript:

Математички факултет, Универзитет у Београду Катедра за рачунарство и информатику Објектно оријентисано програмирање вежбе школска 2016/2017 Биљана Стојановић Немања Мићовић Никола Милев

1 Полиморфизам * До сада смо увек користили променљиву типа неке класе како бисмо реферисали објекте типа те исте класе: у променљивој типа Sfera, чували смо референцу на објекат типа Sfera, у променљивој типа Tacka референцу на објекат класе Tacka, итд. Међутим, када имамо променљиву типа базне класе, нпр. Povrs, осим што у њој можемo чувати референцу на објекат те класе, Povrs, на шта смо навикли, можемо такође чувати и референцу на објекат произвољне поткласе (било директне или индиректне), нпр. Krug, Pravougaonik, Kvadrat. Штавише, то је један од услова који морају бити испуњени да би полиморфизам функционисао. Полиморфизам је фундаментални концепт објектно оријентисаног програмирања, који представља могућност да се један исти позив метода понаша различито у зависности од типа објекта над којим се метод примењује. Другим речима, полиморфизам је могућност да променљива класног (или интерфејсног) типа реферише на објекте различитих класа и да се користи за аутоматско позивање метода оне класе која представља тип реферисаног објекта, а не тип променљиве. Тиме се позив метода понаша различито у зависности од типа објекта на који је примењен. Дакле, полиморфно својство могу имати позиви метода над објектима изведених класа, али само уколико се као референца на објекат изведене класе користи променљива базне класе (директне или индиректне). Напомена! Полиморфизам се примењује искључиво на методе, не и на атрибуте класе. На пример, за приступ атрибутима класе Pravougaonik може да се користи искључиво променљива типа Pravougaonik. Чак и када реферише на објекат класе Kvadrat, можемо је користити само за приступ атрибутима који се односе на базни део објекта класе Kvadrat (што су у овом случају сви атрибути класе Kvadrat). Услови који морају бити испуњени: у променљивој типа базне класе налази се референца на објекат изведене позвани метод мора бити дефинисан у изведеној класи позвани метод мора такође бити декларисан у базној класи потписи метода у базној и изведеној класи морају бити исти повратни типови метода базне и изведене класе морају бити исти или коваријантни (повратни тип метода изведене је поткласа повратног типа метода базне класе) приступни атрибут метода изведене класе не сме бити рестриктивнији од одговарајућег приступног атрибута базне (код нас ће оба бити public, тако да то важи) Када се метод позове, биће извршена верзија метода из оне изведене класе на чији се објекат чува референца у променљивој базног типа. То који метод ће бити позван одређује се динамички, у време извршавања програма, а не у време његовог компајлирања. Позива се метод који одговара типу објекта за који је позван, а не типу променљиве која реферише на тај објекат. Како променљива базног типа може реферисати на објекат произвољне поткласе, тачан тип реферисаног објекта не може бити одређен у време компајлирања. То је илустровано у примеру са вежби тако што се случајно бира елемент низа (елементи су типа разних изведених класа) и за њега врши полиморфни позив метода. Пре него што програм започне извршавање, не можемо знати који елемент низа ће бити случајно изабран, а ипак се увек изврши полиморфни метод класе изабраног објекта. Ако се * Укључује и садржај из материјала Марије Милановић

изабере круг, површина се израчуна по формули P=r 2 π, док ако се изабере правоугаоник, за рачунање површине примени се формула P=а*b. Полиморфан метод са коваријантним повратним типом у изведеним класама јесте метод izvedenapovrs(), чији је повратни тип у базној класи Povrs, а у изведеним класама тип саме изведене класе. 2 Кастовање Кастовање представља објекат као да је неког другог типа. Могуће је кастовати објекат у тип (директне или индиректне) наткласе или поткласе, дакле само навише и наниже кроз неку хијерархију класа. Кастовање навише врши се имплицитно (компајлер га убацује сâм, када је потребно). То је управо оно што имамо код полиморфизма, када референцу на објекат типа изведене класе чувамо у променљивој типа базне: Povrs p = new Kvadrat(new Tacka(4,6), 2); Други разлог за кастовање навише кроз хијерархију је да би се методу, као аргумент, проследила референца на објекат неке од могућих поткласа. Задавањем да је параметар базног типа имамо флексибилност да методу, приликом позива, проследимо референцу на објекат произвољне изведене класе. Нпр. ако је параметар типа Povrs, можемо проследити референцу на објекат типа Krug, Pravougaonik или Kvadrat. То нпр. радимо када у копи-конструктору изведене класе позивамо копи-конструктор базне да изврши иницијализацију базног дела објекта изведене класе. Кастовање наниже кроз хијерархију класа, тј. кастовање у тип изведене класе, мора се извршити експлицитно. Да би кастовање радило, класа у коју кастујемо мора бити стварна класа објекта или суперкласа објекта! Дакле, након горње наредбе, није добро (биће избачен изузетак типа ClassCastException): а добро је (Krug)p // pokusaj kastovanja kvadrata u krug!!! kvadrat nije krug! (Pravougaonik)p // kastovanje kvadrata u pravougaonik je OK. kvadrat JE pravougaonik као и (Kvadrat)p // kastovanje kvadrata u njegov stvarni tip je OK. Када кастујемо наниже кроз хијерархију класа? Кастујемо онда када смо нпр. због полиморфизма референцу на објекат морали да чувамо у променљивој типа базне класе, а желимо да извршимо метод специфичан за класу објекта (дакле, метод који нисмо наследили од базне класе). То илуструје пример са вежби у коме имамо метод opisanikrug() у класи Pravougaonik. Метод не задовољава услове за полиморфно позивање (није дефинисан у базној класи Povrs).

Класа Povrs је базна за класу Pravougaonik и ако се у променљивој p, типа базне класе, налази референца на објекат типа Pravougaonik, да бисмо за тај објекат позвали метод opisanikrug(), неопходно је прво извршити кастовање у тип Pravougaonik: Povrs p = new Pravougaonik(new Tacka(),3,4); // pre kastovanja uvek u programu treba proveriti // da li je to kastovanje legitimno!!! // ovde bi trebalo da dodje ta provera Krug okrug = ((Pravougaonik)p).opisaniKrug(); 3 Оператор instanceof Оператором instanceof могуће је проверити да ли је легитимно кастовање неке променљиве у тип неке класе. Нпр. if(p instanceof Pravougaonik){ // ovo je provera koja gore nedostaje Pravougaonik pravougaonik = (Pravougaonik)p; Krug okrug = pravougaonik.opisanikrug(); } // ili, umesto dve gornje naredbe, naredba Krug okrug = ((Pravougaonik)p).opisaniKrug(); instanceof враћа true ако је објекат реферисан левим операндом истог типа као и десни операнд или ако је типа произвољне његове поткласе. У том случају, допуштено је кастовање објекта реферисаног левим операндом (променљивом p) у тип десног операнда (Pravougaonik). 4 Одређивање класе објекта getclass(), Class За сваку класу, интерфејс, тип низа и примитивни тип који користимо у програму постоји тачно по један Class објекат који можемо користити за проверу да ли се у датој променљивој чува вредност неког конкретног референтног или примитивног типа. (Подсетимо се: референтни типови су класни, интерфејсни и низовски). Class објекте генерише Јава Виртуелна Машина (ЈВМ) када се учитава наш програм. Пошто је примарна сврха за Class да га користи ЈВМ, нема public конструктора, па не можемо сами креирати Class објекте. У програму, референца на одговарајући Class објекат добија се директно тако што се.class надовеже на име класе, интерфејса, примитивног типа или на тип низа. Примери: String.class (java.lang.string.class) Pravougaonik.class Runnable.class // interfejs int.class // primitivni tip int[].class // niz // klase Class је пример генеричког типа (заправо дефинише скуп класа). Метод getclass(), који све наше класе наслеђују од универзалне суперкласе Object, враћа референцу на објекат типа Class који одређује класу објекта.

getclass() враћа стварни тип (класу) објекта. Чињеница да је референца на објекат можда смештена у променљиву типа његове базне класе не утиче на тип самог објекта. Нпр. у случају: Object str = "Neki string"; // referencu na String objekat cuvamo kao tip Object str.getclass() вратиће java.lang.string.class. Метод је у класи Object дефинисан као final (не може се предефинисати у изведеним класама). Тестирање да ли дата променљива p реферише (баш) на објекат класе Pravougaonik: if(p.getclass() == Pravougaonik.class) ("баш" се односи на:) Aко p садржи референцу на објекат поткласе класе Pravougaonik, нпр. Kvadrat, резултат поређења у if-у је false. Провера помоћу == је могућа јер постоји тачно по 1 примерак Class објекта за сваки (примитивни и референтни) тип коришћен у програму. Разлика између instanceof и getclass() if(p instanceof Pravougaonik) else System.out.println("Definitivno nije pravougaonik!"); Добићемо потврду да имамо правоугаоник чак и ако је у p референца на квадрат. Ово је добро за потребе кастовања! Међутим, ако напишемо: if(p.getclass() == Pravougaonik.class) else System.out.println("Definitivno nije pravougaonik!"); услов у if ће имати вредност false ако је класа објекта на који реферише променљива p Kvadrat, јер је њен Class објекат различит од Pravougaonik.class морали бисмо да напишемо Kvadrat.class да би услов у if имао вредност true. instanceof или Class? За сврхе кастовања увек треба користити instanceof, док уколико је потребно потврдити тачан тип референце, треба користити одговарајући Class објекат.