Mikor kell használni interfészek programozása - art blog Michael flonova

Nemrég kaptam magát a kérdés, hogy miért van szükségünk felület, ha ez csak egy leírást a funkciók és nincs végrehajtása a kódot. Öröklés sokkal jobb, mert akkor új objektumok létrehozásához a megfelelő végrehajtását, és csak öröklik őket.

Programozási interfészek - ez az eset áll fenn, amikor is elhúz egy elmélet, hogyan működnek, de az olvasó meg fogja érteni a lényegét csak akkor látja az eredményeket a saját szememmel, hogy a gyakorlatban. És ez az, amiért úgy döntött, hogy mutatnak néhány példát, hol és hogyan részesülhetnek a felületen.

De először is egy kicsit az elmélet és a szavak. Osztály - a leírás és végrehajtása az objektumot. Object - egy példányát az osztály, vagyis az objektum létrehozásakor a leírás alapján, ami írsz osztályban.

Az osztály valamilyen műveletet végeznek, és ő lehet a tulajdonságok - ez minden, amit nyilvánítja a kulcsszó statikus (C nyelveket). Ezek a módszerek az úgynevezett nélkül további inicializálási és tulajdonságai vannak egy-egy példányban.

Objects - olyan esetek, az osztályok. Hozhat létre két objektum azonos osztályba tartozó, és ugyanaz lesz a készlet jellemzői (módszerek) és tulajdonságokkal, de a tulajdonságok minden saját. Az értékek módosítása a tulajdonságai egy tárgy, ne érintse meg a másikat. Tulajdonságok és módszerek tárgyak - ez minden, amit nyilvánítja nem statikus.

Ha tudja és érti a különbséget, csak finom.

Interface - egy leírást, hogyan kell elvégezni bizonyos intézkedéseket. Ő nem lehet a tulajdonságokat, és nem tud semmit önmagáról, de tesz egy nagyon fontos feladat - mondta -, mert lehet, hogy okoz némi akció az eredményt.

A programozás gyakran nevezik protokoll. Az interfész meghatározza a kommunikációs protokoll, de nem hajtják végre. És miért van szükségünk egy protokoll alkalmazása nélkül? Ez nagyon fontos, és nézzük meg néhány esetben - amikor és ahol jól jöhet.

Interfészek a plug-inek

A legegyszerűbb példa - plug-in. Emlékszem, eljövetele előtt interfészek Delphi már felforgatta és az egyik ilyen perverzió megmutattam az első könyvben Delphi szemében a hacker. Ha a Delphi nem támogatja a felületet, amikor azt írtam, hogy pl.

Mi az a plug-in? Ez egy objektum, amely végrehajtja intézkedések elválasztjuk. A fő program (fő kód) nem érdekel, hogy egy művelet végrehajtása, és lehetséges, hogy még egy dob, ami történik ott, a mi feladatunk csupán az, hogy lehetőséget dugó regisztrál nálunk, és tudnunk kell, hogy hogyan kell egy plug-in futtatásához.

Tehát szükségünk, hogy leírja a protokoll fog kommunikálni egymással kód és a bővítmény. Leírni ezt a felületet:

Szeretnék elnézést kérni minden nyomatok és a kódon. Én írom ezt a véleményét az iPad OneNote, amely nem rendelkezik a fordító és a hibák ellenőrzéséhez C # kódot.

Ez csak egy interfész az egyik módszer, és ez nem semmi, és nem volt megvalósítása getTest módszer. Itt sok a kérdés - és a FIG van rá szükség? Hát nem jobb, hogy állapítsa meg egy absztrakt osztály, és örökölni? És nem siet, a szórakozás előre.

Most nyilvánítja egy osztály, amely leírja a ház és a ház végre a protokoll:

osztály Home. felület

public void GetTest ()

// itt van a végrehajtása interfészek

Ugyanígy osztályokat örökölni más osztályokba, akkor örökli és interfészek. Ebben az esetben a házat örökli a felület. Annak érdekében, hogy javítsa egy ilyen osztály, meg kell Bat összes módszert nyilvánítják a jelentésben, és nyitottnak kell lennie, különben nulla értelme tőlük.

Most mi is létrehozhatunk az osztály interfész Home:

IInterface teszt = új Home ();

Mivel a ház végrehajtja a protokollt, akkor az ügylet teljesen legális.

Bár nincs különösebb előnyöket lehetett látni, de most jön az idő, amikor már lehet látni az előnyöket. Az a tény, hogy a vizsgálatot a kettős C # tilos. Mi van, ha a beépülő modul kell örökölni néhány osztály? Ha azt szeretnénk, hogy végre terjeszkedés formájában elvont alap osztály, az emberek, akik levelet kiterjesztések nem lesz képes arra, hogy egy osztályt, amely örökli az osztály és osztály, amire szükségük van. Meg kell használni a torzítás, ami nem éri meg a gyertyát.

Tehát nem kell egy absztrakt osztály, szükségünk van a felület nevét. Ebben az esetben a programozó írhat az Ön osztály végrehajtásához a felületet, és minden a helyére kerül.

Nézzük meg a teljes kód egy lehetséges példa:

using System; // klasszikusok

használatával System.Collections.Generic; // szükségünk listája

// talán elfelejtettem van még valami más csatlakozni, és a kód nem fordul le

// Ne aggódj, azok számára, akik szeretik nézni a hibákat, lesz elfoglalva

// indul minden objektum elvégzésére

foreach (IInterface teszt vizsgálatok)

Ebben a példában létrehoztunk két teljesen különböző osztály - és egy kacsa házban. Ezek származhatnak bármilyen más típusú, és lehet egészen más, de még mindig hasonló abban, hogy ugyanezt a protokollt (interface), és ez minden, amire szükségünk van.

Az ő programja, mi is létrehozhatunk egy listát a felületek:

Listtests = new List ();

Ez a lista, amely a tárgyak bármilyen osztályba, de mindannyian észre IInterface felület.

Aztán készítettem egy kacsa, és a házat ki a listából, és fuss egy ciklus, ami végre getTest módszer.

absztrakció

Munka a felület szinten, akkor egy lépést a végrehajtás és a létesítmények. Vannak programozók, akik szeretnek írni szinte minden interfészeken keresztül. Ez saját jelentését.

Joke az, hogy ha meg kell írni egy osztály, egy FTP szerver, akkor nem tud létrehozni egy objektumot, illetve használhatja a felületet:

bool uploadfile (string filename);

osztály FtpClient. IFtpInterface

nyilvános bool uploadfile (string filename);

static void Main (string [] args)

// majd valamilyen műveletet végeznek, és mentse azokat egy fájlba

// ezt a fájlt akarunk betölteni a kiszolgálón

IFtpInterface kliens = új FtpClient ();

Ebben az esetben már csak egy módszer FtpFlient, így nehéz elképzelni, hogy egy előny, de elképzelhető, hogy a több tucat osztály módszerek. Mi van, ha úgy döntött, hogy nem támogatja a saját FTP kliens kódot, és úgy döntött, hogy a harmadik féltől származó szoftvert? Ebben a harmadik féltől származó szoftvert lehet más módszerekkel, és itt meg fogja találni magát egy teljes csacsi, ha használja a tárgyakat közvetlenül.

Amikor használja interfészek, csak akkor kell, hogy végre egy osztályt, amely megvalósítja IFtpInterface és változtatni egy sor elindulni. Minden varázslatosan működik.

Nem interfészeken mindenhol, bárhol, de megpróbálom használni őket, ahol dolgozom a harmadik féltől származó kódra. Ha a Delphi munkája adatbázisokkal végeztünk interfészen keresztül, az átmenet a BDE ADO.NET vagy dbExpresst egyszerű lenne. De mivel ez nem lennék a helyedben, én intézett a bázis interfészeken keresztül.

Létrehozásakor az interfész leírja a módszer a szempontból az ügyfél. Nem kell másolni a módszereket, amelyek már léteznek a ADO.NET, leírja a felületet úgy, hogy a módszerek látszott, hogy az ügyfél.

teszteli a kódot

Interfészek segíteni és a kód tesztelés. Ismét, hogy az utolsó példa, ahol van egy fő módszer, amely bizonyos intézkedéseket, és letölti a fájlt a szerverre.

- Tudjuk, hogy FtpClient komponens működik, és kipróbálni, hogy a betegek lehetnek az egyes vizsgálatokban.

- Unit tesztek legyen a lehető legegyszerűbb, és ellenőrizze a funkciója valamit, ahelyett, hogy csak fut.

- Vizsgálati módszer, amely a letöltött valamit a szerveren, nem túl gyors (attól függően, hogy az FTP fájl hozzáférési sebesség és a méret) és kényelmetlen, mert a kivégzés után a módszert kell majd letölthető az FTP és a tartalom ellenőrzéséhez.

Mindezt úgy valósíthatjuk meg, interfészek.

bool uploadfile (string filename);

osztály FtpClient. IFtpInterface

nyilvános bool uploadfile (string filename)

Itt feltölteni a fájlokat egy FTP szerver

osztály UnitTestFtpClient. IFtpInterface

nyilvános bool uploadfile (string filename)

Ne töltse a fájlokat bárhol, de csak tartani valahol

Annak ellenőrzésére, az eredmény pedig unittest

static void Boo (IFtpInterface kliens)

// majd valamilyen műveletet végeznek, és mentse azokat egy fájlba

// ezt a fájlt akarunk betölteni a kiszolgálón

Így hívjuk eljárás a valóságban:

És ez az egység vizsgálatok.

boo nem rendelkezik a koncepció olyan módszer, amely osztály fogunk adni neki, és nem is érdekli. Számára a legfontosabb dolog, mint a paraméter kell átadni egy osztályt, amely megvalósítja az interfészt ismert eléggé világos és szükséges eljárás. Kód rugalmas és könnyen alkalmazkodni a különböző körülmények között.

Interfészek megvalósítása

Nincs minden osztályban kell írni egy módszer végrehajtását uploadfile? Ugyanez az egyes osztályokban lesz sok az azonos inicializáló kódot FTP kapcsolatot és adatátvitelt.

osztály UnitTestFtpClient. IFtpInterface

nyilvános bool uploadfile (string filename)

Párhuzamos kódot minimális, és a rugalmasság meredekebb, mint Alina Kabaeva. És ha figyelembe vesszük, hogy az osztályok örökölheti számos interfész, akkor képes lesz egyesíteni néhány funkció ugyanabban az osztályban. Ez gyakran kell elvégezni a vezérlőt, és a modell jobb, hogy végre egy világos cél minden osztályban.

Ui Tudom, hogy ez a cikk egy csomó elgépelés, mert az írott feljegyzés az iPad, de amikor írok, akkor a sok kis állomány több, mint máskor. Tudom, hogy ez nem fog kijavítani, nem volt ideje még, hogy újra olvasni a cikket, így nem kell levelet írni azzal a kéréssel, hogy kijavítsuk a gépelési hibákat. Minden más hiba lehet küldeni.

Figyelmeztetés. Ha másolja ezt a cikket a honlapon, majd hagyjuk egy linket közvetlenül erre az oldalra. Köszönjük a megértést