Pascal objektum | |
---|---|
Nyelvóra | objektumorientált programozási nyelv , többparadigmás programozási nyelv , kötelező programozási nyelv , strukturált programozási nyelv [d] és programozási nyelv |
A végrehajtás típusa | összeállított |
Megjelent | 1986 |
Fejlesztő | Tesler, Larry és Niklaus Wirth |
Fájlkiterjesztés _ | .p, .ppvagy.pas |
Típusrendszer | static , dynamic (array of const, RTTI , Variant), szigorú |
Főbb megvalósítások | Delphi ( x86 és CLI ), Oxygene ( CLI ), Free Pascal ( x86 , x86-64 , PowerPC , ppc64 , SPARC és ARM ), Virtual Pascal ( x86 ), TMT Pascal ( x86 ), Turbo51 ( Intel 8051 ) |
Dialektusok | Apple, Turbo Pascal , objfpc, Delphi , Delphi.NET, Oxygene |
Befolyásolva | Pascal és Smalltalk |
befolyásolta | C# , Java , Nim |
Az Object Pascal ( angolul - "Object Pascal") egy programozási nyelv , amelyet 1986 -ban az Apple Computernél fejlesztettek ki Larry Tesler csoportja által , akik Niklaus Wirth -tel [1] konzultáltak . A Pascal [2] korábbi Clascal nevű , objektumorientált verziójából származik , amely elérhető volt az Apple Lisa számítógépen .
A változások az egész számok, karakterek és karakterláncok csoportjait érintették, amelyeket két kategóriába soroltak:
Lásd Interfészek: Delphi
Olyan eljárások és funkciók túlterhelését vezették be, amelyek nem tagjai egy objektumnak vagy osztálynak. A típusban és a paraméterek számában eltérő eljárások és funkciók túlterheltek (az overload kulcsszó használatával):
eljárás Calc ( I : Integer ) ; túlterhelés ; // ... eljárás Calc ( S : String ; J : Integer ) ; túlterhelés ;Azért vezették be, hogy kiküszöböljék a memória halomterületre (heap) történő lefoglalásának és visszaküldésének rutinműveleteit, és elkerüljék a véletlenszerű hibákat és a memóriaszivárgást. A tömbelemeknek azonos típusúaknak kell lenniük. Az elemszámozás nullától kezdődik.
Példa a nyilatkozatra:
var MyFlexibleArray : Real tömbje ; _Használat:
var A , B : egész számok tömbje ; begin SetLength ( A , 1 ) ; //Memória lefoglalása egy elemhez A [ 0 ] := 1 ; B := A ; B [ 0 ] := 2 ; vége ;A Delphi XE7 óta a következő műveletek váltak lehetővé dinamikus tömbökkel:
var M : egész számok tömbje ; kezdődik M := [ 1 , 2 , 3 , 4 , 5 ] ; vége ; M : = M + [ 5,6,7 ] ; _ _ _ Beszúrás ([ 6 , 7 , 8 ] , M , 5 ) ; // tömb [6, 7, 8] beszúrása M-be, az 5-ös indextől kezdve Törlés ( M , 1 , 3 ) ; // 3 elem eltávolítása az 1 indextől kezdődően Concat ([ 1 , 2 , 3 , 4 ] , [ 5 , 6 , 7 ])Vagyis dinamikus tömbökkel ugyanúgy lehet dolgozni, mint karakterláncokkal.
Dinamikus tömbben lehetőség van nyílt paramétertömb beállítására is, de ezek típusát korábban kell deklarálni, pl.
type TDynamicCharArray = Char tömbje ; _ függvény Keresés ( A : TDynamicCharArray ) : Integer ;A Borland Object Pascal nyelve bevezette a dinamikus gépelést , valamint a dinamikus típusellenőrzéshez a dinamikus öntés operátort as és az is operátort. Ezenkívül lehetővé vált különféle típusú paraméterek átadása egy nyílt paramétertömbben (nyílt tömb paramétereinek változata).
Változat típusaAz Object Pascal nyelv egy variáns adattípust ( Variant ) vezetett be, amelynek típusa a fordítási szakaszban nem ismert, és a program végrehajtási szakaszában változhat. Ez az adattípus azonban több memóriát fogyaszt, mint a megfelelő változók, és a Variant adatokkal végzett műveletek lassabbak. Ezen túlmenően az ilyen típusú adatokkal végzett illegális műveletek gyakran hibákhoz vezetnek a program végrehajtási szakaszában, míg más típusú adatokkal kapcsolatos hasonló hibákat a fordítási szakaszban észlelik.
A változatváltozók különböző értékeket vehetnek fel (egész szám, karakterlánc, logikai érték, pénznem , OLE karakterláncok), lehetnek azonos típusú elemek tömbjei és a változat típusú értékek tömbje, valamint COM és CORBA objektumokat is tartalmazhatnak, amelyek metódusai és a tulajdonságok ezen a típuson keresztül érhetők el. Egy Változat azonban nem tartalmazhatja:
A változat keverhető (kifejezésekben és utasításokban) más változatokkal, numerikus, karakterlánc- és logikai adatokkal. Ebben az esetben a fordító automatikusan típuskonverziót hajt végre. A karakterláncokat tartalmazó változatok azonban nem indexelhetők (a V[i] nem megengedett).
var V1 , V2 , V3 , V4 , V5 : Változat ; I : Integer ; D : dupla ; S : String_ _ kezdődik V1 := 1 ; //integer típus értéke V2 := 35 9,768 ; //valós érték V3 := 'Hello world!' ; //típus értéke string end ; Variant Open Array Type ParametersLehetővé vált különféle típusú paraméterek átvitele. Az eredetiben "változat nyílt tömb paramétereinek" nevezik. Az adattípus a program végrehajtása során dinamikusan kerül meghatározásra. Csakúgy, mint egy normál nyílt tömbben, a High függvényt hívják meg a tömbelemek számának meghatározására. A deklaráció az array of const kulcsszavakat használja . Példa:
function Kimenet ( const Args : const tömbje ) : string ; _ var I : Integer ; kezdődik Eredmény := '' ; for I := 0 to High ( Args ) do with Args [ I ] do case VtString típusa : Eredmény := Eredmény + VString ^ ; vtPChar : Eredmény := Eredmény + VPChar ; vtInteger : Eredmény := Eredmény + IntToStr ( VInteger ) ; vtBoolean : Eredmény := Eredmény + BoolToStr ( VBoolean ) ; vtChar : Eredmény := Eredmény + VChar ; vtExtended : Eredmény := Eredmény + FloatToStr ( VExtended ^ ) ; vtObject : Eredmény := Eredmény + VObject . Osztálynév ; vtClass : Eredmény := Eredmény + VClass . Osztálynév ; vtVariant : Eredmény := Eredmény + karakterlánc ( VVariant ^ ) ; vtInt64 : Eredmény := Eredmény + IntToStr ( VInt64 ^ ) ; vtAnsiString : Eredmény := Eredmény + karakterlánc ( VAnsiString ) ; vtCurrency : Eredmény := Eredmény + CurrToStr ( VCurrency ^ ) ; vége ; Eredmény := Eredmény + ' ' ; vége ; //... Kimenet ([ 'teszt' , 777 , '@' , Igaz , 3.14159 , TForm ]) ; //paraméterek nyílt tömbjének átadásaA karakterlánc visszaadása: "test 777 @ T 3.14159 TForm".
Mint látható, saját belső struktúrája van, amelyre való hivatkozás lehetővé teszi az adattípus meghatározását. Egy tömb jön létre a függvényhívási sorban a nyílt tömb konstruktor segítségével , amely szögletes zárójeleket használ.
Egy új objektummodell bevezetéséhez bevezetjük az osztály kulcsszót ( Turbo Pascalban az objektum kulcsszó ).
Bevezették az operátorokat az is és as osztályok dinamikus ellenőrzésére és leadására a program végrehajtása során. Megjelentek a metódusmutatók, amelyekhez az objektum kulcsszó új használata került bevezetésre :
típus TMyMethod = objektum eljárása ( Feladó : Objektum ) ; _ Szintaktikai változások az objektumok elhelyezésében bekövetkezett változások miattA Turbo Pascalban dinamikus és statikus objektumpéldányokkal is lehetett dolgozni.
Az Object Pascal objektummodellben a programozó csak a kupacterületen (heap) lefoglalt osztályok dinamikus példányaival dolgozik. Ebben a tekintetben az objektumok mezőihez és metódusaihoz való hozzáférés szintaxisa megváltozott.
Korábban a konstruktor hozzáféréssel inicializált dinamikus objektumpéldányok használatához az Új függvénnyel kombinálva mutató (^) hozzáférést kellett használnia . Most már az osztálytípus is alapértelmezés szerint mutató lett.
Példa összehasonlításra:
Objektummodell Turbo Pascalban :
írja be: PMyObject = ^ TMyObject ; TMyObject = objektum ( TObject ) Saját mező : PMyType ; kivitelező Init ; vége ; //... var MyObject : PMyObject ; begin MyObject := Új ( PMyObject , Init ) ; Saját objektum ^. MyField := //... vége ;Új objektummodell az Object Pascalban :
típus TMyObject = osztály ( TObject ) MyField : TMyType ; konstruktor Create ; vége ; //... var MyObject : TMyObject ; begin MyObject := TMyObject . létrehozni ; MyObject . MyField := //... vége ;A konstruktorok és a destruktorok elnevezési konvenciója megváltozott. A régi objektummodellben az Új hívása felelt a memória lefoglalásáért, a konstruktor meghívása pedig inicializálta a lefoglalt memóriaterületet. Az új modellben ezeket a műveleteket a Create konstruktor hajtja végre . A Delphi XE verziójától kezdve megjelentek a statikus osztálymetódusok. [3]
Mostantól lehetőség van az osztálytagok (metódusok, tulajdonságok) láthatóságának korlátozására, amelyek csak származtatott osztályok megvalósítására szolgálnak. Ez lehetővé teszi a forráskód védelmét az osztály felhasználói általi módosításoktól. Az ilyen metódusokat az osztálydeklaráció védett része tartalmazza.
Vizuális objektum-orientált programozásA property ( property ) fogalmak és a tulajdonhoz kapcsolódó kulcsszavak read , write , stored , default ( nodefault ), index . Az IDE -ben látható vizuális objektumok tulajdonságait a vizuális objektum osztály deklarációjában szekcióként közzétett új szó használatával deklarálják .
Egy általános osztály egyszerűen specializálható egy adott típusra a specialize kulcsszó használatával :
type TIntegerList = speciale TList < Integer > ; TPointerList = specializálódás TList < Mutató >; TStringList = specializálódás TList < string >;A TMT Pascal (az Object Pascal egy módosítása) fejlesztői voltak az elsők, akik bevezették a teljes értékű operátor túlterhelést , amelyet később a nyelv más dialektusainak fejlesztői is átvettek: Delphi (2005 óta Delphi), Free Pascal stb.
Példa:
{deklaráció} típus TVector = csomagolt rekord A , B , C : Double ; eljárás From ( konst A , B , C : Double ) ; osztály operátor Add ( const Bal , Jobb : TVector ) : TVector ; osztály operátor Implicit ( const v : TVector ) : TPoint ; vége ; {implementation} implementáció //... osztály operátor TVector . Add ( konst Balra , Jobbra : TVector ) : TVector ; kezdő Eredmény . _ A := Balra . A + Jobb . A ; eredmény . B := Balra . B + Jobb . B ; eredmény . C := Balra . C + Jobb . C ; vége ; osztályú operátor TVektor . Implicit ( const v : TVector ) : TPoint ; kezdő Eredmény . _ A := kerek ( v . A ) ; eredmény . B := kerek ( v . B ) ; vége ; //... {usage} var v1 , v2 : TVector ; kezdődik v1 . innen ( 20 , 70 , 0 ) ; v2 . -tól ( 15 , 40 , 4 ) ; vászon . Sokszög ([ v1 , v2 , v1 + v2 ]) ; vége ;A Delphi 7-től kezdve a Borland hivatalosan is Delphi - nek nevezte el az Object Pascalt [4] .
Az Object Pascal nyelvet más fejlesztők karbantartják és fejlesztik. Az Object Pascal legkomolyabb implementációi (a Delphi mellett) a többnyelvű TopSpeed , TMT Pascal , Virtual Pascal , PascalABC.NET , Free Pascal , többplatformos TopSpeed Pascal (Turbo Pascal nyelvi változat [5] ) , GNU Pascal . Az Oxygene programozási nyelv az Object Pascal dialektusa a .NET platformra és annak továbbfejlesztésére, új nyelvi funkciók pedig a ":" operátor, az aszinkron és halasztott metódushívások, aszinkron kódblokk-végrehajtás, párhuzamos hurkok, névtelen konstruktorok, szerződés- és szempont-orientált programozás és egyebek [6] (a fordító korlátozás nélkül terjesztve).
A Delphi (a visszafelé kompatibilitás érdekében) és a Free Pascal is támogatja ezt a szintaxist.
program ObjectPascalExample ; typePHelloWorld = ^ THelloWorld ; _ THelloWorld = objektum eljárás Put ; vége ; var HelloWorld : PHelloWorld ; { egy mutató a THelloWorld-re } eljárás THelloWorld . tegye ; begin WriteLn ( 'Hello, World!' ) ; vége ; kezdőújság ( HelloWorld ) ; _ helloworld ^. tegye ; Dispose ( HelloWorld ) ; vége . Delphi és Free PascalA Free Pascalban ez a szintaxis ObjFpc és Delphi módban érhető el . [7]
program ObjectPascalExample ; type THelloWorld = class { osztálydefiníció } procedúra Put ; vége ; eljárás THelloWorld . tegye ; { a THelloWorld osztály Put metódus eljárásának leírása } begin Writeln ( 'Hello, World!' ) ; vége ; var HelloWorld : THelloWorld ; { egy osztály példányára mutató mutatóváltozó meghatározása } kezdődik HelloWorld := THelloWorld . létrehozni ; { a konstruktor egy mutató értékét adja vissza az osztály egy példányára } HelloWorld . tegye ; helloworld . Ingyenes ; { destructor megsemmisíti az osztálypéldányt és felszabadítja a memóriaterületet } end .Pascal | |||||||
---|---|---|---|---|---|---|---|
Dialektusok |
| ||||||
Fordítók |
| ||||||
IDE | |||||||
Személyek |