Encapsulation - studopediya
Pillérei objektumorientált programozási
C # lehet tekinteni, mint egy új tag az objektum-orientált programozási nyelv a közösség, a leggyakoribb, amely a Java, C ++, Pascal objektum, és (bizonyos feltételek mellett) Visual Basic 6.0. Mindenesetre objektum-orientált programozási nyelv van szükség, hogy végre három fontos elvek - „pillére” az objektum-orientált programozás:
· Beágyazás: tárgyként elrejteni a belső szerkezet;
· Öröklődés: ezen a nyelven támogatja kód újrafelhasználásának;
· Polimorfizmus: ebben nyelvi támogatást hajtsa végre a megfelelő műveleteket típusától függően az átvitt objektum?
Természetesen mindhárom elvek érvényre a C #. Mielőtt azonban elkezdenénk vizsgálni szintaktikai jellemzői az ezen elvek, igyekszünk, hogy megbizonyosodjon arról, hogy nem hagyott semmi kétértelműséget.
Az első „pillér” az objektumorientált programozás - a beágyazás. Tehát az a képesség, hogy elrejtse a végrehajtás részleteit tárgyakat a felhasználók ezeket a létesítményeket. Például tegyük fel, hogy létrehozott egy osztályt DBReader nevét (használható az adatbázis), amely meghatározza két fő módszer: Open () és zárt ().
// Class DBReader elrejti miatt magukba a részleteket a nyitó
// és záró adatbázisok
DBReader f = új DBReader ();
// Execute Az adatbázis a szükséges intézkedéseket
A fiktív DBReader osztály magában a belső részletek hogyan találja terhelés, működik, és végül lezárja az adatállományban. Mivel a magukba programozás könnyebbé válik: nem kell aggódni a nagyszámú sorokat a kód végre a feladatot rejtve van. Mindössze annyit kell tennie -, hogy megteremtse a példánya, és adja át a szükséges üzeneteket (például „open nevű fájlt foo.mdf»).
A filozófia tokozás szorosan kapcsolódik egy másik elv - elrejti az összes belső adatokat (azaz a tag változók) az osztály. Mint már mondottuk, ideális esetben az összes belső változók az osztály tagjai definiálni kell magán. Ennek eredményeként, az azokhoz való hozzáférést a külvilágtól csak akkor lesz lehetséges a segítségével a közfeladatok - tagjai. Ez a döntés, többek között védi meg a lehetséges hibák, mivel az állami adatok nagyon könnyen megsérülhet.
Öröklés: a kapcsolat „hogy” és a „van”
A következő oszlop az objektum-orientált programozás - öröklés. Arra utal, hogy a képesség, hogy új osztály definíciók a meglévő. Tény, öröklés lehetővé teszi, hogy bővítik örökölt az alap osztály, saját származtatott osztály. Egy egyszerű példa egy ilyen megközelítés ábrán látható. 3.3.
Ábra. 3.3. "Be" Attitude
Ahogy emlékszem, a tetején minden hierarchia a .NET alap osztály mindig Object. Esetünkben az a lehetőség, az első osztályú kiegészíti, így Alak osztályban. Beszélünk az ingatlan, mezők, metódusokat és eseményeket, amelyek közösek az összes geometriai alakzatok (alakzatok). Class Hexagon (hatszög) származó Shape, kiegészíti az előző két alapvető osztálya saját egyedi tulajdonságait.
Diagram ábrán. 3.3, lehet olvasni, mint follows- „hatszög mértani alakzat, amely a tárgy.” • Ha a Lasso kommunikálnak egymással öröklési kapcsolat, ami azt jelenti, hogy a PS telepíteni a kapcsolat közöttük, mint a „kell» (is-a). Ez a fajta kapcsolat is nevezik klasszikus örökségét.
A világon az objektum-orientált programozás másik eorma kód újrafelhasználásának. Ez a forma az úgynevezett integrációs osztódó „áció (vagy magatartás” is »- van-a). A használata egy osztály tagjai közé tartozik, és a másik nyit a külvilág felé a lehetőségeket, amelyeket belső osztály.
Például, ha létrehoz egy szoftver modell az autó, akkor szeretne venni azt az elképzelést, a tárgy „autó” tárgy „rádió” a kapcsolat „van”. Ez ésszerű megközelítés, hiszen aligha lehetséges, hogy a rádió az autó és az autó rádiót az öröklési kapcsolat. Ahelyett, hogy az öröklés létrehoz két különböző osztályok, együtt dolgoznak, ahol a külső (konténer) osztály létrehoz egy belső osztály és megnyitja a külvilág, hogy képes (ábra. 3.4).
Ábra. 3.4. A kapcsolat a futási és a .NET alap osztály könyvtár
Sag külső tárgy (autó) felelős az egységes belső objektum Radio (rádió). Ha azt szeretnénk, hogy a Sag tárgy lehetne foglalkozni a belső Radio objektum az osztály Sag speciális nyílt felületet kell biztosítani erre a célra. Felhívjuk szíves figyelmét, hogy a felhasználói objektum és Sag nem fogja tudni, hogy a kezelést meg bizonyos belső objektum:
// belső osztály rádió zárt külső osztály Sag
Sag vipera = új autó ();
Viper.TurnOnRadio (false); // hívás átkerül a belső objektum Radio
Polimorfizmus: a klasszikus és az adott esetben
Az utolsó, a harmadik pillér az objektum-orientált programozás - polimorfizmus. Azt mondhatjuk, hogy ez a kifejezés határozza rejlő lehetőségek nyelvben értelmezése kapcsolódó objektumok ugyanúgy. Két fő típusa polimorfizmus: a klasszikus polimorfizmus és polimorfizmus „egy adott ügyben» (ad hoc). Klasszikus polimorfizmus fordul elő a nyelvek, amelyek támogatják a klasszikus örökség (beleértve természetesen a C #). A klasszikus polimorfizmus megadhatjuk a bázis osztály sor tagjai, amely adott esetben egy származtatott osztály. A helyettesítés a származtatott osztályok a bázis osztály tagjainak a származtatott osztályok másképp reagál ugyanarra a kezelésre.
Például, akkor ismét forduljunk a hierarchia geometriai formák. Tételezzük fel, hogy a Shape osztályt (geometriai ábra) határozza meg a függvény Draw () - rajz, amely nem veszi paramétereket, és visszatér semmit, mert a geometriai formák különbözőek, és minden típusú alakzat megjelenítéséhez szükséges saját egyedi módon, a legvalószínűbb, szükségünk lesz a származtatott osztályokban (például hatszög - hatszög és a kör - kör), hogy saját módszere Draw (), helyettük Draw () metódus a szülő osztály (3.5 ábra)..
Ábra. 3.5. klasszikus polimorfizmus
Klasszikus polimorfizmus lehetővé teszi, hogy meghatározza a képessége minden származtatott osztályok létrehozása egy alap osztályt. Például a példánkban, akkor biztos lehet benne, hogy a Draw () metódus egy adott megvalósításban a jelen osztálytól származó formája. Az előnyök a klasszikus polimorfizmus is szerepel az a tény, hogy sok esetben elkerülhető, ha létrehoz egy duplikált módszerek hasonló műveleteket (pl DrawCircle (), DrawRectangleO, DrawHexagon (), és így tovább. D.).
A második típusú polimorfizmus - polimorfizmus Case (ad hoc polimorfizmus). Ez a fajta polimorfizmus lehetővé teszi, hogy kezelje hasonló módon tárgyak nem kapcsolódik a klasszikus örökségét. Ezt úgy érjük el, nagyon egyszerű. Minden ilyen tárgyat kell egy módszer ugyanaz az aláírás (azaz az azonos nevű módszer, elfogadja a paraméter és visszaút típusú nyelvek, amelyek támogatják a polimorfizmus az ilyen típusú technológiát használják „késői kötés» (késői kötés), amikor az objektum típusát, ami elérhető, világossá válik csak a program során. attól függően, hogy milyen típusú fordulunk okozott a megfelelő módszert. példaként vegyük a kör látható. 3.6.
Felhívjuk figyelmét, hogy a közös ős - az alap osztály SSircle, SNehagon és CRectangle nem létezik. Azonban minden osztályban van ellátva Draw () metódus ugyanaz az aláírás. Annak bizonyítására, az ezzel a típusú polimorfizmus a tényleges kódot fogjuk használni a példa a Visual Basic 6.0. Feltalálása előtt Visual Basic VB.NET nem támogatja a klasszikus polimorfizmus (valamint a klasszikus örökség), arra kényszerítve a fejlesztők, hogy erőfeszítéseiket a polimorfizmus ad hoc.
Ábra. 3.6. Polimorfizmus az adott egyedi esetben
„Ez - a kódot Visual Basic 6.0!
„Először létrehozunk egy tömböt típusú objektum, és állítsa be az egyes elemét egy objektum referenciát
Dim objArr (3), mint Object
Állítsa objArr (0) = Új Ccircle
Állítsa objArr (1) = Új Chexagon
Állítsa objArr (2) = Új Ccircle
Állítsa objArr (3) = Új Crectangle
„Most, hogy a ciklus fogja kényszeríteni egyes elemek felhívni magára
Dim i Integer
objArr (i). Draw () „késői kötés
Ebben a kódot, először hozzon létre egy sor típusú objektum elem (ez épült Visual Basic 6.0 adattípus tárolására linkeket olyan tárgy, amelynek semmi köze a System.Object osztály .NET). Aztán társítani minden egyes eleme a tömb a tárgy a megfelelő típust, majd a ciklus alkalmazott módszer Draw () minden egyes ilyen tárgyakat. Felhívjuk figyelmét, hogy a geometriai formák - a tömb elemeit - nincs közös alap osztály eljárás megvalósítása Draw () alapértelmezés szerint.
Elméleti áttekintés a főbb elveinek polimorfizmus - tokozás, az öröklés és a polimorfizmus ebben felett. Persze, C # implementálja ezeket az elveket, és a C # és támogatja a kapcsolat „hogy” és attitűdök „van”, hogy újra használható kódot, és mindkét polimorfizmus. Most a mi feladatunk -, hogy megtanulják, hogyan kell végrehajtani minden egyes ilyen elvek révén a C # szintaxis.
Eszközei beágyazás C #
kapszulázás elvet arra utal, hogy a belső adat a tárgy (tag változók) nem érhető közvetlenül a példányát az objektumnak. Ehelyett, hogy információt szerezzenek a belső állapotát az objektumot, és változtatásokat szükséges speciális módszerek. C #, beágyazás végrehajtása szintjén szintaxis kulcsszavak használata köz-, magán- és védett. Példaként figyelembe vesszük a következő osztály definíció:
// osztály egy területen
public class Book
public int numberOfPages;
A „mező» (mező) használnak, hogy nyissa ki az osztály adatait - a változók kulcsszóval deklarált nyilvános. Ha a mezőket az alkalmazás van egy probléma: a mező lehet rendelni bármilyen értéket, és intézkedik ellenőrizze ezt az értéket, az üzleti logika az alkalmazás nehéz. Például a nyílt változó numberOfPages használt adattípus int. A maximális értéke az adattípushoz - egy kellően nagy számú (2147483647). Ha egy ilyen kód lesz a programban, problémák a fordító nem merül fel:
public static void Main ()
Book miniNovel = új könyve ();
Betartása elvének tokozás védi a belső osztály adatait a véletlen sérülésektől. Ez elég ahhoz, hogy az összes belső adatokat a zárt (belső deklarált változók a kulcsszó privát vagy védett). Ahhoz, hogy hozzáférjen a belső adatait a két módszer használható:
· Létrehozásához egy pár hagyományos módszerek - egy tájékoztató (tartozék), a második -, hogy a változások (mutator);
· Azonosítása nevű tulajdonság.
Egy másik módszer az adatok védelmére, a javasolt C # - használja a kulcsszó csak olvasható. De bármelyik módszert is választja, az általános elv ugyanaz marad - zárt osztályba elrejteni végrehajtásának részleteit a külvilágtól. Ezt a megközelítést gyakran nevezik „programozás fekete doboz” módszer. A másik előnye ennek a módszernek, hogy akkor valahogy javítani a belső végrehajtását az osztály, teljesen megváltoztatja annak tartalmát. Az egyetlen dolog, amit meg kell vigyázni - továbbra is az új végrehajtási módszerek ugyanazon aláírással és működik, mint a korábbi verziók. Ebben az esetben nem kell változtatni egy sort a meglévő kódot az osztályon kívül.