2010-03-11 6 views
12

Wenn ich eine neue Sprache lerne, programmiere ich oft einige mathematische Funktionen, um mich an die Syntax des Kontrollflusses zu gewöhnen. Danach möchte ich einige Sortieralgorithmen implementieren, um mich an die Array/List-Konstrukte zu gewöhnen.Was ist eine gute Standardübung, um die OO-Funktionen einer Sprache zu lernen?

Aber ich habe keine Standardübung zum Erforschen der Sprachen OO Funktionen. Hat jemand eine Aktienübung dafür?

Eine gute Antwort würde natürlich für Vererbung, Polymorphismus, usw., für einen Programmierer verleihen, der bereits mit diesen Konzepten vertraut ist. Eine ideale Antwort wäre eine, die in wenigen Worten ohne Zweideutigkeit in der Art und Weise, wie "Mergesort implementieren" völlig eindeutig ist, kommuniziert werden kann. (Als Beispiel ist das Beantworten von "Entwerfen eines Spiels" so vage, dass es nutzlos ist.)

Irgendwelche Ideen?

EDIT: Ich muss bemerken, dass die Ergebnisse hier etwas ironisch sind. 10 upvotes und (ursprünglich) 5 Favoriten deuten darauf hin, dass dies eine Frage ist, an der andere interessiert sind. Doch die am häufigsten gestellte Antwort ist eine, die sagt, dass es keine gute Antwort gibt. Naja. Ich denke, ich werde mir das folgende Lehrbuch ansehen, ich habe Spiele gefunden, die in der Vergangenheit für OO nützlich waren.

+0

@FarmBoy: sicherlich hängt es wie vertraut das Konzept oder Vererbung und Polymorphie sind. Subtyp-Polymorphismus? parametrischer Polymorphismus? äußerer Polymorphismus? (Sie können alle in Java zum Beispiel gemacht werden), einzelne Vererbung? Mehrfachvererbung? Interessiert es dich, wie die "OO" -Sprache, die du lernen möchtest, ADTs ausdrücken kann oder bist du glücklich mit den Idiosynkrasien der Sprache? Ich denke, eine Antwort in ein paar Worten, ohne Zweideutigkeiten, aber ich bin mir nicht sicher, ob Sie es mögen :) – SyntaxT3rr0r

+0

@WizardOfOdds: Ich bin nicht auf der Suche nach all den Eigenheiten der Sprache. Die Implementierung von vier Sortieralgorithmen sagt mir nicht alles, was die Sprache in Bezug auf lineare Datenstrukturen zu bieten hat, aber es bringt mich in Schwung. Ich suche etwas Analoges. –

+0

Objektorientierte Programmierung wurde erfunden, um die Probleme großer Projekte zu lösen. Per Definition kann es kein Spielzeugprojekt geben, das OOP voll ausnutzt. –

Antwort

2

Ich kann mir nicht vorstellen, dass es einen Standardsatz von Übungen geben könnte, der OO-Merkmale einer Programmiersprache natürlich für jedermann einführen würde. Viele der einleitenden OO-Tutorials sind voll von Animals, Cats und , die es nicht wirklich für mich zumindest schneiden. Suchen Sie in OO eine Problemdomäne, mit der Sie oft Probleme hatten, und versuchen Sie, diese als Übungssatz für jede Sprache zu verwenden, die Sie auswählen.

Die OO-Konstrukte, an die wir normalerweise denken, sind in einer Sprache möglicherweise nicht sinnvoll. Es kommt Javascript in den Sinn, das die gesamte Grundlage unserer Betrachtungsweise von Objekten erschüttert. Das heißt, Sie sollten sich nicht an eine Sprache anpassen, sondern die Sprache für Ihre Zwecke anpassen. Mit der Zeit, wenn Ihr Wissens-Repository wächst und sich mit der Erfahrung verbessert, werden Sie natürlich das implementieren wollen, was Sie für das Beste in jeder Programmiersprache halten, die Sie verwenden, ungeachtet dessen, was die Sprache bietet.

1

Etwas Spaß: implementieren Sie die Shape/Circle/Ellipse-Hierarchie, ohne in die Falle zu fallen (es kann sehr schön in Java, Scala, etc. getan werden). in the Wikipedia article :)

+0

Sie hatten Recht, mir ist das egal. Ich denke, ich werde schneller von einem Standardproblem lernen als vom pathologischen Fall. –

1

Gute Frage

bearbeiten es implementieren vor bei den vorgeschlagenen Lösungen suchen ... Meiner Meinung nach ist der beste Lehrer finden nur ein einfaches Beispiel für OO-Features und versuchen zu schreiben etwas allein, neue Beispiele für sich selbst zu schaffen und zu versuchen, einfache Anwendung zu entwickeln, in der Sie alle Eigenschaften von OO verbinden können.

Implementierungsalgorithmus wie merge sort, die keine OO-Funktion verwenden, weil sie sie nicht brauchen, ist nutzlos. Probiere echte nützliche Programme aus.

Ich erinnere mich, wenn ich OO lerne schreibe ich Anwendung mit allgemeinen "Animal" Schnittstelle mit Methoden und Klasse, die es erben, wie "Amphibien". es war fanny Zeit;)

+0

Mergesort war ein Beispiel für eine Aktienübung zum Erlernen der Listen-/Array-Syntax. Es war nützlich für diesen Zweck. –

0

Das könnte zu spezifisch sein, aber es ist das, was ich für die Tatsache, dass ich OOP persönlich verstehe, guthabe. Für meine Arbeit musste ich Code schreiben, um Daten aus vielen verschiedenen Quellen zu extrahieren. Es schien mir damals klar, dass ich das Problem aus der Perspektive der Gestaltung verschiedener "DataProvider" -Klassen angehen sollte. Was erst nach und nach wurde klar war, wie viel Code, den ich durch Aufbrechen der verschiedenen Arten von Anbietern nach unten in hierarchische Kategorien, wie diese wieder verwenden könnte:

  • DataProvider-
    • TextDataProvider
      • HtmlDataProvider
      • CsvDataProvider
      • XmlDataProvider
    • BinaryDataProvider

... und so weiter. Ich würde vorschlagen, dass jedes Problem wie folgt - wo Sie eine bestimmte Art der Aufgabe (in meinem Fall, Extrahieren von Daten) in einer Reihe von verschiedenen Wege (z. B. aus mehreren Quellen) zu erreichen - wird ein großartige Gelegenheit, sich in OOP zu vertiefen und hoffentlich zu lernen, wie nützlich es ist.

0

Ich persönlich finde den besten Weg, OO zu lernen, ist es, ein eigenes Testframework zu schreiben.

Ich finde ein Layout eines Test Runner, besitzen eine oder mehrere Test-Suiten, die jeweils ihre eigenen Testfälle genug Startpunkt haben, aber Sie können es von dort aus leicht wachsen, und es könnte sogar etwas sein, das Sie interessieren in der Zukunft verwenden.

Alternativ, wenn Sie etwas komplett wegwerfen wollen, gibt es immer Enterprise FizzBuzz. :)

1

Ich habe Hunt The Wumpus verwendet. Die ursprüngliche Implementierung in BASIC war überhaupt nicht OO, aber wenn Sie neu anfangen, eignet es sich ziemlich gut dazu.

Verwandte Themen