Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 86 odgovora
  • 26.842 pregleda

Najnovija ↓

Re: Pointeri i JAVA ili u JAVI :) 10.06.2008. u 11:08 · pre 223 meseca #61
Citat:
Toxter: Ovo je sustina svega.

Pozdrav


Imam za tebe jedno pitanje, cisto da vidim kako ti poimas ovo sto si rekao.

Kako to da Vanjin primer u jednom slucaju menja vrednost zaklininih tits (originalni Vanjin primer) a u drugom (mala izmena koju sam nacinio) ne? Sta bi ti rekao, da li je promenljiva prosledjena BY REFERENCE ili BY VALUE ? Pazi potpis funkcije u oba slucaja je isti, izmenjeno je samo telo funkcije!

Originalni Vanjin primer:
Code:

Code:

public class Female {

    private int titsSize;

    public Female(int titsSize) {
        setTitsSize(titsSize);
    }

    public int getTitsSize() {
        return titsSize;
    }

    public void setTitsSize(int titsSize) {
        this.titsSize = titsSize;
    }

    public String toString() {
        return "Size of my tits: " + getTitsSize();
    }

    public static void main(String[] args) {
        Female zaklina = new Female(2);
        System.out.println(zaklina);
        doubleTits(zaklina);
        System.out.println(zaklina);
    }

    private static void doubleTits(Female f) {
        f.setTitsSize(2 * f.getTitsSize());
    }

}


moja izmena:
Code:

private static void doubleTits(Female f) {
        f = new Female(120);
    }
Re: Pointeri i JAVA ili u JAVI :) 11.06.2008. u 14:29 · pre 223 meseca #62
@mucky
To sto si ti rekao jeste po zvanocnom ispravnom rezonovanju citanja specifikacije Java jezika i njene tacke 8.x.x., koja govori da kompajler treba da iskopira vrednost reference u memoriji.
Ako si ti proizvodjac Java kompajlera e onda to jeste merodavan dokumenat za tebe, ali ovde se radi o koriscenju java kompajlera, teoriji komapajlera i teoriji programiranja.

Pass by reference, Pass by value, Reference, pointer i td su pojmovi koji su definisani mnogo pre JAVE i u svim programskim jezicima oni znace isto i na isti nacin se tumace.

Ovde je problem sto se referenca pogresno tumaci. Da objasnim plasticno:
Petar(objekat) ima nadimka Perica(referenca). Cesto ce te u literaturi videti da se reference porede sa alijasima, znaci samo drugi naziv za isti predmet. Kada ja viknem: "Perice okreni se.", nece se okrenuti njegovo ime (vrednost reference) u "rateP", nego ce se okrenuti on kao osoba(objekat).
Znaci kada se obracate referenci uvek se gleda isto kao da se obracate Objektu.
U tome i jeste razlika izmedju pointera i reference sto se kod pointera uvek obradjate memoriskoj adresi koja upucuje na Objekat.

Kada se pojam reference primeni na prenos parametara (u bilo kom jeziku) uvek se smatra da je parametar Objekat na koji ta referenca ukazuje, a ne sama vrednost reference.
Ovo je jedino ispravno tumacenje parametara u svim programerskim jezicima ovoga sveta jer se svi oni baziraju istim pojmovima.

Da prenesem teoriju u praksu:

Proizvodnja programa dizajniranog u UML.

Vidi ova klasa kaze da prosledim parametar(Objekat) po vrednosti. A da parametri u JAVI se prenose po vrednosti, znaci ne treba nista da uradim.
Gadan za***.

Obezbedim da mi klasa ima clone() i prilikom prosledjivanja parametara je koristim. - ISPRAVNO


Svi koji i dalje gledaju da se u javi parametri prenose po vrednosti ce imati problema ako nekada budu radili u vecim timovima sastavljenim od programera koji rade u razlicitim jezicima.
Lepo je sto ja mogu da odem u francusku i da pricam srpski jezik ali bojim se da me nece niko razumeti.
Isto tako Java programer treba da prica na univerzalnom programerskom jeziku, a ne da palamudi da je vrednost reference parametar, a ne objekat na koji ona ukazuje.
Ponavljam jos jednom referenca je nacin, a parametar je Objekat.

Poz. Gosha
Potpis
JokeJunky :)

Mrzim sublimirane marketinske poruke.
Re: Pointeri i JAVA ili u JAVI :) 11.06.2008. u 16:10 · pre 223 meseca
izmenjeno 1 put, poslednji put srki 12.06.2008. u 09:20
  1. srki12.06.2008. u 09:20zapis iz teksta poruke
#63
Gosho, sve sto si objasnjavao svi vec znaju ali nikako da razumes da je rec samo o tome da koristimo razlicitu terminologiju.
Citat:
gosha:
Vidi ova klasa kaze da prosledim parametar(Objekat) po vrednosti. A da parametri u JAVI se prenose po vrednosti, znaci ne treba nista da uradim.
Gadan za***.


Ali ja ne smatram da u Javi mozes da preneses Objekat vec samo pokazivac na taj objekat. Kada u C++u napises Integer a onda se to kreira na steku i a je referenca od objekta dok se u Javi kreira objekat na heap-u a na steku je samo taj pokazivac na taj objekat (isto kao u C++u Integer* a). Kada pozovem neku funkciju(a) tu ce da mi se prosledi vrednost tog pokazivava a. Ja koristim istu terminologiju kao kreator Jave koji kaze da se u Javi sve prenosi po vrednosti. Da li hoces da kazes da on gresi?

Citat:
Svi koji i dalje gledaju da se u javi parametri prenose po vrednosti ce imati problema ako nekada budu radili u vecim timovima sastavljenim od programera koji rade u razlicitim jezicima.

Ja upravo mislim obrnuto. Radim u timu od 20 ljudi (a samo na ovom spratu nas ima oko 60) i koristimo barem 6 razlicitih jezika i nemam apsolutno nikakvih problema. Da postoji problem vec bi se menadzeri ili kolege zalili ali upravo je obrnuta situacija.

Citat:
Ponavljam jos jednom referenca je nacin, a parametar je Objekat.

Ne, parametar je pokazivac na objekat ali opet to ne znaci da ti nisi u pravu vec jednostavno koristimo drugu terminologiju. Zasto bi inace kreator jave rekao da se u javi sve prenosi po vrednosti? Ispalo bi da se objekat prenosi po vrednosti ako bi on koristio tvoju terminologiju.
Re: Pointeri i JAVA ili u JAVI :) 11.06.2008. u 16:41 · pre 223 meseca #64
Citat:
gosha:  Svi koji i dalje gledaju da se u javi parametri prenose po vrednosti ce imati problema ako nekada budu radili u vecim timovima sastavljenim od programera koji rade u razlicitim jezicima.


Upravo obrnuto. Kada meni (prevashodno C++ programeru) neko kaže da prenosi objekat po referenci, jedino što ću da pomislim je:

Code:


void funkcija(Objekat& o);
...
Objekat o;
funkcija (o);


A to je nešto sasvim drugo nego prosleđivanje referenci na objekte u Javi - ovde je objekat imenovan i mogu da mu pristupam direktno, a u Javi je anoniman i pristupam mu samo preko referenci koje su imenovane.

C# programer će da pomisli da pozivaš nešto kao:

Code:

var o = new Object();
funkcija (ref o);


itd.

Ne vidim čemu rasprava: U Javi se sve prenosi po vrednosti, što ima svojih dobrih strana (jednostavnost) i loših (probaj da napišeš metod swap u Javi).
Potpis
IOCC
Re: Pointeri i JAVA ili u JAVI :) 11.06.2008. u 18:18 · pre 223 meseca #65
Srki u prvoj recenici sam napisao da je to stanoviste tacno ako citas Java specifikaciju. U njoj lepo pise da se vrednost referenci kopira prilikom prosledjivanja f-ji.
Ja to nisam ni sporio. Po meni je sporan nacin na koji se gleda na to sta je parametar.


Poz. Gosha
Potpis
JokeJunky :)

Mrzim sublimirane marketinske poruke.
Re: Pointeri i JAVA ili u JAVI :) 11.06.2008. u 21:26 · pre 223 meseca #66
Vidim da je moje misljenje o pogledu na to sta je parametar suporotno od JAVA sveta pa cu ga ipak korigovati.

Izvinjavam se svima.

Poz. Gosha
Potpis
JokeJunky :)

Mrzim sublimirane marketinske poruke.
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 09:46 · pre 223 meseca
izmenjeno 1 put, poslednji put Java Beograd 12.06.2008. u 10:35
  1. Java Beograd12.06.2008. u 10:35zapis iz teksta poruke
#67
Kao što rekoh, u Javu ulete C++ developeri, zbunjeni svojom i java terminologijom, pa donesu haos svojim izjavama. (Uopšte ne želim da tvrdim da je nečija izjava tačna ili nije). Tako nam se javio i Dragi Tata, koji za sebe kaže da je pretežno C++ developer i lepo i konačno potvrdi "Ne vidim čemu rasprava: U Javi se sve prenosi po vrednosti."

Zato sebi dajem slobodu, da kao Java developer lepo i konaćno izjavim.

Ne vidim čemu rasprava: u Javi se primitive (int, float, char, byte, boolean ...) prenose po vrednosti, a objekti po referenci, što ima svojih dobrih strana a i loših.

Pozdrav.
Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 10:39 · pre 223 meseca #68
Jeste da je ovde rec o javi ali nadam se da se neces ljutiti ako ubacim malo C# jer je u mnogim stvarima slican javi.

Ako imas ovakvu definiciju: StringBuilder o = new StringBuilder();
kako bi onda rekao da funkcija funkcija(StringBuilder o); prenosi parametre? To je ekvivalentno javi pa bi pretpostavljam rekao da prenosi po vrednosti. A kako bi onda rekao da funkcija funkcija(ref StringBuilder o); prenosi vrednosti?

Nadam se da ces iz ovog primera videti zasto gresis. Da li mislis da autor jave isto gresi kada kaze da se sve prenosi po vrednosti?

Citat:
Kao što rekoh, u Javu ulete C++ developeri, zbunjeni svojom i java terminologijom, pa donesu haos svojim izjavama.

Bezveze mi je stvarno da se u raspravu uplicu ad hominem napadi (koliki ti je programerski staz, u cemu programiras i sl.) ali ipak cu da pomenem da sam duzi niz godina pretezno Java developer tako da ovo uopste nema veze sa tim da li znam C++. Zbunjen nisam bio ni malo i ne smeta mi nista u obavljanju mog posla.

Ajde posto kazes da se objekti u Javi prenose po referenci, da li mozes u Javi da napises swap funkciju za stringove?
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 11:29 · pre 223 meseca #69
String je immutabile
Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 11:47 · pre 223 meseca #70
Citat:
Java Beograd: String je immutabile


Upravo tako. A ako ste bas zapeli za swapom onda uradis ovako nesto:

Code:

public class MutableString {

    private String value;

    public MutableString(String value) {
       setValue(value);
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String toString() {
        return value;
    }

    public static void main(String[] args) {
        MutableString a = new MutableString("Ja sam A");
        MutableString b = new MutableString("Ja sam B");
        System.out.println("a: " + a);
        System.out.println("b: " + b);
        swap(a, b);
        System.out.println("a: " + a);
        System.out.println("b: " + b);
    }

    public static void swap(MutableString s1, MutableString s2) {
        String tmp = s1.getValue();
        s1.setValue(s2.getValue());
        s2.setValue(tmp);
    }

}
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 11:55 · pre 223 meseca #71
<SARKAZAM>

MIRAKUL !

Vanja je opet napisao metodu koja menja objekat ! I time uneo dodatnu zabunu u diskusiju. Mnogi će se upecati !

</SARKAZAM>
Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 12:02 · pre 223 meseca #73
Kada bi neki početnik pročitao ovu temu pomislio bi da se raspravlja o nekom teškom problemu, a ne o elementarnom konceptu.
Citat:
Java Beograd:u Javi se primitive (int, float, char, byte, boolean ...) prenose po vrednosti, a objekti po referenci


Vidi, ovde ti fali jedna reč u definiciji: ... a objekti po vrednosti reference.
Ukoliko parametar prenosiš po adresi onda je moguće da u metodi uradiš promenu vrednosti prosleđenog parametra. To u Javi nije moguće jer Java uvek prenosti parametre po vrednosti, bez obzira da li se radi o primitivi ili referenci. Nemoj molim te zbunjivati ljude sopstvenim tumačenjima, taj koncept prenošenja po vrednosti ili adresi je mnogo stariji od Jave.
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 12:11 · pre 223 meseca #74
E pa upravo to i pišem, od početka. (Pročitaj osmi post na ovoj temi, pre 6 dana i 21h -u momentu pisanja ovog posta)

Thinking in Java

Dakle, razmišljati na Java jeziku. Jer, nikako drugačije u Javi ni ne može biti, nego "po vrednosti reference". Ali na Java jeziku, to se kaže "po referenci".
Ti pričaš na C jeziku, a ja na Java jeziku.



Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 12:26 · pre 223 meseca #75
Citat:
Java Beograd:
... Jer, nikako drugačije u Javi ni ne može biti, nego "po vrednosti reference". Ali na Java jeziku, to se kaže "po referenci".


Neobicno mi je drago da si konacno dosao do odgovora na "Da li se slazes da se reference u Javi uvek prenose by value?":

konacni zakljucak: u Javi se sve prenosi po vrednosti.
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 12:34 · pre 223 meseca #76
Mozda tvoj zakljucak...Java Beograd je to savrseno objasnio u prethodnom
postu.
Potpis
"Čovek je biće koje se na sve navikava, i ja mislim da je ovo njegova najbolja definicija."
Fjodor M. Dostojevski
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 12:35 · pre 223 meseca #77
Vidi ovako, metoda može primati kao parametar reference (ili pointere u nekom drugom jeziku), a da se ipak ne radi o prenošenju parametara po adresi.

Suština prenošenja parametara po adresi nije u tipu parametra, već u tome što se promene vrednosti parametra u toku izvršenja metode vide i po završetku izvršavanja metode, tj. metoda može promeni vrednost parametara koji su prosleđeni po adresi. Tako nešto nije moguće izvesti u Javi.
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 12:37 · pre 223 meseca #78
Citat:

Mozda tvoj zakljucak...Java Beograd je to savrseno objasnio u prethodnom
postu.


Dobro onda zakljucak za one koji razumeju samo jezik kojim govori "Java Beograd"

Citat:
Java Beograd: 
Jer, nikako drugačije u Javi ni ne može biti, nego "po vrednosti reference".
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 12:42 · pre 223 meseca #79
Citat:
Java Beograd: String je immutabile

Nema to veze, u C#u mozes da napravis funkciju koja ce da zameni immutable objekte zato sto tu mozes da napravis funkciju koja prosledjuje parametre po referenci. Ajde odgovori na ono pitanje o funkcijama iz moje prethodne poruke? Kako bi rekao da se prenose parametri u slucaju da je funkcija definisana sa funkcija(Object o) a kako kada je definisana sa funkcija(ref Object o) ? Problem sa Vanjinim resenjem je sto je ta funkcija onda vezana za specificnu klasu i nece raditi ako pasujes objekte koji su izvedeni od te klase. Znaci ne mozes da napravis funkciju koja ce da swapuje dva proizvoljna objekta. To znaci java ne pasuje po referenci vec po vrednosti. Verovatno tvorac jave nema dovoljno staza kad tvrdi suprotno.
Re: Pointeri i JAVA ili u JAVI :) 12.06.2008. u 12:44 · pre 223 meseca #80
Ako bas hocete da upotrebite rec pointer i javu u istoj recenici onda probajte da zamislite da je u javi svaki objekat pointer za sebe.
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme