• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 
Menu

Zobrazi� pr�spevky

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Zobrazi� pr�spevky Menu

Messages - Agamemnon

#251
1. ročník / Re: malo prispevkov???
28.11.2011, 06:11:27
Quote from: paloSK on  28.11.2011, 05:24:19
Quote from: pinko on  28.11.2011, 05:22:49
Sorry ludia za takyto off-topic no nedalo mi to....vsimli ste si kolko maju druhaci  prispevkov tuna na fore oproti nam prvakom? asi 5x viac... suvisi to s konkretnymi predmetmi druhakov ci sme len lenivy rocnik?   ;D
Prvaci maju rozum a riesia veci na fb.  :ringsmiley:

jj, určite máte kopu ľudí z vyšších ročníkov, čo vám dokážu poradiť :P lebo tie veci už absolvovali :P
#252
čo to znamená jednoduchú desktopovú app? aká verzia wpf (resp. akú verziu .net používaš)? trillian je skinovateľný... čo to znamená "ako trillian"?
#253
2. ročník / Re: OOP
27.11.2011, 19:14:05
Quote from: esperian on  27.11.2011, 16:50:30
ako mam spravit to, ze jeden predmet sa moze dat aj preniest aj pouzit?? cize musi implementovat aj Useable aj Moveable ?

cize malo by to vyzerat nejako takto public class Kluc extends AbstractItem implements Useable implements Moveable

edit akurat ma napadlo, ze co tak vytvorit novy Interface a tam nejako spojit to useable a moveable ? hm ?

áno, môžeš vytvoriť interface, kde spojíš Useable a Moveable, ale zbytočne - hlavne, ak nebude pridávať nič nové...

radšej priamo nech tá trieda implementuje obe rozhrania:
len sa to zapisuje cez čiarku a kľúčové slovo implements sa použije len raz...

public class Kluc extends AbstractItem implements Useable, Moveable
#254
2. ročník / Re: OOP
26.11.2011, 21:34:07
Quote from: Eriik on  26.11.2011, 20:03:56
mám menšiu otázku .. v metóde startNewGame() vytvorím nový batoh a zavolám metódu createRooms, ktorá vytvori miestnosti aj s názvami, opismi atď... pomôže niečo keď potom v metóde startNewGame() zavolám metódu System.gc() ? (tá by mala spustiť GC) alebo je to zbytočné ?

vytvoríš nejaké veci, na ktoré stále máš referenciu a ktoré sa chystáš používať...
načo potrebuješ volať gc, ak si nič nezrušil... resp. takto explicitne volať gc, to fakt potrebuješ zvláštnu situáciu... nerob to :)
#255
2. ročník / Re: OOP
26.11.2011, 21:32:48
Quote from: veynom on  26.11.2011, 17:47:58
chcel by som vediet, ci mozem este zmenit nieco v scenari a poslat to znova cviciacemu

malé zmeny v scenári robiť môžeš... ak chceš prerobiť celý scenár, tak nie...
#256
2. ročník / Re: OOP
26.11.2011, 08:05:38
okej, alebo možno ešte jeden príklad...

máš nejaký výpočet... a to, ako sa výsledok vypočíta, závisí od nejakej hodnoty...

napr. chceš určiť množstvo vody vo vedre... a vieš, že vedro jednej farby má iný objem ako vedrom inej farby... tak to vieš urobiť cez rozhrania (sorry za takýto príklad, ale už je jedna po polnoci... :D)

interface IBucket {
  double getVolume();
  double getHeight();
  double getWeight();
}

class BlueBucket implements IBucket {
  public double getVolume() { return 2; }
  public double getHeight() { return 0,3; }
  public double getWeigth() { return 1; }
}

class RedBucket implements IBucket {
  public double getVolume() { return 5; }
  public double getHeight() { return 0,7; }
  public double getWeigth() { return 4; }
}

// ďalšie vedrá...

class Algorithm {
  IBucket bucket;
  // premenná je typu IBucket, čím hovoríme, že tam môžu byť rôzne vedrá...

  public void prepare() {
    print("Ake mas vedro (1 - modre, 2 - cervene, ..., 0 - koniec)?");
    int vedro = read();
    switch (vedro) {
      case 1:
        bucket = new BlueBucket();
        break;
      case 2:
        bucket = new RedBucket();
        break;
      ...
    }
  }

  public void calculate() {
    // bla bla... výpočet... bla bla...
    // len tu jednoducho zavoláš tie metódy z rozhrania, lebo vieš, že každé vedro ich implementuje a nezaujíma ťa, že ako, len ťa zaujíma ich výsledok... java správne zvolí, ktorú metódu má zavolať podľa toho, ako si inicializoval premennú bucket...
    print("tvoje vedro má objem " + bucket.getVolume() + " L, výšku " + bucket.getHeight() + "m a váhu " + bucket.getWeight() + "kg.");
  } 

  public void calculateSomethingElse() {
    // opät to môžeš len jednoducho zavolať metódy rozhrania IBucket - keďže premenná je toho typu a triedy implementujú to rozhranie...
    print("súčet všetkých hodnôt je: " + (bucket.getVolume() + bucket.getHeight() + bucket.getWeight()));
  }

  public void calculate3() {
    // a znovu rovnaký princíp požitia... :)
  }
}


okej, primitívnosť v tomto prípade, a asi by to bolo menej písania urobiť cez if priamo vo výpočte (a nie ako je teraz, pri inicializácií)... a teraz si predstav, že máš napr. 15 vedier :) a nejaký zložitý výpočet... prípadne ešte viac rôznych výpočtov... potom by si tých ifov potreboval veľa v mieste každého výpočtu - v každom ife výpočet znovu a znovu, etc... viac kódu, väčšia šanca na chybu, etc... :)

print a read si nevšímaj :) vm, že zápis je iný, ale nechcelo sa mi to hľadať teraz.... myslím, že je jasné, čo som tým chcel povedať :)
opäť neručím za ďalšie chyby so zápisom, keďže javu nepoužívam :)
#257
2. ročník / Re: OOP
26.11.2011, 07:46:23
okej, teraz to praktické využitie... hehe :) to bude ťažšie trochu, ak ťa nebudem chcieť popliesť ďalšími divnými vecami :)

najdôležitejšia vec je tu polymorfizmus - ak dáš rozhranie ako parameter nejakej metódy, tak objekt akejkoľvek triedy, ktorá to rozhranie implementuje, môže do tej metódy ísť ako parameter... rôzne výhody: napr. dokážeš zmeniť algoritmus za behu - napr. na základe nejakého testu (if-u) a implementácia bude stále čitateľná (a samotný algoritmus bude bez if-ov)... alebo napr. naloaduješ za behu triedu, ktorá implementuje rozhranie, z nejakej knižnice, ktorú napr. nepoznáš (plug-in) a potom môžeš túto triedu používať, pretože vieš, že určite bude obsahovať metódy, ktoré to rozhranie definuje (a nepotrebuješ poznať implementáciu, alebo ostatné metódy v tej triede, etc)...

príkladom by mohlo byť napr. rozhranie IUseable v adventúre... máš to rozhranie a máš predmety, ktoré ho implementujú... ak predmet (trieda) to rozhranie implementuje, tak potom vieš, že sa dá taký predmet použiť (a vieš, podľa rozhrania, že má metódu "use")... a môžeš taký predmet použiť v príkazu "použi"...

hmm, napr. niečo takéto:

interface IUseable {
  void use();
}

class Door implements IUseable {
  public void use() {
    // urobí niečo konkrétne pre dvere
  }
}

class Window implements IUseable {
  public void use() {
    // urobí niečo konkrétne pre okno
  }
}

class Pouzi {
  public void execute(string name) {
    IUseable item = items.getUseableItem(name);
    // tu napr. nepotrebuješ poznať konkrétny typ toho objektu, stačí ti vedieť, že implementuje rozhranie IUseable... a vieš, že potom má metódu "use"... o to, čo konkrétne má predmet urobí, sa už postará kód v tej metóde use() v správnej triede...
    if (item != null) item.use();
    else throw new InvalidOperationException("tento predmet sa nedá použiť...");
  }
}


keby si tam rozhranie nepoužil, tak by si potreboval niečo takéto (v tej poslednej metóde execute):

public void execute(string name) {
  Item item = items.getItem(name);
  if (item instanceof Door) {
    ((Door) item).use();
  }
  else if (item instanceof Window) {
    ((Window) item).use();
  }
  else {
    throw new InvalidOperationException("tento predmet sa nedá použiť...");
  }
}

pre každý predmet vlastný if, vlastné pretypovanie, etc a mal by si množstvo riadkov :)


dá sa to pochopiť? :)

ak nie, kľudne sa pýtaj... konkrétnejšie otázky, ako si to ty predstavuješ, čo presne ti nie je jasné (napr na tom príklade), etc... budem odpovedať... :)

btw, sorry, ak sú chyby (napr. instanceof si nie som istý, či sa tak zapisuje) v tom príklade - javu nepoužívam...
#258
2. ročník / Re: OOP
26.11.2011, 07:31:09
rozhrania:
- jedna trieda môže implementovať viacero rozhraní... rozhranie môže implementovať iné rozhranie (vznikne hierarchia rozhraní - trieda, ktorá implementuje to rozhranie, musí implementovať metódy zo všetkých rozhraní v hierarchii)
- určujú povinné metódy v triede
#259
2. ročník / Re: OOP
26.11.2011, 07:28:32
dedenie:
- viacnásobné: java nepodporuje (c# tiež nie) - jedna z možností, ako to obísť je práve cez rozhrania - jedna trieda môže implementovať viacero rozhraní
- áno, hierarchia dedenia môže byť viacúrovňová... potomok potom pozná všetky metódy od všetkých predkov... (všetky okrem poslednej môžu byť abstraktné, ale nemusí byť žiadna)
#260
2. ročník / Re: OOP
25.11.2011, 21:33:14
Quote from: milaninho on  25.11.2011, 21:19:35
ak chcete rozsirovat rozhrania ktore su dane v zadani, nezasahujte do samotnej kniznice, mozte si vytvorit vlastne rozhrania, ktore budu implementovat tieto dane (tzn. ze tam budu mat to co sa od vas chce na zadani), plus do nich si mozete pridat nove metody (ak vam napr nestaci Room.show(UserInterface), tak si vytvorite nove rozhranie a pridate si tam metodu aku chcete, napr. aj Room.show(UserInterface ui, VlastnyParameter p)).

ostava nutnost pretypovania
#261
Quote from: Domino3D on  22.11.2011, 17:28:25
...bol vytvoreny na vyucbu

vsak vyucba, nie?
#262
Quote from: Domino3D on  22.11.2011, 16:50:39
odkedy prvaci na FEIke beru pascal?

nie vsetci su informatika
#263
2. ročník / Re: OOP
22.11.2011, 15:25:33
Quote from: orsi on  22.11.2011, 07:23:03
v ParserImpl mam premennu commands = new ArrayList<Command>();
ako v metode public Command getCommand(String string) prejst celym polom a skontrolovat ci ten prikaz na vstupe, teda ten string je v poli a vratiť ten prikaz?? a aby to ignorovalo velkost pismen.

pouzijes nejaky for alebo foreach... kazdy item testujes, ci ma spravne meno... ak ma item spravne meno, cyklus prerusis a vratis ten item, ktory bol spravny...
c# ma metody ToLower()/ToUpper() pre string, ktore vratia povodny retazec so vsetky malymi alebo velkymi pismenami (string je immutable) - myslim, ze java ma nieco podobne... pouzi javadoc...

snad z tohto kod uz napises sam :)
#264
2. ročník / Re: OOP
21.11.2011, 15:18:59
Quote from: matus217 on  21.11.2011, 14:02:00
Nevie mi niekto poradit ? Mam vsetko co mame mat doteraz hotove, akurat sa trapim s tou PMD kontrolou ktora mi stale robi bordel. Mam Parser a v nom analyzujem zadany prikaz. Na zaklade toho tam mam tusim 2 podmienky a tie returnuju ten dany prikaz ktory naslo. Ak nic nenajde tak za cyklom ktory prechadza prikazy mam return null. Problem je ze PMD vypisuje, ze return by mal byt iba jeden, a ja mam 3. Ako by sa to dalo upravit ? Mam to vobec riesit alebo to mam ignorovat ? Vdaka.

pouzi nejaku premennu:

string premenna = "defaultna hodnota";
if (test1) premenna = "hodnota 1";
if (test2) premenna = "hodnota 2";

return premenna;


edit:
este ku tomu jednemu returnu:
je to popularny mytus, ze jeden vystupny bod (return) pre metodu sprehladnuje kod a nvm co este... ale to je zvycajne nezmysel ;) a navyse by som povedal, ze je to individualna vec - niekomu sa zda prehladnejsie jedna vec a druhemu ina vec...
avsak, kedze mate take pravidla ako mate, tak to asi budes musiet fixnut :)
#265
Quote from: Domino3D on  21.11.2011, 05:53:16ty nie si informaticka, ze? na to si prilis pekna :)
zase tento nezmysel?
#267
2. ročník / Re: OOP
21.11.2011, 02:31:48
Quote from: sulo on  21.11.2011, 01:57:02
Quote from: Agamemnon on  21.11.2011, 01:06:46
ArrayList je interface (alebo abstr. trieda, ale to je jedno v tomto prípade)...

ArrayList nie je rozhranie ani abstraktná trieda, ale niečo ako náhrada zápisu ArrayList<Object>.

PMD chce, aby bola premenná deklarovaná pomocou rozhrania List.

private List<Command> commands;

Priradenie implementácie je už potom tak, ako bolo spomenuté.

commands = new ArrayList<Command>();

dokonca... vďaka za opravu :)
#268
Quote from: DeViLvs on  21.11.2011, 00:04:17
Quote from: Agamemnon on  20.11.2011, 23:36:24
prečo by sa neodvážila? lebo ty povieš? :D max tak ju môžeš potom ty ignorovať...
A neviem, ci sa najde nejaky dobrovolnik, co len tak jej bude pisat programy, teraz sa nikto nenasiel..

nájdu sa ľudia, neboj sa... si pozri napr. tému OOP, kde bez problémov píšem kusy kódu ako pomoc... a tam tie veci sú podstatné zložitejšie ako toto tu... nie každý chce potrebuje za pomoc niečo aj získať... niektorí ľudia pomôžu len tak...
jediný problém je, že pascal si už takmer vôbec nepamätám :D inak by som v pohode poradil aj jej... max. to tak môžem písať v pseudokóde nejakom :)
#269
2. ročník / Re: OOP
21.11.2011, 01:06:46
Quote from: swety on  21.11.2011, 00:45:58
kod je v triede ParserImpl, ArrayList je importovany z java.util.ArrayList a chyba je na riadku s deklaraciou premennej tohto typu teda
private ArrayList<Command> commands;
kde to neskor pouzivam ako
this.commands = new ArrayList<Command>();
commands.add(new Version());

a postupne pridavanie prikazov do listu, funguje vsetko OK iba ten PMD upozornuje... ale mozno to nie je to o com sa pise v scenari robil som to prvykrat a iba nasledoval chyby a upozornenia NetBeansu a teda bol som stastny ze to funguje  :D

za tie zatvorky v pretypovani vdaka  :beer1:

aha, ono to po tebe chce, aby si premenné nedeklaroval ako konkrétnu triedu, ale ako abstratknú, alebo ako interface... v tomto prípade to znamená asi toľko:

ArrayList<Command> je konkrétna trieda...
ArrayList je interface (alebo abstr. trieda, ale to je jedno v tomto prípade)...

takže ono to chce po tebe niečo také:


// deklaruješ interace/abstr. triedu
private ArrayList commands;

...

// priradzuješ konkrétnu implementáciu
commands = new ArrayList<Command>();
#270
Quote from: DeViLvs on  20.11.2011, 23:35:22
Quote from: Ing. nemtom on  20.11.2011, 20:13:31
nezabudla, je to zena a vyuzila ta
ani ne, ked neukaze, tak uz sa asi neodvazi znova pytat o pomoc. Ja som vzdy o krok vpred ako zena :D

prečo by sa neodvážila? lebo ty povieš? :D max tak ju môžeš potom ty ignorovať...
#271
2. ročník / Re: OOP
20.11.2011, 23:00:59
Quote from: swety on  20.11.2011, 21:11:28
rozhrania v kniznici Jonesa asi nemozeme menit, ze?

ak si do GameImpl doplnim nejake metody ktore v Game nie su (napr. zobrazenie menu), aj tak ich nemozem volat napr. v Quit.execute(), ked je tam parametrom objekt typu Game.

chcel som to riesit pretypovanim a teda nieco v zmysle
(GameImpl)game.showMenu();

ale zjavne takto to nefunguje, takze to mam nakoniec riesene cez dalsiu premennu
GameImpl game2 = (GameImpl)game;
game2.showMenu();


je to takto korektne alebo "myslim zle"? lebo takto mam riesenych viac veci napr. aj prikaz PRIKAZY :)

a este jedna vec, PMD hlasi ze "   Pretypujte deklaráciu (namiesto typu 'ArrayList' použite rozhranie, ktoré tento typ implementuje)." pri deklaracii ArrayList<Command>, ale v scenari je pouzitie prave tohoto nie? ci nerozumiem chybe? :whacko:

- rozhrania, ktoré ste dostali, meniť nemôžete
- doplniť do implementácie môžeš čokoľvek...
- funguje to, pokiaľ je to objekt toho typu, ktorý danú vec implementuje
- pretypovanie máš zle:

((GameImpl)game).showMenu();

- to s premennou zmaž - použi pretypovanie

- posledné nvm - nepastol si kód, ktorý ti hlási tú chybu + s javou nerobím, a nedokážem po pamäti povedať, čo je ArrayList (abstraktná trieda? trieda? rozhranie?)... a nechce sa im googliť... takže ak mi povieš, čo sú dané veci a ak pastneš chybný kód, tak ti poviem, čo je zle... :) teoreticky ten kód stačí, zvyšok si možno domyslím...
#272
2. ročník / Re: OOP
19.11.2011, 01:26:40
Quote from: razer08 on  19.11.2011, 00:25:43
Quote from: Agamemnon on  19.11.2011, 00:18:29
explore má vypísať podrobnosti o miestnosti, v ktorej sa nachádzaš, nie? alebo také niečo, ak si to dobre pamätám...

takže niečo takéto:

public void explore() {
  system.out.println(currentRoom.getExploreDescription());
}


- netuším, aké sú metódy v Room, takisto netuším, ako máš vyriešený prístup ku premennej currentRoom... takže ako to presne budeš zapisovať je na tebe - závisí od toho, ako to máš implementované
- nie som si istý zápisom na println, s javou už dlho nerobím...

dúfam, že je to pochopiteľné, čo som napísal

ked napisem napr.  "preskumaj rybar",tak ma vypisat meno a opis predmetu

aha, okej potom niečo takéto:


public void explore() {
  Item item = currentRoom.getItem(itemName);
  system.out.println(item.getDescription());
}


- itemName je ten parameter za príkazom (tj. rybar v preskumaj rybar)
- implementácia miestnosti Room má metódu getItem(string), ktorá vráti referenciu na predmet podľa jeho mena
- zvyšok platí to, čo v predchádzajúcom príklade - pre currentRoom, java metódy, etc...
#273
2. ročník / Re: OOP
19.11.2011, 00:18:29
explore má vypísať podrobnosti o miestnosti, v ktorej sa nachádzaš, nie? alebo také niečo, ak si to dobre pamätám...

takže niečo takéto:

public void explore() {
  system.out.println(currentRoom.getExploreDescription());
}


- netuším, aké sú metódy v Room, takisto netuším, ako máš vyriešený prístup ku premennej currentRoom... takže ako to presne budeš zapisovať je na tebe - závisí od toho, ako to máš implementované
- nie som si istý zápisom na println, s javou už dlho nerobím...

dúfam, že je to pochopiteľné, čo som napísal
#274
2. ročník / Re: OOP
18.11.2011, 05:29:58
hmm... chybu máš v súbore GameImpl.java na riadku 51... objekt, ktorý sa tam snažíš použiť, nemá nastavenú hodnotu a je preto null...

- nabudúce pastni kód, keď chceš niečo konkrétne opraviť, s niečim pomôcť...
- nauč sa čítať výnimky... píše ti to, čo sa stalo (null pointer) a kde sa to stalo (GameImpl.java:51)... nvm, čo viac ešte chceš...
- nauč sa používať debugger

ak sa to nenaučíš, tak sa rovno odhlás z informatiky... (ak nie si informatik, tak sa ospravedlňujem a toto sa ťa netýka... predchádzajúce body áno)
#275
2. ročník / Re: OOP
15.11.2011, 14:19:29
Quote from: Eriik on  15.11.2011, 07:17:08
ako by asi mal fungovať príkaz RESTART ? stačí nanovo vytvoriť všetky miestnosti a backpack a tie staré proste nejako zmiznú ? :D alebo to treba robiť inak ?

ach, radosti garbage collectora... :)

mal by si: zrusit stare itemy, miestnosti, inventar, vsetko v nom... stav hry, poziciu hraca, etc, etc...
a vytvorit vsetko znovu...

teoreticky: ak urobis len to, ze vytvoris vsetko znovu, tak by to malo stacit a GC po istom case stare veci z pamate odstrani... vzdy ale existuje riziko, ze mas niekde zabudnutu nejaku referenciu a pod., a vdaka nej ti tie veci ostanu v hre, a pripadne ti ju mozu aj ovplyvnovat