Ovu stranicu je najbolje pregledavati u modernom internet pregledniku s omogućenim JavaScriptom.

[OOUP] O predmetu

indythedog

💀 Zasad planiraju uživo, osim ak se situacija s koronom ne pogorša, onda teamsi


branimir1999

indythedog ima nekih dobrih tips and tricks sto sam propustio pretprosli i prosli put?


tomekbeli420

znači pretprošli put se ne sjećam da je nešto ekstra bitno rečeno, ali prošli put…
ispočetka je počelo ono jel ima kakvih pitanja ovo ono, i onda su krenula pitanja o 1. labosu
i tada je uletio MČ i bejzikli objašnjavao vjerojatno najbitnije koncepte “ispod haube” objektno orijentirane paradigme na primjeru koda iz Jave te stalno povlačio paralele kako se iste situacije odvijaju u C++, i imam osjećaj da tko god nije na ti sa tom paradigmom i tim jezicima i tko nije odgledao te konzultacije da ima nezanemariv handicap u odnosu na one koji jesu odgledali konzultacije. Naravno konzultacije nisu snimljene….


faboche

tomekbeli420 Pričaš o jučerašnjim konzultacijama?


Rene

tomekbeli420 Slažem se s kolegom da mi je to što je Čupić pričao izgledalo dosta bitno pa evo recap za one koji nisu bili. Ako sam nešto krivo skužio/pogriješio/zaboravio, nadopunite me 🙂.

Za početak, kod koji se koristio za demonstraciju:
Razred A:

public class A {
int v;
A(int v) {
	this.v = v;
}

int vrati() {
	return v;
}}

Razred B:

public class B extends A{
int x;
public B(int v, int x) {
	super(v);
	this.x = x;
}

int vrati() {
	return x + super.vrati();
}

int vrati2() {
	return x+5;
}}

Main:

public class Main {
public static void main(String[] args) {
	A a1 = new A(3);
	B b = new B(4, 5);
	A a2 = b;
	
	
	int i1 = a1.vrati();
	int i2 = b.vrati();
	int i3 = a2.vrati();
	
	System.out.println("i1=" + i1 + "\ni2=" + i2 + "\ni3="+i3);
	
}}

E sad nas zanima stanje u memoriji kada se ovo prevede. Nastaje strojni kod konstruktora i (virtualnih - u Javi su to sve metode) metoda klasa A i B, te nastaju tablice virtualnih funkcija koje sadrže pokazivače na taj kod. (pogledajte sliku na dnu).
Sad kreće izvođenje metode main pa idemo redom:
A a1 = new A(3) stvara referencu a1 na stogu, alocira se objekt tipa A na heapu - on sadrži pokazivač na tablicu virtualnih funkcija i mjesto za člansku varijablu v te se zatim poziva konstruktor. “Ispod haube” konstruktor A(3) se poziva kao A(this, 3) tj. šalje se i referenca na stvoreni objekt na heapu. Ako sam dobro shvatio, Čupić je rekao da se u Javi automatski poveže alocirani objekt s pripadnom tablicom virtualnih funkcija, dok u C++-u se na početku konstruktora konceptualno poziva nešto tipa: this->tablica = &tablica_od_A pa treba paziti ako se koriste virtualne funkcije u konstruktoru jer može doći do neočekivanog ponašanja.
B b = new B(4, 5) stvara referencu b na stogu, alocira objekt tipa B na heapu - on sadrži pokazivač na tablicu virtualnih funkcija razreda B, mjesto za člansku varijablu v te mjesto za člansku varijablu x. Napomena je bila da je bitan memorijski “layout” tj. da ako razred B nasljeđuje razred A, da on u memoriji gledano s početka izgleda kao A, a onda na kraju se dodaju stvari specifične za B.
Konačno, A a2 = b stvara referencu a2 na stogu i ona pokazuje na već stvoreni objekt tipa B.

I sada, ako ste skužili ove tablice virtualnih funkcija, ne bi vam trebao bit problem vidjet kako će izgledati pozivi funkcija vrati u mainu:

  • a1 pokazuje na objekt tipa A, pogleda se u tablicu VF i nade se metoda vrati razreda A, pozove se i vrati se vrijednost varijable v tj. i1 = 3.
  • b pokazuje na objekt tipa B, pogleda se u tablicu VF i nade se metoda vrati razreda B, pozove se i vrati se vrijednost
    x + super.vrati(). Ovdje mala napomena da ovo super.vrati() nije polimorfni poziv već je ključna riječ super uputa prevoditelju da izvede direktno metodu nadrazreda (zna točno gdje se nalazi u memoriji). Dakle, rezultat je i2=9.
  • Zadnji poziv je onaj gdje vidite jeste li shvatili kako ovo funkcionira, dakle a2 je referenca na tip A, ali pokazuje na objekt koji je zapravo tipa B. Vi ga gledate kao tip A, dakle ne možete pozvat npr a2.vrati2(), ali on je i dalje stvarno tipa B te će se pogledati u njegovu tablicu virtualnih funkcija, pronaći implementacija metode vrati razreda B i rezultat je ponovo i3 = 9.

Slika stanja u memoriji:

Mislim da je to sve, nadam se da pomaže 🙂


tomekbeli420

him da


bodNaUvidima

U vezi tih drugih po redu konzultacija, netko imao problem da je zatražio ulazak na taj Meet i onda bio odbijen za sekundu dvije?


PostarLakogSna

Profesor Šegvić sinoć je relativno kasno slao neku obavijest o konzultacijama danas u 15h, nekim čudnim naslovima prva tri predavanja i nekakvoj nultoj laboratorijskoj vježbi. Pretpostavljam da je falio predmet, ali samo bih volio da mi netko potvrdi da je greškom.



InCogNiTo124

I ove godine ostavljam link na najbolji site za ucenje oblikovnih obrazaca

https://refactoring.guru/

super je za naucit, pogotovo jer radi disambiguaciju s drugom slicnim obrascima, a jos vise dobar za ponovit pred ispit. ja sam cak i platio covjeku koliko mi je dobro bilo xD
(s tim da nemrete naucit obrazac ako ga ne iskodirate, lp)


Marko

InCogNiTo124 Imas nesto za ove aham… stvari s strojnim kodom?


InCogNiTo124

Marko ×86 assembly? jok, u to moras gledat satima sve dok 💡


[obrisani korisnik]

Marko https://godbolt.org/

Ovo ti je najpopularniji alat za analizu strojnog koda malih snippeta u c++ communityu. Mozes birat razlicite compilere i razlicite strojne arhitekture (sto znaci da mozes gledati arm kod ako mrzis x86 😄), pokrenut kod i dijelit s drugima. Podrzava i par ostalih jezika osim c++a.


bodNaUvidima

Marko Meni je pomoglo prvo pogledati main i koji registri se koriste neposredno prije poziva funkcija, i onda otić na strojni kod funkcije i gledati što ona radi s tim registrima. Ajmo reći da sam analizirao od kraja prema početku.


indythedog

Jel još nekom javlja da je sastanak pun kad se proba spojiti na konzultacije preko onog linka, il je to sam neki bug kod mene?


[obrisani korisnik]

Wow kako dobro organiziran kolegij, prvo dobijemo youtube playlistu na kojoj Šegvić autistično objašnjava gradivo pričajući kao robot, onda nam kažu da je termin za predavanje samo da se sastanemo “ukratko” ali se onda ispostavi da tamo predavaju gradivo bitno za laboratorijske vjezbe, no naravno taj se video sastanak odrzava preko google meeta pa postoji limit na broj sudionika i sad ne mozes uci. Da ne bi slucajno napravili tim u MS Teams.

I naravno, 5 dana prije pocetka tjedna u kojem se odgovaraju laboratorijske vjezbe jos nema uputa oko predavanja labosa vec je receno da ce se to objasniti na google meet-u na koji se ne moze uci jer su oni neorganizirani autisti, a naravno taj se meeting ni ne snima. Da slucajno ne bi napisali jebenu uputa na intranetu?


at5611

[obrisani korisnik] Evo pokusava sada napravit sastanak na teams, nije pocea nista govorit jer je skuzija da ne mogu svi uc


[obrisani korisnik]

Jos veci kreten isuse, jel ovaj jos zivi u 90-im godinama?


« Prethodna stranica Sljedeća stranica »