ОО2/К1 2023

Извор: SI Wiki
< ОО2
Датум измене: 5. јун 2023. у 16:57; аутор: KockaAdmiralac (разговор | доприноси) (→‎7. zadatak: Ne pozivaju se redom kojim su klase definisane u kodu)
Пређи на навигацију Пређи на претрагу

Prvi kolokvijum 2023. godine održan je 31. marta i trajao je 20 minuta.

  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:

1. zadatak

Bajtkod (Bytecode) je:

  1. Binarni izvršni kod koji sadrži naredbe mašinskog jezika računara domaćina.
  2. Izvorni kod na jeziku Java.
  3. Mašinska reč dužine jednog bajta.
  4. Međukod koji interpretira Java virtuelna mašina.
  5. Rezultat prevođenja programa na jeziku Java.

2. zadatak

Primitivni tipovi u jeziku Java su:

  1. Unicode karakter char.
  2. logički bool tip.
  3. tip niske znakova string.
  4. označeni (signed) short tip (od -32768 do 32767) i neoznačeni ushort tip (od 0 do 65536).
  5. označeni izuzetno dugački celobrojni tip, na dužini reči od 132 bita, xlong.

3. zadatak

Neka je dat sledeći segment koda:

String s1 = new String("OOP2");
String s2 = new String("OOP2");
String s3 = s1;
String s4 = new String(s2);

Koji od sledećih izraza će dati rezultat true?

  1. s1.equals(s4);
  2. s1 == s2;
  3. s1.equals(s3);
  4. s2 == s3;
  5. s1 == s4;

Objašnjenje: equals proverava jednakost po vrednosti, i zato su ti odgovori tačni - sva četiri stringa imaju iste vrednosti. new String(...) alocira potpuno novi string u memoriji, tako da u kodu iznad jedino s1 i s3 referenciraju isti string.

4. zadatak

Označiti prava pristupa na jeziku Java koja možemo da dodelimo klasi koja nije ugnežđena.

  1. paketsko
  2. javno
  3. zaštićeno
  4. privatno

5. zadatak

Koja od sledećih tvrđenja su tačna na jeziku Java?

  1. Metod finalize nasleđuju sve klase, koje onda mogu da ga nadjačaju.
  2. Pre nego što se oslobodi memorija koju je objekat zauzimao, sakupljač đubreta uvek i garantovano poziva metodu finalize.
  3. Povećanjem broja objekata u sistemu povećava se vreme sakupljanja đubreta.
  4. Sakupljač đubreta može da se eksplicitno pozove korišćenjem ključne reči delete.
  5. Postavljanjem na vrednost null poslednje reference koja upućuje na objekat momentalno se oslobađa memorija koju je zauzimao dati objekat.

Objašnjenje: Metoda finalize će biti pozvana samo jednom, tako da ukoliko prethodni poziv finalize uspe da oživi taj objekat ona neće biti pozvana prilikom njenog oslobađanja iz memorije.

6. zadatak

Koja od sledećih tvrđenja su tačna za programski jezik Java?

  1. Mogu se uvesti imena samo statičkih članova klase Klasa korišćenjem naredbe import static Klasa.*;
  2. Članovi paketa mogu imati javno ili paketsko pravo pristupa, pri čemu je podrazumevano pravo pristupa paketsko.
  3. Metodi jedne neugnežđene klase imaju pravo da pristupaju i privatnim članovima druge neugnežđene klase koja se nalazi u istom paketu, jer su klase u istom paketu prijateljske (trusted, friend).
  4. Moguće je definisati dva tipa istog naziva u dva različita paketa.
  5. Tip A definisan u neimenovanom (podrazumevanom) paketu je moguće uvesti u neki drugi paket koristeći naredbu import default.A;

7. zadatak

Šta ispisuje sledeći program napisan na programskom jeziku Java? Obratiti pažnju na ispis bez razmaka. Uneti NP ukoliko smatrate da se program ne prevodi, odnosno GI, ukoliko smatrate da se dešava greška u izvršavanju.

class A {
    {
        System.out.print("A");
    }
    static {
        System.out.print("sA");
    }
}

class B extends A {
    {
        System.out.print("B1");
    }
    static {
        System.out.print("sB");
    }
    {
        System.out.print("B2");
    }
}

public class Test {
    public static void main(String args[]) {
        new B();
    }
}

Odgovor: sAsBAB1B2

Objašnjenje: Statički blokovi pozivaju se redom kojim su navedeni u kodu svoje klase, prvo oni u osnovnoj a zatim u izvedenoj klasi, na početku izvršavanja. Nestatički blokovi pozivaju se nakon instanciranja klase, i to prvo oni u osnovnoj klasi a onda oni u izvedenoj, redom kojim su navedeni u kodu.

8. zadatak

Koja od sledećih tvrđenja su tačna za programski jezik Java?

  1. Klasa koja nije eksplicitno izvedena iz druge klase izvedena je iz klase Object.
  2. Da bi metod bio polimorfan mora da se označi modifikatorom virtual.
  3. Iz konstruktora izvedene klase nije moguće pozvati konstruktor osnovne klase.
  4. Izvedena klasa može da proširi osnovnu dodavanjem novih polja i novih metoda.
  5. Klasa može da proširuje jednu ili više klasa.

9. zadatak

Šta ispisuje sledeći program napisan na programskom jeziku Java? Obratiti pažnju na ispis bez razmaka. Uneti NP ukoliko smatrate da se program ne prevodi, odnosno GI, ukoliko smatrate da se dešava greška u izvršavanju.

class Osnovna {
    public void f() { this.m(); }
    private void m() { System.out.print("O"); }
}

class Izvedena extends Osnovna {
    private void m() { System.out.print("I"); }
}

public class Test {
    public static void main(String args[]) {
        Osnovna obj1 = new Osnovna();
        obj1.f();
        Osnovna obj2 = new Izvedena();
        obj2.f();
        Izvedena obj3 = new Izvedena();
        obj3.f();
    }
}

Odgovor: OOO

Objašnjenje: Na metode označene kao privatne se ne primenjuje polimorfizam. Zbog toga će poziv m() iz osnovne klase umeti samo da prepozna privatnu metodu iz te klase, a neće pokušavati da tu istu metodu potraži u potklasama.

10. zadatak

Koje tvrdnje su tačne?

  1. U izrazu (A instanceof B) operator instanceof proverava da li je klasa A potklasa klase B.
  2. Doslednim korišćenjem operatora instanceof pre konverzije tipa može da se predupredi bacanje izuzetka ClassCastException.
  3. Provera tipa operatorom instanceof je statička.
  4. Operator instanceof proverava da li je rezultat izraza levog operanda referenca na objekat klase navedene kao desni operand ili neke njene podklase.[1]
  5. Proveru tipa instanceof treba raditi da bi se razvrstala obrada za različite tipove po granama neke razgranate strukture, na primer naredbe switch.

Napomene

  1. Na kolokvijumu je na ovom mestu pisalo "natklase" umesto "podklase", pa je žalbu na ovo pitanje profesor kasnije priznao.