• 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

#201
2. ročník / Re: OOP - "spešl zadanie"
16.12.2011, 02:41:46
ja by som z toho urobil list a potom len volal add()... namiesto poľa
#202
2. ročník / Re: OOP
16.12.2011, 00:22:42
Quote
Buď deklarujte statickú premennú 'historiaCommands' ako final, alebo sa vyhnite priradeniu jej hodnoty v konštruktore.

čo na tom nechápeš? však tam máš presne napísané, čo máš urobiť, aby si tú pmd chybu odstránil...
#203
2. ročník / Re: OOP
15.12.2011, 04:14:47
Quote from: Stardox on  15.12.2011, 04:04:15
Podarilo sa niekomu uspesne spojazdnit tie JUnit testy pre ParserImpl? Skusil som taketo nieco:
@Test
    public void testGetCommand() {
       
        /*List<String> listOfKnownCommands = Arrays.asList("SEVER", "juh",
        "   VYCHOD", "zapad   ", "rozhliadni SA", "inVENtar", "KONIEC",
        "VEZMI", "POLOZ", "POUZI", "PRESKUMAJ", "PRIKAZY", "NAHRAJ",
        "ULOZ", "VERZIA", "RESTART" );*/
       
        System.out.println("getCommand");
        String arg0 = "SEVER";
        ParserImpl instance = new ParserImpl();
        //Command expResult = null;
        Command result = instance.getCommand(arg0);
        assertEquals(new North(), result);
        // TODO review the generated test code and remove the default call to fail.
        //fail("The test case is a prototype.");
    }


Ale po spusteni test failne:
Testcase: testGetCommand(commands.ParserImplTest): FAILED
expected:<commands.North@1ca4eb4> but was:<commands.North@f522e8>
junit.framework.AssertionFailedError: expected:<commands.North@1ca4eb4> but was:<commands.North@f522e8>
at commands.ParserImplTest.testGetCommand(ParserImplTest.java:58)


Cize ak tomu spravne rozumiem, mam 2 instancie North, lenze ta prva ma ako keby ine ID?

implementni equals metódu do commandov... stačí aby porovnala, či sa rovnajú typy, myslím... mohlo by stačiť do abstrakt classy... ale nie som si istý, ako sa má junit správať v tomto prípade, keďže ho nepoužívam... takže ti nvm povedať, či je chyba u teba alebo v nejakých nastaveniach junitu...

inak - ako ja tomu testu rozumiem... tak ideš na to zle... mal by si urobiť foreach cez ten list a testnúť to z listu... aspoň tak to chápem ja - a tak by som to aj implementoval
#204
Quote from: ApokalypS on  14.12.2011, 21:23:20
myslel som farebne prevedenie..

alebo azda ani to nie?

ja by som teda nepovedal, ze funguje :D
#205
2. ročník / Re: OOP
13.12.2011, 01:48:15
Quote
Inak, kvôli čomu to vypisuje také banality ako OnlyOneReturn. Trochu som gúglil a prakticky všetko, čo som našiel o vyriešení OnlyOneReturn-u, by sa dalo zhrnúť do vety - Keď vám to vadí, zakážte vypisovanie tejto chyby (odstráňte to z XMLka)

only-one-return je nezmysel, ktorý vymyslel niekto, kto pravdepodobne v živote neprogramoval (rozumej nejaký manager - najskôr QM alebo také niečo), a myslel si, že taká coding guideline zvýši čitateľnosť kódu, keď v skutočnosti sa takto dosiahne presný opak...
#206
2. ročník / Re: OOP
13.12.2011, 01:45:40
Quote from: veteran on  13.12.2011, 01:01:42
A ešte takáto vec:
Keď mám takýto konštruktor:
public niečo(){
        super("meno","popis");
    }

... je potrebné do dokumentačných komentárov písať parameter @param meno a @param popis? NetBeans to tam implicitne nehádže, ale tie parametre tam vystupujú.

nevystupujú tam žiadne parametre... ty máš popísať vstup do metódy... nie parametre všetkých metód, ktoré tvoja metóda volá... používateľa "nezaujíma" v tomto prípade, ako je metóda naimplementovaná... len to, čo robí, ako ju má zavolať (s akými parametrami) a čo bude jej návratová hodnota...
#207
2. ročník / Re: OOP
12.12.2011, 23:24:22
Quote from: veteran on  12.12.2011, 23:21:42
Akým spôsobom sa dá zbaviť upozornenia PMDčka "OnlyOneReturn".

už sa to rozoberalo... máš zlý ruleset...

inak to ide urobiť tak, že priradíš to, čo chceš ako return z metódy, do nejakej premennej a na konci metódy len vrátiš tú premennú...
#208
2. ročník / Re: OOP
12.12.2011, 03:22:19
to nie sú chybové hlášky... chybové hlášky sú veci typu... súbor neexistuje... príkaz neexistuje... a pod...
#209
2. ročník / Re: OOP
11.12.2011, 20:14:18
if sa dá nahradiť kompozíciou objektov a polymorfizmom... ak je vhodná situácia...

ale jednoduchšie je urobiť napr. switch... a pod... ak pastneš kód, tak ti cca poviem, čo sa dá urobiť...
#210
2. ročník / Re: OOP
11.12.2011, 17:11:34
Quote from: xxx3 on  11.12.2011, 16:46:23
ako overovat ci bol vytvoreny objekt ?

máš objekt v nejakej premennej:

Command command = xy.getCommand("pouzi");


c# nUnit má na to metódu IsNotNull (s týmto som robil, takže tento poznám)... preto predpokladám, že jUnit bude mať tiež podobnú metódu - asi najskôr assertNotNull (to si nájdi)...
potom takto:

assertNotNull(command);


ak taká metóda neexistuje... tak vieš použiť assertNotEqual (ak existuje taká) a porovnáš s null...

assertNotEquals(null, command);


a ak neexistuje ani to, použiješ if, porovnáš to s null a vyhodíš assertFail, ak sa to rovná null...

if (command == null) {
  fail();
}

#211
2. ročník / Re: OOP
11.12.2011, 17:06:59
Quote from: charlie on  11.12.2011, 10:54:41
ako ste riesili prikazy s parametrom? lebo :

kontrola prikazu -> if(ak je za prikazom daco){oreze a vybere parameter} else {hlaska: zly parameter};

teoreticky by to malo pracovat, ale ked dam "prikaz" bez znaku za nim tak mi hodi ERR.
Ak som pochopil dobre, tak hadze kvoli kontrole v if. neviete ako by som to poriesil? bo uz na tym sedim dost dlho neviem pohnut.  >:(

dikes

pastuj kód... netuším, čo pre teba znamená "ak je za prikazom daco" alebo "oreze a vybere parameter"...
tiež pastuj chybu, ktorú ti to hodí...

takto nemám šancu povedať ti, čo sa deje... môžem si to tak max. tipnúť...
#212
2. ročník / Re: OOP
11.12.2011, 17:05:53
Quote from: Zeusetdeus on  11.12.2011, 07:13:38
Mam otazku ku komentarom.  Metody ktore boli implementovane z kniznice sa nekomentuju.  Na druhej strane sa vyzaduje aby bol vysledok analyzy JavaDoc prazdny. Tie Override metody teda zakomentujem /** */ naprazdno?

overridy komentuj... to, že niečo override inú metódu, neznamená, že to bude robiť úplne to isté, čo tá pôvodná metóda... trochu iná vec je s metódami implementovanými podľa rozhrania... ale keby bolo na mne, tak komentujem všetko
#213
2. ročník / Re: OOP
11.12.2011, 05:43:46
Quote from: xxx3 on  11.12.2011, 05:34:58
tak je tam metoda:
@Test
    public void testGetCommand() {
        System.out.println("getCommand");
        String string = "";
        ParserImpl instance = new ParserImpl();
        Command expResult = null;
        Command result = instance.getCommand(string);
        assertEquals(expResult, result);
        // TODO review the generated test code and remove the default call to fail.
        fail("The test case is a prototype.");
    }


ktoru treba implementovat ... a v scenari je napisane, ze V testovacej triede ParserImplTest upravte metódu testGetCommand() tak, aby otestovala správnosť rozpoznávania predpísanej sady príkazov.
Pre reprezentáciu predpísanej sady príkazov použite nasledovný zápis:
List<String> listOfKnownCommands = Arrays.asList("SEVER", "juh",
        "   VYCHOD", "zapad   ", "rozhliadni SA", "inVENtar", "KONIEC",
        "VEZMI", "POLOZ", "POUZI", "PRESKUMAJ", "PRIKAZY", "NAHRAJ",
        "ULOZ", "VERZIA", "RESTART" );


ale ako ? Vies to podla tohto spravit ? Alebo niekto ?

napr. takto :)
v teste inicializuješ triedy, ktoré potrebuješ (netuším, ktoré to sú) na to, aby si dokázal zavolať getcommand... potom pre každý prvok poľa zavoláš getcommand a overíš, či ti volanie vrátilo objekt alebo nie...
#214
2. ročník / Re: OOP
11.12.2011, 03:24:37
okej, späť z výletu ;D

je pomerne bežná prax dávať interface-i, pre ktoré to má zmysel, do vlastnej knižnice (package)... to už len napr. preto, že interface sa používajú pri pluginoch, rôznych RMI volaniach etc... tam nemá zmysel (a zvyčajne je priamo nevýhodné) zverejňovať celé implementácie tried... prípadne to vyslovene funguje len na interfaceoch...
#215
2. ročník / Re: OOP
08.12.2011, 21:08:24
Quote from: xxx3 on  08.12.2011, 21:05:29
Quote from: Agamemnon on  06.12.2011, 18:55:17
nevymyslajte zlozite veci... ak potrebujes pri pouziti nejakeho predmetu odomknut/nastavit nejaky vychod (=zavolat setexits), tak si tu miestnost, do ktorej sa potom budete moct dostat (teda, ktoru pouzijes ako parameter v setexits), predajte ako parameter kontruktora toho predmetu, ulozte do private premennej v predmete a v metode use to potom uz len pouzite... popisoval som to tu pred par dnami...

este na toto by som sa chcel spytat ... mam v createRooms napr. vytvorenu miestnost: RoomImpl Miestnost5 = new RoomImpl("M5","Si v miestnosti 5")

A potom ju ako mozem predat ako parameter konstruktora predmetu ? Nechapem. V konstruktore predmetu je napr.: 
public Key(){
        super("kluc","Stary zhrdzaveny kluc");
    }

kedze dedi od AbstractItem:
public AbstractItem(String name, String description){
        this.name = name;
        this.description = description;
    }


Nevysvetlili by ste niekto blizsie ako si predat neiktoru konkretnu miestnost cez ten konstruktor ?

to, ze nieco dedi od inej triedy, neznamena, ze nemoze mat vlastne parametre v konstruktore... takisto to moze mat viac konstruktorov...

public class Key extends AbstractItem {
  public Key(RoomImpl miestnost) {
    this.miestnost = miestnost;
    super(...);
  }
}
#216
2. ročník / Re: OOP
08.12.2011, 20:47:56
xxx3:
najskor prehod tie checky do prikazov na pohyb (mozno nejaky superclass, v ktorom to budes mat zjednotene alebo tak...)...
hmm, alebo to mozes implementovat do setCurrentRoom :) odtial zavolas kontrolu nad miestnostou, z ktorej prave odchadzas, ci z nej mozes odist... nieco na styl validacie, povedzme... a potom nastavis gamestate podla toho... nieco take :) toto je asi lepsie, jednoduchsie :)
#217
2. ročník / Re: OOP
08.12.2011, 20:43:14
Quote from: matus217 on  08.12.2011, 19:51:59Tak ked uz sme pri tom, tak pozeral som aj ine videa, a cital som aj odporucanu literaturu. Konkretne stevove videa som mal ako ucebnu pomocku, ktora nebola JEDINA. Kvoli zadaniu chodim spavat posledne dva tyzdne o stvrtej rano. Tak dufam ze sa mi investovany cas aj nalezito zuroci...

mas konkurencnu vyhodu pri prijimani do zamestnania, lebo tomu budes rozumiet (bez tohto mozes robit php web stranky... tam netreba nicomu rozumiet... pri php je prekazka, ak tomu rozumies... hehe :D ano, nemam rad objektove php, to je omyl a zvrhlost :))... plus budes mat skusenost s tym, ako sa ucit novy jazyk, co tiez vies vyuzit...
#218
2. ročník / Re: OOP
08.12.2011, 06:33:24
máš tam rekurziu: return this.getWest();
daj tam return super.getWest();

edit:
premenné triedy by mali byť private... :) z istých filozofických dôvodov :)
#219
2. ročník / Re: OOP
08.12.2011, 03:11:23
ak sa pýtaš, či tam môžeš mať predmety, ktoré sú nepotrebné k prejdeniu hry, prípadne sú tam pre zábavu a pod... tak áno...
ak sa pýtaš, či všetky príkazy v scenári musia byť vykonané, aby si prešiel hru... povedal by som, že ak tam budeš mať 1-2 príkazy navyše (ktoré nezabránia prejdeniu hry, ale nie sú nevyhnutné), tak to vadiť nebude... ak tam máš kopu zbytočných vecí typu (sever - juh - sever - juh - server - juh - ...), tak to vadiť bude :) isté zmeny v scenári sú povolené, takže ak z neho vyhodíš jeden príkaz, tak to určite nebude problém...
#220
2. ročník / Re: OOP
08.12.2011, 02:54:52
Quote from: xxx3 on  08.12.2011, 02:40:48
a este nieco: z PMD  Avoid using implementation types like 'ArrayList'; use the interface instead

to akoze nemam pouzivat ArrayList ? Nechapem, mam miesto ArrayList pouzit rozhranie ?? ako sa to da ?

už sa to rozoberalo... používaj to takto:


List<String> ls = new ArrayList<String>();
#221
2. ročník / Re: OOP
07.12.2011, 06:02:21
jj, tak :)
#222
2. ročník / Re: OOP
07.12.2011, 05:35:08
Quote from: xxx3 on  07.12.2011, 05:05:21
hm, len teraz to mame tak, ze v triede GameImpl je metoda createRooms, ktora vytvori vsetky miestnosti a nastavi vychody z miestnosti ... to si mam teraz tu miestnost kde treba pouzit lano spravit zvlast ako triedu a v createRooms vytvorit instanciu tej triedy miesto tej miestnosti ktoru tam mam teraz v createRooms ?

áno, prečo nie? krásna ukážka na polymorfizmus... oddedíš tú triedu od všeobecnej miestnosti (predpokladám, že na všetky miestnosti máš nejakú všeobecnú triedu RoomImpl alebo také niečo)... a pri používaní nebudeš musieť nič riešiť - budeš ju používať presne ako ostatné miestnosti, len tá trieda sa sama postará o seba, a aby urobila to, čo má urobiť...

edit:
takto si vieš urobiť v podstate akúkoľvek zvláštnu miestnosť... ktorá má robiť nejaké zvláštne veci...

+ nebojte sa predávať dáta tým miestnostiam a predmetom cez konštruktor pri inicializácií... na tom nie je nič zlé...
#223
2. ročník / Re: OOP
07.12.2011, 04:45:37
Quote from: xxx3 on  07.12.2011, 04:18:29
ten flag je co vlastne ? .. dam si nejaku premennu, ktorej nastavim napr. hodnotu true ked predmet bol pouzity, inak bude false ?

A tie getWest atd. kde prekryt ? A ako sa da dat taka podmienka, ze if(predmet bol pouzity) then nieco  ... ?

jj, flag je zvyčajne bool premenná... v tomto prípade je to presne ako popisuješ...

to prekrytie... máš nejakú miestnosť, kde napr. musíš použiť lano... tak v tej miestnosti (a len v nej) prekryješ pôvodnú getWest (pôvodná getWest len vráti miestnosť smerom na západ) tak, aby v tejto jednej miestnosti urobila aj niečo ďalšie...

napr. takto:

public class MietsnostKdeTrebaPouzitLano extends RoomImpl {
  private bool wasRopeUsed = false;  // toto je ten flag

  // teraz máš nejakú metódu, ktorá nastaví flag na true - túto metódu zavoláš pri použití lana (use metóda v triede Lano)
  public void ropeUsed() {
    // flag nastavíš len ak lano používaš v správnej miestnosti...
    if (gameimpl.getCurrentRoom().Equals(this)) {
      wasRopeUsed = true;
    }
  }

  @Override
  public Room getWest() {
    if (!wasRopeUsed) {
      gameimpl.EndGame();  // alebo čokoľvek, čo ti dokáže ukončiť hru... nechce sa mi hľadať teraz ako to má byť presne zapísané... snáď si vieš predstaviť, čo tu máš zavolať... alebo throwni exception a tú potom na vhodnom mieste odchyť etc..
    }
    return westRoom;
  }
}

#224
2. ročník / Re: OOP
07.12.2011, 04:01:16
Quote from: ultimate on  07.12.2011, 02:49:54
nejake napady co by mohlo byt ako vlastne rozhranie s dvoma metodami?

rozumné interfacei ma momentálne napadajú len k príkazom - v štýle useable, moveable, switchable, talkable, etc... ale to je väčšina s 1 metódou... samozrejme, nezmyselných interfaceov vymyslím kopu - napr. z každej triedy vyexportuješ interface so všetkými jej public metódami a pod. bludy :)
#225
2. ročník / Re: OOP
07.12.2011, 03:59:10
Quote from: xxx3 on  07.12.2011, 03:00:33alebo jednoducho, ze sa neda pokracovat dalej ked sa nevykona prikaz v danej miestnosti ktory je v scenari .. ze nepusti to do dalsej miestonsti kym sa nevykona ten prikaz

toto je rovnaká situácia ako s kľúčom a zamknutými dverami... miestnosť nemá východ, kým sa nepoužije predmet... použitie predmetu nastaví východ pre miestnosť...

Quote from: xxx3 on  07.12.2011, 03:00:33
mam v scenari napr. prikaz pouzi lano ... a ako spravim to, ze ked to lano v danej miestnosti nepouzijem tak ze sa hra ukonci ? ... mal som to vymyslene tak, ze akoze bude v miestnosti diera a preto musi dat hrac prikaz pouzi lano aby sa dostal cez dieru, inak spadne do diery .. no myslel som, ze to bude len ako v opise miestonsti, ze je tam akoze diera ... len to ma zaujima, ze ako spravim tieto veci, ze sa musi pouzit ten predmet v danej miestonsti inak sa hra skonci lebo akoze zomrie hrac ..

napr takto:
miestnosť má flag, či už daný predmet bol použitý... použitie predmetu nastaví tento flag... prekryješ volanie getEast/getWest/etc na miestnosti - tieto metódy prv urobia kontrolu, či bol predmet použitý... ak áno, povolia vyjsť z miestnosti... ak nie, hru ukončia ako Game over a hráč prehral (vypíšeš nejaké info, nvm, napr. spadol si do jamy a nastavíš gamestate, či ako sa to volá na gameover)...