ОО2/К2 2023
Други колоквијум 2023. године одржан је 5. маја и трајао је 20 минута.
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
1. задатак
Које од следећих тврдњи су тачне за поље x
на програмском језику Јава?
public interface I {
int x = 1;
}
- Поље је имплицитно са пакетским правом приступа.
- Поље је имплицитно означено правом приступа
public
. - Поље је имплицитно означено модификатором
final
. - Поље је имплицитно означено модификатором
const
. - Поље је имплицитно означено модификатором
static
.
2. задатак
Повезати појмове са тврдњама које им најбоље одговарају за језик Јава.
- Може да буде коначан/на (финал), не може да има поља осим статичких коначних, може да има подразумеване имплементације метода. ништа од понуђеног
- Може као надтипове да има произвољан број интерфејса, не може да има конструктор, може да има статичке методе. интерфејс
- Може да има статичке методе и статичка коначна поља, могу се дефинисати референце тог типа, не могу се стварати објекти тог типа, чланови су подразумевано јавни. интерфејс
- Може да има статичке методе и статичка коначна поља, могу се дефинисати референце тог типа, не могу се стварати објекти тог типа, али може да има конструкторе. апстрактна класа
- Може да има променљива поља, да буде изведен/а из само једне класе, не може да буде коначан/на (финал). апстрактна класа
3. задатак
Која од следећих тврђења су тачна за програмски језик Јава?
- Уколико се емитује (баца) изузетак у
try
блоку, руковаоци изузецима (catch
гране) наведени изаtry
блока испитују се редом којим су наведени. - Дозвољено је да се руковалац надтипа изузетка нађе испред руковаоца подтипа изузетка иза
try
блока. - Дозвољено је у руковаоцу (
catch
грани) наредбомthrow p;
где јеp
параметар датог руковаоца, проследити ухваћени изузетак "споља", на претходни ниво обраде изузетака. - Руковалац изузецима (
catch
грана) мора да наведе тачно један параметар типа класе изузетка који треба да обради.[1] - Могуће је након једног извршења
try
блока у којем је емитован (бачен) изузетак да буде извршено више руковалаца (catch
грана) које следе иза датогtry
блока.
4. задатак
Дата је следећа класа написана на језику Јава:
class Izuzetak extends Exception {}
class IzvedeniIzuzetak extends Izuzetak {}
class IzvedeniIzvedeniIzuzetak extends IzvedeniIzuzetak {}
interface I { void m() throws IzvedeniIzuzetak; }
public class X implements I {
???
public static void main(String[] arg) {}
}
Шта од понуђеног може стајати на месту ??? како би метод m()
био правилно дефинисан?
публиц воид м() тхроwс Тхроwабле {}
публиц воид м() тхроwс Изузетак {}
публиц воид м() {}
публиц воид м() тхроwс ИзведениИзведениИзузетак {}
публиц воид м() тхроwс ИзведениИзузетак {}
5. задатак
Спојити наведене случајеве коришћења угнежђених типова са одговарајућим језичким концептом на програмском језику Јава.
- Користи се уколико је потребна капсулација једног метода који се тако капсулиран може проследити као аргумент неком методу. Представља имплементацију интерфејса који декларише тачно један апстрактни метод. Ламбда израз
- Користи се уколико је потребно увођење новог типа унутар класе
S
који је доступан и изван класеS
уз дефинисање конструктора, поља и метода, а затим дефинисање више од једног објекта тог типа. Објекти ових типова нису у специјалној вези са објектом обухватајућег типа. Статичка угнежђена класа - Користи се уколико је потребно увођење новог типа унутар метода
m
, уз дефинисање поља, конструктора и метода из којих је могућ приступ локалним непроменљивим подацима и параметрима методаm
, а затим дефинисање више од једног објекта тог типа. Локална класа - Користи се уколико је потребно увођење новог типа унутар класе
S
који је доступан и изван класеS
уз дефинисање конструктора, поља и метода, а затим дефинисање више од једног објекта тог типа. Објекти ових типова су у специјалној вези са објектом обухватајућег типа. Нестатичка угнежђена (унутрашња) класа - Користи се уколико је потребно увођење новог типа унутар метода
m
, уз дефинисање поља и метода из којих је могућ приступ локалним непроменљивим подацима и параметрима методаm
и дефинисање искључиво једног објекта тог типа. Није могуће дефинисање конструктора тог типа. Анонимна класа
6. задатак
Шта исписује следећи програм на програмском језику Јава? Уколико мислите да се програмски код не преводи, упишите НП.
class A {
public A() { System.out.print("A"); }
public A(B b) { System.out.print("AB"); }
public static class B {
public B() { System.out.print("B"); }
public B(A a) { System.out.print("BA"); }
}
}
public class Main {
public static void main(String[] arg) {
new A().new B();
}
}
Одговор: НП
7. задатак
Уколико општи облик ламбда израза означимо са:
(parametri) -> { telo }
Означити све тврдње које су тачне.
- Број параметара у листи параметри мора да буде већи од 0.
- Могуће је изоставити заграде око листе параметри без обзира на број параметара.
- Уколико се тело састоји из само једне
return
наредбе, и витичасте заграде и кључна речreturn
могу да се изоставе. - Повратна вредност ламбда израза може да буде и воид.
- За све параметре се обавезно наводе и типови, у супротном долази до грешке у превођењу.
8. задатак
Спојити наведене описе метода са њиховим одговарајућим декларацијама на програмском језику Јава.
9. задатак
Које од следећих тврдњи су тачне за програмски језик Јава?
- Надјачани нестатички метод у изведеној класи аутоматски задржава особину
synchronized
уколико је том кључном речју означен метод основне класе који се надјачава. - Конструктор класе може бити означен кључном речју
synchronized
. - Наредба може бити обухваћена синхронизованим блоком.
- Нестатички метод класе може бити означен кључном речју
synchronized
. - Статички метод класе може бити означен кључном речју
synchronized
.
10. задатак
Шта исписује следећи програм написан на програмском језику Јава?
class Racun {
int stanje;
public Racun(int stanje) { this.stanje = stanje; }
public synchronized void uvecaj(int iznos) { stanje += iznos; }
public synchronized void umanji(int iznos) { stanje -= iznos; }
}
public class Test {
public static void main(String[] args) {
Racun racun = new Racun(0);
Runnable r1 = () -> { for (int i = 0; i < 5; i++) racun.uvecaj(100); };
Runnable r2 = () -> { for (int i = 0; i < 5; i++) racun.umanji(100); };
Thread uplata = new Thread(r1);
Thread isplata = new Thread(r2);
uplata.start();
isplata.start();
System.out.println("Vrednost stanja je: " + racun.stanje);
}
}
- Испис не може јединствено да се одреди
- Вредност стања је: 0
- Вредност стања је: -500
- Вредност стања је: 500
Напомене
- ↑ На колоквијуму је на овом месту писало "може да наведе само један параметар" уместо "мора да наведе тачно један параметар", и професор је признао жалбу на ово питање.
- ↑ 2,0 2,1 Оваква формулација питања је погрешна (није се мислило на текућу нит него нит над којом је метода позвана) и студентима је на колоквијуму био признаван и одговор "ништа од понуђеног".