Tudd Intuíció, előadás, absztrakt adattípusok

Kivonat: Az alapvető absztrakt adattípusokat, mint a halmok és a sorban állás, valamint a végrehajtás bázikus adatszerkezeteket.

Fejlesztési elméleti modellek és adatfeldolgozási módszereket az adatok kritikus eleme a folyamat problémák megoldására egy számítógép. Példák erre kiderül, és alacsony szinten a mindennapi programozási (például a tömbök és kapcsolt listák, azt a „Elementary adatstruktúrák”), és magas szinten az oldatban alkalmazott problémák (például megoldásában a hálózati probléma segítségével az unió találni erdő a „Bevezetés”). Az előadás tárgyalja absztrakt adattípusok (absztrakt adattípus. Továbbá ADT), amely lehetővé teszi, hogy hozzon létre egy program segítségével magas szintű absztrakció. Absztrakt adattípusok lehetővé teszi különféle absztrakt (fogalmi) átalakítása, mely programok működnek adat bármely konkrét megjelenítése adatszerkezeteket és adott alkalmazása az algoritmus.

Minden számítógépes rendszerek alapja absztrakciós szint: bizonyos fizikai tulajdonságai a szilícium és egyéb anyagok teszik lehetővé, hogy egy elméleti bitek vehet bináris értékek 0-1; majd a dinamikus tulajdonságok értékeinek egyes apró kit épített elméleti modellje a gépet; Továbbá az elven alapul az a gép működése ellenőrzése alatt a program gépi kódban konstrukció elméleti modellje egy programozási nyelv; és végül épített egy elvont fogalom az algoritmus, amely formájában valósul meg a program C ++. Absztrakt adattípusok lehetőséget, hogy folytassa ezt a folyamatot tovább fejleszteni absztrakt eljárást egyes számítási feladatok magasabb szintű, mint az erre a C ++ rendszer fejlesztése elméleti mechanizmusok. orientált alkalmazások és alkalmas a problémák megoldására számos alkalmazási területen, és hozzon létre absztrakt mechanizmusok magasabb szintű, amelyek ezeket az alapvető struktúrákat. Absztrakt adattípusok a rendelkezésünkre áll korlátlanul bővíthető eszköztár megoldani egyre nagyobb problémát jelent.

Egyrészt, a használata absztrakt minták gondtalanul azok részletes végrehajtását; Másrészt, ha a teljesítménye a program fontos, meg kell tudni, hogy a költségek végző alapvető műveleteket. Az általunk használt számos alapvető absztrakciók, amelyeket beépítettek a számítógép hardvere és az alapot a gépi utasítások; végre más absztrakciók a szoftver; és használjon további kivételi írásbeli korábbi rendszer szoftver. Kivonat magas szintű minták gyakran létre alapján egyszerűbb minták. Minden szinten, hogy egy és ugyanazon alapelv: meg kell találni a legfontosabb műveleteket a programok és a legfontosabb jellemzői az adatokat, majd pontosan ezeket és más elvont szinten, és hatékony mechanizmusokat kell kidolgozni a konkrét kivitelezésre. Ebben a fejezetben megnézzük sok példa ennek az elvnek.

Ahhoz, hogy dolgozzon ki egy új absztrakciós szinten van szükség (1) meghatározza absztrakt objektumokat kell dolgoznia, és a műveleteket. el kell végezni rajtuk; (2) bemutatni az adatokat egy adatstruktúrát, valamint megvalósítani a művelet; (3) és (ami a legfontosabb) annak érdekében, hogy ezek a létesítmények voltak alkalmazásokban hasznos. Ezek az elemek vonatkozik azokra az egyszerű adattípusok, hogy a bázikus támogató mechanizmusok adattípusok figyelembe vették a „elemi adatszerkezetek.” Meg lehet igazítani a céljainknak. Ugyanakkor a C ++ nyelv kiterjesztése a mechanizmust kínál fontos nevezett szerkezet egy osztály (class). Osztályok rendkívül hasznosak létrehozásakor absztrakciós szinten, és ezért tekinthető alapvető eszköze erre a célra a maradék könyvet.

Meghatározás 4.1. Absztrakt adattípus (ADT) - ez az adat típusát (egy sor érték és olyan műveletek ezeket az értékeket), ami csak akkor lehet hozzáférni az interfészen keresztül. Egy program, amely használja az ADT fogja hívni az ügyfél és a programot, amely a leírás az ilyen típusú adatok - megvalósítás.

Ez a szó csak teszi az absztrakt adattípus: ADT esetében kliens programok nem férnek hozzá az értékeket az adatok más módon, kivéve a leírt műveleteket a felületen. Az előadás ezen adatok és funkciók, amelyek megvalósítják ezeket a műveleteket. Ezek végrehajtása és teljesen elkülönül a kliens felületen. Azt mondjuk, hogy a felület nem átlátható: az ügyfél nem látja a végrehajtás a felület.

A programokat C ++, ezt a különbséget rendszerint egy kicsit világosabb, mint a legegyszerűbb módja annak, hogy hozzon létre egy felületet. tartalmazzák az adatok bemutatását. de rámutat arra, hogy a kliens szoftver nem engedélyezett közvetlen hozzáférést biztosít az adatokhoz. Más szóval, a fejlesztők a kliens alkalmazások, hogy az adatok ábrázolása. de semmiképpen nem tudja használni azt.

Példaként tekintsük a típusú adat interfész pontok (Program 3.3) A 3.1 „Az elemi adatszerkezeteket.” kifejezetten kinyilvánították a felületen, hogy azok a pontok kerülnek bemutatásra, mint egy szerkezet, amely egy pár lebegőpontos számok, jelöljük az x és y. Az ilyen adatok felhasználása típusok közös nagy szoftverrendszerek: fejlesztünk egy sor adatot képviseleti megállapodások (is felsorol számos kapcsolódó tranzakciók), és ezeket a szabályokat a felületen. így, hogy tudják használni kliens programok, amelyek egy részét egy nagyobb rendszer. az adatok típusát biztosítja a konzisztenciát mind részei a rendszernek a fő az egész rendszer teljesítményét adatszerkezeteket. Nem számít, mennyire jó egy ilyen stratégia lehet, hogy van egy hibája: ha meg akarja változtatni a képadatok. akkor meg kell változtatni a kliens programok. Program 3.3 újra biztosít számunkra egy egyszerű példa: az egyik oka a fejlesztési ilyen típusú adatok - a használhatóság kliens program a pontokat, és arra számítunk, hogy ha szükséges, az ügyfelek hozzáférhetnek az egyes pont koordinátáit. De nem megy egy másik adat ábrázolása (például a poláris koordinátákat, vagy háromdimenziós koordinátáit, vagy akár más típusú adatok az egyes koordináták) megváltoztatása nélkül az összes kliens program.

Ezzel szemben az e, a program tartalmaz 4.1 végrehajtási absztrakt adattípus, az adattípus a megfelelő programok 3.3 de a nyelv a C ++ osztály, amely miután azonosították mind az adatok és a kapcsolódó műveletek. Program 4.2 egy kliens program, amely az ilyen típusú adatokat. Ez a két program elvégzi ugyanazt a számításokat a program 3.3 és 3.8. Ezek illusztrálására néhány alapvető tulajdonságait osztályok, amelyek most úgy.

Amikor írunk egy programot, mint a meghatározás int i, mi határozza meg a rendszer foglalni memória terület adatait (beépített) int típusú. amely elérhető a neve i. A C ++ nyelven áll rendelkezésre hasonló entitások távú cél. Felvételkészítés közben a program ilyen megállapítást tenne, a P pont, hogy létrehoz egy objektum osztály POINT. amely elérhető a neve o. Ebben a példában minden egyes objektum két adatelem, a nevét x és y. Akárcsak a struktúrák, akkor lehet hozzáférni nevek, mint P. Y.

Az adatelemeket x és y nevezzük az osztály adattagnak. Az osztály is definiálható tagja megvalósító függvények műveleteket. Ehhez a típusú adat. Például osztályban. programban meghatározott 4.1 két tagfüggvény nevekkel PONT és a távolságot.

A kliens programok, mint például a Program 4.2, okozhatja a tagfüggvény objektumhoz társított, jelezve a nevüket, ugyanúgy, mint ezek a nevek bármilyen struktúra szerkezete. Például p.distance kifejezést (q) számítja ki a pontok közötti távolság p és q (ugyanolyan távolságra kell visszatérni, és q.distance (p) függvénnyel). PONT () függvény - az első funkció a programban 4.1 - egy különleges tagja nevezett funkció egy kivitelező: ez ugyanaz a neve, mint az osztály, és ez az úgynevezett, ha azt szeretné, hogy hozzon létre egy objektumot az ebbe az osztályba.

Program 4.1. Osztály Megvalósítás (A pont)

Ez az osztály definiál egy adattípust. amely egy értékrend képviselő „pár lebegőpontos” (azt feltételezzük, hogy azokat értelmezni, mint egy pont a derékszögű sík), valamint két tagja meghatározott feladatokat minden esetben az osztály POINT. PONT () függvény. amely egy kivitelező inicializálása koordinátákat véletlen értékek 0-1, és a távolság függvényében (PONT). kiszámítja a távolságot, hogy egy pontot. Az adatok benyújtása bizalmasan kezeljük, (magán), és csak a tagok funkciók hozzá, vagy módosíthatja. Sami tagja funkciók (public), és rendelkezésre állnak a minden ügyfél. Ön tudja menteni a kódot, például egy fájlt úgynevezett POINT .cxx.

Program 4.2. Kliens szoftver az osztály PONT (megtalálni a legközelebbi pont)

Ez a verzió 3.8 egy kliens, amely a ADT POINT. a programban meghatározott 4.3. Operation új [] tömb tárgyak teremt (A pont hívja a kivitelező () inicializálni egyes objektumok random koordináta értékek). Expressziója egy [I] .distance (a [j]) az objektum számára okoz [i] -distance tag függvény egy argumentuma [j].

Meghatározása P pont a kliens program felszabadulását eredményezi a memória terület az új objektumot, majd (köztespontról () függvény) való hozzárendelésére mindegyik két eleme véletlenszerű adatokat közötti értékeket 0-1.

Ez a stílus a programozás néha objektumorientált programozás, teljesen támogatott tervezési osztály C ++ nyelven. Az osztály lehet tekinteni kiterjesztése a fogalom a szerkezet, amely nem csak összehozza az adatokat, hanem meghatározza a műveleteket az adatokat. Nem lehet sok különböző tárgyak tartoznak ugyanabba az osztályba, de ezek mind hasonlóak abban, hogy az adatok a tagok, hogy ugyanazért a értékrendet, és ezek az adatok TAG tudjuk futtatni ugyanazokat a műveleteket - általában másolja az azonos típusú adatokat. Az objektumorientált programozás, a tárgyak vannak tervezve, hogy kezeljen az adatokat tagjai (szemben a segítségével önálló feladat- feldolgozásra tárolt adatok objektumok).

Úgy véljük, a példa egy kis osztály fentiek csak azért, hogy megismerjék az alapvető jellemzői a osztályokba; így messze nem teljes. A tényleges kódot az osztályban pont mi lesz sokkal több műveletet. Például a program nincs még 4.1 működését. amely lehetővé teszi a tanulás x és y koordinátákat. Mint látni fogjuk, a túl ezen és egyéb műveletek - meglehetősen egyszerű feladat. Az 5. részben vesszük közelebbről szemügyre az osztályok a pontokat és más geometriai absztrakciók, például vonalak és sokszögek.

A C ++ (nem C) szerkezete az is lehet kapcsolatos funkciók. A legfontosabb különbség az osztályok és a kapcsolódó struktúrák információhoz való hozzáférés, amelyet az jellemez, a kulcsszó a magán- és állami. A privát (private) osztály tagja csak akkor lehet hozzáférni az osztályban, és a Public (nyilvános) osztályának tagja lehet elérni bármely ügyfél. Egyéni tagjai lehetnek az adatok és funkciók a program csak 4,1 személyes adatok, de az továbbra is számos példát osztályok, amelyek szintén saját tagsági függvények. Alapértelmezésben az osztály tagjai saját és tagjai struktúrák - a nyilvánosság számára hozzáférhető.

Például a kliens programot, amely a POINT osztályban. Nem lehet hivatkozni adattag p.x, p.y stb hogyan lehet tenni POINT szerkezetét. mint az osztály tagjai x és y magán. Feldolgozására pont akkor kihasználják nyilvánosan hozzáférhető tag funkciókat. Ezek a funkciók közvetlen hozzáférést az adatokhoz tagjai egy tárgy a kategóriájában. Például, hívja p.distance (q) távolság funkciót a program nevét x 4.1 az üzemeltető dx = x - ax tárgya az X-tagot a P pont (mivel a távolság függvényében hivatkoztak függvényében tagú például p), és a név ax tárgya az X-tagot a Q pont (mert q - aktuális paraméter megfelelő formális paraméter a.). lehetne írni dx = this-> x-a.x kizárni annak lehetőségét, hogy a kétértelműség, vagy zavart - ez a kulcsszó egy mutató az objektum. amelyre a funkciót nevezik tagú.

Ha az adatok tagjai használják a kulcsszó statikus. Ez, mint abban az esetben, rendes, azt jelenti, hogy csak egy másolatot a változó (utalva egy osztály), nem több példányban (összefüggő egyes objektumok). Ezt a funkciót gyakran használják például a pálya statisztikák tárgyak: felveheti a POINT osztály változó static int N. Add N ++ kivitelező - és akkor lehet tudni, hogy hány pontot hoz létre.

Persze, akkor feltételezhetjük, hogy a funkciót. számítástechnika a két pont közötti távolság, hogy nem kell olyan érv (bármely két pont), és ahogy az előző végrehajtására, a két paraméter (két pont), hogy sokkal természetesebb. A C ++, ez a megközelítés lehet végrehajtani meghatározó osztály POINT más távolságra függvénydefinícióban

Tagú statikus függvény elérheti az osztály tagjait, de nem lehet hivatkozni egy adott objektumot.

Kapcsolódó cikkek