Eltérések az interfész az absztrakt osztály (absztrakt osztály és interfész) - verem túlcsordulás az Orosz

Az absztrakt osztály - egy osztály, amely nem hajtja végre egy vagy több módszert (egyes nyelvekben szükség ilyen módszereket megjelölni speciális kulcsszavak).

Interface - egy absztrakt osztály, amely nem rendelkezik a módszer nem valósul meg, az összes állami és nincs osztály változók.

Az interfész általában szükséges csak akkor, ha a leírt interfész (tautológiánál). Például, az egyik osztály akar adni egy lehetőséget, hogy hozzáférést azok egyes módszerek, de nem akarja magát „hogy felfedje.” Így hát egyszerűen megvalósítja az interfészt.

Egy absztrakt osztály van szükség, ha azt szeretné családnak osztályok, sok a közös. Persze, hogy lehet alkalmazni, hogy a felület, de akkor be kell írni egy csomó kód azonos.

Egyes nyelvek (C ++), egy speciális kulcsszó jelölésére nincs interfészeket.

Feltételezhetjük, hogy bármilyen felületen - ez egy absztrakt osztály, de fordítva nem.

tl; dr: absztrakt osztály - class fejlesztési eszköz az alsó szinten, újrafelhasználható kód jelenti; felület - a kifejezési szemantikai osztályba. Így ez teljesen más, egy kicsit független fogalmak.

Az absztrakt osztály - egy „üres” osztály: a legtöbb közös módszerek (beleértve a belső), de néhány. Ezek néhány realizált módszerek lehet, hogy a belső eljárások egy osztály, hanem csak, hogy a végrehajtás részleteit. Az absztrakt osztály - egy eszközt, hogy újra kódot, egy eszköz, amely jelzi a módszer kell zárni a teljes írás osztályban.

Felület azonos - ez a fajta szerződés: a felületek definíciójában használt, jelezve, hogy az objektumot kell használni ténylegesen végre kell hajtania (a bemeneti paraméterek), illetve garantált, hogy végre (a kimeneti paraméterek) meghatározott módszerek és (ami még fontosabb!) van egy bizonyos szemantikája. A felület lehet, üres, de az interfészt megvalósító jelenti, hogy fenntartsák ezt a szemantika.

Absztrakt osztályok ideológiailag hasonló sablonok C ++: mindkét, mások üres osztályba, de egy sablont egy osztály meg kell adnia egy sablon típusát, és az absztrakt osztály - elvont módszereket.

Interfészek ideológiailag hasonlít a C ++ header file: felfedi a titkot módszerek és konkrét megvalósítása.

Az a kérdés, hogy a felület vagy absztrakt osztály osztály a saját - a technikai részleteket a végrehajtás, függően az adott programozási nyelv. Például a C ++ interfészek nem is létezik, és meg kell felülmúlni osztályok adatok nélkül. Egy absztrakt osztály C ++ önmagában is hiányzik, de lehet tekinteni, mint bármely osztály absztrakt módszerekkel. (Ezért a korlátozás a C ++ :. Legalább egy absztrakt módszer az absztrakt osztály) szintén a C ++, akkor (közvetve) létrehozunk egy absztrakt osztály, hívja az absztrakt módszer, és (esetleg) kap egy futásidejű hiba. C # felületek és absztrakt osztályok épített a nyelvet.

Példa (C #, egy adott nyelv nem számít):

Számomra úgy tűnik, elég furcsa, hogy ezt a kérdést tagged „PFSZ”, de sok a válaszok egyértelműen beszivároghat sajátos szempontjai specifikus programozási nyelvek. Megpróbálok választ adni alapján OOP fogalmak, és csak ezután megmutatni, miért van különbség volt az egyes programozási nyelvek.

Elvont osztályok és interfészek egy bizonyos kapcsolatban öröklés, vagy inkább a modellezés világon. Segítségükkel akarjuk kifejezni, hogy egy bizonyos csoportja a dolgok a rendszerben van valami közös: egy általános viselkedését, ami megkülönbözteti ezt a csoportot az összes többi ketyere.

Tegyük fel például, szeretnénk szimulálni egy gombot a felhasználói felületen. Mivel mi beszélünk a PFSZ fogunk kiosztani valamilyen gombok egy bizonyos műveletek (amelyek meghatározzák viselkedés) és a késleltetés, amelynek alapja a viselkedés (igen, késleltetés nem lehet). Ebben az esetben tudjuk különböztetni három művelet:

Konkrét rögzített művelet, amelyet meg kell teljesen stabil minden típusú gomb.

Adott művelet az alapértelmezett viselkedés (azaz egy művelet, amelynek viselkedése alkalmas sokféle gomb, de előfordulhat, hogy egy gombot egy másik viselkedés).

Nyilatkozat műveletek nélkül konkrét megvalósítására (azaz a művelet, amelynek viselkedése nem lehet meghatározni, mert ebben a szakaszban még nem ismert, ésszerű alapértelmezett viselkedése vagy műveletek eltérőek lehetnek túlságosan különböző kulcsokat).

Más szóval, a típusú kulcsok tartalmazhat nem-virtuális módszerek (nem virtuális módszerek), virtuális módszerek (virtuális módszerek) és az absztrakt módszerek (abstract módszerek).

A jelenléte a különböző módszerek egy nagyon fontos eszköz a modellezés és lehetővé teszi, hogy nagyon pontosan kifejezi azt a szándékát, hogy a tervező. Például mi is hozzá, nem virtuális művelet „egy gomb megnyomásával”, amely egy részét átruházza munkáját a virtuális (vagy absztrakt módszer) „depresszió”, de mindig magánál egy bizonyos részét a munka (tisztánlátó olvasó látni fogja ebben a leírásban minta „Template Method” ).

Miután azonosítottuk a alaptípus, itt az ideje, hogy meghatározza tetszőleges típusú. És akkor kezdődik a kérdésekre. Pontosabban, nem kérdés merül fel, például ha csak egy azonnali alaptípus vagy minden alaptípus amelyek csak nyilatkozatok műveleteket. Nem probléma, öröklik „Menu” gombot a „gombok”, és felülírja a módszer „nyomja meg a gombot.” De mi van, ha a típus „menü gombot” lesz otnasledovan kétfajta egy és ugyanazt a virtuális műtét? Mivel csak felülírja az egyik, míg a többi? És hogyan lehet egy új típusú ügyfél és felismerni, hogy melyik műveletet a ravaszt? És mi van, ha a két alaptípus egy mező az azonos név? És mi van, ha az egyik bázis típusú eljárás a „Press” megvalósul, és a többi - csak le, mint egy nyilatkozatot?

Most lesz könnyű elvégezni a különbség a három fogalom - intferfeysa, elvont alap osztályt, és egy adott alap osztály.

Interface - ismerteti a család típusú és tartalmaz egy nyilatkozatot a tranzakciók (igen, én szándékosan írni a szót „nyilatkozatot” helyett használja a „szerződés”, amely a PFSZ egy határozott érték).

Az absztrakt alap osztály leír egy bizonyos család létezik, de amellett, hogy a Nyilatkozat műveletek tartalmazhat alapértelmezett megvalósítása (virtuális módszerek) és a rögzített műveletek (nem virtuális módszerek).

Egy adott osztály leír bizonyos családi típusú, amely készen áll a használatra az ügyfelek. Egy ilyen osztály nem tartalmazhat nyilatkozatokat műveletek és az összes műveletet kell lennie akár fix (nem virtuális módszerek), vagy tartalmazhat egy alapértelmezett végrehajtás (virtuális módszerek). Van egy másik alfaja a konkrét osztályok - zárt (zárt) osztály - egyfajta egy adott osztály otnasledovatsya ahonnan lehetetlen, és ezért tartalmazhat csak bizonyos műveleteket.

Interfészek, jellegük szerint kevesebb kapcsolattal (alacsony kapcsolás), mert nem egy konkrét magatartást, ami megnehezítheti az életet alosztálya. Interfészek is szimulálni kapcsolatban „van” ( „Menü” gomb „IKnopkoy”), de képes felismerni és kevésbé merev hozzáállás „szolgálhat» (CAN DO). Például az interfész a BCL IEquatable határozza meg a „további” viselkedést, ami felveti annak a lehetőségét, hogy az értékek összehasonlítására fajta tárgyakat.

Nézzük sorrendben. Interface - a szerződés / obyazatelstva amely azt feltételezi, osztály és köteles teljesíteni őket. Tegyük fel, hogy: van egy sor osztályok tudja, hogyan kell köszönni

Most minden osztályban, függetlenül annak összetettsége és hatóköre a hierarchia örökölheti (hogy a obyazatelstvo / aláírja a szerződést a végrehajtás) ezt a módszert, és így „lesz az a többiek.” A legjobb az egészben az, hogy nem számít, mennyire kiterjedt, nem számít a felület (ebben az összefüggésben van az állami módszerek osztály), az osztály a szerződés teljesítése - csak az egyik módszer fogja látni ennek a tömbnek. Példa: van egy csomó grafikai osztályok és néhány közülük meg fogja tanulni, hogy válaszoljon a Blur - dugjon őket egy sor interfészek és szükség esetén hívás Blur Method (int érték); Ha a felület, elvonatkoztatunk attól a ténytől, hogy az osztály: gép, berendezés levegő. Ha elkötelezte magát, hogy a megvalósítása „Greet” mi a garancia. hogy ez a módszer lesz elérhető számunkra a tárgy (a mutató ebben az osztályban) (emlékszik chistovirtualnye interfész módszerek a részben állami, nem változó).

És most a másik viszont, C ++, annak minden erejét nem tudja a szinten interfész nyelvét. De a programozók megszokták, hogy a felület, ez kényelmes, biztonságos (olvastam álláskor kontroll) és a jobb (az építészet). Meg kell végre a „felület” az eszközöket kínál a C ++ - ez egy absztrakt osztály. Mint látható, van lehetőség, hogy álljon a különböző módszerek (állami / védett / magán), osztály Membury (más nyelveken változókat a felület a probléma). Ez lenne az interface kulcsszóval C ++ és örökölte volna egyértelműen, mint a C # - ez lenne a zavar adósságait. Absztrakt osztályok, csak, és olyan esetekre, elosztása a teljes osztályt, de a legtöbb ebben az osztályban, mint kellene (ez értelmetlen, hogy egy másolatot a Klas).

Példaként bemutatjuk egy osztály a labdát, és a görögdinnye, hasonlóságok, látták, hogy még mindig leírni kör tárgyakat. Válassza Mindez egy általános osztályt, és tette egy absztrakt, mert amit a rendszer képes legyen egy osztály a „valami kerek, és a súlya lehet dobni.”

osztály egy virtuális függvény / szolgáltatást hívják - abstract

absztrakt osztály egy vagy több tiszta virtuális függvények

ha egy absztrakt osztály legalább egy tisztán virtuális függvény, a tárgy ennek az osztálynak nem lehet létrehozni, de csak örökölni, és tisztán virtuális függvények újra meg kell határozni a jövőben.

osztály interface - ez az utasítás / megállapodás a programozó, hogy egy programozó használhatja ezt az osztályt. azaz Kiderült az interfész - ez mind a nyílt (nyilvános) adatokat, ami viszont a programozó.

Valójában azt írta, hogy @VladD csak egyszerű nyelven

Kapcsolódó cikkek