[ bild-studio @ 24.03.2008. 15:54 ] @
Recimo imam klasu A i Klasu B i klasu Test:

Code:

public class A {

}

public class B {

}

public class Test {

public static void main(String[] args) {

        A ob1 = new B ();
                A ob2 = new B ();
                A ob3 = new B ();
                A ob4 = new B ();
    

    }
}


E hocu sad mesto objekata obj1, obj2, obj3 da napravim jedan objekat recimo ob i stavim ga u neku petlju while ili for nebino, i da mi u zavisnosti koliko ja hocu iteracija da napravi toliko objekata ali po nekom pravilu koje mu ja zadam. Recimo za svaki naredni dodaj mu "a" ili 1 itd...

Primer:

Code:

for (int i = 0; i <brojObjekata; i++) {
A ob = new B (); // Stim sto bi na ovo ob dodavalo neki string kao sto sam gore naveo
}


Necu da radim preko listi i nizova znam da tako moze ali nije to to...

Radio sam ovu foru sa PHP om i radi izvrsno samo na ob dodam ".i" i radi fenomenalno. Prerovio sam citav net i naisao na iste probleme kod drugih sto su postovali isti problem ali niko nije resio konkretno ovaj problem.

Strasno bih bio zahvalan kad bi mi se ova "nocna mora" od problema resila.

Unaprijed zahvalan!
[ grizzly @ 24.03.2008. 18:19 ] @
Mozda si prevideo, ali da bi napisao A obj = new B(), klasa B mora da nasledjuje klasu A.

Kao sto si se uverio "obj.i" gde je i brojac ne moze, a i da moze u ovom tvom kodu promenljive koje deklarises u for petlji ti nece postojati izvan te petlje.

Ja bih stavio u niz al' nije to to...
[ bild-studio @ 24.03.2008. 18:53 ] @
Netreba da nasledjuje, mada to nije ni bitno toliko koliko ova sustina problema, evo jos uvek pokusavam da resim taj ****ni problem. Ima li iko resenje a da NAGLASIO sam ne preko nizova ili lista ili bilo cega slicno tome.
[ nemnesic @ 24.03.2008. 19:06 ] @
probaj ovo:

http://java.sun.com/docs/books/tutorial/reflect/index.html

Code:

Class cls = Class.forName("ArrayList");
Constructor c = cls.getConstructor(null);  
/*
If you want some other constructor 
you have to specify the signature as an array of Class objects
*/
 
Object obj = c.newInstance(null);
/*
If this is not the default constructor you should
provide the arguments as an array of objects
*/
 


ne zaboravi
Code:

java.lang.Class
java.lang.reflect.*


preuzeo od:
http://forum.java.sun.com/thre...D=786322&messageID=4468783
[ bild-studio @ 24.03.2008. 20:21 ] @
Evo provaljujem kako radi... Javljam se ako uspje, meni se cini da je to to, nisam siguran cim testiram javljam se. Hvala u svakom slucaju!
[ bild-studio @ 24.03.2008. 20:46 ] @
Pogledao sam ovo ali ponovo nema (ili ja ne umijem da nadjem) ono sto mi treba. Treba mi npr:

Code:


import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;


public class Test {

    /**
     * @param args
     * @throws NoSuchMethodException 
     * @throws SecurityException 
     * @throws ClassNotFoundException 
     * @throws InvocationTargetException 
     * @throws IllegalAccessException 
     * @throws InstantiationException 
     * @throws IllegalArgumentException 
     */
    public static void main(String[] args) throws SecurityException, NoSuchMethodException, ClassNotFoundException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
        
        Class cls = Class.forName("B");
         
        Constructor c = cls.getConstructor(null);  
        

        //Object obj = c.newInstance();
        
        //System.out.println(obj);
        
        for (int i = 0; i < 5; i++) {
            
            Object obj = c.newInstance(); // Da dam ime novog objekta dinamicki Kako to izvesti?? 
            //B b = new B ();
            
        }
        
        

    }

}

-------------------------------------------------------------


public class B {
    
    public String ime = "Bild Studio";
    
    public B() {
        System.out.println("ALOOOOOOOOOOOOOOOOO");
    }
    
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return ime;
    }
}






Pokusavao sam ponovo konkretno na ovom primeru, ali nemam prestave kako da dinamicki dodjelim ime recimo obj1, obj2, obj3... Ali da ne koristim niz.... ili listu...
[ grizzly @ 24.03.2008. 21:19 ] @
Ja sam shvatio da ti hoces da napravis grupu objekata za koju se ne zna kolika je a jedino sto ih vezuje je zajednicki prefix, znaci


obj1

obj2

obj3

itd...

U jednom trenutku ucenja jave sam i ja ovo hteo da uradim ali sam ubrzo odustao. Ja ne vidim nacin da ovo uradis...

P.S. Ovo sam napisao jer mi se cini da nemnesic nije razumeo sta ti hoces.
[ bild-studio @ 24.03.2008. 21:33 ] @
Znaci ne postoji nacin da se resi ovaj problem???

Ima li neka druga alternativa?
[ augustus @ 24.03.2008. 21:47 ] @
Mozda i ima ako bi pojasnio sta ti u stvari hoces da uradis. Sve sto si rekao je NE MOZE niz. Zasto ne?
[ bags @ 24.03.2008. 22:04 ] @
Opisi detaljnije za sta ti to treba i zasto ne smijes koristiti neku kolekciju.
Sem toga ovo sto ti pokusavas da uradis krsi se sa nekim pravilima o lijepom programiranju. :)

EDIT: Nije dobro resenje sto sam postovao plus nemoguce je to uraditi u javi.
[ bild-studio @ 24.03.2008. 22:18 ] @
Code:


public class Main  {
    
   public static void main(String[] args) {

        PlayerImpl p1 = new PlayerImpl();
        GameImpl g1 = new GameImpl();
        
        Factory pf = new PlayerFactory();
          Player p1 = (Player) pf.create(); 
        Player p2 = (Player) pf.create();
        
                p1.setName("Tarik");
        p2.setName("Danilo");
        
        Factory gf = new GameFactory();
        Game g1 = (Game) gf.create();
        Game g2 = (Game) gf.create(); 
        g1.setName("Tetris");
        g2.setName("Pucanje");
        
        
        
        //dajem imena igrama
        
        
            p1.getGames().add(g1);
            p1.getGames().add(g2);
            
            
            g1.getPlayer().add(p1);
            g1.getPlayer().add(p2);
            
            
            System.out.println(p1.getGames().toString());
        
    }

}




Konkretno za ovaj kod e zamisli kad bi hteo da dodam hiljadu igrica i kad bi hteo da dodam hiljadu igraca onda...
E zanima me kako ja Konkretno iz guia mogu da naredim (hajde napravi mi 10 objekata tipa Game da se zovu:)
g1, g2, g3..... a ovo 1,2,3 da je recimo i u nekoj for petlji jeli ovo izvodljivo ili ne... Znam da cete da kazete radi sa listama ili sa nizom, uradio sam ga na taj nacin ali dusu posle izgubih oko nekih drugih stvari nebi da i vama komplikujem zivot...

E dali je je to moguce... ?
[ bags @ 24.03.2008. 23:09 ] @
Nije izvodljivo! :)

Ne mozes davati imena objektima dinamicki.

Ako ti resenje sa kolekcijama ne radi kasnije posao,onda ti taj deo koda nije dobro dizajniran.

Nravno i dalje ti mozemo pomoci,ako opises te kasnije probleme. :)
[ grizzly @ 24.03.2008. 23:55 ] @
Ma sta ne moze? Slusaj sad :)

Napravis program koji puni tvojim kodom fajl NekaKlasa.java gde je poenta da program puni klasu imenima kojim hoces obj1, obj2, itd.

Pre toga si napravio bat fajl koji poziva javac da iskompajlira tu klasu, i kad je napunis pozoves taj bat. Cini mi se da ima u klasi File metoda execute().

A kad se iskompajlira pozoves main metodu te novoiskompajlirane klase.

Al sam se nalupao...
[ zigizig @ 25.03.2008. 07:49 ] @
grizzly svaka cast. To vredi probati :)

Inace za sada je jedino resenje da se objekti stave u niz, vektor, listu...
npr.
ClassName[] objectName= new ClassName[4];
for (int i= 0; i < objectName.length; i++)
objectName= new ClassName();

bild-studio ti rece da si sve to probao ali
Citat:
dusu posle izgubih oko nekih drugih stvari nebi da i vama komplikujem zivot

Posto nema drugo resenje verovatno si pogresio negde u postavci zadatka
Ako nam opises te "druge stvari" mozda neko bude u prilici da ti pomogne i ukaze gde si pogresio
[ Java Beograd @ 25.03.2008. 10:28 ] @
@Bild studio
Ja sam developer, evo 18 godina. Nema programskih jezika kojima se nisam bavio, a Javom se profesionalno bavim dest godina.

Tvoj zahtev ne samo da nema smisla, nego pokazuje tvoje potpuno nepoznavanje teorije i osnova programiranja i (nemoj da se uvrediš) i tvoj delatantizam i potpuni amaterizam.

Sve i da programski jezik dopušta takve nebuloze, ništa se na taj način, kako si ga ti zamislio ne može bolje rešiti nego korišćenjem nizova. Na primer

Code:

Player pla[] = new Player[n];
pla[0] = new Player('vakav ili onakav);
pla[1] = new Player('vakav ili onakav);
...


I ne samo to, već u modernoj Javi ima još čitav niz lista, vektora, hashtabela i ostalih kolekcija kojma je namena ovo.
Ne pokušavaj da pišeš PHP ili VB kod korišćenjem Java sintakse. Jer to onda nije Java već papazjanija.

Dakle, knjigu u šake, i uči. Thinking in Java (naslov je neverovatno dobar, lukav i tendenciozan), refaktorisanje, objektni dizajn i ostalo.
[ augustus @ 25.03.2008. 10:36 ] @
Uh this hurts :(

usput: papazjanija je jedno veoma ukusno jelo(zecetina u sosu od luka itd.) i nije zahvalno koristiti ga u svrhe opisa gluposti samo zato sto ima asocijativno ime :)
[ staticInt @ 25.03.2008. 10:53 ] @
Java Beograd je 100% upravu, ne valja uciti jezike tako usko, Java je od 98. kad sam ja poceo da se bavim istom veoma napredovala i sada poseduje sve sto vam treba za sta vam god treba, normalno koristi se samo za one stvari za koje je potrebna ali cinjenica jeste da morate prvo da proucite granice Jave i da razumete sta moze a sta ne moze.

Dokumentacija u shake pa listaj, i naravno thinking in java Bruce Eckel ftw :)
[ Java Beograd @ 25.03.2008. 13:51 ] @
Ma nije samo u pitanju šta može a šta ne, već je bitnije šta se kako radi.

Ako pišeš neki softver za auto, može i ima smisla da se promenljive zovu točak1, točak2, točak3 i točak4. I tu je kraj ! Nema više.

Ali, ako imaš N igrača u igraonici, i pri tome ne znaš koliko ih ima, već dinamički moraš da barataš njima, onda se zna kako se to radi: nizovima, listama, kolekcijama, i slično. Zaboga, pa gde bi bio kraj ako bi za svakog trebalo da se kreira posebna promenljiva.

Nekim nesrećnim sličajem to je moguće u nekim programskim jezicima. I svašta je drugo moguće u nekim drugim programskim jezicima. Ali tako ne treba programirati.
[ bild-studio @ 25.03.2008. 14:15 ] @
Svaki taj post je ok. I ja se slazem sa time, Ali ja imam trenutno predmet koji se zove Softverski Inzinjering i imam nekog lika od Profesora koji kad bi mu vi sve to sto ste do sad pricali rekli, kao sto smo mu rekli, on bi samo rekao to nije objekno orijentisani nacin razmisljanja i Vas domaci zadatak ne vazi! :) Neznam jeste li radili za Apstraktnom Fabrikom ako ne pogledajte kako funkcionise posto ni meni nije jasno kako to funkcionise bas na kristalnije. E sad postoje neka pravila u njoj a pravlo je da se neradi nijednim ovim putem koji sam ja razmisljao i koji ste vi naveli. Na svu zalost. E sad se dovodi u pitanje ko je u pravu profesor (Koji trenutno pohadja II Doktorat i Brend je u Svijetu sto se tice jave) ili ja i Vi. Odlucite sami :) A da profesor se zove Dragan Djuric ako ga vec neko poznaje :).
[ augustus @ 25.03.2008. 14:42 ] @
Citat:
bild-studio: Koji trenutno pohadja II Doktorat i Brend je u Svijetu sto se tice jave


Brend u svetu sto se tice jave?! Stvarno?? A po kojim merilima je on to?

Svako postovanje za clanke i knjigu koju je napisao i za projekat na kome radi, ali biti brend u svetu jave je nesto sasvim drugo(upravo sam ga google-ovao i nasao ove informacije).

[ bild-studio @ 25.03.2008. 14:55 ] @
Naravno nije u rangu Erich Gamma Richard Helma itd... Ali za njegovo godiste... Milism Nema boljeg na Balkanu!!! To je definitivno a inace na tu temu necu polemisati. Nit cu da ga brani a nit mi je stalo do toga a djecije mi je da se raspravljam oko toga. Jednino sto znam je da covek rastura i da nije dzabe to sto mi je rekao da netreba preko nizova! To je to ako ko ima da resi moj problem ne radeci preko nizova i lista nek resi jer cu da potrazim resenje na drugim forumima, nemam vremena za gubljenje.
[ augustus @ 25.03.2008. 15:20 ] @
Verovatno ce moderatori obrisati poruku ali na ovakve stvari se mora reagovati.
Nema boljeg na balkanu kazes? Po cemu se to da zakljuciti? Koliko java strucnjaka poznajes?? Garantujem da na ovom forumu postuje nekoliko vrhunskih strucnjaka(ne poznajem nikog licno).

Nemoj gubiti vreme i idi na druge forume i nadji resenje u rangu svog master tutora(probaj neki indijski java forum, tamo ima na hiljade thread-ova samo o javi).

Jeste neozbiljno raspravljati o ovakvim tvrdnjama, ali jednostavno ne mogu da precutim kojekakve nebuloze raznih likova koji govore o rasturanju jave, programiranja ili cegagod.

Aj ti lepo napisi obrazlozenje tvog problema i zasto to ne sme preko nizova pa da i mi nesto naucimo.
[ hyle @ 25.03.2008. 15:36 ] @
Citat:
bild-studio:...profesor se zove Dragan Djuric... kad bi mu vi sve to sto ste do sad pricali rekli, kao sto smo mu rekli, on bi samo rekao to nije objekno orijentisani nacin razmisljanja i Vas domaci zadatak ne vazi!


Vidi ovako, suštinski problem je što ti ne poznaješ elementarne koncepte programiranja, a pokušavaš da shvatiš napredne koncepte kao što je patern "abstract factory". Tvog profesora poznajem sa osnovnih studija i siguran sam da ti nije postavio takve zahteve već si ti zbog nepoznavanja materije tu nešto pogrešno protumačio.
[ gosha @ 25.03.2008. 15:38 ] @
Potpisujem Javain post gore.

Sinoc htedoh da napisem nesto slicno ali nikako nisam mogao da srocim da nedvosmisleno ne deluje uvredljivo.

Sa jos jedne tacke gledista je gornji pokusaj budalastina.
Kao sto znate promenjiva1, promenljiva2 ... nista ne znace racunaru, nazivi promenljivih znace samo programerima. Kada se kod prevede racunar barata adresama.

A sto se profesora tice postoje 3 mogucnosti:

1. Ti nisi dobro razumeo sta on hoce. Verovatno je hteo da svaka klasa ima svojstvo (parametar) "naziv" koja bi cuvala: "igra1", "igra2" ...
2. Profesor je postavio trik zadatak da vidi da li ce neko ustatu i reci mu da je to budalastina.
3. Profesor pojma nema sa programiranjem. Naime ovaj problem nije vezan za poznavanje Jave nego za osnove OOP-a.

Poz. Gosha

EDIT
Naravno da se ovo ne radi preko nizova. Iskljucivo liste.
[ augustus @ 25.03.2008. 15:59 ] @
Ma garant nije skapirao sta treba da se uradi, a poziva se na autoritet coveka koji bi ga oborio odmah da skonta sta ovaj prica.

Budi ljubazan i demantuj me i pojasni problem.
[ zigizig @ 25.03.2008. 16:24 ] @
Na kraju će sve da ispade igra reči :)

Nego mene baš interesuje kako se liste ne uklapaju u OO koncept.
[ grizzly @ 25.03.2008. 20:07 ] @
Covek nema vremena, ako ima ko da mu resi problem neka resi a ako ne ode on na drugi forum :)))

A kako bi bilo matori da naucis nesto za to vreme za koje ces da trazis na drugim forumima (posebno u Srbiji i Crnoj Gori). Ili makar tacno utvrdi sta ti je zadatak jer ovo sto ti pricas nema smisla nigde pa ni na balkanu...
[ grizzly @ 26.03.2008. 00:40 ] @
Zapocececu ovaj post jednim prigodnim citatom:

They said it couldn't be done. And we almost didn't do it!


Znaci da vidimo sta smo imali...

Prvo nam treba klasa koja ce puniti GenKlasa.java fajl. Ona izgleda ovako:

Code:

import java.awt.Toolkit;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;


public class Generator {
    
    public static void main(String[] args) {
        
        try {
            File f1 = new File("GenKlasa.java");
            f1.createNewFile();
            PrintStream ps = new PrintStream(f1);
            ps.println("import java.awt.Toolkit;");
            ps.println("public class GenKlasa {");
            ps.println("public static void main(String[] args){");
            for(int i=0; i<3; i++){
                ps.println("String s"+i+" = \"s"+i+"\";");
            }
            ps.println("Toolkit.getDefaultToolkit().beep();");
            ps.println("}");
            ps.println("}");
            
            Runtime.getRuntime().exec("compile.bat");
            
            try {
                Thread.currentThread().sleep(1000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            
            String[] niz = {"",""};
            RunKlasa.main(niz);
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    
}




Prvi deo klase je prilicno samoobjasnjavajuci, znaci puni kodom klasu, for petlja ubacuje String objekte sa imenima s1, s2 itd...
Posle toga program poziva bat fajl koji izegleda ovako:

Citat:

cd\
cd zezanje
javac GenKlasa.java


ovaj bat fajl pokrece javin kompajler koji kompajlira malo pre generisanu klasu. Za to vreme program Generator "spava" 1 sekundu kako bi dao vremena kompajleru da zavrsi i tada poziva main metodu klase RunKlasa ciji kod je:

Code:

import java.io.IOException;

public class RunKlasa {
    
    public static void main(String[] args) {
        try {
            try {
                Thread.currentThread().sleep(1000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            Runtime.getRuntime().exec("run.bat");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    
}



Ne secam se zasto ova klasa "spava" verovatno ne mora. Ona poziva run.bat koji u sebi ima:

Citat:

cd\
cd zezanje
java GenKlasa


znaci on pokrece malopre generisanu i iskompajliranu klasu GenKlasa.


Znaci u folderu c:/zezanje morate imati sledece fajlove Generator.class, RunKlasa.class, compile.bat, run.bat i pocetak.bat. Poslednji izgleda ovako:

Citat:

cd\
cd zezanje
java Generator



Kad pokrenete fajl pocetak.bat cuce se beep koji se ne cuje kada se izbaci linija Toolkit.getToolkit().beep(). Sto znaci ili sam ja lud ili radi.

Zavrsicu ovaj post jos jednim prigodnim citatom:

Ne znam zasto sam vam ovo ispricao ali ne moze da skodi...
[ bags @ 26.03.2008. 03:24 ] @
Svaka cast na trudu.

PS.
Cvrsto se nadam da se zezas. :)
[ gosha @ 26.03.2008. 10:05 ] @
Ma ne zeza se :) Sta tebe briga kakvo je njegovo vidjenje dinamickog kreiranja objekata :P

Poz. Gosha
[ Java Beograd @ 26.03.2008. 11:29 ] @
Grizlijevo rešenje je zanimljivo i intiligentno. U domenu akademske diskusije, naravno. Ono oko čekanja od 1 sekunde mi se ne sviđa, ali dobro, postoje načini da se regularno sačeka i potvrdi spremnost novogenerisane i tek prevedene klase.

Naravno, ako pričamo o real life, to tako ne može u varijantama
- korisnik programa ima samo runtime environment, a ne i development
- program radi kao applet
- program radi kao midlet
- program radi kao web aplikacija

Zapravo, to će da radi samo u jednoj varijanti: Java desktop aplikacija, uz ispunjen uslov da postoji java development kit na mašini gde se izvršava. Naravno, o performansama ne vredi ni diskutovati.
[ augustus @ 26.03.2008. 11:31 ] @
Nego gde nam je kolega? Da se nije naljutio i otisao na drugi forum
[ milan.dinic @ 26.03.2008. 15:29 ] @
Pozdrav,

za midlet i applet nemogu da trvdim, jer nisam probao, ali za web app bez problema moze da vrsi kompajliranje klasa u runtime-u

kampajliranje on the fly je moguce i iz samog java koda. nemora se pozivati nikakav bat fajl.

koristi se staticki poziv, npr:


String[] args = { "-classpath", classPath, "-d", outPath, inPath + "/" + fullClassName };

int i = com.sun.tools.javac.Main.compile(args);

if (i != 0) {
throw new ClassCompilationException("some msg");
}

da bi se koristila klasa Main treba dodati u classpath tools.jar i naravno JDK mora biti instaliran jer se u njemu nalazi ova arhiva


[ staticInt @ 26.03.2008. 21:45 ] @
Boze gospode sta sve necu videti ovde :)
[ bigboss @ 26.03.2008. 23:55 ] @
Ljudi nemojte se bezveze opterecavati glupostima. Dajte molim vas. Pa ima li neko ozbiljnije resenje koje je tako izvedeno.
Ovde je ocito rec o pocetniku koji ni nezna sta znaci pisati program.
Nije dovoljno da se citaju tudji kodovi da bi naucio programirati, moras malo i to to okusiti.

Pozdrav svima. Vidim da ima ljudi koji poznaju i Javu i Java tehnologije kao i koncepte OOP,
nerazumem ih samo zasto se zamlacuju glupostima.
[ augustus @ 27.03.2008. 00:02 ] @
Pa programiranje zna biti dosadno pa se mozda zabavljaju
Samo da kazem da kolega sa foruma milan.dinic koji dao resenje dinamickog kompajliranja to nije dao iz ciste zezancije, vec je to koristio u ozbiljnom projektu. Zamislite, tako nesto nekom zatrebalo, pa nek vam on objasni zasto ako ima vremena.
[ milan.dinic @ 27.03.2008. 09:46 ] @
Moze biti da je offtopic ali kolega augustus je u pravu.
U pitanju je enterprise project u kome se koristi ovo resenje.
Naime ovo je resenje sledeceg problema:

Altova MapForce je alat koji moze da vrsi generise kod (Java, mada moze i za druge programske jezike) koji vrsi transformaciju strukture fajlova.
Flat file u flat file je najteza transformcaija. To je moguce pomocu ovog alata.
I nakon sto ovaj alat izgenerice java kod, dolazi integracija izgenerisanih klasa u web applikaciju, koja se ne sme gasiti pri dodavanju nove transformacije.

Tu se koristi kompajliranje on-the-fly, i sledi korisenje novo dodatih klasa.

Iako je ovo moguce, slazem se da ovo treba izbegavati, kad god je to moguce, i da bild-studio najverovatnije ne treba da korsti ovo resenje :)
Moj prethodni post je vise bio odgovor na temu, nego resenje problema koji je postavio bild-studio.

pozdrav
[ bigboss @ 30.03.2008. 00:17 ] @
A jel radite negde u Novom Sadu?
I ja sam iz NS.

Poz