Welches Paradigma ist besser für das Design und die Analyse von Algorithmen? Welche ist schneller? Weil ich ein Fach mit dem Namen Design and Analysis of Algorithms in der Universität habe und ein Zeitlimit für Programme habe. Ist OOP langsamer als das Procedure-Programmieren? Oder der Zeitunterschied ist nicht groß?
Objektorientierte Programmierung ist für Algorithmen nicht besonders relevant. Prozedurale Programmierung werden Sie brauchen, aber in Bezug auf Algorithmen ist objektorientierte Programmierung nur eine weitere Möglichkeit, die prozedurale Programmierung zu verpacken. Sie haben anstelle von records / structs Methoden anstelle von Funktionen und Klassen, aber der einzige relevante Unterschied ist die Laufzeitverteilung, und das ist nur eine deklarative Methode, um eine Laufzeitentscheidung zu behandeln, die anders behandelt werden könnte.
>Objektorientierte Programmierung ist für den größeren Maßstab relevanter - Design Patterns usw. - während Algorithmen für den kleineren Bereich mit einer kleinen Anzahl (oft nur einer) von Prozeduren relevanter sind.
Ich würde denken, dass Functional Programming zu einer saubereren Implementierung von Algorithmen führen würde.
Nachdem Sie das gesagt haben, sollten Sie keinen großen Unterschied sehen, welchen Ansatz Sie auch immer verfolgen. Ein Algorithmus kann in beliebiger Sprache oder einem Entwicklungsparadigma ausgedrückt werden.
Aktualisieren : (folgende Kommentare)
Scheinbar funktionale Programmierung eignet sich nicht zum Implementieren von Algorithmen so gut, wie ich dachte. Es hat andere Stärken und ich erwähnte es meistens aus Gründen der Vollständigkeit, da die Frage nur OOP (objektorientierte Programmierung) und PP (prozedurale Programmierung) erwähnt.
Der Unterschied (in der Ausführungszeit) ist bestenfalls gering.
Beachten Sie, dass es einen wichtigeren Faktor als reine Leistung gibt: OOP bietet dem Programmierer bessere Möglichkeiten, seinen Code zu organisieren, was zu Programmen führt, die gut strukturiert, verständlich und zuverlässiger sind (weniger Bugs).
Objektorientierte Programmierung abstrahiert viele Details auf niedriger Ebene vom Programmierer. Es ist mit dem Ziel
entworfenDie Prozedurprogrammierung hat nicht viele Abstraktionen wie Objekte, Methoden, virtuelle Funktionen usw.
Also, über Geschwindigkeit sprechen: Ein erfahrener Experte, der die Interna weiß, wie ein objektorientiertes System funktioniert, kann ein Programm schreiben, das genauso schnell läuft.
Der Geschwindigkeitsvorteil, der durch die Verwendung von PP gegenüber OOP erreicht wird, ist sehr gering. Es läuft darauf hinaus, auf welche Weise Sie Programme bequem schreiben können.
BEARBEITEN:
Eine interessante Anekdote kommt mir in den Sinn: In den Microsoft Foundation Classes wurde die Nachrichtenübertragung von einem Objekt zum anderen mithilfe von Makros wie BEGIN_MESSAGE_MAP () und END_MESSAGE_MAP () implementiert. Der Grund dafür war, dass es schneller war als die Verwendung virtuelle Funktionen.
Dies ist ein Fall, in dem die Bibliotheksentwickler OOP verwendet haben, aber wissentlich einen Leistungsengpass umgangen haben.
Meine Vermutung ist, dass der Unterschied nicht groß genug ist, um sich Sorgen zu machen, und das Zeitlimit sollte erlauben, eine langsamere Sprache zu verwenden, da der verwendete Algorithmus wichtig wäre. Der Zweck des Zeitlimits sollte IMO sein, um zu vermeiden, beispielsweise einen O (n 3 ) Algorithmus zu verwenden, wenn es ein O (n log n)
gibtUm das Schreiben von Code einfacher und weniger fehleranfällig zu machen, benötigen Sie eine Sprache, die Generics unterstützt - wie C ++ mit STL oder Java mit dem Java Collections Framework. Wenn Sie einen Algorithmus gegen eine Deadline implementieren, können Sie möglicherweise Zeit sparen, indem Sie Ihrem Algorithmus nicht eine nette O-O- oder Generic-Schnittstelle zur Verfügung stellen, sodass der Code, den Sie selbst schreiben, vollständig prozedural ist.
Für die Laufzeit-Effizienz würden Sie wahrscheinlich am besten alles in Prozedur C schreiben - siehe z.B. die Beispiele in "Die Praxis des Programmierens" - aber es wird viel länger dauern zu schreiben, und Sie werden eher Fehler machen. Dies setzt auch voraus, dass alle Bausteine, die Sie benötigen, auch in der Prozedur C aktuell und effizient zur Verfügung stehen, was heutzutage eine ziemliche Annahme ist. Höchstwahrscheinlich die Verwendung der STL oder der JFC wird in der Praxis sparen Sie CPU-Zeit sowie Entwicklungszeit.
Was funktionale Sprachen betrifft, so erinnere ich mich, dass funktionale Programming-Enthusiasten darauf hinweisen, wie viel einfacher es ist, ihre Sprachen zu benutzen als die Konkurrenz und dann zu beobachten, dass jene Mitglieder der Klasse, die eine funktionale Sprache gewählt haben, immer noch Probleme hatten Fortran 77 war fertig und zeichnete Graphen über die Leistung ihres Programms. Ich sehe, dass sich die Ansprüche der funktionalen Programmiergemeinschaft nicht geändert haben. Ich weiß nicht, ob die zugrunde liegende Realität hat.Steve314 hat es gut gesagt. Bei OOP geht es mehr um die Entwurfsmuster und die Organisation großer Anwendungen. Außerdem können Sie mit Unbekannten besser umgehen, was für Benutzer-Apps großartig ist. Bei der Analyse von Algorithmen werden Sie jedoch höchstwahrscheinlich funktional darüber nachdenken, was Sie tun möchten. In diesem Fall würde ich bei einfacheren PP bleiben und nicht versuchen, ein vollständiges OO-Design zu erstellen, wenn Sie sich um den Algorithmus kümmern. Ich würde gerne mit C oder Matlab arbeiten (je nachdem wie mathematisch der Algorithmus ist). Nur meine Meinung dazu.
Ich habe einmal den Knuth-Morris-Pratt String-Suchalgorithmus angepasst, damit ich ein Objekt haben kann Das würde jeweils ein Zeichen annehmen und einen Übereinstimmungs- / Nicht-Übereinstimmungsstatus zurückgeben. Es war keine direkte Übersetzung.
Tags und Links algorithm design oop procedural-programming