Frage

Objektorientiertes Design (OOD) kombiniert Daten und ihre Methoden. Dies, soweit ich sehen kann, zwei große Dinge erreicht: es bietet Verkapselung (so es ist mir egal, welche Daten es gibt, nur, wie ich Werte bekommen ich will) und Semantik (es bezieht sich die Daten zusammen mit Namen und ihre Methoden konsequent die Daten verwenden, wie ursprünglich beabsichtigt).

So, wo OOD Stärke liegen? In constrast, funktionalen Programmierattribute den Reichtum an die Verben, anstatt die Substantive und so sowohl Einkapselung und Semantik werden durch die Verfahren eher als die Datenstrukturen zur Verfügung gestellt.

ich mit einem System arbeiten, das auf dem funktionalen Ende des Spektrums ist, und immer wieder lange für die Semantik und die Verkapselung von OO. Aber ich kann sehen, dass OO der Verkapselung ein Hindernis für die flexible Erweiterung eines Objekts sein kann. Also im Moment kann ich die Semantik als eine größere Stärke sehen.

Oder ist Kapselung der Schlüssel zu allen lohnt Code?

Edit: Ich meine speziell die Art der Verkapselung OO hier zur Verfügung stellt. changeColor(door,blue) wird door.changeColor(blue).

War es hilfreich?

Lösung

Sie scheinen eine ziemlich enge Definition, werden mit „Encapsulation.“ Wurde ich richtig sein in der Annahme, dass Sie Verkapselung definieren zu sein „Daten mit Methoden Kombination?“

Wenn ich falsch bin dann bitte den Rest dieser Post ignorieren.

Die Einkapselung ist kein loser Begriff; in der Tat ist es von der International Organization for Standardization definiert. Die ISOs Referenzmodell von Open Distributed Processing - definiert die folgenden fünf Konzepte:

Entity. Jede konkrete oder abstrakte Sache von Interesse

Objekt: Ein Modell eines Unternehmens. Eine Aufgabe ist gekennzeichnet durch sein Verhalten und dually durch seinen Zustand.

Verhalten (ein Objekt). Eine Sammlung von Aktionen mit einer Reihe von Einschränkungen auf, wenn sie auftreten können,

Schnittstelle. Eine Abstraktion des Verhaltens eines Objekts, das zusammen von einer Teilmenge der Wechselwirkungen dieses Objekts besteht mit einer Reihe von Einschränkungen auf, wenn sie auftreten können,

Encapsulation:. Die Eigenschaft, dass die Informationen, die in einem Objekt enthalten nur durch Wechselwirkungen an den unterstützten Schnittstellen durch das Objekt zugänglich ist

Wir können weiterhin einen selbstverständlichen Vorschlag machen: da einige Informationen über diese Schnittstellen zugänglich sind, müssen einige Informationen versteckt und innerhalb des Objekts unzugänglich werden. Die Eigenschaft dieser Informationen Exponate Information Hiding genannt, die Parnas definiert mit dem Argument, dass die Module sollten sowohl schwierige Entscheidungen und Entscheidungen verstecken gestaltet werden, dass wahrscheinlich zu ändern, finden Sie eines der großen Rechen Papiere:

http://www.cs.umd.edu/ Klasse / spring2003 / cmsc838p / Design / criteria.pdf

Es ist wichtig zu beachten, dass es nicht nur die Daten, die Informationen versteckt ist. Es ist eine Teilmenge von Verhalten mit dem Objekt verbunden, die schwierig oder wahrscheinlich ist, ändern

In Ihrem Beitrag, Sie scheinen zu sagen, dass der Unterschied zwischen Verkapselung in OO und in der funktionalen Programmierung von Datenmanagement stammt, aber zumindest nach der ISO und Parnas, Datenmanagement ist nicht der Schlüssel zur Verkapselung. Also ich sehe nicht, warum Verkapselung in der funktionalen Programmierung von dem in OO anders sein muss.

Sie erwähnen, ferner in Ihrem Beitrag, dass die funktionale Programmierung Einkapselung bietet, „... durch die Methoden, anstatt die Datenstrukturen.“ Das, glaube ich, ein Unterschied von Maßstab ist nicht die absoluten. Wenn ich das Wort „Objekt“ und nicht als „Datenstruktur“ (wieder, lass es mich wissen, wenn ich falsch interpretiert), dann scheinen Sie Bedeutung in OO der Verkapselung von Objekt zu finden und funktionale Programmierung der Verkapselung durch Verfahren.

Doch durch die ISO-Definition oben, ist ein Ziel, was ich modellieren möchte. So können Klassen in einem Paket gekapselt werden, so lange, wie einige dieser Klassen zu dem Paket der Schnittstelle beitragen (das heißt die Öffentlichen Klassen des Pakets) und einige sind Informationen versteckt (die privaten Klassen im Paket).

Aus dem gleichen Grund sind Methoden innerhalb einer Klasse gekapselt - einige Methoden öffentlichen und privaten einige zu sein. Sie können dies auch nehmen eine Kerbe niedriger und sagen, dass McCabian sequentielle Codesequenzen sind innerhalb von Methoden eingekapselt. Jeder bildet eine graphische Darstellung von Knoten innerhalb eingekapselte Bereiche eingekapselt ist; und all diese Graphen bilden einen Graphen Stapel. Somit funktionale Programmierung gut an der Funktion / Dateiebene verkapselt kann, aber dies ist nicht von der Methode / Klasse Graph von OO, und im wesentlichen kein Unterschied aus dem Klasse / Paket Graph von OO entweder.

Beachten Sie auch, dass Wort Parnas oben verwendet: Veränderung. Information Hiding betrifft mögliche Ereignisse, wie zum Beispiel der Veränderung der schwierigen Design-Entscheidungen in der Zukunft. Sie fragen, wo OO Stärke der Lüge; gut, Verkapselung ist sicherlich eine Stärke von OO, aber die Frage ist dann: „Wo tut Verkapselung Stärke liegen?“ und die Antwort ist eine der schlagenden Klarheit: change Management. Insbesondere reduziert die Verkapselung die maximale mögliche Belastung des Wandels.

Das Konzept der „Potential Kopplung“ ist hier nützlich.

„Kopplung“ selbst ist definiert als „ein Maß für die Stärke des Zusammenhangs durch eine Verbindung von einem Modul zum anderem etabliert“, in einem anderen Computing großer Papiere:

http://www.research.ibm.com/journal/ sj / 382 / stevens.pdf

Und wie das Papier sagt, in Worten nie da übertroffen, „Minimieren Verbindungen zwischen den Modulen minimiert auch die Wege, die Änderungen und Fehler propagieren in andere Teile des Systems, so dass die Beseitigung katastrophal‚Ripple‘Effekte, bei denen Veränderungen in ein Teil verursachen Fehler in einem anderen, erfordert anderswo zusätzliche Änderungen, entstehen neue Fehler geben, etc.“

Wie hier definiert, jedoch gibt es zwei Einschränkungen, die leicht angehoben werden können. Erstens ist Kopplung nicht intra-Modulverbindungen messen, und diese intra-Modul-Verbindungen können zu ebenso viele geben „Ripple“ Effekte als Zwischenmodulverbindungen (das Papier nicht definiert, „Kohäsion“ intra-Modul beziehen Elemente, aber dies ist nicht definiert im Hinblick auf den Verbindungen zwischen den Elementen (dh Verweise auf Etiketten oder Adressen), mit der Kupplung definiert wurde). Zweitens ist die Kopplung von jedem Computerprogramm eines bestimmten, in dieser Module angeschlossen ist, oder; gibt es wenig Spielraum innerhalb der Definition der Kupplung die möglichen Veränderungen, von denen Parnas spricht.

verwalten

Diese beiden Probleme werden gelöst, bis zu einem gewissen Grad, mit dem Begriff der potentiellen Kopplung: die maximal möglichen Anzahl von Verbindungen formbar unter allen Elementen eines Programm. In Java, zum Beispiel, die eine Klasse Paket-privaten (die Standard-Zugriffs) in einem Paket nicht haben darauf ausgebildeten Verbindungen (dh keine äußeren Klassen davon abhängen können, Reflexion ungeachtet), aber eine öffentliche Klasse in einem Paket kann Abhängigkeiten darauf. Diese öffentliche Klasse der möglichen Kopplung beitragen würde, auch wenn keine andere Klassen davon abhängen zur Zeit -. Klassen auf sie in Zukunft abhängen könnten, wenn die Design-Änderungen

Zur Verkapselung Stärke, betrachtet das Prinzip der Belastung zu sehen. Das Prinzip der Belastung nimmt zwei Formen an.

Die starke Form besagt, dass die Last eine Sammlung von Entitäten der Transformation transformiert eine Funktion der Anzahl der Einheiten ist. Die schwache Form besagt, dass die maximal mögliche Belastung durch eine Sammlung von Entitäten Transformation transformierten eine Funktion der maximal möglichen Anzahl von Einheiten ist.

Die Last der Erstellung oder jedes Software-System zu modifizieren ist eine Funktion der Anzahl der Klassen erstellt oder geändert (hier verwenden wir, „Klassen“ ein OO-System vorausgesetzt, und befassen sich mit Verkapselung in der Klasse / Package-Ebene, wir ebenso kann sie mit der Funktion / Dateiebene der funktionalen Programmierung) betroffen. (Beachten Sie, dass die „Burden“ sind moderne Software-Entwicklung ist in der Regel Kosten oder Zeit oder beides.) Klassen, die auf einem bestimmten, modifizierten Klasse abhängen haben eine höhere Wahrscheinlichkeit als Klassen beeinflusst werden, die nicht auf der modifizierten Klasse ab.

Die maximale mögliche Belastung eine modifizierte Klasse verhängen kann, ist der Anprall aller Klassen, die davon abhängig ist.

die Abhängigkeiten Reduzierung auf einer modifizierten Klasse verringert daher die Wahrscheinlichkeit, dass seine Update andere Klassen auswirken werden und reduziert so die maximale mögliche Belastung, die diese Klasse durchsetzen kann. (Dies ist wenig mehr als eine Neuformulierung des „Structured Design“, Papier).

Die Reduzierung die maximal mögliche Anzahl von Abhängigkeiten zwischen allen Klassen in einem System reduziert somit die Wahrscheinlichkeit, dass ein Aufprall auf eine bestimmte Klasse Updates zu anderen Klassen führt, und reduziert somit die maximal mögliche Belastung aller Updates.

Encapsulation, indem die maximale mögliche Anzahl von depe reduzierenndencies zwischen allen Klassen mildert daher die schwache Form des Prinzips der Burden. Dies alles wird abgedeckt durch „Encapsulation Theorie“, die mathematisch versuchen, solche Behauptungen zu beweisen, indem mögliche Kopplung als die logischen mittels ein Programm zu strukturieren.

Beachten Sie jedoch, dass, wenn Sie fragen, „Ist Verkapselung der Schlüssel zu allen lohnt Code“ die Antwort muss sicher: nein. Es gibt keinen einzigen Schlüssel zu allen lohnt Code. Die Einkapselung ist, unter bestimmten Umständen nur ein Werkzeug, um die Qualität des Codes zu verbessern, so dass es möglicherweise werden „lohnenswert.“

Sie schreiben auch, dass „... Verkapselung kann ein Hindernis für die flexible Erweiterung eines Objekts sein.“ Ja, es sicherlich kann: es in der Tat ein Hindernis sein gegen die Erweiterung der Design-Entscheidungen eines Objekts, die schwierig gestaltet wird oder wahrscheinlich wechseln. Dies ist jedoch nicht gedacht, eine schlechte Sache zu sein. Ein alternativer Ansatz wäre es, alle Klassen der Öffentlichkeit zu haben und hat ein Programm, ihre maximale Potenzial Kopplung auszudrücken; aber dann die schwache Form des Prinzips der Burden besagt, dass Updates immer teurer werden wird; das sind die Kosten, gegen die Hindernisse für die Erweiterung gemessen werden.

Schließlich Sie den interessanten Vergleich zwischen Verkapselung und Semantik machen, und das, Ihrer Meinung nach, OO Semantik ist seine größere Festigkeit. Ich bin kein semanticist entweder (ich wusste nicht einmal, ein solches Wort, bevor das gute existierte Herr Ramsey in seinem Kommentar darauf hingewiesen), aber ich nehme an, Sie meinen, „Semantics“ im Sinne von „die Bedeutung, oder eine Interpretation der Bedeutung, ein Wort „, und sehr grundsätzlich, dass eine Klasse mit a, wuff () -Methode einem Hund genannt werden sollte.

Es gibt große Stärke in der Tat in dieser Semantik.

Was ist für mich neugierig ist, dass man Semantik gegen Verkapselung Grube und für einen Gewinner aussehen; Ich bezweifle, werden Sie finden.

Meiner Meinung nach gibt es zwei Kräfte, die Verkapselung motivieren. Die semantischen und die logischen

Semantic Verkapselung bedeutet lediglich Verkapselung auf der Bedeutung des Knoten basiert (den allgemeinen Begriff zu verwenden) eingekapselt. Also, wenn ich Ihnen sagen, dass ich zwei Pakete haben, ein genannt, ‚Tier‘ und eine namens ‚Mineral‘, und dann geben Sie drei Klassen Hund, Katze und Ziege und fragen, in die Pakete, die diese Klassen eingekapselt werden sollte, dann, gegeben keine andere Informationen, würden Sie vollkommen Recht zu behaupten, dass die Semantik des Systems würde vorschlagen, dass die drei Klassen innerhalb des, Pakets ‚Tier‘ eingekapselt werden, anstatt die ‚Mineral.‘

Die andere Motivation für die Einkapselung ist jedoch Logik und insbesondere die Untersuchung der möglichen Kopplung, wie oben erwähnt. Encapsulation Theorie tatsächlich liefert Gleichungen für die Anzahl der Pakete, die verwendet werden sollen, eine Reihe von Klassen, um zu kapseln die potentielle Kopplung zu minimieren.

Für mich Verkapselung als Ganze ist der Kompromiss zwischen diesem semantischen und logischen Ansatz: Ich würde die mögliche Kopplung meiner Programme erlaubt über dem Minimum zu steigen, wenn dies das Programm macht semantisch leichter zu verstehen; aber enorm und verschwenderisch Potentialniveau Kopplung wird eine Warnung, dass mein Programm muss neu strukturiert werden, egal wie semantisch offensichtlich es ist.

(Und wenn der gute Herr Ramsey noch liest, könnten Sie oder Ihre semanticist Freunde geben mir ein besseres Wort für den „Semantics“ Phase verwende ich hier? Es wäre gut, einen angemesseneren Begriff zu verwenden. )

Viele Grüße, Ed.

Andere Tipps

Die Verkapselung und die resultierende Abstraktion sind eindeutig die Hauptstärken von OO. Die „Dinge“ Prädikat was „Aktionen“ kann auf sie aufgerufen werden, so Substantive auf einer höheren semantischen Bedeutung eingenommen haben, als Verben.

Schließlich ist es schwer, ohne ein gewisses Maß an Verkapselung der Gestaltung eines komplexen Systems in einem einheitlichen und wartbar Form vorzustellen.

Als Lisp Programmierer, deren Objektsystem wohl keines von beiden sieht, sage ich:. Keines der oben genannten

jwz:. "Das pseudo-Smalltalk Objektmodell verliert und dass generische Funktionen (in geeigneter Weise eingeschränkt durch die nicht-external-Überschreibungen Regel) win"

Ich denke, die wünschenswerte Eigenschaften, die Sie und andere hier aufzulisten (Kapselung, Modularität, etc.) sind nicht als inhärent in OO, wie Sie denken. Sie sind oft neben Java-Stil OO zur Verfügung gestellt, aber nicht rein die Folge davon.

Isolierung Komplexität ist IMO das Hauptziel jedes Design. Funktionalität hinter einer Schnittstelle Einkapselung, die ist einfacher zu bedienen als die Funktionalität selbst

OO bietet verschiedene Mechanismen für das - die beiden oyu Erwähnung:

Encapsulation können Sie eine benutzerdefinierte Oberfläche entwerfen, die unabhängig von der tatsächlichen Implementierung ist. (Zu umschreiben "einfacheres Mittel different").

Beschreibung ermöglicht es den Unternehmen zu modellieren, die Elemente der Problemdomäne darstellen, so dass sie leichter zu verstehen.


Jedes Projekt eine bestimmte Größe erreicht wird eine Übung in der Komplexität der Verwaltung. Ich würde einen Anspruch Wette, die im Laufe der Jahre, Programmierung entlang der Grenzen der Komplexität zu managen wir # haben gelernt abgeschöpft hat.

Ich habe nicht in der funktionalen Programmierung seit Jahren ausprobiert, aber in meinem Verständnis kann es am besten von einem Mathematiker der Bedeutung der Worte mächtig, elgant, amd schön beschrieben. „Beautiful“ und „elegant“, in diesem Zusammenhang versuchen, einen brillanten Einblick in die wahren oder die entsprechende Struktur eines komplexen Systems zu beschreiben, um es von einem Standpunkt aus, wo es überraschend einfach. es nimmt die Komplexität als gegeben und versucht, sie zu navigieren.

Die Flexibilität, die Sie ist die Fähigkeit, in meinem Verständnis erwähnst die POV zu ändern nach Ihren Bedürfnissen - aber das steht im Gegensatz zu Verkapselung: was von einer Position eine sinnlose Detail ist in einem anderen nur relevant sein kann,

.

OO, OTOH, ist der Ansatz Reduktionisten: wir POV ändern, indem Sie auf ein höheres Niveau gehen. In „alter OO“, gibt es eine eine einzige Hierarchie von POVs, Schnittstellen sind - in diesem Modell - eine Weise, unterschiedliche POVs zu modellieren.

Wenn ich so sagen darf, die Stärke der OO wird besser geeignet, um „normale Menschen“.

Einige Form von Modularität der Schlüssel zu einer skalierbaren Design. Die Grenzen des Menschen verhindert Menschen aus „grokking“ zu viele Informationen auf einmal, so dass wir Probleme in überschaubare, zusammenhängende Stücke aufzuteilen, die beide eine Grundlage für die Verständnis ein großes Projekt, sowie ein Weg, um die Arbeitsaufträge ein großes Projekt bei vielen Menschen unterteilen.

Wie die effektivste „Teilung“ / „Partitionierung“ von einem großen Projekt zu wählen, um die Ziele oben zu treffen? Die Erfahrung hat gezeigt, dass OO der große Gewinner hier ist, und ich denke, viele Menschen, dass zwei wichtige Attribute von OO zustimmen würden, dass es bei diesem gut zu machen sind:

  • Encapsulated : Jede Klasse enthält eine "geheime" - eine Reihe von implementierungsspezifischen Annahmen-dass-es-wahrscheinlich-to-have-to-change-over-Zeit, über ihre Umsetzung - und macht eine Schnittstelle, die auf diesen Annahmen Agnostiker ist; Schichtung so verkapselt Abstraktionen macht es dem Architekten möglich, eine robuste Konstruktion, wo Komponenten / Implementierungen können leicht angesichts der zu erwartenden Änderungen ausgetauscht werden.
  • Nomen zentriert : in den meisten Bereichen, scheinen die Menschen besser auf dem ersten durch das Denken über die Substantive / Daten einer Domain ein Domain-Modell zu zersetzen, gefolgt von den unterstützenden Verben zu identifizieren, die mit jedem Substantiv verbunden sind, .

Im Hinblick auf die funktionale Programmierung (FP) im Vergleich zu OO, ich habe gebloggt darüber, aber kurz denke ich, dass FP mehr über Implementierungstechniken ist, während OO mehr über Programmstruktur und das Design ist, und somit sind die beiden komplementären, mit OO auf dem ‚großen‘ Ende der Skala und FP mehr dominant sein dominant auf dem ‚kleine‘ Ende. Das heißt, an einem großen Projekt, die High-Level-Struktur wird am besten durch das OO-Klasse Design beschrieben, aber viele der Modul-Ebene Details (Implementierungen und Details der Formen der Schnittstellen der Module) werden am besten geprägt von FP Einflüsse.

Objektorientiertes Design Stärke ist proportional zu, wie viel späte Bindung tritt in der Gestaltung. Dies ist der Kay Begriff der OO, nicht der Nygaard Begriff. Alan Kay schrieb :

  

OOP bedeutet mir nur Nachrichten, lokale   Aufbewahrung und Schutz und Versteck   modern Prozess und extreme   späte Bindung aller Dinge. Es kann sein   in Smalltalk und in LISP getan. Dort   sind möglicherweise auch andere Systeme, in denen   dies ist möglich, aber ich bin mir nicht bewusst   sie.

Ein großer Teil der Literatur ignoriert zugunsten der C ++ Idee der Objektorientierung späte Bindung.

Lassen Sie uns einen Schritt und auf diese von einer höheren Ebene zurückblicken. Die Vorteile eines beliebigen Sprache-Funktion liegt in der Fähigkeit, in Bezug auf die Problemdomäne, das Problem / Lösung auf eine natürlichere Weise kurz und bündig auszudrücken.

Die Mechanik des OOP ist einfach in C mit structs und Funktionszeigern leicht implementiert. Sie können sogar ein bisschen OOP fühlen tun es auf diese Weise erhalten. Allerdings OOP Idiome sind nicht annähernd so bevorstehenden in einer solchen Umgebung. Wenn es für OOP tatsächliche Sprachunterstützung ist dann kommt die Ausdruckskraft des Paradigmas, und die Art und Weise eine Sprache implementiert eine Idee, eine sehr realen Auswirkungen hat auf dem, was ist „sagte“ und wie. Siehe zum Beispiel Unterschiede in Code Verschlüsse / lambdas in Lisp, Python, Ruby, etc.

Also am Ende ist es nicht über die Komponenten und die zugrunde liegende Konzepte, sondern vielmehr, wie sie zusammen und verwenden, die OO in C ++ zu machen, was es ist.

Encapsulation in Verbindung mit Polymorphismus. Die Fähigkeit von Klassen in den meisten OOP-Sprachen eine oder mehrere Schnittstellen zu implementieren, hat den größten Einfluss auf die Entwicklung meiner Software hatte. Diese Funktion ermöglicht es mir genau die Interaktion zwischen zwei Objekten zu definieren.

Nicht nur die Interaktionen definieren, aber es dokumentieren, so dass Jahre später habe ich in diesem Abschnitt des Codes zurückkehren und sehen, was deutlich geschieht.

Diese Funktion ist der Hauptgrund, warum ich OOP-Sprachen über funktionale Sprachen lieber mit. Während sehr mächtig Ich habe gefunden, Software in funktionalen Sprachen geschrieben ein Schmerz sein zu halten, wenn der Wartungszyklus in Jahrzehnten gemessen wird. (AutoLisp Software in AutoCAD gefunden)

IMHO, OO bedeutet einfach Objekte mit anderen Objekten interagieren. Encapsulation einfach bedeutet, ein Konzept zu abstrahieren. So erstellen Sie einen Sockel und .Connect (), um etwas. Wie es verbindet, kümmert es dich nicht wirklich (was im Grunde genommen meine Definition der Kapselung ist).

Und rein funktionale Programmierung kann Objekt verwenden, um zu kommunizieren .. aber diese Objekte müssen unveränderlich sein. Also, wieder IMHO kann FP leicht OO-Konzept verwenden; Imperative Sprache wie C kann immer noch das Konzept der OO verwenden .. zum Beispiel eine Datei für jeden „Class“ mit einem eigenen Abschnitt, die nicht verwendet werden soll.

Ihre Frage lautet, wie Sie möchten die Vorteile eines herzuleiten Haus durch einen Ziegelstein zu analysieren.

Mit der Fähigkeit, semantischen Kontext zu schaffen und Verkapselung nur die grundlegenden Funktionen einer Klasse in OO sind. (Wie ein Ziegelstein kann eine gewisse Kraft standhalten und einen gewissen Raum beanspruchen.)

Um die Analogie weiter: Um das Maximum aus Ziegel zu erhalten, setzen Sie sie einfach zusammen. Das gleiche gilt für Klassen und Objekte.

sind, können viele Entwurfsmuster dass für OO verwendet werden Programmierung. Die meisten von ihnen verlassen sich auf die Fähigkeiten „Verkapselung“ und "Semantische", das Sie erwähnt.

Einige dieser Muster sind auch eine Antwort auf den dritten Absatz Ihre Frage:

  • Wenn Sie das Verhalten einer vorhandenen Klasse erweitern möchten, können Sie eine abgeleitete Klasse erstellen.
  • Wenn Sie möchten, erweitern oder das Verhalten eines bestehenden Objekts zu ändern, Sie können die Dekorateur Muster betrachten .

Die wahre Stärke von OO liegt in Polymorphismus statt Verkapselung. Verkapselung, in gewissem Umfang, ist erreichbar und wird in funktionalen Sprachen verwendet, aber Polymorphismus wäre sehr umständlich, wenn in funktionaler Sprache umgesetzt werden.

(Lesen Sie "Entwurfsmuster" von Viererbande die Macht der OO zu verstehen.)

@Phil, Der Unterschied, den Sie erwähnt, wenn ich Sie richtig verstehe, ist zwischen der Art und Weise werden die Programmdaten / Methode aufruft: in oo, gibt es zunächst ein Objekt / Instanz, und dann werden die Daten / Methode des Objekts aufgerufen wird, durch das Objekt; in funktionalen wird die Methode direkt aufgerufen werden.

Doch bei der Implementierung eines funktionsfähigen Programms suchen, sehen wir, dass die Daten und die Verfahren sind eingewickelt (in einer Datei, aber nicht in einer Klasse). Zum Beispiel hat ein C-Programm die Header-Datei, die die Funktionen zugänglich durch andere Datei erklärt, und die Daten sind ein privaten Daten, wenn nur über diese Funktionen erklärt ist. Solange ein Programmierer vorsichtig genug ist, können die meisten der Verkapselung in OO in Funktionsprogrammen umgesetzt. (Auch Vererbung ist durch die Verwendung bestimmter Zeiger Tricks zur Verfügung.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top