GRASP ( Engelsk generel ansvarsopdeling software mønstre - generelle mønstre for fordeling af ansvar; der er også det engelske ord "grasp" - "kontrol, gribe" ) - mønstre, der bruges i objektorienteret design til at løse generelle opgaver med at tildele ansvar til klasser og genstande .
Craig Larmans bog Applying UML and Design Patterns [ 1] beskriver 9 sådanne mønstre: hver hjælper med at løse et eller andet problem, der opstår både i objektorienteret analyse og i næsten ethvert softwareudviklingsprojekt . Således er "GRASP"-mønstrene veldokumenterede, standardiserede og tidstestede principper for objektorienteret analyse , og ikke et forsøg på at bringe noget fundamentalt nyt.
Kort beskrivelse af de ni mønstre:
Skabelonen definerer det grundlæggende princip for ansvarsfordeling:
Ansvaret bør tildeles den, der ejer det maksimale af de nødvendige oplysninger til udførelse - informationseksperten .
Dette mønster er det mest åbenlyse og vigtige af de ni. Tager man ikke højde for det, får man spaghettikode , som er svær at forstå.
Lokalisering af ansvar, udført i henhold til skabelonen:
Problem: Hvem er ansvarlig for at skabe et objekt af en eller anden klasse A?
Løsning: Giv klasse B ansvaret for at skabe objekter i klasse A, hvis klasse B:
Vi kan sige, at " Creator "-mønsteret er en fortolkning af " Information Expert "-mønsteret (se punkt #1) i forbindelse med objektskabelse.
De fleste generative designmønstre stammer fra eller er afhængige af " Creator "-mønsteret på den ene eller anden måde.
" Degree of engagement" er et mål for kontinuiteten af et element fra andre elementer (eller et mål for de data, det har om dem).
" Svagt" engagement er en evalueringsmodel, der dikterer, hvordan man fordeler det ansvar, der skal opretholdes.
" Svag" kobling - fordeling af ansvar og data, der sikrer klassernes gensidige uafhængighed. Klasse med "svag" kobling:
Høj klasse samhørighed er en værdimodel, der har til formål at holde objekter korrekt fokuseret, håndterbare og forståelige. Høj sammenhængskraft bruges generelt til at opretholde lavt engagement. Høj tilslutning betyder, at elementets ansvar er tæt forbundet og fokuseret. At opdele programmer i klasser og undersystemer er et eksempel på en aktivitet, der øger sammenhængen i et system.
Omvendt er lav forbindelse, når et givet element har for mange urelaterede ansvarsområder. Elementer med lav forbindelse lider ofte under at være svære at forstå, svære at bruge, svære at vedligeholde.
En klasses sammenhængskraft er et mål for fokus på fagområderne for dens metoder:
Systemets enhed og opførsel:
Eksempel: Tilpasning af et kommercielt system til en række skatteregnskabssystemer kan leveres via den eksterne grænseflade af adapterobjekter (se også: Skabelon " Adaptere ").
Ikke specifikt for fagområdet , men:
" Pen Fabrication " afspejler konceptet for tjenester i den domænespecifikke designmodel .
Opgaveeksempel: Uden at bruge midlerne til klasse "A", tilføje sine objekter til databasen .
Løsning: Opret klasse "B" for at optage objekter af klasse "A" (se også: " Data Access Object ").
Svagt engagement mellem elementerne i systemet (og muligheden for genbrug) sikres ved at udpege et mellemobjekt som deres mellemled .
Eksempel: I Model-View-Controller- arkitekturen svækker controlleren ( eng. controller) engagementet af data (eng. model) med deres præsentation (eng. view) .
Skabelonen beskytter elementer mod at blive ændret af andre elementer (objekter eller undersystemer) ved at gøre interaktion til en fast grænseflade, hvorigennem (og kun gennem hvilken) interaktion mellem elementer er mulig. Adfærd kan kun ændres ved at skabe en anden implementering af grænsefladen.