Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Aethelstone
    addikt

    jogos észrevétel, elnézést a megfogalmazásért :)

    és mi a magyarázat erre?
    kevesebb overhead?
    egyszerűbb, kevesebb bájtkód jön létre?
    vagy esetleg jobban tud optimalizálni a VM?

    Többalakúság.

    Problémák:

    Ha szeretnéd kicserélni mondjuk egy LinkedList-re az ArrayListet, akkor nem tudod megtenni, mivel az eredeti változód típusa explicit ArrayList. Ha biztosan tudod, hogy az a változó az idők végezetéig ArrayList marad (ezt nem tudhatod), akkor maradhatna.

    Másrészt meg nem szép. Kódolási konvenció a Collectionok esetében, hogy nem implementációt, hanem interfészt adunk meg ilyen esetben.

    Érdemes "megszeretni" az interface típusú deklarációt, mivel egy csomó framework is így műx, pl. a Spring-es dependency injection esetében is interészekeket injektálsz, nem implementációkat.

    Teljesítménygondok nem hiszem, hogy lennének.

    szerk: Kolléga megelőzött :D

  • F1rstK1nq
    aktív tag

    jogos észrevétel, elnézést a megfogalmazásért :)

    és mi a magyarázat erre?
    kevesebb overhead?
    egyszerűbb, kevesebb bájtkód jön létre?
    vagy esetleg jobban tud optimalizálni a VM?

    Így megmarad az az előnyöd, hogy csak a Lista implementációját változtatod meg példányosításkor, a kód többi része változatlan marad. (Például ha úgy döntesz, ArrayList helyett LinkedList-et használsz később)

    Clean Code szerint egyébként érdemes szinte minden esetben a referencia értéknek a még legmagasabb értelmes interfészt megadni.

  • Aethelstone
    addikt

    Sziasztok,

    Akadt még egy kérdésem ami lehet, hogy hülyeség, de lehet hogy nem.
    Ha van egy függvényünk, akkor az alábbiak közül melyik változatát érdemesebb használni?
    Itt most a hangsúly azon van, hogy ős típusú vagy már kapásból leszármaztatott típusú legyen az a bizonyos változó.
    Ez most nem összekeverendő a "dependency injection" -el.
    A temp lokális változóhoz nem lesz később hozzárendelve semmilyen más érték.

    public void function1(){
    List<Object> temp = new ArrayList<Object>();
    }

    public void function1(){
    ArrayList<Object> temp = new ArrayList<Object>();
    }

    Az elsőt. Egyértelműen. Egyébként a List<?> nem őse az ArrayList<?> osztálynak. A List egy interfész.

  • Aethelstone
    addikt

    Sziasztok!

    Lenne egy érdekes kérdésem.
    Adott egy rendszer amelyben az egyik igen csak teljesítményigényes végrehajtó részt, kísérleti jelleggel több komponens is megvalósítja.
    A lényeg, hogy ezeknek a komponenseknek a teljesítményét szeretném mérni.
    Nem bonyolítom túl az egészet, egyszerűen csak futási időt fogok mérni a System.nano() hívással.

    long start = System.nanoTime();
    ...
    long end = System.nanoTime() - start;

    Mennyire valós dolog az, hogy a Java lassan "melegszik" be.
    Tehát ha én egy adott függvény teljesítményét akarom lemérni, akkor az első 5-6 futás eredményét tényleg érdemes-e eldobni?

    A válaszokat előre is köszönöm,
    Peti

    Meg azt sem árt tudni, hogy ezek a komponensek mit csinálnak. Adatbázis kapcsolat pl. elsőre kissé le tudja fogni a teljesítményt, de ha mondjuk pool van kötve a végére, akkor a második és sokadik futás értelemszerűen már sokkal gyorsabb...és sorolhatnám.

  • floatr
    veterán

    Sziasztok!

    Lenne egy érdekes kérdésem.
    Adott egy rendszer amelyben az egyik igen csak teljesítményigényes végrehajtó részt, kísérleti jelleggel több komponens is megvalósítja.
    A lényeg, hogy ezeknek a komponenseknek a teljesítményét szeretném mérni.
    Nem bonyolítom túl az egészet, egyszerűen csak futási időt fogok mérni a System.nano() hívással.

    long start = System.nanoTime();
    ...
    long end = System.nanoTime() - start;

    Mennyire valós dolog az, hogy a Java lassan "melegszik" be.
    Tehát ha én egy adott függvény teljesítményét akarom lemérni, akkor az első 5-6 futás eredményét tényleg érdemes-e eldobni?

    A válaszokat előre is köszönöm,
    Peti

    Létezik az, hogy a VM memóriát pucol, betölt, lefordít, becache-el dolgokat, de az elméletileg első futtatáskor megtörténik. Ez a jelenség más infrastruktúrán is jelentkezik.

    Azt viszont a teljesítményteszteknél érdemes megjegyezni, hogy mindig lesznek kiugróan rossz, vagy jó eredmények, ami nem igazán tükrözi a normál körülményeket. Használnak emiatt sokféle statisztikai mutatót, de nekem eddig a legjobban a medián jött be, az egyszerű átlagolás könnyen elvisz a málnásba.

    Ja és természetesen lehetőleg kellően sok futtatás kell ahhoz, hogy valós képet kapjál. Ha az elsőt mondjuk eldobod, után mondjuk 10 mérés már sok esetben elég tud lenni.

  • Sk8erPeter
    nagyúr

    Tlképpen csak egy O(1) -el van több műveletem a 2. -ban, nem?
    Ez pedig a hash kód alapján való elem lekérés a getKey segítségével.
    Bár lehet hogy ugrálni kell majd a hash táblában mert a hasítófüggvény nem elég precíz ahhoz, hogy olyan kódot tudjon gyártani amihez biztos, hogy nem tartozik még semmi se.
    (fix me, de asszem vmi ilyesmin alapszik a map ... )

    Ettől függetlenül igen, az elsőt célszerű használni.
    A kérdésemet csak azért raktam fel, mert mindig csak egy elemet rakok bele abba a listába és kicsit csúnya volt, hogy mindig létre kell hoznom egy temp listát ehhez.

    Szerintem egyáltalán nem csúnya, hogy külön sorba rakod, hogy mit művelsz azzal a listával, amit majd be szeretnél rakni a HashMapbe. Sőt, gyorsan olvasható, egyértelmű, tiszta, és elkerülsz vele egy tök felesleges plusz metódushívást. A második is jól olvasható, de tény, hogy pazarlóbb. Így egy elemnél aztán tényleg totál mindegy teljesítmény szempontjából, meg láthatóság szempontjából is, de én meg attól kaparom az arcom, amikor olyan kódot kell olvasnom, amikor láthatóan a fejlesztő célja az volt, hogy vagányan mindent minél rövidebbre tömörítsen. Az sem számít, hogy hányszor ismétel azonos metódushívásokat, hány plusz műveletet igényel, de milyen jól mutat, hogy legalább tömör. Hát nem, nem lesz feltétlenül gyorsabban olvasható a kód (persze nyilván bőven vannak kivételek, de ne fossuk már le ennyire a teljesítményt). Tényleg valakinek attól lesz olvashatatlan a kód, mert külön sorban ki van fejtve, hogy mi történik? Az már régen rossz. Magasszintű nyelveknél egyébként nagyon divat(tá vált?) az is, hogy a metódushívásokat egymás után is ismételgetjük, mondván, "nem kell túlpörögni optimalizáció szempontjából", mint a kolléga mondta, ez itt abszolút igaz, de általában ezzel nagyon nem értek egyet. Egyrészt ha ennyire leszarjuk, hányszor történik meg egy-egy metódushívás, akkor az már zsigeri szintű igénytelenséghez vezethet hosszabb távon a teljesítmény rovására, meg azért szépen lehet halmozgatni az ilyen tök felesleges overheadeket, na de minek. (Persze ebben az is szerepet játszik, hogy ebből a szempontból mai napig bennem van a C, C++ tanulásának korszaka, amikor az ilyesmi nem volt menő.)
    Pl. ilyesmi:
    whatever.doStuff().veryCool().blahblah();
    whatever.doStuff().veryCool().wow().great();
    whatever.doStuff().veryCool().notCool();

    Na itt pl. a whatever.doStuff().veryCool() eredményét el lehetett volna tárolni egy változóba. De nem, ez így tök menő. Ja várjunk csak, mégsem. :D

    Szerk.:
    Persze simán lehet, hogy az ilyeneket a fordító úgyis optimalizálja. :) Mindegy, bennem az van, hogy abból baj nincs, ha egyértelműen láthatóvá teszem, mi történik, nekem a pár sorral bővebben hablatyolós kód nem lesz olvashatatlanabb, az agyontömörített kód viszont annál inkább. (Meg a debuggolást is nehezebbé teheti. :D)

  • PazsitZ
    addikt

    Sziasztok!

    Szerintetek melyik konstrukciót célszerűbb használni?
    Pl. olvashatóság, performancia szempontjából.

    Map<Object, List<Object>> objects = new HashMap<Object, List<Object>>();
    List<Object> temp = new ArrayList<Object>();
    temp.add(actualValueObject);
    objects.put(actualKeyObject, temp);

    vagy:

    Map<Object, List<Object>> objects = new HashMap<Object, List<Object>>();
    objects.put(actualKeyObject, new ArrayList<Object>());
    objects.getKey(actualKeyObject).add(actualValueObject);

    Előre is köszi,
    Peti

    Az első esetnél egy temp referencia van, a második esetnél van a Map get és egy cast művelet.
    Nem hiszem, hogy ilyeneket szintű dolgokat kellene túlpörögni optimalizáció szempontból.

    Ha nagyon rövidíteni akarsz, ezek is használhatóak:

    objects.put(actualKeyObject, new ArrayList<Object>() {{ add(actualValueObject); }});
    objects.put(actualKeyObject, Arrays.asList(actualValueObject));

    Egyébként inkább abba az irányba gondolkodnék, hogy ha több elemet pakolunk a listába, akkor azt külön metódusba kiszervezni és az első példa szerint hozzáadni érdemesebb/átláthatóbb szerintem.

    Egy elemű lista esetén viszont számomra inkább az inline megoldások a szimpatikusabbak.

  • #39560925
    törölt tag

    Sziasztok!

    Szerintetek melyik konstrukciót célszerűbb használni?
    Pl. olvashatóság, performancia szempontjából.

    Map<Object, List<Object>> objects = new HashMap<Object, List<Object>>();
    List<Object> temp = new ArrayList<Object>();
    temp.add(actualValueObject);
    objects.put(actualKeyObject, temp);

    vagy:

    Map<Object, List<Object>> objects = new HashMap<Object, List<Object>>();
    objects.put(actualKeyObject, new ArrayList<Object>());
    objects.getKey(actualKeyObject).add(actualValueObject);

    Előre is köszi,
    Peti

    Miért Object-eket tárolsz?

  • M_AND_Ms
    veterán

    Sziasztok!

    Szerintetek melyik konstrukciót célszerűbb használni?
    Pl. olvashatóság, performancia szempontjából.

    Map<Object, List<Object>> objects = new HashMap<Object, List<Object>>();
    List<Object> temp = new ArrayList<Object>();
    temp.add(actualValueObject);
    objects.put(actualKeyObject, temp);

    vagy:

    Map<Object, List<Object>> objects = new HashMap<Object, List<Object>>();
    objects.put(actualKeyObject, new ArrayList<Object>());
    objects.getKey(actualKeyObject).add(actualValueObject);

    Előre is köszi,
    Peti

    Az első, mivel a kész listával még van dolgod (hogy belerakd, amit akarsz), ezért jó, ha az megvan. A második esetben rögtön berakod a listát a Map-be, így azt egyből vissza is kell keresned, ami mégiscsak idő és energia

  • Mukorka
    addikt

    Szia!

    Hát eddig C#-ban dolgoztam, most viszont belekell ugranom Javaba is.
    Tehát adott egy forráskód elemző, amely Javaban lett írva és egy másik nyelvből húz fel forráskód alapján egy AST -t.
    Adott node -nak rendkívül sok függvényét tudjuk meghívni.
    Nincs kedvem ezeket kézzel leírogatni és változót létrehozni és arra gondoltam, hogy van-e esetleg vmi automatizált módszer arra, hogy ezeknek a függvényhívásoknak az eredményét megtudjam vizsgálni?
    Természetesen csak a paraméter nélküli fgvekről van most szó.
    Elég sok öröklődés van benne meg változó meg minden eltorzult dolog :D

    Alapvetően reflectionnel végigmehetsz minden fv-n és aminek nincs paramétere azt meghívhatod aztán megnézed hogy mit adott vissza stb... A node-okon meg visitorral végigmész bár gondolom ez egyértelmű.

  • Sk8erPeter
    nagyúr

    Sziasztok!

    Azt szeretném megkérdezni, hogy Eclipsehez tud vki egy olyan kiegészítőt ami a beépített debuggert, ezen belül is a Variables nézetért felelős részt feltudja esetleg egy kicsi "okosítani"?

    Előre is köszi,
    Peti

    Konkrétabban mit takar a "felokosítás"?

    (#7528) sutszi:
    Jaja, két számjegy viszont simán elfér a tálcaikonon (ld. HWiNFO64 tálcára kirakott kijelzői). Három már elég necces (a töltöttség kijelzésénél mondjuk csak egy esetben van erre szükség, 100%-nál :D)... Igazából két számjegy esetén állapotjelzésre a tálcaikon a legjobb megoldás, háromnál para. De próbát megér, max. kisebbek lesznek a betűk, vagy 100% esetén egy teljes töltöttséget jelző egyéb ikont mutatsz, nem számot. :D

  • Superhun
    addikt

    uh, nem akartam osztályokkal megvalósítani ezt, abszolút kollekciókban gondolkozok, ugyanis kb. olyan lenne, mint ágyúval verébre lőni

    ezt az adatpakolgatást is static { } -ben végzem, bár már ez megvolt írva

    tehát annyi az egész, hogy van kb. 20-30 adatpárom az előbbi szabályokkal definiálva
    majd van egy fgvem, ami kap 2 paramétert, egy Stringet és egy intet
    és lecsekkolja, hogy ebben az adott akármiben benne van-e

    ennyi lenne a feladat, erre meg nem akartam osztályt írni, hisz nem nagy dolog
    kollekciókkal szeretném megoldani,
    pl. ez is elvégezné a feladatot: ArrayListbe egy String tömb és kész, a String tömb meg ugye kételemű lenne ("kutya" - "1")
    majd legfeljebb castolgatom az int értéket

    Pedig pont, hogy túlbonyolítod a string tömbökkel a dolgot. Azt hogy tervezted leellenőrizni, hogy az adott pár benne van-e már az ArrayList-ben? Contains-szal? Lassabb működést kapsz, a castolás gányolásról nem is beszélve. :U

    Edit: az utóbbi megoldás sokkal szebb. :K

  • Karma
    félisten

    még mindig nem látom értelmét 20-30 adatpár miatt egy új osztály létrehozásához...
    főleg, hogy olyan adatokat tárolnék amik nem fognak megváltozni

    persze nem mondtam, azt sem, hogy az én megoldásom jó lenne, viszont az osztályt túlzásnak tartom

    Hát, ezért mondtam a SimpleEntry-t.

    Jó lenne, ha lenne gyárilag Tuple típus, jobbhíján a Pair helyett ez a legegyszerűbb, amihez se kódot nem kell írni, se libet behúzni.

  • Karma
    félisten

    uh, nem akartam osztályokkal megvalósítani ezt, abszolút kollekciókban gondolkozok, ugyanis kb. olyan lenne, mint ágyúval verébre lőni

    ezt az adatpakolgatást is static { } -ben végzem, bár már ez megvolt írva

    tehát annyi az egész, hogy van kb. 20-30 adatpárom az előbbi szabályokkal definiálva
    majd van egy fgvem, ami kap 2 paramétert, egy Stringet és egy intet
    és lecsekkolja, hogy ebben az adott akármiben benne van-e

    ennyi lenne a feladat, erre meg nem akartam osztályt írni, hisz nem nagy dolog
    kollekciókkal szeretném megoldani,
    pl. ez is elvégezné a feladatot: ArrayListbe egy String tömb és kész, a String tömb meg ugye kételemű lenne ("kutya" - "1")
    majd legfeljebb castolgatom az int értéket

    Ilyen megoldásoknak szerintem nincs helye egy Java topikban. De igazából semmilyen szakmaiban se. Stringben eltárolni a számot? Nooormális?

    Ha nem akarsz saját adatosztályt írni, akkor legalább a AbstractMap.SimpleEntryt használd az adatpár tárolására. Ezt meg belerakhatod a HashSetbe.

  • TBG
    senior tag

    Sziasztok!

    Egy érdekes, de nem nehéz problémába ütköztem, igazából van is rá elképzelésem, de hátha kapok jobb ötletet tőletek.
    Tehát adatokat kellene tárolnom vmiben (természetesen vmi kollekcióra gondoltam).

    Két részből áll:
    egy String és egy int

    A string értéke és az int értéke is ismétlődhet, tehát pl.: ezek a párosok fordulhatnak elő:
    "kutya" - 2
    "kutya" - 1
    "macska" - 1

    Látható, hogy egy vagy több String is megegyezhet egymással és egy vagy több int is megegyezhet egymással, viszont nem lehetnek olyan párosok ahol a String és az int is megegyezne.
    Tehát tlképpen mindegyik páros egyértelműen azonosítható a String értékkel és az int értékkel.
    Olyan mintha egyszerre használnám őket kulcsnak.

    A kérdésem: melyik kollekciót lenne érdemes erre a feladatra használni?
    Időigény, elérés nem számít, de azért ne legyen nagyon undormány és gány.
    HashMap egymagában nem jöhet szóba a fentiek miatt.
    Össze kellene ágyazni min két kollekciót, csak nem tudom melyik lenne a legmegfelelőbb erre a célra, ami még talán elegáns is lenne.

    Ha esetleg vki tud vmi elfogadható és vállalható megoldást erre, akkor ne tartsa magában
    :))

    Superhun megoldása teljesen jó.

    Viszont ha már saját osztályt használsz felüldefiniált metódusokkal, akkor szerintem elég az equals felüldefiniálni úgy, hogy a String és az int egyezőség esetén adjon vissza TRUE-t és akkor egy "sima" ArrayList-be is teheted. Persze attól is függ, hogy mennyi elemed lesz, mert nagyon sok elem esetén az ArrayList nem túl gazdaságos. Nem mondom, hogy Superhun vagy az én megoldásom a jobb, az enyém egy alternatív, de valamivel egyszerűbb megoldás, mert csak 1 metódus felüldefiniálását kell megcsinálni, de mint írtam, sok elemnél nem feltétlenül gazdaságos.

  • Superhun
    addikt

    Sziasztok!

    Egy érdekes, de nem nehéz problémába ütköztem, igazából van is rá elképzelésem, de hátha kapok jobb ötletet tőletek.
    Tehát adatokat kellene tárolnom vmiben (természetesen vmi kollekcióra gondoltam).

    Két részből áll:
    egy String és egy int

    A string értéke és az int értéke is ismétlődhet, tehát pl.: ezek a párosok fordulhatnak elő:
    "kutya" - 2
    "kutya" - 1
    "macska" - 1

    Látható, hogy egy vagy több String is megegyezhet egymással és egy vagy több int is megegyezhet egymással, viszont nem lehetnek olyan párosok ahol a String és az int is megegyezne.
    Tehát tlképpen mindegyik páros egyértelműen azonosítható a String értékkel és az int értékkel.
    Olyan mintha egyszerre használnám őket kulcsnak.

    A kérdésem: melyik kollekciót lenne érdemes erre a feladatra használni?
    Időigény, elérés nem számít, de azért ne legyen nagyon undormány és gány.
    HashMap egymagában nem jöhet szóba a fentiek miatt.
    Össze kellene ágyazni min két kollekciót, csak nem tudom melyik lenne a legmegfelelőbb erre a célra, ami még talán elegáns is lenne.

    Ha esetleg vki tud vmi elfogadható és vállalható megoldást erre, akkor ne tartsa magában
    :))

    Csinálsz egy osztályt, amiben két mező van: állatnév és egy szám, és felüldefiniálod az equals/hashcode metódusát úgy, hogy az azonos állatnevű és számú objektumok egyezzenek. Ezeket meg pakolhatod egy HashSetbe.

  • Karma
    félisten

    Sziasztok!

    Biztos nagyon amatőr kérdés lesz, de ha pl. van egy ilyen:

    Map<String, Person> people = new HashMap<String, Person>();

    akkor a people változót miért nem így deklaráljuk:
    HashMap<String, Person> people = new HashMap<String, Person>();

    Ha már így is úgy is HashMap<String, Person>(); lesz belőle?

    Egyáltalán miért jó ez a sima Map -féle deklarálás?

    Előre is köszi a kiigazítást.

    Ez egy fontos tervezési elv kicsiben. Amikor a változót később használod, nem függ így a kódod attól, hogy a változó konkrétan egy HashMapet takar, csak hogy megfelel a Map interfésznek - más szóval kulcs-érték párokat tudsz tárolni benne.

    Így a későbbi kód módosítása nélkül kicserélheted például TreeMapre (ami hashtábla helyett piros-fekete fában tárolja az értékeket), ha a helyzet úgy kívánja. Vagy akár egy tömbre, amiben lineáris kereséssel túrod ki a megfelelő értéket. A lényeg az, hogy milyen szolgáltatást nyújt, nem az, hogy konkrétan hogyan oldja meg.

    Azért mondom, hogy kicsiben, mert egy függvényen belül ennek nincs nagy jelentősége, maximum szoktatod magad csak az interfészek deklarálásához. Nagyobb programban viszont, ahol komponensek kapcsolódnak egymáshoz, ez már kritikussá válik. És jönnek olyan finomságok, mint Dependency Inversion.

  • Superhun
    addikt

    nekem ez nem tartott sokáig, főleg úgy, hogy eclipse megvolt nyitva :D
    véleményem szerint ha vki programozással szeretne kezdeni, akkor ne ugorjon neki azonnal az OOP-nek
    érdemes sima C -vel kezdeni, egyrészt azért, hogy pl. tisztában legyen a ? : kifejezéssel
    persze nekem is van még sok mindent tanulnom :))

    Szvsz kezdésnek egy szkriptnyelv vagy Delphi/Pascal sokkal egyszerűbb. C-ben nem tudsz programot írni függvény nélkül, míg előbbieknél nincs ilyen probléma.

  • fatal`
    titán

    nekem ez nem tartott sokáig, főleg úgy, hogy eclipse megvolt nyitva :D
    véleményem szerint ha vki programozással szeretne kezdeni, akkor ne ugorjon neki azonnal az OOP-nek
    érdemes sima C -vel kezdeni, egyrészt azért, hogy pl. tisztában legyen a ? : kifejezéssel
    persze nekem is van még sok mindent tanulnom :))

    Azért a ? : kifejezés nélkül szerintem meg lehet lenni, kicsit többet kell gépelni.

    Nem hiszem, hogy C-vel jó kezdeni, könnyen elveszhet már az elején.

  • TBG
    senior tag

    azt hittem, hogy vmi orbitális nagy szabálysértést követtem el :D

    Azon kívül, hogy reagáltál a csávóra? :) Azt sem mondta, bazdmeg....:(

  • TBG
    senior tag

    lehet nem egy profi kód, mondjuk a konstruktorból kiszedhettem volna a this.price * részeket
    de ezt leszámítva miért lenne övön aluli ütés?
    Azt csinálja ami a feladat.

    Félreértesz. A kódod nagyon jó. Olyan megoldások vannak benne, amiket a kérdező szinte biztosan nem tud értelmezni.:)

  • TBG
    senior tag

    elég sokféleképpen meglehet oldani

    Obj.java
    package bikeshop;

    public class Obj {

    private final int ordertime;
    private final boolean ordertype;
    private int price;

    public Obj(int ordertime, boolean ordertype) {
    this.ordertime = ordertime;
    this.ordertype = ordertype;
    this.price = (this.ordertime >= 1 && this.ordertime <= 5) ? 10 : 30;
    this.price += this.ordertype ? 10 : 5;
    }

    public int getPrice() {
    return this.price;
    }
    }

    Main.java
    package bikeshop;

    public class Main {

    public static void main(String[] args) {
    Obj obj = new Obj(5, false);
    System.out.println("Price: " + obj.getPrice());
    }

    }

    Elnézve az eredeti kódot, a Te megoldásod övön aluli ütésként értelmezhető:)

  • WonderCSabo
    félisten

    Köszönöm a választ modder és WonderCSabo.
    Amire nekem kellene: XML fájlból elemek, attribútumok beolvasása.
    Egyszóval, teljes egészében beolvasni egy XML fájlt, hogy majd ebből később szabályok alapján metrikákat számoljak / vizsgáljak.
    Futás idő mindegy mennyi :))

    Akkor a JDOM sokkal egyszerűbb.

  • WonderCSabo
    félisten

    Üdv!

    XML fájlok parsolásához tudtok ajánlani hatékony külső libeket?

    Ha a hatékonyság alatt nem a futási idő gyorsaságát, hanem a használatot érted, akkor pedig a beépített DOM, de sztem még jobb a külső JDOM.

  • modder
    aktív tag

    Üdv!

    XML fájlok parsolásához tudtok ajánlani hatékony külső libeket?

    Nem vagyok egy nagy XML vadállat, csak mostanában kellett. Attól függ, hogy akarod használni.
    ha entitást akarsz generálni az xml-ből oda-vissza, akkor JAXB (Metro, de inkább Eclipse Moxy implementációt használd, mert kevésbé bugos).
    Ezt nagyon egyszerű használni.

    Ha több kontroll kell, akkor pl StAX API.

    Én most a kettőt együtt használtam, mert alá kellett írni az eredeti xml üzenetet, ami sokféle típusú lehet. szóval fogtam, jaxb-vel legenerelátam az üzenet xml-t, szintén jaxb-vel legeneráltam a signature objektumból az xml-t, majd StAX-szal a kettőből összeheggesztettem egy nagyon egyszerű xml-t, ami a kettőt tartalmazza.

  • Superhun
    addikt

    @Taoharcos: elnézek arra is :))

    @Superhun: próbálkoztam már külföldi fórumon, eddig eredménytelenül
    Cégekkel való kapcsolatfelvételben én is gondolkoztam, a következő lépések közé teszem :)

    A legnagyobb programozási fórum a StackOverflow, én mindenképpen próbálkoznék ott is. :)

  • Superhun
    addikt

    Ez elég nehéz téma, mindenképpen próbálj meg külföldi fórumokon is kérdezni, illetve akár cégekkel is kapcsolatba lépni.

  • pvt.peter
    őstag

    Sziasztok!

    Ezt posztot az Android programozás -hoz is beírtam, de mivel Java -hoz is kapcsolódik, ezért ide is beírom. Tehát:
    szeretnék kérni egy kis segítséget Tőletek, ugyanis Android platformmal kapcsolatban fogok szakdolgozatot írni, illetve részt venni egy projektben.
    A dolgozat címe: Android alkalmazások minőségbiztosítása - egy minősítő modell kidolgozása és eredményeinek validálása.
    Elég tág téma így első hallásra, ezért is megpróbálom behatárolni nagyjából.
    Először is ezen a projekten 3 fő fog dolgozni, beleértve engem is.
    Ezek a körök kerülnek feldolgozásra, illetve ezeket kellene feldolgozni a projekt során:

    1) Android GUI XML-ek elemzése, új metrikák definiálása
    magának az Android alkalmazás felhasználói felületének elemzése meglévő illetve új metrikák bevezetésével
    2) Andorid Java kód elemzése, új metrikák definiálása
    Android specifikus kód elemzése meglévő illetve új metrikák bevezetésével
    3) Minőségi modell adaptálása Androidra, minőségi eredmények és felhasználói vélemények statisztikai összefüggéseinek keresése
    az előző két pontban definiált részek használata és eredményeinek felhasználása a felhasználói visszajelzések összehasonlításában

    Látható, hogy nem új keletű dolgok kerülnek feldolgozásra, elemzésre, hanem már létező (különálló) rendszert kell átdolgozni magára az Android platformra.
    Annyiban új a dolog, hogy még nem igazán vannak speciel Android alkalmazások minőségbiztosításával foglalkozó területek, projektek, ebből adódóan ez a projekt leginkább kutatás/fejlesztés témába sorolható.
    Ehhez elsősorban irodalmat kell kutatni.
    Találtam is ezzel foglalkozó cikket, SAMOA (ha valaki tud ehhez hasonló cikket, publikációt akkor azt is szívesen veszem).

    Illetve lenne még kérdésem, ami leginkább azokhoz szól, akik foglalkoztak/foglalkoznak szoftverek minőségbiztosításával:
    Érdekelne engem minden ezzel kapcsolatos forrás, tehát amit érdemes feldolgozni, ami mentén érdemes elindulni. (link, cikk, publikáció, bármi)
    Ez vonatkozik mind az XML, illetve az Android specifikus Java kódra.
    Pl. Android specifikus szabályok gyűjteménye

    Ajánlásokat illetve a segítséget előre is köszönöm

    [erre] senki semmit? :))

  • Peter Kiss
    őstag

    @sutszi, @TBG, @hunfatal köszönöm szépen a válaszokat :)

    illetve @Athlon64+
    "Abstract osztályt lehet verziózni"
    erre tudnál nekem egy példát mutatni, hogy ez mit is jelent?

    Van egy abstract osztályod, benne dolgokkal. Két év múlva kiderül, hogy jó lenne, ha lenne benne plusz egy metódus. Simán lehet módosítani az osztályt anélkül, hogy a régi kódokat elrontanád vele.

    Interface esetén ezt nem lehet kivitelezni: ha bekerül az interface-be egy plusz elem, akkor azt a régi kódokban is implementálni kell. (Abstract osztály esetén lehet pl. az adott új metódusnak üres blokkja vagy egy default implementációja (pl. return null; ).)

  • fatal`
    titán

    Sziasztok!

    Egy kérdés merült fel bennem interfészekkel kapcsolatban.
    Tehát interfész definíciója: (teljesség hiányával)
    "Minden operáció impliciten absztrakt"
    ->tehát csak az adott fgv. feje van az interfészben, tehát csak definiálva van

    Az implicit szót nem véletlen emeltem ki az előbb.
    Azt is tudjuk, hogy az interfész az egy speciális absztrakt osztály.
    Absztrakt osztály definíciója, többek közt:
    Egy osztály absztrakt osztály, ha legalább egy absztrakt metódust tartalmaz.

    Egy absztrakt osztály tartalmazhat olyan absztrakt függvényt, amelynek van implementációja abban az adott absztrakt osztályban.

    És itt jönne a kérdésem:
    Impliciten absztraktnak nevezzük az előbb említett interfészben levő operációt, míg explicitnek nevezzük az utóbb említett absztrakt osztályban levő absztrakt függvényt amelynek van implementációja?

    A kérdésemmel arra szeretnék rávilágítani, hogy helyesen mondtam-e az explicit és az implicit közötti különbséget.

    Illetve lenne még vmi.
    Az interfész osztály és az absztrakt osztály közötti különbségek.
    E kettő dolog között a különbség "szinte" csak az abstract és az interface kulcsszavak.
    Mi még köztük a különbség? Melyiket érdemes használni?

    "Mi még köztük a különbség? Melyiket érdemes használni?"
    Származtatáskor van különbség. Ha nincs szükséged semmilyen függvény implementációjára (értsd, olyan abstract osztályod lenne, amiben csak abstract függvények vannak), akkor érdemes interfacet használni, mert interfaceből egy osztály bármennyit implementálhat, viszont származtatni csak egy osztályból lehet.

  • Peter Kiss
    őstag

    Sziasztok!

    Egy kérdés merült fel bennem interfészekkel kapcsolatban.
    Tehát interfész definíciója: (teljesség hiányával)
    "Minden operáció impliciten absztrakt"
    ->tehát csak az adott fgv. feje van az interfészben, tehát csak definiálva van

    Az implicit szót nem véletlen emeltem ki az előbb.
    Azt is tudjuk, hogy az interfész az egy speciális absztrakt osztály.
    Absztrakt osztály definíciója, többek közt:
    Egy osztály absztrakt osztály, ha legalább egy absztrakt metódust tartalmaz.

    Egy absztrakt osztály tartalmazhat olyan absztrakt függvényt, amelynek van implementációja abban az adott absztrakt osztályban.

    És itt jönne a kérdésem:
    Impliciten absztraktnak nevezzük az előbb említett interfészben levő operációt, míg explicitnek nevezzük az utóbb említett absztrakt osztályban levő absztrakt függvényt amelynek van implementációja?

    A kérdésemmel arra szeretnék rávilágítani, hogy helyesen mondtam-e az explicit és az implicit közötti különbséget.

    Illetve lenne még vmi.
    Az interfész osztály és az absztrakt osztály közötti különbségek.
    E kettő dolog között a különbség "szinte" csak az abstract és az interface kulcsszavak.
    Mi még köztük a különbség? Melyiket érdemes használni?

    Abstract osztályt lehet verziózni (beépíthető plusz metódus default implementációval), míg egy interface-t nem.

  • TBG
    senior tag

    Sziasztok!

    Egy kérdés merült fel bennem interfészekkel kapcsolatban.
    Tehát interfész definíciója: (teljesség hiányával)
    "Minden operáció impliciten absztrakt"
    ->tehát csak az adott fgv. feje van az interfészben, tehát csak definiálva van

    Az implicit szót nem véletlen emeltem ki az előbb.
    Azt is tudjuk, hogy az interfész az egy speciális absztrakt osztály.
    Absztrakt osztály definíciója, többek közt:
    Egy osztály absztrakt osztály, ha legalább egy absztrakt metódust tartalmaz.

    Egy absztrakt osztály tartalmazhat olyan absztrakt függvényt, amelynek van implementációja abban az adott absztrakt osztályban.

    És itt jönne a kérdésem:
    Impliciten absztraktnak nevezzük az előbb említett interfészben levő operációt, míg explicitnek nevezzük az utóbb említett absztrakt osztályban levő absztrakt függvényt amelynek van implementációja?

    A kérdésemmel arra szeretnék rávilágítani, hogy helyesen mondtam-e az explicit és az implicit közötti különbséget.

    Illetve lenne még vmi.
    Az interfész osztály és az absztrakt osztály közötti különbségek.
    E kettő dolog között a különbség "szinte" csak az abstract és az interface kulcsszavak.
    Mi még köztük a különbség? Melyiket érdemes használni?

    Az interfész osztály és az absztrakt osztály közötti különbségek.
    E kettő dolog között a különbség "szinte" csak az abstract és az interface kulcsszavak.
    Mi még köztük a különbség? Melyiket érdemes használni?

    Azért ez nem így van. Az interfész gyakorlatilag csak meghatároz megvalósítandó metódusokat.
    Ezzel szemben az absztrakt osztályban lehetnek absztrakt metódusok, amiket meg kell valósítani az örökösnek, DE lehetnek benne nem absztrakt metódusok is, amik valami konkrétumot csinálnak.

    Persze ezt lehet variálni, amikor egy absztrakt osztály megvalósít egy interfészt, de az implementációk absztraktok lesznek.....így azokat az örökösben kell implementálni...és ott már gyakorlatilag nem látszik, hogy az eredetileg az absztrakt osztály absztrakt metódusait valósítom meg vagy az absztrakt osztály által implementált interfész metódusait :)

    És melyiket érdemes? Erre nincs egységes recept. Általánosságban elmondható, hogy ha többszörös öröklődést akarsz megvalósítani(ami Javában alapból nincs), akkor interfész, de ha tuti, hogy csak egy őst akarsz, de kellenek default metódusok is, akkor absztrakt. Perszem azt is lehet, hogy

    Interface-->default class implements interface-->örökös

    vagy

    absztrakt class-->örökös

    vagy

    Interface->absztrakt class absztrakt metódusok-->örökös

    szóval...a lehetőségek végtelen tárháza :)

  • MrSealRD
    veterán

    Sziasztok!

    Egy kérdés merült fel bennem interfészekkel kapcsolatban.
    Tehát interfész definíciója: (teljesség hiányával)
    "Minden operáció impliciten absztrakt"
    ->tehát csak az adott fgv. feje van az interfészben, tehát csak definiálva van

    Az implicit szót nem véletlen emeltem ki az előbb.
    Azt is tudjuk, hogy az interfész az egy speciális absztrakt osztály.
    Absztrakt osztály definíciója, többek közt:
    Egy osztály absztrakt osztály, ha legalább egy absztrakt metódust tartalmaz.

    Egy absztrakt osztály tartalmazhat olyan absztrakt függvényt, amelynek van implementációja abban az adott absztrakt osztályban.

    És itt jönne a kérdésem:
    Impliciten absztraktnak nevezzük az előbb említett interfészben levő operációt, míg explicitnek nevezzük az utóbb említett absztrakt osztályban levő absztrakt függvényt amelynek van implementációja?

    A kérdésemmel arra szeretnék rávilágítani, hogy helyesen mondtam-e az explicit és az implicit közötti különbséget.

    Illetve lenne még vmi.
    Az interfész osztály és az absztrakt osztály közötti különbségek.
    E kettő dolog között a különbség "szinte" csak az abstract és az interface kulcsszavak.
    Mi még köztük a különbség? Melyiket érdemes használni?

    Majd ezt még kiegészítik páran...mert amit írok kevés de egy alapvető dolog:
    Interfészből bármennyit implementálhat egy osztály.
    DE egy osztály csak egyetlen őssel rendelkezhet.
    Ezért el kell dönteni a tervezési fázisban, hogy egy adott dolog esetén melyiket kell használni...

  • Karma
    félisten

    Sziasztok!

    Azt szeretném kérdezni, hogy van-e hatékony program arra, hogy *.class fájlokat részlegesen vagy teljesen visszafejtsünk *.java forráskóddá? (Ha igen, ki melyiket használta, melyiket javasolja?)

    Választ előre is köszönöm.

    A TC Jad Plugin a kedvencem.

  • sztanozs
    veterán

    Sziasztok!

    Azt szeretném kérdezni, hogy van-e hatékony program arra, hogy *.class fájlokat részlegesen vagy teljesen visszafejtsünk *.java forráskóddá? (Ha igen, ki melyiket használta, melyiket javasolja?)

    Választ előre is köszönöm.

Új hozzászólás Aktív témák

Hirdetés