Separering av oro
Internet protocol stackEdit
separering av oro är avgörande för utformningen av Internet. I Internet Protocol Suite har stora ansträngningar gjorts för att separera problem i väldefinierade lager. Detta gör det möjligt för protokolldesigners att fokusera på problemen i ett lager och ignorera de andra lagren. Application Layer protocol SMTP är till exempel oroad över alla detaljer för att genomföra en e-postsession över en pålitlig transporttjänst (vanligtvis TCP), men inte minst oroad över hur transporttjänsten gör den tjänsten pålitlig. På samma sätt är TCP inte oroad över routing av datapaket, som hanteras på Internetlagret.
HTML, CSS, JavaScript
HyperText Markup Language (HTML), Cascading Style Sheets (CSS) och JavaScript (JS) är kompletterande språk som används i utvecklingen av webbsidor och webbplatser. HTML används främst för organisering av webbsidans innehåll, CSS används för definition av innehållspresentationsstil och JS definierar hur innehållet interagerar och beter sig med användaren. Historiskt var detta inte fallet: före introduktionen av CSS utförde HTML båda uppgifterna för att definiera semantik och stil.
Ämnesorienterad programmeringredigera
Ämnesorienterad programmering gör det möjligt att ta itu med separata problem som separata programvarukonstruktioner, var och en på lika villkor med de andra. Varje angelägenhet ger sin egen klassstruktur i vilken de gemensamma föremålen är organiserade och bidrar med tillstånd och metoder till det sammansatta resultatet där de skär över varandra. Korrespondensregler beskriver hur klasserna och metoderna i de olika bekymmerna är relaterade till varandra vid punkter där de interagerar, vilket gör att sammansatt beteende för en metod kan härledas från flera problem. Multidimensionell Separation av oro gör att analys och sammansättning av oro kan manipuleras som en flerdimensionell ”matris” där varje oro ger en dimension där olika valpunkter räknas upp, med cellerna i matrisen upptagna av lämpliga mjukvaruartefakter.
Aspektorienterad programmeringredigera
Aspektorienterad programmering gör det möjligt att ta itu med övergripande problem som primära problem. Till exempel kräver de flesta program någon form av säkerhet och loggning. Säkerhet och loggning är ofta sekundära problem, medan det främsta problemet ofta är att uppnå affärsmål. Men när man utformar ett program måste dess säkerhet byggas in i designen från början istället för att behandlas som ett sekundärt problem. Att tillämpa säkerhet efteråt resulterar ofta i en otillräcklig säkerhetsmodell som lämnar för många luckor för framtida attacker. Detta kan lösas med aspektorienterad programmering. Till exempel kan en aspekt skrivas för att genomdriva att samtal till ett visst API alltid loggas, eller att fel alltid loggas när ett undantag kastas, oavsett om programmets procedurkod hanterar undantaget eller sprider det.
analysnivåer i artificiell intelligenseedit
i kognitiv vetenskap och artificiell intelligens är det vanligt att hänvisa till David Marrs analysnivåer. Vid varje given tidpunkt kan en forskare fokusera på (1) Vad någon aspekt av intelligens behöver beräkna, (2) vilken algoritm den använder, eller (3) Hur den algoritmen implementeras i hårdvara. Denna separation av problem liknar skillnaden mellan gränssnitt och implementering inom mjukvaru-och hårdvaruteknik.
normaliserat systemredigera
i normaliserade system är separering av problem en av de fyra vägledande principerna. Att följa denna princip är ett av verktygen som hjälper till att minska de kombinatoriska effekterna som med tiden introduceras i programvara som underhålls. I normaliserade system stöds separering av problem aktivt av verktygen.
SoC via partiell classesEdit
separering av problem kan implementeras och verkställas via partiella klasser.
SoC via partiella klasser i RubyEdit
bear_hunting.rb
class Bear def hunt forest.select(&:food?) endend
bear_eating.rb