Konnascens
Connascence ( / k ə ˈ n eɪ s ən s / ) är ett kvalitetsmått för programvara som uppfanns av Meilir Page-Jones för att tillåta resonemang om komplexiteten som orsakas av beroendeförhållanden i objektorienterad design, ungefär som koppling gjorde för strukturerad design . Inom mjukvaruteknik är två komponenter samstämmiga om en förändring i den ena skulle kräva att den andra modifieras för att upprätthålla systemets övergripande korrekthet. Förutom att tillåta kategorisering av beroenderelationer ger connascence även ett system för att jämföra olika typer av beroende. Sådana jämförelser mellan potentiella konstruktioner kan ofta antyda sätt att förbättra kvaliteten på programvaran.
Styrka
En form av konnascens anses vara starkare om det är mer sannolikt att det kräver kompenserande förändringar i konnascenselement. Ju starkare formen av konnascens är, desto svårare och kostsammare är det att förändra elementen i relationen.
Grad
Acceptansen av konnascens är relaterad till graden av dess förekomst. Konnascens kan vara acceptabelt i begränsad grad men oacceptabelt i hög grad. Till exempel anses en funktion eller metod som tar två argument i allmänhet vara acceptabel. Det är dock vanligtvis oacceptabelt att funktioner eller metoder tar tio argument. Element med hög grad av samhörighet medför större svårighetsgrad, och kostnad, för förändring än element som har en lägre grad.
Lokalitet
Lokalitet spelar roll när man analyserar konnascens. Starkare former av konnascens är acceptabla om de inblandade elementen är nära besläktade. Till exempel använder många språk positionsargument när de anropar funktioner eller metoder. Denna samförstånd av position är acceptabel på grund av närheten mellan den som ringer och den som ringer. Att skicka argument till en webbtjänst positionellt är oacceptabelt på grund av parternas relativa släktskap. Samma styrka och grad av konnascens kommer att ha högre svårighetsgrad och kostnad för förändring, ju längre bort de inblandade elementen är.
Typer
Detta är en lista över vissa typer av konnascens ordnade ungefär från svaga till starka former.
Statiska konnascenser
Connascenses sägs vara "statiska" om de kan hittas genom att visuellt undersöka koden.
Connascence of name (CoN)
Konnascens av namn är när flera komponenter måste komma överens om namnet på en enhet. Metodnamn är ett exempel på denna form av konnascens: om namnet på en metod ändras måste anropare av den metoden ändras för att använda det nya namnet.
Connascence of type (CoT)
Konnascens av typ är när flera komponenter måste komma överens om typen av en enhet. I statiskt typade språk är typen av metodargument ett exempel på denna form av konnascens. Om en metod ändrar typen av dess argument från ett heltal till en sträng, måste anropare av den metoden ändras för att skicka ett annat argument än tidigare.
Connascence of meaning (CoM) eller connascence of Convention (CoC)
Konnascens av mening är när flera komponenter måste komma överens om innebörden av särskilda värden. Att returnera heltal 0 och 1 för att representera falskt respektive sant är ett exempel på denna form av konnascens.
Connascence of position (CoP)
Konnascens av position är när flera komponenter måste komma överens om ordningen på värden. Positionsparametrar i metodanrop är ett exempel på denna form av konnascens . Både den som ringer och den som ringer måste komma överens om semantiken för de första, andra, etc. parametrarna.
Konnascens av algoritm (CoA)
Konnascens av algoritm är när flera komponenter måste komma överens om en viss algoritm. Meddelandeautentiseringskoder är ett exempel på denna form av samhörighet. Båda sidor av utbytet måste implementera exakt samma hashalgoritm annars misslyckas autentiseringen.
Dynamisk konnascens
Connascenses sägs vara "dynamiska" om de bara kan upptäckas under körning.
Connascence of execution (CoE)
Konnascens av exekvering är när ordningen för utförande av flera komponenter är viktig.
Connascence of timing (CoT)
Konnascens av timing är när tidpunkten för utförandet av flera komponenter är viktig.
Konnascens av värden (CoV)
Konnascens av värden är när flera värden måste ändras tillsammans.
Connascence of identity (CoI)
Konnascens av identitet är när flera komponenter måste referera till samma enhet.
Minskar konnascens
Att minska konnascens kommer att minska kostnaden för förändring för ett mjukvarusystem. Ett sätt att minska konnascens är att omvandla starka former av connascens till svagare former. Till exempel kan en metod som tar flera argument ändras till att använda namngivna parametrar . Detta skulle ändra konnascensen från CoP till CoN . Att minska graden och öka lokaliseringen av involverade element utgör andra sätt att minska samhörigheten.
- Grand Unified Theory of Software Design, Jim Weirich
- Meilir Page-Jones, Jämföra tekniker med hjälp av inkapsling och konnascens, Communications of the ACM, Volym 35, Issue 9
- Vad varje programmerare bör veta om objektorienterad design, Meilir Page-Jones, Dorset House Publishing, ISBN 0-932633-31-5
- Fundamentals of Object-Oriented Design in UML, Meilir Page-Jones, Addison-Wesley Pub Co; ISBN 0-201-69946-X
- Manuel Rivero; 9 augusti 2018; Connascence: En titt på objektorienterad design i Java