GRIPE
I objektorientert design står GRASP for General Responsibility Assignment Software Patterns , et akronym for " GRASP (objektorientert design General Responsibility Assignment Software Patterns)". Selv om det anses som mer enn mønstre i seg selv, er de en serie "gode praksiser" av anbefalt applikasjon i programvaredesign.
Informasjonsekspert
Informasjonseksperten GRASP er det grunnleggende prinsippet for tildeling av ansvar. Den forteller oss for eksempel at ansvaret for opprettelsen av et objekt eller implementeringen av en metode må falle på klassen som kjenner all informasjonen som er nødvendig for å lage den. På denne måten vil vi få et design med større kohesjon og dermed forblir informasjonen innkapslet (redusert kobling).
- Problem
- Hva er det generelle prinsippet for å tildele ansvar til objekter?
- Løsning
- Gi informasjonseksperten et ansvar.
- fordeler
- Innkapsling opprettholdes, objekter bruker egen informasjon for å utføre sine oppgaver. Atferden er fordelt på klassene som inneholder nødvendig informasjon. De er lettere å forstå og vedlikeholde.
Skaper
Skapermønsteret hjelper oss med å identifisere hvem som skal være ansvarlig for opprettelsen (eller instansieringen ) av nye objekter eller klasser .
Den nye forekomsten skal opprettes av klassen som:
- Har informasjonen som er nødvendig for å utføre opprettelsen av objektet, eller
- Bruk de opprettede forekomstene av objektet direkte, eller
- Lagrer eller håndterer flere forekomster av klassen
- Inneholder eller legger til klassen.
En av konsekvensene av å bruke dette mønsteret er synligheten mellom den opprettede klassen og skaperklassen. En fordel er lav kobling, som betyr enkel vedlikehold og gjenbruk. Instansering er en av de vanligste aktivitetene i et objektorientert system. Det er derfor nyttig å ha et generelt prinsipp for å tildele skapelsesansvar. Hvis kartlagt godt, kan designet støtte løs kobling, økt klarhet, innkapsling og gjenbruk.
Kontroller
Kontrollermønsteret er et mønster som fungerer som mellomledd mellom et bestemt grensesnitt og algoritmen som implementerer det, på en slik måte at det er den som mottar dataene fra brukeren og den som sender dem til de forskjellige klassene iht. metoden kalt.
Dette mønsteret antyder at forretningslogikk bør skilles fra presentasjonslaget, for å øke kodegjenbruk og samtidig ha mer kontroll.
Det anbefales å dele opp systemhendelser i så mange kontrollere som mulig for å øke kohesjonen og redusere koblingen.
Høy kohesjon og lav kobling
Begrepene kohesjon og kobling er ikke nært beslektet, men det anbefales å ha en høyere grad av kohesjon med en lavere grad av kobling. På denne måten er det mindre avhengighet og formålene til hvert objekt i systemet er spesifisert.
Høy samhørighet
Den forteller oss at informasjonen en klasse lagrer må være konsistent og må (så langt det er mulig) være relatert til klassen.
- Sammenfallende kohesjon : Modulen utfører flere oppgaver, uten noe forhold mellom dem.
- Logisk kohesjon : Modulen utfører flere relaterte oppgaver, men under kjøring vil bare én av dem bli utført.
- Temporal Cohesion : Oppgavene som utføres av en modul har som eneste relasjon "at de skal utføres samtidig".
- Prosedyresammenheng : Det eneste forholdet mellom oppgavene til en modul er at de tilsvarer en sekvens av trinn som er spesifikke for "produktet".
- Kommunikasjonssammenheng : Oppgavene tilsvarer en sekvens av trinn typisk for "produktet" og alle påvirker de samme dataene.
- Informasjonssammenheng : Oppgavene som utføres av en modul har sitt eget utgangspunkt, sin uavhengige koding og arbeider med samme data. Typisk eksempel: OBJEKTER
- Funksjonell kohesjon : Når modulen utfører én og bare én oppgave, med et enkelt mål å oppfylle, sies det å ha funksjonell kohesivitet.
Lav kobling
Det er ideen om å ha klassene så mindre knyttet til hverandre som mulig. På en slik måte at i tilfelle en endring i noen av dem, er det minst mulig innvirkning på resten av klassene, noe som fremmer gjenbruk og reduserer avhengigheten mellom klassene.
- Innholdskobling : Når en modul refererer direkte til innholdet i en annen modul. (På høynivåspråk er det veldig sjeldent)
- Felles kobling : Når to moduler får tilgang til (og påvirker) den samme globale verdien.
- Kontrollkobling : Når en modul sender et kontrollelement til et annet som bestemmer utførelseslogikken.
Polymorfisme
Når du må utføre et typeavhengig ansvar, må du bruke polymorfisme , når alternativene eller relatert atferd varierer etter type (klasse), tilordne ansvaret for atferden - ved hjelp av polymorfe operasjoner - til typene som atferd varierer. Tildel samme navn til tjenester på forskjellige objekter.
Ren produksjon
Ren fabrikasjon forekommer i klasser som ikke representerer en faktisk enhet eller objekt i problemdomenet, men er med vilje opprettet for å redusere kobling, øke kohesjon og/eller forbedre kodegjenbruk. Det er løsningen når designeren kommer over en løs klasse og ikke har noen annen klasse å implementere noen metoder i. Det vil si at det er en "oppfunnet" klasse eller at den ikke eksisterer i problemet, men ved å legge den til forbedres systemet strukturelt. Som en kontraindikasjon bør vi nevne at når man misbruker dette mønsteret, vises vanligvis funksjons- eller algoritmeklasser (som kun har én metode).
Indirektion
Indirektionsmønsteret lar oss senke koblingen mellom to klasser ved å tildele ansvaret for mediering mellom dem til et tredje mellomelement (klasse). For eksempel, i en POS (Point of Sale Terminal) bruk et grensesnitt "Adapter" som, med klassene som utfører det, kan etablere de forskjellige betalingsmetodene.
- Problem
- Hvor skal man tildele ansvar for å unngå/redusere direkte kobling mellom elementer og forbedre gjenbruk?
- Løsning
- Tildel ansvaret til et objekt som formidler mellom elementene.
Beskyttede varianter
Det er det grunnleggende prinsippet for å beskytte deg selv mot endring, på en slik måte at alt vi forutser i en tidligere analyse som er mottakelig for modifikasjoner, vi pakker det inn i et grensesnitt, bruker polymorfisme for å lage flere implementeringer og tillate fremtidige implementeringer, slik at det som forblir minst mulig knyttet til systemet vårt, slik at når variasjonen oppstår, har den minst mulig innvirkning på oss. Det er en del av de avanserte Grasp-mønstrene.
Se også