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

OOP

Started by NDK, 22.09.2011, 21:02:52

« predchdzajce - alie »

Agamemnon

Moveable je interface, Item je abstraktná trieda, nie?
implements funguje len s interfacemi, na dedenie tried sa používa extends...
takže:

public class Key extends Item implements Moveable


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

42

bEnd3r

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

Quote from: bEnd3r on  03.12.2011, 18:40:42
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

dajte mi linku na tú knižnicu...
All code is crap.

42

bEnd3r

item je interface

package textgame;

public interface Item extends Named {

    public void setName(String string);

    public void setDescription(String string);
}



esperian

#356
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

xxx3

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

co ej vlastne polymorfizmus ? Z tych anglickych prednasok som to moc nepochopil .. vie niekto vysvetlit ?

Agamemnon

All code is crap.

42

Agamemnon

Quote from: esperian on  03.12.2011, 20: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

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

Quote from: xxx3 on  03.12.2011, 22:44:45
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

je ich viacej ?

Agamemnon

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é...


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:

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...

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

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

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

Quote from: xxx3 on  04.12.2011, 22: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 ?
Mna by to tiez velmi zaujimalo bo minuly tyzden nam odpadlo..a nwm co sa mam ucit :/

selli1235


xxx3

haha, on fakt opravil pisomky :D

xxx3

Agamemnon alebo niekto .. nevies nejak jednoducho a strucne vysvetlit co je pattern a framework a aky je medzi nimi rozdiel ?

esperian

#370
aj mne by sa to hodilo lebo sa akurat snazim pochopit aky rozdiel je medzi tym ...
------------
dakujeme  ;)

Agamemnon

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

Quote from: veteran on  03.12.2011, 14:40:12
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

Ako si viem PMD spustit cez prikazovy riadok?? ..dakujem ;)

veteran

Quote from: tas on  05.12.2011, 07:38:54

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...