Separacja obaw
protokół internetowy stackEdit
separacja obaw ma kluczowe znaczenie dla projektowania Internetu. W pakiecie Internet Protocol Suite dołożono wszelkich starań, aby rozdzielić obawy na dobrze zdefiniowane warstwy. Pozwala to projektantom protokołów skupić się na problemach w jednej warstwie i ignorować inne warstwy. Protokół warstwy aplikacji SMTP, na przykład, jest zaniepokojony wszystkimi szczegółami prowadzenia sesji e-mail w ramach niezawodnej usługi transportowej (Zwykle TCP), ale nie w najmniejszym stopniu zaniepokojony tym, w jaki sposób usługa transportowa sprawia, że usługa ta jest niezawodna. Podobnie, TCP nie jest zaniepokojony routingiem pakietów danych, który jest obsługiwany w warstwie internetowej.
HTML, CSS, JavaScriptEdit
HyperText Markup Language (HTML), kaskadowe arkusze stylów (CSS) i JavaScript (JS) są komplementarnymi językami używanymi w tworzeniu stron internetowych i stron internetowych. HTML jest używany głównie do organizacji zawartości strony internetowej, CSS jest używany do definicji stylu prezentacji treści, a JS określa, w jaki sposób zawartość wchodzi w interakcje i zachowuje się z użytkownikiem. Historycznie tak nie było: przed wprowadzeniem CSS HTML wykonywał zarówno obowiązki definiowania semantyki, jak i stylu.
programowanie zorientowane Tematyczneedit
programowanie zorientowane tematycznie pozwala na zajęcie się odrębnymi kwestiami jako oddzielnymi konstrukcjami oprogramowania, każdy na równi z innymi. Każda troska zapewnia własną strukturę klasową, w której wspólne obiekty są zorganizowane, i przyczynia się do stanu i metod złożonego wyniku, w którym przecinają się nawzajem. Reguły korespondencji opisują, w jaki sposób klasy i metody w różnych problemach są ze sobą powiązane w punktach, w których wchodzą w interakcje, pozwalając na złożone zachowanie metody na wyprowadzenie z kilku problemów. Wielowymiarowa separacja obaw pozwala na manipulowanie analizą i składem obaw jako wielowymiarową „matrycą”, w której każda troska zapewnia wymiar, w którym różne punkty wyboru są wyliczane, z komórkami matrycy zajmowanymi przez odpowiednie artefakty oprogramowania.
programowanie zorientowane na Aspektyedit
programowanie zorientowane na aspekty pozwala na uwzględnienie przekrojowych problemów jako podstawowych problemów. Na przykład większość programów wymaga pewnej formy bezpieczeństwa i logowania. Bezpieczeństwo i rejestrowanie danych są często drugorzędnymi problemami, podczas gdy głównym problemem jest często osiąganie celów biznesowych. Jednak podczas projektowania programu, jego bezpieczeństwo musi być wbudowane w projekt od samego początku, zamiast być traktowane jako problem drugorzędny. Późniejsze stosowanie zabezpieczeń często skutkuje niewystarczającym modelem bezpieczeństwa, który pozostawia zbyt wiele luk dla przyszłych ataków. Można to rozwiązać za pomocą programowania aspektowego. Na przykład, aspekt może zostać napisany w celu wymuszenia, że wywołania do określonego API są zawsze rejestrowane lub że błędy są zawsze rejestrowane, gdy wyjątek jest wyrzucany, niezależnie od tego, czy kod proceduralny programu obsługuje wyjątek, czy go propaguje.
poziomy analizy w sztucznej inteligencjiedit
w kognitywistyce i sztucznej inteligencji powszechne jest odwoływanie się do poziomów analizy Davida Marra. W dowolnym momencie badacz może skupiać się na (1) co jakiś aspekt inteligencji musi obliczyć, (2) Jaki algorytm zatrudnia, lub (3) Jak algorytm ten jest realizowany w sprzęcie. Ten podział problemów jest podobny do rozróżnienia interfejsu / implementacji w inżynierii oprogramowania i sprzętu.
Systemy Znormalizowaneedit
w systemach znormalizowanych separacja problemów jest jedną z czterech głównych zasad. Przestrzeganie tej zasady jest jednym z narzędzi, które pomaga zmniejszyć efekty kombinatoryczne, które z czasem zostają wprowadzone do oprogramowania, które jest utrzymywane. W znormalizowanych systemach separacja problemów jest aktywnie wspierana przez narzędzia.
SoC poprzez klasy częścioweedit
separacja problemów może być zaimplementowana i wymuszona poprzez klasy częściowe.
SoC poprzez częściowe klasy w RubyEdit
bear_hunting.rb
class Bear def hunt forest.select(&:food?) endend
rb