Klasse (datamaskin)

En klasse , i objektorientert programmering , er en konstruksjon av et programmeringsspråk som brukes som modell for å lage objekter . Modellen inkluderer attributter og metoder som vil bli delt av alle objekter som er opprettet ( forekomster ) fra klassen. Et objekt er faktisk en forekomst av en klasse.

En klasse kan identifiseres som en abstrakt datatype som kan representere en person, et sted eller en ting, og er derfor abstraksjonen av et konsept, implementert i en programvare . I utgangspunktet definerer den internt tilstanden hvis data er lagret i de såkalte medlemsvariablene eller attributtene, og oppførselen til enheten den representerer, beskrevet av gjenbrukbare kodeblokker kalt metoder .

Beskrivelse

I objektorientert analyse

Begrepet klasse kan bety, avhengig av konteksten, en kategori av objekter, en datatype eller implementeringen av en datatype. Disse tre betydningene finnes henholdsvis (hovedsakelig) i objektorientert analyse, objektorientert design og objektorienterte programmeringsspråk .

Kravanalyse , eller ganske enkelt analyse , er en av de første fasene av programvarens livssyklus , og går i det minste foran design- og implementeringsfasene . Hensikten med denne fasen er å forstå, avklare og dokumentere hva programvaresystemet må gjøre, eller hvilke funksjoner det er pålagt å ha; vi er ikke opptatt av å definere hvordan disse funksjonalitetene implementeres (bortsett fra, på et veldig grovt nivå, for et grovt estimat av kostnader ).

Vi snakker om objektorientert analyse hvis denne fasen utføres ved bruk av teknikker som er basert på en objektorientert metamodell eller, mer enkelt, hvis analysen bruker de konseptuelle verktøyene til objektorienterte teknologier, først og fremst konseptet " klasse".

I objektorientert analyse kan to delaktiviteter skilles: domeneanalyse og egentlig kravanalyse. Domeneanalyse består i først å avklare hvilke som er de viktige begrepene som systemet som skal utvikles må forholde seg til, og i å spesifisere så detaljert som mulig betydningen av disse begrepene og relasjonene som knytter dem til hverandre.

For eksempel vil det i analysefasen for et programvaresystem i bankdomenet være nødvendig å undersøke grundig hvordan en brukskonto fungerer, hvilke relasjoner som kan knytte ulike kontoer, kontoer til filialer, filialer til kunder og så videre. Etter den nøyaktige karakteriseringen av enhetene som tilhører domenet, vil de reelle kravene til systemet bli utarbeidet, det vil si å beskrive hvordan systemet passer inn i domenet og samhandler med det.

I objektorientert analyse er "klassen" det grunnleggende konseptet som brukes for å beskrive enhetene i domenet. En klasse representerer en kategori av enheter (for eksempel brukskontoer) når det gjelder to aspekter:

De enkelte enhetene kalles instanser (dvs. eksempler, spesielle tilfeller) av deres tilhørighetsklasse. Så, brukskontoen min er en forekomst av brukskontoklassen .

Modellen av domenet som analysen definerer kan berikes med en rekke tilleggsinformasjon om relasjonene mellom de forskjellige identifiserte klassene. Blant de vanligvis viktigste eksemplene på forhold kan følgende nevnes:

I objektorientert design

Design er en fase av programvarens livssyklus konseptuelt etter analysen av domenet og analysen av kravene, der problemet oppstår med hvordan man lager et programvaresystem som oppfyller de tidligere forklarte kravene. Resultatet av denne fasen bør være et sett med prosjektspesifikasjoner som er tilstrekkelig detaljerte og presise til å brukes som en enkelt referanse for den påfølgende implementeringsfasen , det vil si for konstruksjonen av selve programvareproduktet.

Objektorientert design brukes vanligvis i tilfeller der det også forventes en objektorientert implementering, på et passende språk som C ++ eller Java . Faktisk har disse språkene et klassekonsept (se neste avsnitt) som er strukturelt likt det som ble brukt i analysefasen. I dette tilfellet består designet av en foredling og utvidelse av modellen produsert av analysen. Denne modelltransformasjonen skjer på grunnlag av to generelle retningslinjer:

Det kan sies at systemet på dette stadiet er beskrevet i form av abstrakte datatyper .

I objektorienterte språk

En av de grunnleggende egenskapene til den objektorienterte tilnærmingen er den større "fluiditeten" (sammenlignet med tidligere tilnærminger, for eksempel prosedyremessige ) som analyse-, design- og implementeringsfasene hver fører til den neste. Denne flyten skyldes det faktum at objektorienterte språk gir en rekke syntaktiske og semantiske verktøy som er den direkte transponeringen av de konseptuelle verktøyene som har blitt diskutert med hensyn til analyse- og designfasene.

Et objektorientert språk gir en klassekonstruksjon som strukturelt tilsvarer det abstrakte klassebegrepet nevnt ovenfor: en klasse beskriver en type objekter (~ en kategori av enheter ) i form av et sett med interne variabler eller instansvariabler som slike objekter har (~ attributter ) og et sett med prosedyrer kalt metoder som kan utføres på dem (~ operasjoner ). En intern variabel i en klasse som inneholder en referanse til en forekomst av en annen klasse kan tilsvare en assosiasjon; en intern variabel som direkte inneholder en faktisk forekomst kan betraktes som en implementeringstransponering av begrepet aggregering; og til slutt tilsvarer arv direkte ISA-forholdet.

Hvis klassen av objektorienterte språk fra et historisk og teknisk synspunkt kan betraktes som en utvikling av registreringen av prosedyrespråk som C eller Pascal , innebærer det en helt annen tilnærming til programmering, der data typer , ledsaget av deres operasjoner (metoder) blir sentrale. Mye av de betydelige nyhetene i denne tilnærmingen er relatert til begrepene arv , innkapsling eller informasjonsskjuling og polymorfisme .

I UML

UML er en semi-formell grafisk notasjon som lar deg beskrive et system (ikke nødvendigvis programvare) ved å lage en modell basert på begrepene objektorientering. Siden alle faser av livssyklusen til objektorientert programvare bruker lignende konseptuelle verktøy (klasser, assosiasjoner, ISA-relasjoner), kan UML brukes konsekvent i alle faser. Den resulterende enhetlige beskrivelsen har en rekke fordeler:

Nettopp fordi klasser er blant de sentrale verktøyene som lar deg relatere analysemodeller, prosjektmodeller og programvareimplementeringer, har begrepet klasse i UML en mer abstrakt og konseptuell eller generell semantikk enn det gjør i programmeringsspråk. .

Eksempler

Et generisk eksempel på en klasses kildekode i Java er:

// definisjon, brødtekst eller mal for klassen '' ' public class ' '' < class_name > { // attributter eller medlemmer av klassen attributt_type1 < attribute1 > ; ... attributt_typeN < attributeN > ; // standard konstruktør (uten parametere) '' ' public ' '' < store_class_class_name > () { } // konstruktør med parametere '' ' public ' '' < class_name_storcase > ( parameter_type1 param1 , ... , parameter_typeN paramN ) { < attributt1 > = param1 ; ... < attributeN > = paramN ; } // medlemsmetode '' ' public ' '' returtype < metodenavn > ( parameter_type1 param1 , ... , parameter_typeN paramN ) { ... '' statement_block '' ; ... '' ' return ' '' < objekttypemetode > ; } // ikke-medlem metode (statisk) '' ' public static ' '' returtype < metodenavn > ( parameter_type1 param1 , ... , parameter_typeN paramN ) { ... '' statement_block '' ; ... '' ' return ' '' < objekttypemetode > ; } // inngangspunkt for programmet eller utførelsesmetoden '' ' public static ' '' void main ( String [ ] args ) { ... \\ objektforekomst av klasse < class_name > foo = new < class_name > (); \\ kaller konstruktør for å tilordne verdier til attributter til objekt foo . _ < konstruktør > ( bestått_parametere ); \\ kaller eller påkaller medlemsmetoden objekt foo . _ _ < metodenavn > ( bestått_parametere ); ... \\ kalle eller påkalle statisk metode < static_method_name > ( bestått_parametere ); ... } }

Et generisk eksempel på en C # -klassekildekode er:

public class < class_name > { // Attributter eller medlemmer av klassen attribute_type1 < attribute1 >; ... attributt_typeN < attributeN >; // Standard konstruktør som er uten parametere public < class_name > () { } // Konstruktør med parametere public < class_name > ( parameter_type param1 , ... , parameter_type paramN ) { < attribute1 > = param1 ; ... < attributeN > = paramN ; } // Medlemsmetode offentlig returnert_type < metodenavn > ( parameter_type param1 , ... , parameter_type paramN ) { // Metodelogikk ... // Returner retur < objekttypemetode >; } // Statisk metode offentlig statisk returnert_type < metodenavn > ( parameter_type param1 , ... , parameter_type paramN ) { // Metodelogikk ... // Returner retur < objekttypemetode >; } // Inngangspunkt for programmet eller utførelsesmetoden public static void main ( String [] args ) { // Instantiate object of class < class_name > object_name = new < class_name > ( any_param ); // Kalle en medlemsmetode for objektet objektnavn . < Metodenavn > ( hvilken som helst_param ); // Kalle en statisk metode for objektet objektnavn . < Static_method_name > ( hvilken som helst_param ); } }

Relaterte elementer

Andre prosjekter