Klassfält

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 21 maj 2016; kontroller kräver 6 redigeringar .

Ett klassfält eller -attribut ( medlemsvariabel, datamedlem, klassfält, instansvariabel ) i objektorienterad programmering  är en variabel vars beskrivning skapas av programmeraren när klassen skapas . All objektdata lagras i dess fält. Fälten nås med deras namn. Vanligtvis anges datatypen för varje fält i klassbeskrivningen.

Strukturfält

De strukturella typerna som stöds av de flesta programmeringsspråk ( kallade strukturer i C , poster i Pascal , och så vidare ) är ett specialfall av klasser - nämligen klasser av fält enbart. All information relaterad till klassfält gäller lika för strukturella typer.

Statiska fält

Vanligtvis har varje objekt sina egna värden för alla dess fält. Klassfält inkluderar även statiska fält ( statiska datamedlemmar, statiska klassfält, klassvariabler ) — fält som är gemensamma för alla klassobjekt.

Statiska fält skiljer sig inte semantiskt från vanliga globala variabler , men de är bara tillgängliga med ett kvalificerat namn (dvs. anger klassnamnet), och därför, till skillnad från globala variabler, inte rör sig i den globala namnrymden.

I vissa objektorienterade programmeringsspråk , som Java , finns det inga globala variabler, och därför är statiska klassfält det enda sättet att lagra global data i program på dessa språk.

Bitfält

Vissa språk, som C++ , låter dig definiera bitfält . Dessa fält tar upp mindre än en minnesenhet ( byte , ord ); kompilatorn själv packar flera bitfält i en minnesenhet, samtidigt som du kan komma åt bitfälten som separata fält i klassen.

Konceptet med bitfält är inte begränsat till klassfält: analogt har det överförts till andra fall av packning av flera värden i en minnesenhet, till exempel i nätverksprotokoll och i filformat .

Användningstips

Vanligtvis görs åtkomstomfånget för klassfält privat , det vill säga åtkomst till dem är endast tillåtet för metoder i samma klass. Egenskaper används för att förse användare av en klass med värdena för dess fält : de tillåter klassen att kontrollera hur dess fält ändras, till exempel att kontrollera om ett givet värde ligger inom ett intervall av giltiga värden.

När fältåtkomst är inkapslad av egenskapsprocedurer är det möjligt att uppdatera koden som hanterar ändringar av den egenskapens värde utan att bryta kompatibiliteten med befintliga användare av klassen. Därför är det vanligt att skapa egendomsprocedurer för att komma åt klassfält, även när ingen ytterligare bearbetning av värden som tilldelats fältet krävs i det inledande utvecklingsskedet.

Användningsexempel

C++

klass foo { privat : int x ; // Det här fältet är privat. Den kan endast nås // från metoder i klassen ''foo''. offentliga : int y ; //Detta fält är offentligt. Tillgång till det är möjligt från //var som helst i programmet. Det rekommenderas att inte göra det. // Dessa två metoder ([[property (programmering)#Property procedures|accessor]] // och [[w:en:Mutator method|mutator]]) ger tillgång till // det privata fältet x. Det rekommenderas att göra just det. int get_x () { return x ;}; void set_x ( int x ) { this -> x = x ; }; statisk int z ; // Detta är ett statiskt fält. Det tillhör // foo som helhet, inte till dess objekt. char a : 3 _ // Dessa är bitfält. Totalt upptar de char b : 3 ; // 8 bitar, dvs. de kommer att placeras i ett tecken c : 1 ; // byte minne. Så kanske röding d : 1 ; // komma åt enskilda bitar av minne. };

Delphi

typ foo = klass privat x : Heltal ; // privat fält offentligt y : Heltal ; // öppet fält // du kan använda egenskaper för att komma åt ett privat fält i Delphi - funktionen get_x : Integer ; // accessor procedure set_x ( x : Heltal ) ; // mutator egenskap _x : Heltal läs get_x skriv set_x ; // stöd för statiska fält för .NET/Win32 introducerades i Delphi 8/2007 respektive klass var z : integer ; // Detta är ett statiskt fält. Det tillhör // foo som helhet, inte till dess objekt. // Delphi stöder inte bitfält end ;

Python

I Python hänvisas ofta till fält och metoder med den generiska termen attribut . Statiska attribut kan överbelastas på en instans. Instansattribut definieras inte i klassstrukturen, utan i metoder (till exempel en konstruktor). Attribut vars åtkomst styrs av separata metoder kallas egenskaper (åtkomst till attribut och egenskaper är syntaktiskt identiska):

klass Foo ( objekt ): z = 0 # klassattribut (statiskt attribut) def __init__ ( själv , x , y ): # självkonstruktör . _x = x # privat attribut (enligt avtal mellan programmerare) self . y = y # offentligt attribut def getx ( själv ): returnera själv . _x # metoder för att läsa, def setx ( själv , värde ): själv . _x = värde # poster def delx ( själv ): del själv . _x # remove property x = property ( getx , setx , delx , "Property 'x'." ) # egenskapsdefinition

Ansökan:

foo = Foo(2, 4) # skapa en instans foo.y = 10 # bind värde till attribut foo.x = 30 # samma men motsvarar foo.setx(30) print foo.x, foo.y, foo.z # utskriftsattribut del foo.x # tar bort en egenskap print foo._x # utfasad print foo.__x # fungerar inte eftersom det inte finns något sådant attribut i klassen

PHP

<?php class HelloWorld { privat $meddelande ; // Privat fält av HelloWorld-klassen public $global_message ; // offentligt fält // Tillgång till privat fält offentlig funktion GetMessage () { return $this -> message ; } } ?>

Se även