Author Topic: OOP  (Read 114501 times)

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #350 on: 03.12.2011, 17:18:00 »
Moveable je interface, Item je abstraktná trieda, nie?
implements funguje len s interfacemi, na dedenie tried sa používa extends...
takže:
Code: [Select]
public class Key extends Item implements Moveable

edit: tie settery setName, setDescription tam potrebuješ?
All code is crap.

42

bEnd3r

  • Full Member
  • ***
  • Posts: 143
    • View Profile
Re: OOP
« Reply #351 on: 03.12.2011, 17:40:42 »
ja som to riesil tak, ze ak je predmet moveable tak class key implements moveable .. pricom interface moveable extends item a ak predmet nie je moveable tak implementuje rovno item

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #352 on: 03.12.2011, 17:49:14 »
pricom interface moveable extends item

to akože interface dedí od triedy? to fakt?

item je abstraktná trieda alebo len ďalší interface?
All code is crap.

42

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #353 on: 03.12.2011, 17:50:33 »
dajte mi linku na tú knižnicu...
All code is crap.

42

bEnd3r

  • Full Member
  • ***
  • Posts: 143
    • View Profile
Re: OOP
« Reply #354 on: 03.12.2011, 19:00:44 »
item je interface

Code: [Select]
package textgame;

public interface Item extends Named {

    public void setName(String string);

    public void setDescription(String string);
}

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile

esperian

  • Hero Member
  • *****
  • Posts: 873
    • View Profile
Re: OOP
« Reply #356 on: 03.12.2011, 19:40:57 »
inak ked potrebujem nejaky predmet pouzit nato aby sa "otvorili dvere" na zapad , ako nato ?

@Override
    public GameState use(Game game) {
     
        game.getCurrentRoom().setExits(null, null, null, !null);
       
        return null;
    }

viem ye v game impl nastavim ten zapad ako null .. aby mi ho nezobrazovalo ten vychod na zpad
« Last Edit: 03.12.2011, 20:55:33 by esperian »

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #357 on: 03.12.2011, 21:19:03 »
tie prednasky nie su niekde na nete aj v slovencine ?

A co ma byt s Kapom v pondelok na bleskovke ? Co tam moze dat nakodit ? ... keby dal nieco z tohto zadania nakodit tak to je dost tazke na papier napisat

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #358 on: 03.12.2011, 21:44:45 »
co ej vlastne polymorfizmus ? Z tych anglickych prednasok som to moc nepochopil .. vie niekto vysvetlit ?

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #359 on: 03.12.2011, 22:05:38 »
dajte mi linku na tú knižnicu...
http://it4kt.fei.tuke.sk/c/oop/resources/The_Indiana_Jones_Project.jar

dik, potom neplatí tá vec s abstr. triedou, čo som napísal... hmm, divné
All code is crap.

42

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #360 on: 03.12.2011, 22:07:28 »
inak ked potrebujem nejaky predmet pouzit nato aby sa "otvorili dvere" na zapad , ako nato ?

@Override
    public GameState use(Game game) {
     
        game.getCurrentRoom().setExits(null, null, null, !null);
       
        return null;
    }

viem ye v game impl nastavim ten zapad ako null .. aby mi ho nezobrazovalo ten vychod na zpad

musíš tam nastaviť konkrétnu miestnosť, kam chceš prejsť - predaj si ju cez konštruktor predmetu... niečo také ako "!null" neexistuje (kam by si potom šiel?)
All code is crap.

42

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #361 on: 03.12.2011, 22:08:15 »
co ej vlastne polymorfizmus ? Z tych anglickych prednasok som to moc nepochopil .. vie niekto vysvetlit ?

viem, ale teraz nemám čas napísať takú dlhú esej... večer napíšem... ak by som zabudol ;D pripomeň zajtra

edit:
ktorý polymorfizmus ťa zaujíma?
All code is crap.

42

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #362 on: 03.12.2011, 22:10:34 »
je ich viacej ?

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #363 on: 04.12.2011, 16:39:23 »
okej, tá sľúbená esej :D

prv máš parametrický polymorfizmus... to znamená toľko, že môžeš mať v jednej triede viacero metód s rovnakým názvom alebo viacero konštruktorov, každý s inými parametrami (typ alebo počet)... kompiler potom podľa počtu parametrov pri volaní metódy vyberá tú konkrétnu, ktorá sa použije...
toto je myslím pomerne jednoduché a jasné...

Code: [Select]
class Car {
  public Car(string color) {...}
  public Car(string color, int doorsCount) {...}
  public Car(int doorsCount) {...}
  pubilc Car(string color, string engine) {...}
  ...
}

druhá možnosť, a asi to, čo ťa zaujíma viac, je polymorfizmus pri dedení...
tam ide hlavne o to, že ak máš niekde v predpise použitú base triedu (triedu predka), tak vieš namiesto nej použiť akýkoľvek objekt jej potomkov (odvodených tried)...

nejak takto:
Code: [Select]
class Person {...}
class Student extends Person {...}
class Employee extends Person {...}

...

// máš v niektorej triede nejakú metódu, ktorá ako parameter berie typ Person...
public void RegisterPerson(Person personToRegister) {...}

...

// teraz pri volaní tejto metódy môžeš použiť ako objekty triedy Person, tak aj objekty odvodených tried, teda Student a Employee...
public void execute() {
  Student student = new Student();
  register.registerPerson(student);    // toto je okej, pretože Student dedí od Person (takže je súčasne typu Student aj typu Person) - podobne vieš použiť aj Employee
}

...

// tiež platí, že do premennej typu Person vieš priradiť aj odvodené triedy (opačne to neplatí - do premennej typu odvodenej triedy, napr. Student nevieš priradiť objekty triedy predka, tj. Person)
// takže máš napr.
private Person person;

// a metódu, ktorá inicializuje túto premennú:
public void init(string personType) {
  // typ student
  if (personType == "student") {
    person = new Student();
  }
  // typ employee
  else if (personType == "employee") {
    person = new Employee();
  }
  // ani jeden z predchádzajúcich, takže nastaví generický typ - tj. triedu predka
  else {
    person = new Person();
  }
}

toto sa vo veľkom používa... pri unit testoch, pri design patternoch (napr. tá metóda init je trochu zjednodušení pattern FactoryMethod), pri pluginovaní, etc., etc...
takisto toto platí aj pre interface-i a abstraktné triedy (s tým, že samotný interface ani abs. trieda sa nedajú vytvoriť... ale priradiť do objektu typu interfaceu sa dajú všetky triedy, ktoré interface implementujú)

okej... ešte taká tabuľka, že čo je vlasnte akého typu...
Code: [Select]
Person student = new Student();
Person person = new Person();
Person employee = new Employee();

...
student instanceof Student => true
student instanceof Person => true
student instanceof Employee => false
person instanceof Person => true
person instanceof Student => false
person instanceof Employee => false

snáď všetko, aj keď mám pocit, že som na niečo zabudol... keď si spomeniem, tak dopíšem... hmm...
plus, dúfam, že sa to dá aspoň trochu pochopiť, a že to pomohlo...
samozrejme, kľudne sa pýtaj, keby niečo... možno to tak aj bude lepšie, keď sa budeš pýtať na nejaké konkrétne veci, čo nevieš... :) aspoň mne sa to tak lepšie potom chápe... :)
All code is crap.

42

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #364 on: 04.12.2011, 17:07:29 »
dakujem, pekne si to vysvetlil ... zatial nemam nic tkae, comu by som z tohto nerozumel, mne islo skor o to, ze som nevedel co to je polymorfizmus, teraz uz viem, ze je to to co si tu rozpisal, este raz diky

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #365 on: 04.12.2011, 21:21:27 »
vie niekto co bolo na poslednej prednaske z OP ? Ze co mozem cakat z teorie na pisomke z Kapom .. tie patterny a frameworky uz boli ?

BlackBerry

  • Jr. Member
  • **
  • Posts: 73
    • View Profile
Re: OOP
« Reply #366 on: 04.12.2011, 22:27:34 »
vie niekto co bolo na poslednej prednaske z OP ? Ze co mozem cakat z teorie na pisomke z Kapom .. tie patterny a frameworky uz boli ?
Mna by to tiez velmi zaujimalo bo minuly tyzden nam odpadlo..a nwm co sa mam ucit :/

selli1235

  • Jr. Member
  • **
  • Posts: 51
    • View Profile
Re: OOP
« Reply #367 on: 04.12.2011, 22:30:00 »

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #368 on: 04.12.2011, 22:36:33 »
haha, on fakt opravil pisomky :D

xxx3

  • Hero Member
  • *****
  • Posts: 1010
    • View Profile
Re: OOP
« Reply #369 on: 05.12.2011, 03:18:50 »
Agamemnon alebo niekto .. nevies nejak jednoducho a strucne vysvetlit co je pattern a framework a aky je medzi nimi rozdiel ?

esperian

  • Hero Member
  • *****
  • Posts: 873
    • View Profile
Re: OOP
« Reply #370 on: 05.12.2011, 03:58:21 »
aj mne by sa to hodilo lebo sa akurat snazim pochopit aky rozdiel je medzi tym ...
------------
dakujeme  ;)
« Last Edit: 05.12.2011, 05:03:48 by esperian »

Agamemnon

  • Hero Member
  • *****
  • Posts: 2942
  • Per aspera ad Astra
    • View Profile
Re: OOP
« Reply #371 on: 05.12.2011, 04:50:55 »
pattern je formálny vzor, ktorý sa používa na riešenie nejakého opakujúceho sa problému... pre programovanie existujú patterny pre rôzne všeobecné problémy - napr. vytváranie veľkého množstva tried, budovanie nejakých dát (StringBuilder), potom rôzne situácie, kedy je potrebné zmeniť objekt jedného typu na iný (facade, proxy), pridávanie funkcionality k existujúcim triedam (decorator - toto sú inak Streamy v jave/c#), zmena algoritmu za behu (strategy, template) a rôzne ďalšie...
čo je dôležité je, že patterny sú vzory... ktoré ponúkajú riešenie... to neznamená, že ich nie je možné prispôsobovať, meniť podľa potreby a konkrétnej situácie... taktiež nie vždy sú výhodné...

framework je skupina knižníc, ktorá vytvára API pre vytvorenie nejakého software-u (napr. swing je framework pre UI pre javu)... existuje množstvo frameworkov pre vytváranie webov... veľa a na všetko možné... hehe :)
All code is crap.

42

tas

  • Newbie
  • *
  • Posts: 15
    • View Profile
Re: OOP
« Reply #372 on: 05.12.2011, 06:38:54 »
Vie mi nejaká dobrá duša vysvetliť, kde je tu chyba?

package Items;
import textgame.Item;

public class Key implements Moveable, Item {
    private String name;
    private String description;
   
    public Key(){
        this.name = "kluc";
        this.description = "popis z moodla";
    }
   
    public String getName(){
        return this.name;
    }
   
    public void setName(String name){
        this.name = name;
    }
   
    public String getDescription(){
        return this.description;
    }
   
    public void setDescription(String description){
        this.description = description;
    }
}


NetBeans mi podčiarkuje ten vyboldovaný červený riadok a píše "interface expected here". Kvôli čomu tam očakáva interface? Tomášek to s nami programoval na cvičení a on tam žiaden interface nepísal. A chybu mu nevypisovalo žiadnu.

poedal by som ze problem je kdesi v tom Moveable, zrejme to nie je spravene ako interfacem pozrel by som sa najprv na to, potom na import podla balickov, plus je to len detail ale ak to mas podla cviceni dal by som najprv item potom movable, cisto nech to je prehladne.

co sa dalej movable tyka, riesenia boli rozne, ale da sa to jednoducho ako je v cviceniach napisane, prazdny interface pre movable, kazdy predmet implementuje item a ak je prenosny tak aj movable, cim sa ale nijak nemeni. vsetko o co potom ide je v execute getu osetrit aby predmet odstranilo/pridalo z/do tabulky miestnosti/bacpacku podla instanceof.
nie som ziadny expert, takze neviem ci je to najlepsie alebo podobne, ale jednoznacne je to jednoduche

k truhlici, jedna z moznosti je za predpokladu ze ju treba odomknut nejakym klucom, aby execute kluca zmenil meno/popis truhlice a do miestnosti pridal predmety ktore maju byt v truhlici, je to tak trochu zvlastne, ale je to riesenie pre zakladnu sadu prikazov a nevyzaduje ziadne drasticke rozsirenie

k miestnostiam, to je otazka trochu zradna, pretoze teoreticky by sa vsetky miestnosti mali vytvorit v metode createrooms, takze treba pocitat aj s tym, kazdopadne nemyslim ze vytvarat ich za behu je mozne (vzhladom k ich strukture)

BlackBerry

  • Jr. Member
  • **
  • Posts: 73
    • View Profile
Re: OOP
« Reply #373 on: 05.12.2011, 14:10:20 »
Ako si viem PMD spustit cez prikazovy riadok?? ..dakujem ;)

veteran

  • Hero Member
  • *****
  • Posts: 956
    • View Profile
Re: OOP
« Reply #374 on: 05.12.2011, 14:20:36 »

poedal by som ze problem je kdesi v tom Moveable, zrejme to nie je spravene ako interfacem pozrel by som sa najprv na to, potom na import podla balickov, plus je to len detail ale ak to mas podla cviceni dal by som najprv item potom movable, cisto nech to je prehladne.

...
Oukej, vďaka za vysvetlenie. Urobil som to teda podľa návodu (prázdne Moveable). Tomášek to na cvičení programoval trochu ináč - asi som to nestihol celé prepísať, tak mi to nešlo...