Dieser Artikel wurde maschinell übersetzt.

Programmiererpraxis

Multiparadigmatisches .NET, Teil 1

Ted Neward

Ted NewardIm Laufe der Jahre haben viele von uns in der .NET-Community von Microsofts “ Rollen ” für Visual Studio-Umgebung gehört: Einstein (Genius), Elvis (Rock-Stern) und Mort (“ durchschnittliche ” Entwickler). So nützlich wie diese Rollen für Microsoft sein könnte, bei dem Versuch, zu ermitteln, präzise, für wen Sie Visual Studio und Microsoft .NET Plattform erstellen, habe ich diese weniger hilfreich sein gefunden. Ich habe in der Tat stammen, beachten Sie, dass für den größten Teil der Ökosystem .NET Entwickler hauptsächlich in einer der beiden grundlegenden (und sehr stereotypical) lagern fallen:

Die C++-Entwickler. Dies ist der Entwickler, der alle “ guten ” objektorientierte Übungen erfahren und sucht bei jeder Gelegenheit Rich-Domain-Modelle zu erstellen, selbst wenn eine Batchdatei schreiben. Wenn dieser Entwickler alt genug ist, um tatsächlich professionell C++ geschrieben wurden, sind wahrscheinlich er konzentriert sich auf die Erstellung von Frameworks und wiederverwendbare Abstraktionen, bis zu dem Punkt, dass Sie alles, was wahrscheinlich nie ausgeliefert. Solche Entwickler durch ihre Haltung pretentious identifiziert werden können und häufig zitieren “ Muster ” an Personen in einem vain Bemühungen “ die schlechten huddled Massen informieren, die was die Qualität, ohne ein Name ist einfach nicht verstehen. ” gefunden

Der VB-Entwickler. Dies ist der Entwickler, der alle dem Hoopla zu Objekten, Vorlagen, Prozeduren und alles andere gehört, die um den Jahren genannt wird (Jahrzehnte?), und hat fest und resolutely ein Haltung “ ich werde nichts, solange der Code enthalten ist ” eingeführt. In der Tat sich dieser Entwickler also konzentriert auf Versand von Code, wenn eine Anforderung aus einem vorhandenen Formular eine neue Schaltfläche hinzu, wird er die ganze Sache von Grund auf neu geschrieben. Diese Entwickler sind für Ihre Marke “ Don Infos, wie es funktioniert, einfach was sollte ich tun ” Haltung gekennzeichnet und sind häufig gefunden werden, kopieren Code aus der Google und fügen es in Ihren Programmen (manchmal willkürlich) bis er funktioniert.

Vor Beginn der Datenflut Hate e-Mail let’s betonen die offensichtliche: Hierbei handelt es sich um Brutto Stereotype, und ich bin sicherlich nicht auf den Finger in jeder oder sagen, dass beiden Gruppen besser als der andere ist. (Der ersten Gruppe werden stammen, aber ich werde die erste Arme gegen alle Benutzer beanspruchen, die vorgeschlagen werden soll, dass die Zuschauer irgendwie überlegen ist,.)

Angemerkt das Vorhandensein dieser beiden Gruppen, vor allem, da dieser nächsten Satz von Spalten genauer auf die zweite gerichtet werden soll – den VB-Entwickler –, die noch nicht viel Zeit denken Softwareentwurf aufgewendet. Aber vielleicht überrascht, dass folgende Themen behandelt sollten Zinsen in der erste Gruppe, da mit der Veröffentlichung von Visual Studio 2010 und die .NET Framework-4, Dinge sehr viel komplizierter, mindestens in der Sprache erhalten haben. Wenn das funktionierende Programmierer Chance beim Entwerfen von Software (oder Erweitern des Software bereits entworfen) im nächsten Jahrzehnt haben, ohne ihn in einem riesigen Puddle von Silicon erheblich, werden weil Sie eine gute Grounding multi-paradigm Entwurfs oder was ich kommen, multiparadigmatic Programmierung-Aufruf erhalten werden. (Ja, ist es ein pretentious Titel. Meine C++ Stämme angezeigt werden – mir Susi.)

Multi-Paradigm Design

Der Begriff multi-paradigm-Entwurf (und das Konzept, wenn er sagte ein einzelner Autor) stammen in dem Buch “ Multi-Paradigm Design for C++ ” von James o. Coplien (Addison-Wesley Professional, 1998). Basierend auf den letzten Teil des Titels, ist es relativ einfach, die zwei Lagern des Buches, das ursprünglich vorgesehen zu erraten. Die Sprache herausstellte, fast nebensächlich werden jedoch Coplien des Punkts trotzdem resonates, einem Jahrzehnt höher:

Ein ausgeblendetes Gefahr … ist, dass der Begriff “ objektorientierte ” ein Synonym für “ gut. ” geworden ist … Auf dem heutigen Markt finden Sie die “ Objekt ” Bezeichnung, alle erdenklichen Paradigma zugeordnet. Führt zur hybride Entwurfsumgebungen, die auf eine Anlage in der Vergangenheit in der Regel durch den Wunsch, das Erstellen von Investitionen in alten Methoden und Technologien unterstützt. Und die meisten dieser Umgebungen werden genauso aufgerufen “ objektorientierte. ” Eine ist solche kombinierten Methoden, dass Sie einige der zentralen Prinzipien der objektorientierten Entwurf, ersetzen die Prinzipien von anderen Methoden an Ihrer Stelle verdecken. Diesen verwechselt Kombinationen Designtechniken können zur Architektur zur Wiederherstellung nach Datenverlust führen. … Wartung wird schwierig, schwächer wird die allgemeine Struktur und enorme Energie zu das System geeignete dauert.

Aber reine Objekte sind entweder nicht die Antwort. Perfekt gute Paradigmen haben von objektorientierten Hype marginalized worden. Der Ton in aktueller Entwicklung Geschäfte ist, dass niemand mit aufgefangen werden würde tote prozeduralen Zerlegung selbst für einen Stapel Routine sortieren – Objekte müssen in die Projektmappe irgendwie gestaltete sein. Dies führt in runden Löcher mit Designs in denen quadratischen Pegs gezwungen worden sind.

Der Verlauf der Informatik ist mit idealistic Lösungen für Probleme, beginnen fast von Anfang an littered: wiederholte Versuche zum Erstellen eines allumfassende Einzelansicht oder Ansatz zur Lösung von Problemen hat uns am ersten Assembler und Compilern und entlang der erzeugt einer gesamten Cottage Branche in “ braucht der Sprache und hier ist deshalb ”. Mehr pragmatischen treten shrugged und andererseits “ Wenn Sie Hammer ist alles ein Nail aussieht. ” Mit der zunehmenden Komplexität Sprachen wurde anderweitig verloren wir Blick die Tatsache, dass tatsächlich ein Tool für mehrere Zwecke verwendet werden kann.

Für mich zu diesem Thema, drücken Sie beim Überwachen von Anders Hejlsberg Enlightenment sprechen über c# 3.0 an den dynamischen Sprachen Summit in Redmond vor ein paar Jahren. Er verweist darauf hin, dass c# einige Ideen von anderen Sprachen integriert wurde, und andererseits etwas, um die Auswirkungen der “ sind Sprachen Ihre Klassifizierungen verlieren. Mehr können wir feststellen, dass eine Sprache nur eine objektorientierte Sprache oder nur eine dynamische Sprache ist da aus vielen verschiedenen Ideen so viele von Ihnen leihen. ”

Seine Kommentare zurückgegeben des Coplien Wörter aus einem Jahrzehnt vor: “ C++ geht noch weiter [jenseits Paradigmen, die, wie Modularität, abstrakte Datentypen, Prozeduren und Datenstrukturen voraus] Unterstützung Prozedural, Modular, objektbasierten, objektorientierte, und generische Programmierung auf ein gleich Footing. ”

C# geht noch weiter, einbetten funktionale Konzepte in der Version 3.0 und dynamische Konzepte in der Version 4.0. Visual Basic mussten dynamische vor kurzem (obwohl es häufig scorned wurde), und Dank an Microsofts Ziel “ Sprache Parität ” zwischen ihm und c#, unterstützt die gleichen Features. Ohne diese zusätzliche Sprache Paradigmen ist unter der Oberfläche, Lösungen wie LINQ sind schwieriger und erzwingen, dass den Entwickler auf andere Mechanismen verlassen (z. B. Codegenerierung, die selbst ist ein interessanter Aspekt der metaprogramming – mehr dazu später) die wichtigsten Gemeinsamkeiten eines Systems arbeiten in Hinsicht zu erfassen, die “ von einer Basisklasse erben ” konnte nicht.

Dies ist der Kern des was wir untersuchen: Jahrelang haben die objektorientierte Zealots der Welt absolut, dass die Vererbung den besten Ansatz zur Wiederverwendung von Code darstellt. (Dies ist der Grund Klassen markiert sind nicht “ versiegelt ” [c#] oder “ NotInheritable ” [Visual Basic] standardmäßig.) Und doch wir Don ’t tatsächlich Basisklassenmethoden überschreiben, wenn die Form-Klasse in WinForms oder ASP.NET vererben; stattdessen bieten wir Delegaten für den Aufruf. Warum nicht einfach überschreiben? Warum werden den Treffer (obwohl es möglicherweise klein) von der Delegataufruf? Warum ist Code-Behind-Modell Klassen basieren teilweise aus einem Modell Vererbung basierenden passiert? Warum haben Sie Erweiterungsmethoden überhaupt?

Die Antworten auf diese Fragen werden können (und wurden!) erläutert in objektorientierten Terminologie, aber die zugrunde liegende Ursache bleibt unverändert: nicht alle Daten kann problemlos im klassischen Objekt Entwurf Konstrukte dargestellt werden. Versuchen, die allgemeine Teile des Codes zu finden und Sie zusammen in ein einziges erstklassige Konstrukt einzufügen (der objektorientierten Programmierung enthalten würde, ist eine Klasse und die strukturierte Programmierung würde einstuft, wird eine Struktur und funktionalen Programmierung würde verwalten ist eine Funktion, usw.) ist das Ziel der Softwareentwurf und weitere Möglichkeiten können wir die Teile des Codes, die Variante, desto mehr können wir Systeme schreiben, Wetter der anspruchsvoll Winters Kunden Aufrufen mit “ einfach eine winzige wenig Sache ich vergessen hat, Ihnen mitteilen,... ” variieren

Berücksichtigen Sie dies als eine Übung: .NET Framework 2.0 eingeführten Generika (parametrisierte Typen). Weshalb? Aus der Perspektive eines Entwurfs welchen Zweck erfüllen Sie? (Und für den Datensatz bestimmte Antworten des “ ermöglicht es uns die typsichere Auflistungen haben ” Punkt – Windows Communication Foundation verwendet Generika ausführlich, klar Möglichkeiten, die fast typsichere Auflistungen sind.)

Wir werden die nächsten, kommen.

Weitere Informationen

Klar ist sehr viel mehr noch um zu diesem Thema gesagt werden – jede Paradigmen, die in .NET Framework vorhanden verdient, einige Untersuchung und Erklärung, mit Code ausführen, wenn dieser ersten Phase sieht für den Entwickler arbeiten erkennen vornehmen. Die nachfolgenden Teile werden stammen, also hängt es. Sobald wir fertig, ich hoffe, dass (und Ihrer Meinung nach) Sie haben eine ganze Fülle von besser Entwurfstools für Gebäude, gut (und durch, die ich meine well-abstracted, verwaltbar, erweiterbaren und verwendbar) Software.

Aber in dieser Übung betrachten die aktuellen Entwürfe mit arbeiten konzentrieren, und finden Sie, wenn Sie die Teile des Entwurfs identifizieren können, die einige der allgemeinen Konzepte der einzelnen diese unterschiedlichen Paradigmen – natürlich werden die Teile Objekt relativ einfach zu erkennen, konzentrieren Sie sich daher auf einige der anderen. Welche Teile Ihrer Codebasis (oder .NET Framework) Natur prozedurale oder metaprogrammatic sind?

Übrigens: Wenn ein bestimmtes Thema möchten finden Sie unter durchsuchte, Don ’t hesitate, mir eine Notiz zu löschen und zu versuchen, ihn in planen, sobald wir Don e mit dieser bestimmten Datenreihe angezeigt werden. Dies ist schließlich Ihre Kolumne.

Viel Spaß beim Programmieren!

Ted Neward  ein Principal mit Neward ist & Associates, eine unabhängige fest spezialisiert .NET Framework und Java Plattform Unternehmenssysteme. Er hat mehr als 100 Artikel geschrieben, ist ein C#-MVP und ein INETA-Sprecher und hat mehrere Bücher allein und in Zusammenarbeit mit anderen geschrieben, darunter das in Kürze erscheinende „Professional F# 2.0“ (Wrox). Er berät und hilft regelmäßig. Erreichen Sie ihn unter ted@tedneward.com -und Lesen Sie seinen Blog unter blogs.tedneward.com-.