Frage

Dies kam in einem Gespräch habe ich mit online -, und es fiel mir auf, dass ich keine Ahnung habe wie das funktionieren soll:Ganz viele Programmierer scheinen, nehmen Sie einfach als gegeben - in der Tat offensichtlich, dass die Klassen sind eine notwendig-Sprache-Funktion für die Verwaltung von großen software-Projekten.

Es ist mir nicht klar, wie Sie dies tun.

Meine Frage an Sie ist, Woher wissen Sie das?Was Objektive Maßnahmen sind es, die zeigen, dass die Klassen, die die Produktivität erhöhen, die Wiederverwendung von code, und reduzieren die Komplexität der Produktion eines Programm?Welche Aspekte von Klassen, machen Sie ideal für große teams für die Zusammenarbeit an?

Und jetzt, es gibt eine Frage, ich möchte Fragen, das ist etwas schwer auszudrücken.Tut mir Leid wenn ich das falsch und am Ende verwirrend oder angering jedermann:

Objektiv, wie Sie wissen, dass die Verwendung von Klassen ist nicht die Ursache der Anwendung, groß zu sein, um mit zu beginnen?Das ist, ist es möglich, dass ein Programm mit gleicher Funktion geschrieben worden sein könnte, mit viel weniger code, klein genug, um nicht müssen keine speziellen Maßnahmen Sie zu "verwalten", mit einigen anderen code re-use-Strategie?(es gibt viel zu wählen Sie aus, wie jene, die in die funktionale Programmierung Paradigmen, oder Aspekt-orientierte Programmierung).

Das Letzte Stück ist etwas, was Steve Yegge wurde, deutete an, auf seinem blog.Aber ich bin ein bisschen skeptisch, beide Seiten des Arguments, durch einen wirklichen Mangel an harten Daten, die von jedermann, und nicht genug Erfahrung, um zu einem Schluss auf meine eigene.

Was denkst du?

edit:Insbesondere bin ich daran interessiert, warum viele Programmierer denken, prototypal style Vererbung ist nicht bis zu der Aufgabe, wenn es um große Anwendungen.Ich bin sorry dieser Frage ist vage - es ist ein Produkt von mein Unverständnis über dieses Thema.

edit2:es scheint einige Verwirrung über das, was ich meine, durch die funktionale Programmierung.(Ich glaube nicht, dass jede version von VB war immer funktional, sicher nicht mit älteren Versionen).Bitte Lesen Sie den wikipedia-Artikel.http://en.wikipedia.org/wiki/Functional_programming

edit3:und lassen Sie mich betonen, dass ich bin auf der Suche für die Ziel-Maßnahmen.Keine subjektiven Meinungen.

War es hilfreich?

Lösung

Encapsulation Theorie liefert einen objektiven Grund, warum Klassen besser sind als gar keine Klassen haben.

Die International Organization for Standardization definiert Verkapselung als ‚die Eigenschaft, dass die Informationen, die in einem Objekt enthalten nur durch Wechselwirkungen an den unterstützten Schnittstellen durch das Objekt zugänglich sind.‘

So wie einige Informationen über diese Schnittstellen zugänglich sind, müssen einige Informationen in dem Objekt verborgen und 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 ändern.

Beachten Sie, dass Wort: Veränderung. Information Hiding betrifft mögliche Ereignisse, wie zum Beispiel der Veränderung der schwierigen Design-Entscheidungen in der Zukunft.

Betrachten wir eine Klasse mit zwei Methoden. Methode a (), die Informationen innerhalb der Klasse verborgen ist, und das Verfahren b (), die öffentlich ist und somit zugänglich direkt von anderen Klassen

Es gibt eine gewisse Wahrscheinlichkeit, dass eine künftige Änderung der Methode a () wird in anderen Klassen Änderungen in Methoden erfordern. Es gibt auch eine gewisse Wahrscheinlichkeit, dass eine zukünftige Änderung Methode b () wird in anderen Klassen Änderungen in Methoden erfordern. Die Wahrscheinlichkeit, dass eine solche Welligkeit Änderungen für die Methode ein () auftreten wird, wird jedoch in der Regel niedriger sein als die für Verfahren b (), nur weil Methode b () kann auf weitere Klassen abgehangen.

Diese reduzierte Wahrscheinlichkeit von Welligkeit Auswirkungen ist ein wesentlicher Vorteil der Kapselung.

Beachten Sie die maximale mögliche Anzahl von Source-Code-Abhängigkeiten (MPE - das Akronym aus der Graphentheorie ist) in jedem Programm. Rechnet man aus den obigen Definitionen können wir sagen, dass, da zwei Programme identische Funktionen für die Nutzer zu liefern, wird das Programm mit dem niedrigsten MPE ist besser gekapselt, und dass statistisch die mehr gut verkapselt Programm wird billiger zu erhalten und zu entwickeln, weil die Kosten von der maximal es Potentialänderung auf das weniger niedriger als die maximale Potentialänderung gut gekapseltes System sein wird.

Betrachten wir weiterhin eine Sprache mit nur Methoden und keine Klassen und somit keineswegs Information Hiding Methoden voneinander. Sagen wir unser Programm hat 1000 Methoden. Was ist das MPE dieses Programms?

Encapsulation Theorie sagt uns, dass ein System von n öffentlichen Knoten gegeben, die MPE dieses Systems ist n (n-1). So ist die MPE der 1000 öffentlichen Methoden 999.000.

Nun wollen wir, dass das System in zwei Klassen brechen, die jeweils 500 Methoden. Wie wir jetzt Klassen haben, können wir einige Methoden der Öffentlichkeit haben und einige Methoden privat wählen. Dies wird dann der Fall sein, wenn nicht jede Methode auf jeder anderen Methode tatsächlich abhängig ist (was unwahrscheinlich ist). Lassen Sie uns sagen, dass 50 Methoden in jeder Klasse öffentlich ist. Was wäre die MPE des Systems sein?

Encapsulation Theorie sagt uns, es ist: n ((n / r) -1 + (r-1) p), wobei r die Anzahl der Klassen ist, und p ist die Anzahl der öffentlichen Methoden pro Klasse. Dies würde unser Zwei-Klassen-System eine MPE von 499.000 geben. So ist die maximal möglich Kosten für eine Änderung in diesem Zwei-Klassen-System ist bereits wesentlich geringer ist als die des nicht eingekapselten Systems.

Angenommen, Sie brechen Sie das System in 3 Klassen, die jeweils 333 Klassen (na ja, man wird 334 haben), und wieder mit jeweils 50 öffentlichen Methoden. Was ist das MPE? Unter Verwendung der obigen Gleichung wieder wäre die MPE etwa 482.000.

Wenn das System jeweils in 4 Klassen von 250 Methoden gebrochen ist, wird die MPE würde 449.000 sein.

Wenn scheinen, dass die Anzahl der Klassen in unserem System zu erhöhen immer seine MPE abnehmen wird, aber das ist nicht so. Encapsulation Theorie zeigt, dass die Anzahl der Klassen, in denen das System zerlegt werden soll MPE zu minimieren ist: r = sqrt (n / p), die für unser System 4. eigentlich ein System mit 6 Klassen, beispielsweise würde ein MPE von 465.666.

Andere Tipps

Dies ist eine sehr gute Frage. Organisation von Code in Klassen ist eine Möglichkeit für ein Entwicklungsteam zu schaffen kleine, wiederverwendbare Module. Auch haben diese Module expressive und begrenzte Schnittstellen, die nur ausdrücken, was die Klasse in der Lage ist und nicht, wie sie es tut. Jede Klasse ist orthogonal zu dem anderen und ist daher sehr prüfbar und modular im Fehlerfall.

Nun, was ich gerade beschrieben ist eine seltsame Szene aus einer perfekten Welt. Aber jede gute Entwickler tun sollte OOP Arbeit für so etwas zu streben.

OOP ist eine Bestätigung, dass wir, die Entwickler, einfach menschlich sind und ein ganzes System auf einmal nicht begreifen. So haben wir das System brechen in winzige wiederverwendbare Teile und konzentrieren sich auf jene.

Nehmen Sie eine zehnstellige US-Telefonnummer als Beispiel. Es ist schwierig, eine zehnstellige Zahl zu erinnern, in Ihnen so gehen wir das tun, was Psychologen „Chunking“ nennen. Das heißt, wir brechen mental die Zahlen in Stücke, die wir besser erinnern kann.

So 1234567890 wird 123-456-7890. Zum Glück für uns, brechen die Telefongesellschaften auch diese Zahlen nach unten die gleiche Weise und weisen Sie die Bedeutung Brocken. 123 ist die Vorwahl, 456 ist das Präfix und 7890 ist die Zeilennummer. Jedes dieser Stücke ist wie eine Klasse, sie haben alle individuelle Verantwortlichkeit, Formate und Bedeutungen.

Also abschließend das Beste, was ich sagen kann, ist, dass OOP ermöglicht es uns, große, skalierbare Systeme zu bauen, die zentralisierte und gekapselte Funktionalität. Es erlaubt uns, nicht zu haben, um das große Bild der ganze Zeit zu sehen und eine Sache konzentrieren zu können, auf tun und es gut tun.

Ich bin keineswegs einen Frömmler zu jedem Programmierparadigma, aber ich habe eine Zeit lang in einer OO-Mode in Betrieb.

Ich persönlich habe eine Menge habe 'a-ha!' Momente, die Klassen haben die Domain direkt half mir zu verstehen, ich bin in einer besseren arbeiten.

Vor allem in Fällen, in denen es Verwirrung darüber, warum ein System funktioniert nicht richtig, oder was für ein System tun sollte, Klassen oft gezwungen, mich darüber nachzudenken, was das diskrete Stück des Ganzen tun soll, und häufiger als nicht zu Refactoring der Klassen / Methoden zur Hand führen.

Kurz gesagt, Kapselung macht mich wirklich ein glücklicher Mensch. ;)

Ich hoffe, das hilft.

Ich denke, Klassen helfen können, weil sie zu dem sehr allgemeinen kognitiven Konzept entsprechen Kategorisierung und helfen, so können große Anwendungen natürlich zu beschreiben.

Ich ziehe es Klassen, so dass ich ein großes Problem in handliche Stücke teilen kann, die als einzelne Einheiten prüfbar sind. IMHO, die Wiederverwendung von Code ist überbewertet - ich habe es kaum passieren gesehen, wo ich arbeite. Für mich, was ich am meisten aus gut OO bekommen ist gut Testbarkeit.

Das andere Extrem ist eine Reihe von globalen Variablen zu verwenden und Marmelade alle Ihre Logik in public static void main (oder Page_Load in ASP.NET) und statische Methoden aufrufen, die andere statische Methoden aufrufen und so weiter ... (Ich habe schwindlig bei der Ende des letzten Satzes.)

Das einzige, was meine OO Mentalität brechen würde, wenn ich mit einer reinen funktionalen Sprache arbeitet, die etwas ist, ich habe nicht seit dem College leider daran gedacht.

Es ist wohl möglich, ein einfaches Problem über Ingenieur, indem sie es unnötig komplex (OO den ganzen Weg nach unten) zu machen. Doch für all ausreichend großes Problem, ich glaube nicht, dass es wahrscheinlich ist, dass OO-Paradigma ist, was es verursachte in erster Linie groß zu sein. Nehmen Sie ein Betriebssystem zum Beispiel, ist es schwer, sich vorzustellen, es einfach sein zu halten (Code-weise), wenn es in einer objektorientierten Art und Weise nicht geschrieben ist.

Wenn Sie eine Reihe von „nackten“ Funktionen in einer großen Anwendung haben, ist es schwer zu diesen Funktionen, Änderungen vorzunehmen.

  • schwerer zu sehen, wer die Funktion verwendet ( „wenn ich das ändern, wer ist davon betroffen?“)
  • schwierige Änderungen an den Funktionen zu machen, ohne andere Leute Code zu brechen.

Wenn Sie die Funktionen nach oben in den Klassen wickeln, helfen Sie den Umfang des Codes zu isolieren. Es ist kein Wundermittel, aber es hilft.

Zwei Dinge.

Die erste ist die Idee, dass eine Klasse ist eine undurchsichtig Domain-Einheit. Wenn es richtig gemacht , objektorientierte Programme eine Abstraktionsschicht vorstellen: auf der nächsthöheren Ebene, Sie Objekte Marschall zu tun, was Sie wollen, anstatt mit Details beschäftigen. Sie brauchen nicht zu wissen, wie die Objekte und Klassen arbeiten: nur das, was sie tun. Dies ist eine Art von Information Hiding, und es reduziert die Komplexität, die ein Team in dem Kopf zu halten hat, wie sie arbeiten.

Die zweite ist, dass OO-Programmierung für eine Art von Code-Wiederverwendung ermöglicht: Sie können Klassen definieren, die bestimmte Verhaltensweisen in anderen Klassen (Vererbung) außer Kraft setzen oder Klassen, deren Instanzen umfassen Instanzen anderer Klassen, mit ihnen ihre Ziele zu erreichen (Kapselung und Zusammensetzung).

richtig OO-Techniken unter Verwendung der Menge von Code, den Sie verwalten müssen reduzieren können, und reduzieren die Anzahl der Dinge, die Sie im Auge behalten müssen, wie Sie das System arbeiten oder warten. In der Praxis ist dieser Ansatz nicht immer.

Objektiv, Woher weißt du, dass die Verwendung von Klassen ist nicht die Ursache der Anwendung, groß zu sein, um mit zu beginnen?

Nehmen Sie keine großen Programm/Anwendung, die nicht geschrieben in einer OO-Sprache (z.B.C, COBOL, auch plain-SQL) und Sie sollten in der Lage sein zu bezeugen, dass code-Größe nicht direkt zugerechnet Sprache Paradigma.Für jede Zahl von gut konzipierten, stark raffiniert, wiederverwendbare C# - oder Java-Komponenten, gibt es auch eine gleiche Anzahl von gut konzipierten, stark raffiniert, wiederverwendbare C-DLLs.Umgekehrt gibt es die gleiche Anzahl von schrecklichen, aufgeblähten code.

Der Punkt ist, gute Programmierer sind in der Lage zu verfeinern, Ihre system-designs, unabhängig von Sprache und Plattform.

Mit Bezug auf OOP, zumindest für mich, es bringt in die Tabelle ein "potential" - eine Ansicht von der Welt des Programmierens abit näher zu unserer realen Welt.Wir alle wissen, dass unsere Welt und das Universum der Materie sind voller Objekte aus kleinere Objekte.Halten Sie vergrößern den ganzen Weg von galatical Sterne-Anlagen bis hin zu den Molekül -, atom -, und sub-atomaren Teilchen, es ist wirklich erstaunlich, wie sehr unterschiedliche Angelegenheit sind aus den gleichen winzigen Teilchen kombiniert in verschiedenen mustern.Blick auf unsere eigene Biologie selbst, es ist irrsinnig, manchmal zu denken 60% unserer Körper ist eigentlich nur Wasser, wenn Sie gebrochen unten in Ihre feinsten.Aber schau dir all die verschiedenen Systeme und Organe im Ort brennen mit Chemie um uns das laufen und am Leben.

Wenn wir lernen zu verstehen, die Einfachheit (oh wirklich...ha ha) der Bausteine, aus denen die Systeme der realen Welt sehen wir in jedem-Tag der Natur, wir sollten dann in der Lage sein zu verstehen, dass die Projektierung und den Bau sehr kompliziert oder anspruchsvoll-Systeme sollten beginnen Sie mit kleinen Komponenten, die selbst nur sehr wenig.Und langsam kombinieren und vernetzen Sie Sie zusammen in immer größere Bauteile können wir erhalten mehr Funktionalität und Leistungsfähigkeit.Bis wir das gewünschte system, das wir vorgestellt haben.

Die (korrekte) Verwendung von Klassen ist eine Untergliederung eines Systems in seiner schönsten Form.Wie möglich.So dass Sie Aussehen kann etwas zu einer Zeit und einem bestimmten Niveau der Abstraktion und nicht überfordert werden, indem Zwecke und Logik, die nicht den Umgang mit Ihrem derzeitigen Besorgnis.Wenn Sie ein system entwickeln, denken Sie an Ihre eigene Anatomie.denken wie Sie würde das design der menschlichen Körper.Wenn Sie ein system entwickeln, denken Sie über starten eines neuen Unternehmens;was sind die wichtigsten Abteilungen, die Abteilungen, die Sie benötigen zu bedienen die business.Wer sind die Art der Mitarbeiter, die erforderlich sind, um die Abteilungen.Die verschiedenen Geräte, die Sie benötigen, zu verwenden und interagieren mit der Erfüllung Ihrer Aufträge.Wie tun Sie brechen den Geschäftsbetrieb in seiner besten, sich zu erlauben, es es besser zu verstehen?

Wenn Sie das Grundprinzip verstanden haben, dass ein Objekt ist einfach nur kleinere Objekte, werden Sie auf Ihrem Weg zur Schaffung von hoch-wiederverwendbar-Zellen oder Moleküle.

Klassen haben die meisten hilfreich waren im Aspekt zu mir, dass ich auf einen kleinen Aspekt eines komplexen Projekts zu einer Zeit arbeiten können. Die Möglichkeit, einen Aspekt des Codes aus dem großen Projekt zu entkoppeln ist sehr hilfreich, so dass Sie nicht überwältigt werden. Am Ende kann der Zusammenhalt zwischen den Klassen gibt Ihnen einen schnellen Überblick darüber, wie ein Programm funktioniert, ohne mit den Innereien zu beschäftigen.

Soweit Wartbarkeit geht, ist es viel einfacher in einem UML-Klassendiagramm zu suchen und herauszufinden, wie alles angelegt wird mit einer Liste von Funktionen als suchen, meiner Meinung nach.

Ich denke, mit den Worten Klassen von Objekten bedeuten sollten. Die Klassen sind nichts anderes als Ort, an dem Sie in Ihren Objekten setzen können. Das OOP Paradigma ist so erfolgreich, für einen Grund. Sobald Sie haben, dass ‚Aha!‘ Moment, wenn Sie denken, Sie haben schließlich das Konzept der OOP verstanden, können Sie mit der Programmierung in eine viel organisierten Art und Weise beginnen.

ich in Visual Basic 3 für eine lange Zeit programmiert habe, so hatte ich viel Erfahrung mit dem funktionalen Programmierung, dann VB5 kommen und Objekte entdecken eine große Erleichterung, weil ich reale Einheiten in meinen Code in Zusammenhang stehen könnte, und es hat mir sehr geholfen.

Das ist der ganze Punkt davon, reale Entitäten in Ihrem Code neu zu erstellen. Es macht das Lesen und Arbeiten leichter führen, dass Sie etwas abholen können und tun Sachen mit ihm, oder Sachen tun.

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