Kezdőoldal » Számítástechnika » Programozás » Jó példa az interfészek...

Jó példa az interfészek használatára?

Figyelt kérdés

Elsősorban Java nyelven érdekelne.


Lényegében mire jók? Igen, olvastam a wikipédián és stackoverflowon is olvastam pár kérdést róluk, de nem teljesen értem. Mikor érdemes használni? Példának okáért ha van egy osztályom, ami tartalmaz változókat, amiket aztán több másik osztályból is el szeretnék érni, akkor a folyamatos példányosítás helyett érdemes lenne inkább interfésszé alakítani az osztályt és onnan implementáltatni a többi osztállyal? De az interfész nem tartalmazhat csak final static változókat, nem? Ergo elveszíti az értelmét az implementáltatás mert statikusként el tudom érni közvetlenül..Egy kis magyarázatot kérnék.



2015. máj. 23. 19:39
 1/3 anonim ***** válasza:
Az interfészek lényegében viselkedésként foghatók fel. Pl ha a javaban valami egy gombnyomást tud figyelni, akkor implementál egy ActionListener interfészt, tehát rendelkezik egy ilyen kezelőfelülettel, viselkedéssel. Pl ha egy játékban van egy Pushable interfészed, akkor ha minden implementálja, ami "nyomogatható", nem is kell ugyanonnan származniuk. Lényegében ez is a többalakúságot segíti ott, ahol nincsen több anyától öröklés.
2015. máj. 23. 20:44
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:

Ahelyett, hogy nagyon csúnya származtatási fát adsz, egyszerűen hozzápasszolsz egy interfészt és abból a szempontból a különböző osztályokat együtt kezelheted. pl

Object->Fogyasztható dolog->Kaja leszármazásod van és szeretnéd ár szerint növekvően rendezni a kajáidat.


Ha arraylist-be rakod, van egy tök jó beépített függvény rá:

Collection.sort(listám)

Ekkor a listában szereplő minden elemre kritérium, hogy valósítsák meg a Comparable interfészt, ami csak egy compareTo fv-t tartalmaz. Ez megmondja, melyik kaja "nagyobb a másiknál". Ezt megvalósítod, pl a drágább kaja hátrébb kerül, vagy a jobb minőségű előrébb, akár a kettő együtt.


Miután megvan ez a függvény, a sort már képes rendezni.


Ebben az a jó, hogy magát a sort-ot, mikor írták, nem érdekelték őket, hogy mi alapján rendezed, csak elmondták, tessék itt a comparable, ennek a visszatérési értéke megadja, melyik értékesebb a másiknál. Én csak eszerint írok egy frankó rendezést.


És így nem kell beiktatnod még egy származtatást:

Object->Comparable->Fogyasztható dolog->Kaja, hanem egyszerűen implementálják. Sőt így egyszerre több intefészt is adhatsz egy classnak, míg csak osztályokkal nem lehetne annyi féle öröklést létrehozni.

2015. máj. 24. 08:55
Hasznos számodra ez a válasz?
 3/3 anonim ***** válasza:
100%

Röviden:

Vannak a világban különféle dolgok. Van nekünk szélerőművünk, hőerőművünk, atomerőművünk. Ezek a dolgok biztosítanak nekünk valamit, amit más dolgok, például egy mikrosütő, használhatnak. A lényeg, hogy engem nem érdekel, hogyan áll elő az áram, csak az érdekel, hogy legyen áram. Vagy nem érdekel, hogy a kocsi motorja hogyan működik, az érdekel, hogy menjen a kocsi.


A mikrosütőnek kell egy áramforrás, ezt így tudjuk megadni:

class mikrosütő {

public Atomerőmű a;

}


Azért valljuk be, elég szar tervezés, hogy a mikró csak atomerőműben előállított árammal tud dolgozni. Ugyanakkor ha belegondolsz, van az erőművekben valami közös - áramot állítanak elő. Ezentúl két út áll előtted:

- Minden erőműnek közös ősosztálya lesz, ezzel megoldva a problémát

- Írsz egy interfészt


A kettő közt nagy különbség van. Ha az első lehetőséget választod, akkor a közös ősosztály, mint tárgy, megjelenik a világodban, ráadásul Java nyelvben egyszeres öröklődés van, így más ősosztálya nem is lehet az erőműveknek. Az interfész pedig csak egy egyszerű megszorítást ír le, mégpedig minden olyan tárgynak a világban, amely ezzel a megszorítással rendelkezik, ezt meg ezt kell biztosítania - jelen esetben áramot.


Szóval az ősosztályos verzió úgy működik, hogy a világban van egy tárgyad. Ebből te új tárgyat akarsz létrehozni, némileg több tudással felvértezve, így ez osztályok közti viszony.

class Erőmű {}

class Atomerőmű extends Erőmű {}

Mindkét tárgy létezik a világban.


Míg interfész esetében nem jön létre új tárgy a világodban, hanem az egyes tárgyakra megszorításokat róhatsz ki. Minden olyan tárgynak, amely egy adott interfésszel rendelkezik, kötelessége biztosítani az interfészben leírtakat.

interface Áramforrás {}

class Atomerőmű implements Áramforrás {}

class Hőerőmű implements Áramforrás {}


Így már menni fog a mikrónk mindennel:

class mikró {

public Áramforrás a;

}

mikró m = new mikró();

Atomerőmű a = new Atomerőmű;

m.a = a;

2015. máj. 25. 02:57
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!