Author Topic: OOP  (Read 114686 times)

mirek

  • Sr. Member
  • ****
  • Posts: 448
  • darkman ZX 128k
    • View Profile
    • domovská stránka
Re: OOP
« Reply #300 on: 24.11.2011, 14:59:03 »
Hmmm, nam cviciaci tiez hovoril ze cez Tool->RunPMD staci. Nevadi, nic sa zatial nedeje, opytam sa na cviceni, ze co povie cviciaci a vyriesi sa to.  :)
nas cviciaci upozoronoval, ze s PMD pluginom nemaju dobru skusenost. tusim spominal nieco v style, ze ignoruje podhodeny ruleset a pouziva zrejme nejaky defaultny. preto sa vam asi prejavuje aj problem s pravidlom o pocte returnov z metody. existuje vraj este plugin easypmd2, ale vraj ho este neskusali. tak vyskusajte a podelte sa ;)
So say we all!

luko

  • Newbie
  • *
  • Posts: 11
    • View Profile
Re: OOP
« Reply #301 on: 24.11.2011, 17:36:49 »
nas cviciaci upozoronoval, ze s PMD pluginom nemaju dobru skusenost. tusim spominal nieco v style, ze ignoruje podhodeny ruleset a pouziva zrejme nejaky defaultny. preto sa vam asi prejavuje aj problem s pravidlom o pocte returnov z metody. existuje vraj este plugin easypmd2, ale vraj ho este neskusali. tak vyskusajte a podelte sa ;)
zaujimalo by ma kto Vas uci :D

mirek

  • Sr. Member
  • ****
  • Posts: 448
  • darkman ZX 128k
    • View Profile
    • domovská stránka
Re: OOP
« Reply #302 on: 24.11.2011, 23:09:53 »
nas cviciaci upozoronoval, ze s PMD pluginom nemaju dobru skusenost. tusim spominal nieco v style, ze ignoruje podhodeny ruleset a pouziva zrejme nejaky defaultny. preto sa vam asi prejavuje aj problem s pravidlom o pocte returnov z metody. existuje vraj este plugin easypmd2, ale vraj ho este neskusali. tak vyskusajte a podelte sa ;)
zaujimalo by ma kto Vas uci :D

mojim ucitelom je majster yoda :-P
So say we all!

milaninho

  • Jr. Member
  • **
  • Posts: 99
    • View Profile
Re: OOP
« Reply #303 on: 24.11.2011, 23:14:53 »
nas cviciaci upozoronoval, ze s PMD pluginom nemaju dobru skusenost. tusim spominal nieco v style, ze ignoruje podhodeny ruleset a pouziva zrejme nejaky defaultny. preto sa vam asi prejavuje aj problem s pravidlom o pocte returnov z metody. existuje vraj este plugin easypmd2, ale vraj ho este neskusali. tak vyskusajte a podelte sa ;)
zaujimalo by ma kto Vas uci :D

mojim ucitelom je majster yoda :-P

,,Velmi temná druhá strana je."
,,Drž hubu Yodo a sněz si svůj toast, jako všichni ostatní!"

MartinK

  • Newbie
  • *
  • Posts: 6
    • View Profile
Re: OOP
« Reply #304 on: 25.11.2011, 01:11:47 »
Ahojte,
znova touto cestou by som chcel oznamit, ze cvicenia v Pondelok o 7:30 sa nebudem moct zucastnit, ostatne cvicenia v dany den sa uskutocnia bez zmeny.

Pozrel som obsah 10. cvicenia ktore sme mali preberat, tak nemal by to byt problem naprogramovat aj doma, vsetko potrebne sa uz prebralo. Jedine pri bode 4, pre inspiraciu, odporucam sa pozriet na  operator "instanceof">>>
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

Pripadne nezrovnalosti ktore ste doma nezvladli si preberieme na nasledujucom cviceni.

Martin Kapa

milaninho

  • Jr. Member
  • **
  • Posts: 99
    • View Profile
Re: OOP
« Reply #305 on: 25.11.2011, 20: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)).

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #306 on: 25.11.2011, 20:33:14 »
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
All code is crap.

42

orsi

  • Full Member
  • ***
  • Posts: 182
    • View Profile
Re: OOP
« Reply #307 on: 26.11.2011, 05:09:48 »
naco vlastne su tie rozhrania?  ???  8)
tvoria kostru programu ako tie naše rozhrania co musime implementovať povinne. aby sme neprogramovali odbukadobuka ale aspon podobne. takto tomu ja rozumiem. ale este je tu nejaky iny dvovod? (citim ze hej  :D )
a este k dedeniu. funguje to takto? Nadtrieda(nie je abstract, ale obycajna)->1.odvodena trieda (obsahuje extends nadtrieda)->2.odvodena(obsahuje extends 1.odvodena, bude mozne pouzit metody z 1.odvodenej a aj z nadtriedy?? a samozrejme spravit nove metody)
moze sa to tak spravit? ako na viacnasobne dedenie?
je tu nejaka študovaná hlava co by mi to vedela vysvetliť ak sa mylim?  ;D ale ľudsky vysvetliť, nie ako binas ze mi povie nejaku poucku z "velkej encyklopedie OOP" co tomu nerozumiem ani pol slova!

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #308 on: 26.11.2011, 06: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)
« Last Edit: 26.11.2011, 06:31:29 by Agamemnon »
All code is crap.

42

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #309 on: 26.11.2011, 06: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
All code is crap.

42

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #310 on: 26.11.2011, 06: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:
Code: [Select]
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):
Code: [Select]
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...
« Last Edit: 26.11.2011, 06:49:23 by Agamemnon »
All code is crap.

42

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #311 on: 26.11.2011, 07: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)
Code: [Select]
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 :)
« Last Edit: 26.11.2011, 07:11:24 by Agamemnon »
All code is crap.

42

veynom

  • Newbie
  • *
  • Posts: 2
    • View Profile
Re: OOP
« Reply #312 on: 26.11.2011, 16:47:58 »
chcel by som vediet, ci mozem este zmenit nieco v scenari a poslat to znova cviciacemu

Eriik

  • Newbie
  • *
  • Posts: 33
    • View Profile
Re: OOP
« Reply #313 on: 26.11.2011, 19: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é ?

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #314 on: 26.11.2011, 20:32:48 »
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...
All code is crap.

42

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #315 on: 26.11.2011, 20:34:07 »
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 :)
All code is crap.

42

milaninho

  • Jr. Member
  • **
  • Posts: 99
    • View Profile
Re: OOP
« Reply #316 on: 27.11.2011, 02:57:17 »
chcel by som vediet, ci mozem este zmenit nieco v scenari a poslat to znova cviciacemu

posli a uvidis ako zareaguje cviciaci :)

esperian

  • Hero Member
  • *****
  • Posts: 873
    • View Profile
Re: OOP
« Reply #317 on: 27.11.2011, 15: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 ?
« Last Edit: 27.11.2011, 15:54:42 by esperian »

veynom

  • Newbie
  • *
  • Posts: 2
    • View Profile
Re: OOP
« Reply #318 on: 27.11.2011, 17:54:31 »
chcel by som vediet, ci mozem este zmenit nieco v scenari a poslat to znova cviciacemu

posli a uvidis ako zareaguje cviciaci :)

neodpisal mi este >:(

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #319 on: 27.11.2011, 18:14:05 »
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...
Code: [Select]
public class Kluc extends AbstractItem implements Useable, Moveable
All code is crap.

42

esperian

  • Hero Member
  • *****
  • Posts: 873
    • View Profile
Re: OOP
« Reply #320 on: 27.11.2011, 18:17:37 »
no super diky moc , skusal som nejake moznosti ale tuto nie  :D :D :D dik

Daron

  • Full Member
  • ***
  • Posts: 166
    • View Profile
Re: OOP
« Reply #321 on: 27.11.2011, 21:39:49 »
Ak este niekto nema zadanie, napiste mi PM, mam zadanie z minuleho roka, 15€ so vsetkym. Nebudem to pisat sem, aby vas potom mirek nedojebabral, ze to mate kupene :-)

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #322 on: 27.11.2011, 22:06:22 »
a potom zhoda 100%, nie ? :D

luko

  • Newbie
  • *
  • Posts: 11
    • View Profile
Re: OOP
« Reply #323 on: 27.11.2011, 23:44:47 »
navody k cviceniam sa trosku zmenili;)

esperian

  • Hero Member
  • *****
  • Posts: 873
    • View Profile
Re: OOP
« Reply #324 on: 28.11.2011, 00:37:52 »
Ahojte,
znova touto cestou by som chcel oznamit, ze cvicenia v Pondelok o 7:30 sa nebudem moct zucastnit, ostatne cvicenia v dany den sa uskutocnia bez zmeny.

Pozrel som obsah 10. cvicenia ktore sme mali preberat, tak nemal by to byt problem naprogramovat aj doma, vsetko potrebne sa uz prebralo. Jedine pri bode 4, pre inspiraciu, odporucam sa pozriet na  operator "instanceof">>>
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

Pripadne nezrovnalosti ktore ste doma nezvladli si preberieme na nasledujucom cviceni.

Martin Kapa

dufam ze na tomto tu sa nezmenilo nic ?! ci ? ;D