Tudd Intuíció, előadás, gépelés
A statikus és dinamikus gépelés
Bár lehet, köztes megoldásokat, két fő megközelítés:
- Dinamikus gépelés. várjon, amíg végrehajtás minden hívást, majd dönteni.
- Statikus gépelés. alapuló szabályrendszer határozza meg az eredeti szöveget, hogy a teljesítménye megsértése mód lehetséges. A rendszer kerül végrehajtásra, ha a szabályok garantálják a hiánya hibákat.
Ezek a kifejezések könnyen megmagyarázható: Ha a gépelés dinamikus típus ellenőrzése történik, miközben a rendszer (dinamikus), és elvégeztük statikusan szöveg felett (a végrehajtás előtt) ellenőrzésére statikus gépelni.
A kifejezések és gépelt típustalan (gépelt / típustalan) gyakran helyett a gépelt statikusan és dinamikusan-tipizált (statikusan / dinamikus típusú). A félreértések elkerülése végett, akkor ragaszkodni a teljes elnevezésére.
Statikus gépelési igényel automatikus ellenőrzés, ró, mint általában, a fordító. Ennek eredményeként, van egy egyszerű definíció:
Definíció: Egy statikusan típusos nyelv
OO nyelv statikusan típusos, ha jön egy megállapodás szerinti szabályokat kell ellenőriznie a fordítóprogram, amelyek betartása biztosítja, hogy a rendszer teljesítményét nem vezet megsértését típusok.
Az irodalomban a „erős tipizálási” (erős). Ez megfelel a kategorikus jellegének meghatározására, amely előírja, hogy a teljes hiánya sérti típusok. Lehet gyenge (gyenge) formák statikus gépelés. amelynek értelmében szabály megszünteti bizonyos jogsértések, nem azok megszüntetésére teljesen. Ebben az értelemben, néhány objektum-orientált nyelvek statikusan típusos gyengén. Mi fog harcolni a legerősebb gépelés.
gépelési szabályok
A objektumorientált jelölést statikusan tipizált. A típus szabályokat vezettek be az előző előadások és csökken három egyszerű követelményeknek.
Noha az egy statikusan típusos nyelv van megadva pontosan, ez nem elég - szükség van a hivatalos létrehozásának kritériumait a gépelés szabályokat. Vegyünk két szélsőséges esetekben.
- Abszolút megfelelő nyelvet. ahol minden egyes szintaktikailag helyes rendszert és képest helyes típusú. generikus szabályozás nem szükséges. Az ilyen nyelv létezik (képzelni egy lengyel rekordot a kifejezés az összeadás és kivonás az egész számok). Sajnos, sem az igazi univerzális nyelv nem felel meg ennek a kritériumnak.
- Abszolút hibás nyelvet. amely könnyen beállítható, hogy bármilyen meglévő nyelvi és hozzá gépelési szabály, ami a helytelen rendszer. A definíció szerint a nyelv gépelt: mert nincs rendszer, megfelelő szabályok, nincs rendszer hatására a szabálysértésekről.
Elmondhatjuk, hogy a nyelv az első típusú alkalmasak. de haszontalan. az utóbbi hasznos lehet, de nem alkalmas.
A gyakorlatban a szükséges típusú rendszer, amely megfelelő és hasznos ugyanakkor: elég erős a megvalósítása igényeinek számítástechnika és nagyon kényelmes, nem kényszerít minket, hogy megy a kifinomultság, hogy megfeleljen a gépelési szabályokat.
Azt mondjuk, hogy egy nyelvet reális. ha alkalmas és hasznos a gyakorlatban. Ezzel szemben a meghatározása statikus gépelés. amely kategorikus választ arra a kérdésre: „Az X statikusan típusos nyelv”, a meghatározása realizmus részben szubjektív.
Ebben a fejezetben látni fogjuk, hogy az általunk javasolt reális jelöléssel.
Statikus gépelési vezet a természet a „pesszimista” politikát. Próbál adni a garancia arra, hogy ezek a számítások nem eredményezhet hibákat. elutasítja a számításokat, amelyek véget vethetett volna hiba nélkül.
Vegyünk egy hagyományos, nem tárgy, Pascal-szerű nyelv különböző típusú REAL és egész. Amikor leírja az N: integer; r: Real operátor n: = r elutasításra kerül, mert az sérti. Például a fordító fogja utasítani az összes alábbi állítások:
Ha hagyjuk, hogy azok végrehajtása, azt látjuk, hogy [A] mindig működik, mint bármely számrendszer pontos ábrázolása a valós szám 0,0, egyértelműen lefordították több mint 0. [B] szinte biztosan működni fog. Az eredmény a [C] nem egyértelmű (ha azt akarjuk, hogy az eredmény a kerekítés vagy eldobjuk a tört része?). [D], hogy megbirkózzon a feladatát, mint az üzemeltető:
amely magában foglalja a elérhetetlen hozzárendelés (n ^ 2 - a számának négyzete n). Miután a n ^ 2 n a megfelelő eredményt ad csak egy sor fut. N hozzárendelése egy nagy igazi értékeket nem lehet képviselő vezető kudarcra.
A gépelt nyelven, mind ezek a példák (munka, nem működik, néha működik) kíméletlenül kezelni generikus szabályok megsértése, valamint az elutasított minden fordító.
A kérdés nem az, hogy mi lesz pesszimista, de hogyan pesszimista engedheti meg magának, hogy legyen. Térjünk vissza a követelmény realizmus. ha a típusú szabályok olyan pesszimisták, amelyek akadályozzák az egyszerű számítások, elutasítjuk azokat. De ha a biztonsági típusok segítségével annak érdekében elért kis veszteség, erejét, mi lesz velük. Például egy fejlesztői környezetben, amely a kerekítés funkció elosztását és az egész rész - kerek és vágjon. operátor n: = r helytelen joggal tekintik okozza, hogy írjuk le kifejezetten alakítani egy valós szám egy egész, hanem az alapértelmezett kétértelmű átalakulás.
Statikus gépelés: hogyan és miért
Míg az előnyök statikus gépelési nyilvánvaló, jó beszélni őket.
előnyök
Az okok a használatát statikus gépelni objektum technológiát, mi szerepel az elején az előadás. A megbízhatóság, a könnyebb érthetőség és a hatékonyság.
Megbízhatóság miatt a detektálási hibák, amelyek egyébként megnyilvánulhat csak a munka során, és csak bizonyos esetekben. Az első szabály, arra kényszerítve állapítsa lényege, as, sőt, és funkciók be a program szövegének redundancia, amely lehetővé teszi a fordító, a másik két szabály, ellentmondás van a megfogant és a valós alkalmazás szervezetek, alkatrészek és kifejezéseket.
A korai felismerés a hibák is fontos, mert minél tovább halogatják az kereső, annál nagyobb a költségek növekedése a korrekció. Ez a tulajdonság az intuitív minden professzionális programozók, mennyiségileg megerősíteni a széles körben ismert művek Boehm (Boehm). Függése a költségek pontos időt találni a hiba látható a grafikonon, megépíteni szerint számos nagy ipari projektek és kísérleteket végeztünk kisebb lett volna a projekt:
Ábra. 17.1. Összehasonlító költségei hibák kijavítása ([Boehm 1981] közzétett engedéllyel)
Olvashatóság és a könnyebb érthetőség (olvashatóság) megvannak az előnyei. Az összes példa ebben a könyvben, mint a megjelenése egy egység biztosítja az olvasó információt kinevezését. Olvashatóság nagyon fontos szakaszában karbantartás.
Érvek az dinamikus gépelés
Mindezek ellenére, a dinamikus gépelés nem veszíti el a szurkolók, különösen a Smalltalk-programozók. Ezek az érvek elsősorban a realizmus, ami a fent tárgyalt. Ők arról, hogy a statikus gépelési túl korlátozva őket, ami nem teszi lehetővé számukra, hogy szabadon kifejtsék kreatív ötletek, néha hívja őt „erényöv”.
Ezzel az érvvel tudunk megegyezni, de csak statikusan típusos nyelvek, amelyek nem támogatják a lehetőségek száma. Érdemes megjegyezni, hogy az összes kapcsolódó fogalmakat a koncepció típusú, és bevezette az előző előadások van szükség - az elutasítás sem őket tele van komoly korlátai, és azok bevezetése, éppen ellenkezőleg, felhatalmazza a tetteinket rugalmasság, és átadjuk magunkat a lehetőséget, hogy teljes mértékben élvezheti a praktikus statikus gépelés.
Gépelés: összetevői siker
Milyen mechanizmusok reális statikus gépelés. Mindegyikük lépett a korábbi előadások, és ezért is csak röviden felidézni őket. Együttes tőzsdei mutatja a következetesség és erejét egyesület.
A típus rendszer teljes egészében az a koncepció osztályban. Az osztályok még az ilyen alaptípus, mint egész. és ezért nem kell külön szabályok írják előre definiált típusok. (Ez a mi jelölés eltér a „hibrid” nyelv, mint Object Pascal. Java és C ++, ahol a rendszer a régi típusú nyelvek kombinált objektum technológiát, osztály-alapú.)
Telepített típusú nekünk nagyobb rugalmasságot, amely lehetővé teszi a fajta, amelynek értékeit képviselik tárgyak, valamint a típusok, amelyeknek értéke linkeket.
A végső döntést hozzanak létre egy rugalmas típusú rendszer tartozik az öröklési és a kapcsolódó átjárhatóság koncepciója. Így leküzdeni a fő gátja a klasszikus tipizált nyelv, például Pascal, Ada, amely a kezelő x: = y igényel típusú x és y hasonlóak voltak. Ez a szabály túl szigorú: azt megtiltja a szervezetek, amelyek jelzik tárgyak kapcsolódó típusok (SAVINGS_ACCOUNT és CHECKING_ACCOUNT). Ha öröklik, szükségünk van egy kompatibilis típus a fajta x y. például X rendelkezik típusú számla. y - SAVINGS_ACCOUNT. és a második osztály - utódja a korábbi.
A gyakorlatban egy statikusan típusos nyelv igényeinek támogatja a többszörös öröklés. Ismert alapvető díjak statikus gépelési, hogy nem ad lehetőséget arra, hogy értelmezze a különböző tárgyakat. Így a dokumentum objektum (dokumentum) lehet továbbítani a hálózaton keresztül, és ezért szükség van az összetevő jelenlétét típusához kapcsolódó ÜZENET (üzenet). De ez a kritika csak akkor érvényes, nyelv korlátozott egyetlen örökséget.
Ábra. 17.2. többszörös öröklés
Bizonyos esetekben, ha szeretné korlátozni a sokoldalúság. amely lehetővé teszi a használatát műveletek, amelyek csak egységei általános típus. Ha generikus osztály SORTABLE_LIST támogatja válogatás megköveteli, hogy a gazdálkodó egység típus G. ahol G - generikus paraméter rendelkezésre állás összehasonlítást. Ezt úgy érjük el, kapcsoljuk a G-osztályú meghatározó generikus korlátozás, - összehasonlíthatók:
Bármilyen tényleges generikus paraméter egy leszármazottja SORTABLE_LIST osztály összehasonlíthatók. amelynek szükséges komponenst.
Tovább kötelező mechanizmus - kísérlet feladat - megszervezni a hozzáférést a tárgyak, a típusú szoftver, amely nem szabályozza. Ha y - egy adatbázis-objektum vagy tárgy nyert a hálózaton keresztül, a kezelő x = y hozzárendeli az x értéke y ?. ha y van egy kompatibilis típusú, vagy ha ez nem, hogy az x értékét Érvénytelen.
Jóváhagyása. csatlakoztatott részeként az ötlet Design by Contract, az osztályok és alkatrészeik formájában előfeltételek, utófeltételek és az osztály állandók, lehetőséget biztosít, hogy leírja a szemantikai korlátozások, amelyek nem tartoznak a specifikáció típusát. Nyelven, mint a Pascal és Ada, vannak típusú alhálózatok, amely korlátozza az értéke a természetben, például, tartomány 10-20, de használja őket, akkor nem lesz képes biztosítani, hogy az i értéke negatív, mindig kétszer meghaladó j. Ahhoz, hogy a támogatás az invariáns osztályok célja, hogy pontosan tükrözi a korlátozásokat, nem számít, mennyire bonyolult lehetnek.
A szoftverrendszerek fejlesztésére valóban szükség van egy másik ingatlan rejlő legtöbb fejlesztési környezetben - gyors, növekvő (gyors inkrementális) újrafordítás. Amikor írsz, vagy módosítsa a rendszer, szeretnék a lehető leghamarabb, hogy a változtatások hatását. Statikus gépelés, meg kell adni a fordító időt kettős ellenőrzés típusát. Hagyományos összeállítása rutinokat kell ismételten fordítását a teljes rendszer (és összeszerelés), és ez a folyamat lehet fájdalmasan lassú, különösen átmenet nagy rendszerek. Ez a jelenség az érv értelmezése rendszerek, mint például a korai Lisp környezet vagy a Smalltalk, indítsa el a rendszert alig vagy egyáltalán nem feldolgozás elvégzése nélkül típusellenőrzés. ez az érv elfelejtve már. Egy jó modern fordítóprogram határozza meg, hogy a kód változott a legutóbbi összeállítása, és feldolgozza csak a változásokat talált.
„Ne pipsqueak gépelt”?
Célunk - a szigorú, statikus gépelni. Ezért el kell kerülni annak kiskapukat mi „a szabályok szerint játszik”, legalábbis, csak azért, hogy azonosítani őket, ha vannak ilyenek.
A leggyakoribb kiskaput statikusan típusos nyelv jelenléte az átalakulás, a változó típusát egység. A C és származékai nyelv az úgynevezett „típusú átalakítás” vagy öntvény (cast). Felvétel (OTHER_TYPE) x azt jelzi, hogy az x értéke által érzékelt a fordító, mint amelyek típusú OTHER_TYPE. bizonyos korlátozások alá a lehetséges típusokat.
Az ilyen megállapodások megkerülni a korlátozásokat típusú ellenőrzés. Hoz elterjedt a C programozási nyelven, aktiváló ANSI C nyelvjárás még C ++ vet, bár kevésbé gyakori, egy ismerős, és talán egy szükséges dolog.
Tartsa be a szabályokat a statikus gépelési nem olyan egyszerű, ha bármikor úgy lehet megkerülni azáltal.
Továbbá feltételezzük, hogy a típust a rendszer szigorú, és nem teszi lehetővé a szereposztás.
Lehet, hogy észrevette, hogy a kísérlet rendelni - szerves része a reális típusú rendszer - mint egy kísértet. Van azonban egy lényeges különbség: a kisérlet arra, hogy megvizsgálja, hogy az aktuális típus megegyezik a meghatározott típusú - biztonságos, és néha szükség van.
Typing és kötelező
Bár, mint olvasó ezt a könyvet, akkor biztosan megkülönböztetni statikus gépelési statikus kötődést. vannak emberek, akik szeretnek alá nem erő. Részben ez lehet az oka, hogy a befolyása a Smalltalk nyelv védelmében dinamikus megközelítése mind a kihívások és kialakítására képes rossz ötlet, bár ugyanaz a megoldás. (Mi vagyunk a könyvben azzal érvelnek, hogy hozzon létre egy megbízható és rugalmas programok ötvözik kívánatos statikus gépelési és dinamikus kötés).
Például a gépelési és kötelező foglalkozik a szemantika alapján ingatlan szerkezetek x.f (arg). de válaszolni két kérdésre:
Typing és kötelező
- A kérdés, hogy a gépelést. amikor tudnunk kell, hogy pontosan mi lesz látható végrehajtása során a megfelelő művelet f. alkalmazandó objektum csatlakozik a lényege x (Arg paraméter)?
- A kérdés, hogy a kötődést. amikor tudnunk kell, hogy milyen műveletet kezdeményezi a hívást?
Gépelési megválaszolja a kérdést a jelenlétét legalább egy műveletet, a kötődés felelős választotta a jobb oldalon.
Ennek része a cél megközelítés:
Mindkét problémát meg lehet oldani mind dinamikusan és statikusan. Meglévő verzió által nyújtott mind a négy megoldásokat.
- Számos nem-tárgy nyelv, mondjuk, Pascal, Ada, rájött, mint a statikus gépelési és statikus kötődést. Minden egység csak egyféle definiált objektumok statikusan. Ez biztosítja a megbízhatóság a megoldás, amelynek költsége a rugalmassága.
- Smalltalk és egyéb objektum-orientált nyelvek közé segítségével dinamikus összekapcsolását és dinamikus gépelés. Ebben az esetben előnyös, ha a rugalmasság rovására a megbízhatóság a nyelvet.
- Külön nem tárgy nyelv támogatja a dinamikus és statikus gépelési kötődést. Közülük - a szerelvény nyelv és számos programozási nyelv (scripting nyelvek).
- Ötletek statikus és dinamikus gépelési kötődést végre a jelölési javaslatot ebben a könyvben.
Az ok a választott statikus és dinamikus gépelési kötelező nyilvánvaló. Az első kérdés: „Mikor fogunk tudni a létezéséről a komponensek?” - javasolja egy statikus választ: „Minél előbb, annál jobb”, ami azt jelenti, hogy a fordítás során. A második kérdés: „Mi haszna van az alkatrészek?” magában dinamikus válasz, „az egyik, hogy szükség van” - megfelel a dinamikus típusú objektum határozza meg futás közben. Ez az egyetlen elfogadható megoldás, ha a statikus és dinamikus kötési ad különböző eredményeket.
Az alábbi példa segít tisztázni az öröklési hierarchia ezeket a fogalmakat:
Ábra. 17.3. Típusú repülőgép
Az a kérdés, gépelés, ha meggyőződött arról, hogy nem lesz lower_landing_gear komponenst ( „futómű”) alkalmazandó objektum (COPTER nem lesz egyáltalán) az a kérdés, a kötés: melyik több lehetséges változat közül lehet választani.
Dinamikus tipizálás Smalltalk-style megkövetelik, hogy várjon egy hívást, és abban az időben a végrehajtás lekérdezi a rendelkezésre álló kívánt alkatrész. Ez a viselkedés lehetséges prototípusok és kísérleti fejlesztés, de elfogadhatatlan, hogy az ipari rendszerek - a repülési idő végén kérdezni, van egy ház.