Trennung von Sorgen

In der Informatik ist Trennung von Sorgen (SoC) der Prozess, ein Computerprogramm in verschiedene Eigenschaften zu trennen, die in der Funktionalität so wenig wie möglich überlappen. Eine Sorge ist jedes Stück von Interesse oder Fokus in einem Programm. Gewöhnlich sind Sorgen mit Eigenschaften oder Handlungsweisen synonymisch. Der Fortschritt zu SoC wird durch die Modularität der Programmierung und encapsulation (oder "Durchsichtigkeit" der Operation) mit der Hilfe der Informationsverheimlichung traditionell erreicht. Designs von Layered in Informationssystemen basieren auch häufig auf der Trennung von Sorgen (z.B, Präsentationsschicht, Geschäftslogikschicht, Datenzugriffsschicht, Datenbankschicht).

Durchführung

Alle Programmierparadigmen helfen Entwicklern im Prozess, SoC zu verbessern. Zum Beispiel können objektorientierte Programmiersprachen wie Delphi, C ++, Java, und C# Sorgen in Gegenstände trennen, und ein Designmuster wie MVC kann Inhalt von der Präsentation und Datenverarbeitung (Modell) vom Inhalt trennen.

Dienstorientiertes Design kann Sorgen in Dienstleistungen trennen. Verfahrensprogrammiersprachen wie C und Pascal können Sorgen in Verfahren trennen. Aspekt-orientierte Programmiersprachen können Sorgen in Aspekte und Gegenstände trennen.

Die Trennung von Sorgen ist ein wichtiger Designgrundsatz in vielen anderen Gebieten ebenso, wie städtische Planung, Architektur und Informationsdesign. Die Absicht ist, Systeme zu entwerfen, so dass Funktionen unabhängig von anderen Funktionen optimiert werden können, so dass der Misserfolg einer Funktion andere Funktionen nicht verursacht, zu scheitern, und im Allgemeinen es leichter zu machen, komplizierte voneinander abhängige Systeme zu verstehen, zu entwerfen und zu führen. Allgemeine Beispiele schließen Verwenden-Gänge ein, um Zimmer zu verbinden, anstatt Zimmer offen direkt in einander zu haben, und den Ofen auf einem Stromkreis und die Lichter auf einen anderen zu behalten.

Ursprung

Der Begriff Trennung von Sorgen wurde wahrscheinlich von Edsger W. Dijkstra in seiner 1974-Zeitung "Auf der Rolle des wissenschaftlichen Gedankens" ins Leben gerufen.

Lassen Sie mich versuchen, zu Ihnen zu erklären, was zu meinem Geschmack für das ganze intelligente Denken charakteristisch ist. Es ist, dass man bereit ist, eingehend einen Aspekt von jemandes Gegenstand in der Isolierung wegen seiner eigenen Konsistenz zu studieren, die ganze Zeit wissend, dass man sich nur mit einem der Aspekte beschäftigt. Wir wissen, dass ein Programm richtig sein muss und wir es aus diesem Gesichtspunkt nur studieren können; wir wissen auch, dass es effizient sein sollte und wir seine Leistungsfähigkeit an einem anderen Tag studieren können, sozusagen. In einer anderen Stimmung können wir uns ob, und wenn so fragen: Warum das Programm wünschenswert ist. Aber nichts wird - im Gegenteil gewonnen! - durch das Anpacken dieser verschiedenen Aspekte gleichzeitig. Es ist, was ich manchmal "die Trennung von Sorgen" genannt habe, die, selbst wenn nicht vollkommen möglich, noch die einzige verfügbare Technik für die wirksame Einrichtung von jemandes Gedanken ist, von denen ich weiß. Das ist, was ich "das Richten von jemandes Aufmerksamkeit auf etwas Aspekt" vorhabe: es bedeutet nicht, die anderen Aspekte zu ignorieren, es wird gerade der Tatsache gerecht, die aus dem Gesichtspunkt dieses Aspekts, der andere irrelevant ist. Es ist ein - und vielfach-spurig gesonnen gleichzeitig.

Fünfzehn Jahre später war es offensichtlich, dass der Begriff Trennung von Sorgen eine akzeptierte Idee wurde. 1989 hat Chris Reade ein Buch betitelt "Elemente der Funktionellen Programmierung" geschrieben

das beschreibt Trennung von Sorgen:

Der Programmierer muss mehrere Sachen zur gleichen Zeit, nämlich, machen

1. beschreiben Sie, was geschätzt werden soll;

2. organisieren Sie die Berechnung sequencing in kleine Schritte;

3. organisieren Sie Speichermanagement während der Berechnung.

Reade setzt fort, zu sagen

Ideal sollte der Programmierer im Stande sein, sich auf die erste von den drei Aufgaben zu konzentrieren (das Beschreiben, was geschätzt werden soll), ohne vor den anderen zwei wahnsinnig, Aufgaben administrativer zu sein. Klar ist Regierung wichtig, aber indem wir sie von der Hauptaufgabe trennen, werden wir wahrscheinlich zuverlässigere Ergebnisse bekommen, und wir können das Programmierproblem erleichtern, indem wir viel von der Regierung automatisieren.

Die Trennung von Sorgen ist im Vorteil ebenso. Zum Beispiel wird Programm, das sich erweist, viel mehr ausführbar, wenn Details von sequencing und Speichermanagement aus dem Programm fehlen. Außerdem sollten Beschreibungen dessen, was geschätzt werden soll, frei von solchen ausführlichen schrittweisen Beschreibungen dessen sein, wie man es tut, wenn sie mit verschiedenen Maschinenarchitekturen bewertet werden sollen. Folgen von kleinen Änderungen zu einem in einem Laden gehaltenen Datengegenstand können eine unpassende Beschreibung dessen sein, wie man etwas schätzt, wenn eine hoch parallele Maschine mit Tausenden von Verarbeitern verwendet wird, die überall in der Maschine und den lokalen aber nicht globalen Lagerungsmöglichkeiten verteilt sind.

Das Automatisieren der Verwaltungsaspekte bedeutet, dass sich die Sprache implementor mit ihnen befassen muss, aber er/sie hat viel mehr Gelegenheit, von sehr verschiedenen Berechnungsmechanismen mit verschiedenen Maschinenarchitekturen Gebrauch zu machen.

Beispiele

Internetprotokoll-Stapel

Die Trennung von Sorgen ist für das Design des Internets entscheidend. Im Internetprotokoll-Gefolge sind große Anstrengungen gemacht worden, Sorgen in bestimmte Schichten zu trennen. Das erlaubt Protokoll-Entwerfern, sich auf die Sorgen in einer Schicht zu konzentrieren, und die anderen Schichten zu ignorieren. Der Anwendungsschicht-Protokoll-SMTP ist zum Beispiel um alle Details besorgt, eine E-Mail-Sitzung über einen zuverlässigen Transportdienst (gewöhnlich TCP), aber nicht das am wenigsten betroffene darum zu führen, wie der Transportdienst diesen Dienst zuverlässig macht. Ähnlich ist TCP um die Routenplanung von Datenpaketen nicht besorgt, die an der Internetschicht behandelt wird.

HTML, CSS und JavaScript

Preiserhöhungssprache von HyperText (HTML), Cascading Style Sheets (CSS) und JavaScript (JS) ist Ergänzungssprachen, die in der Entwicklung von webpages und Websites verwendet sind. HTML wird für die Organisation des webpage Inhalts hauptsächlich verwendet, CSS wird für die Definition des zufriedenen Präsentationsstils verwendet, und JS definiert, wie der Inhalt aufeinander wirkt und sich mit dem Benutzer benimmt. Historisch war das nicht der Fall dennoch. Vor der Einführung von CSS hat HTML beide Aufgaben durchgeführt, Semantik und Stil zu definieren.

Thema-orientierte Programmierung

Thema-orientierte Programmierung erlaubt getrennten Sorgen, gerichtet zu werden, weil getrennte Software, jeder auf einem gleichen Stand mit anderen baut. Jede Sorge stellt seine eigene Klassenstruktur zur Verfügung, in die die Gegenstände gemeinsam organisiert werden, und Staat und Methoden zum zerlegbaren Ergebnis beiträgt, wo sie über einander schneiden. Ähnlichkeitsregeln beschreiben, wie die Klassen und Methoden in den verschiedenen Sorgen mit einander an Punkten verbunden sind, wo sie aufeinander wirken, zerlegbares Verhalten für eine Methode erlaubend, aus mehreren Sorgen abgeleitet zu werden. Die mehrdimensionale Trennung von Sorgen erlaubt der Analyse und Zusammensetzung von Sorgen, als eine mehrdimensionale "Matrix" manipuliert zu werden, in der jede Sorge eine Dimension zur Verfügung stellt, in der verschiedene Punkte der Wahl mit den Zellen der durch die passenden Softwarekunsterzeugnisse besetzten Matrix aufgezählt werden.

Aspekt-orientierte Programmierung

Aspekt-orientierte Programmierung erlaubt Querschneiden-Sorgen, als sekundäre Sorgen gerichtet zu werden. Zum Beispiel verlangen die meisten Programme eine Form der Sicherheit und Protokollierung. Sicherheit und Protokollierung sind häufig sekundäre Sorgen, wohingegen die primäre Sorge häufig auf der Vollendung von Unternehmenszielen ist. Jedoch, wenn man ein Programm entwirft, muss seine Sicherheit ins Design vom Anfang eingebaut werden, anstatt als eine sekundäre Sorge behandelt zu werden. Die Verwendung der Sicherheit läuft später häufig auf ein ungenügendes Sicherheitsmodell hinaus, das zu viele Lücken für zukünftige Angriffe verlässt.

Software baut Automation

Die meisten Projektorganisationsaufgaben werden als sekundäre Aufgaben gesehen. Bauen Sie zum Beispiel Automation ist eine Annäherung an das Automatisieren des Prozesses, Quellcode in den binären Code zu kompilieren. Die primären Absichten darin bauen Automation reduzieren die Gefahr des menschlichen Fehlers und sparen Zeit.

Normalisierte Systeme

In der Normalisierten Systemtrennung von Sorgen ist eine der vier Richtlinien. Das Haften an diesem Grundsatz ist eines der Werkzeuge, das hilft, die kombinatorischen Effekten zu reduzieren, die mit der Zeit in der Software eingeführt werden, die aufrechterhalten wird. In der Normalisierten Systemtrennung von Sorgen wird durch die Werkzeuge aktiv unterstützt.

SoC über teilweise Klassen

Die Trennung von Sorgen kann durchgeführt und über teilweise Klassen beachtet werden.

SoC über teilweise Klassen in C#

Die folgende Bärenklasse, die in C# geschrieben ist, ließ verschiedene Aspekte in verschiedenen Teilen durchführen.

Bear_Hunting.cs:

öffentlicher teilweiser Klassenbär

{\

privater IEdible Hunt

{\

//Rückessen...

}\

}\</Quelle>

Bear_Eating.cs:

öffentlicher teilweiser Klassenbär{\

private interne Nummer Isst (IEdible Essen)

{\

geben Sie Essen zurück. Nahrung. Wert;

}\}\</Quelle>

Bear_Hunger.cs:

öffentlicher teilweiser Klassenbär{\

privater int Hunger;

öffentlicher leerer MonitorHunger

{\

//Hier können wir uns auf Mitglieder der anderen teilweisen Definitionen beziehen

wenn (Hunger> 50)

Hunger - = das. Essen Sie (das. Jagd );

}\}\</Quelle>

Zum Beispiel, wenn wir eine Version ohne Unterstützung für das Hungermanagement kompilieren wollen (es konnte eine Eigenschaft sein, die zusätzlich für Ihre Kunden kostet), entfernen wir einfach die teilweise Behauptung in Bear_Hunger.cs.

Jetzt, wenn ein Programm auch Hungermanagement in anderen Klassen unterstützt hat, konnten alle jene teilweisen Klassendefinitionen in ein getrenntes 'Hunger'-Verzeichnis hineingehen. Das ist, was gewöhnlich mehrdimensionale Trennung von Sorgen genannt wird, und sie Programmierern hilft, den Code zu aktualisieren und neue Eigenschaften sogar das erste Mal hinzuzufügen, als jeder angefangen hat, mit diesem Code zu arbeiten.

SoC über teilweise Klassen in Ruby

bear_hunting.rb

Klassenbär

def jagen

# TODO: Geben Sie etwas Essen zurück

Ende

Ende

</Quelle>

bear_eating.rb

Klassenbär

def essen (Essen)

erheben Sie "# {Essen} ist nicht essbar!" wenn Essen respond_to?: nutrition_value

Essen nutrition_value

Ende

Ende

</Quelle>

bear_hunger.rb

Klassenbär

attr_accessor: Hunger

def monitor_hunger

wenn @hunger> 50 dann

@hunger - = self.eat (self.hunt)

Ende

EndeEnde</Quelle>

Siehe auch

  • Abstraktionsgrundsatz, (programmierend)
Aspekt-orientierte Softwareentwicklung Sorge (Informatik)
  • Kernsorge
  • Querschneiden-Sorge
  • Holismus
  • Moduldesign
  • Modulprogrammierung
  • Trennung der Präsentation und des Inhalts
  • Kopplung (Informatik)

Externe Verweise


Kernsorge / Bush des Hirten
Impressum & Datenschutz