Ich bin jetzt im 4. Jahr an einer IT-Universität und wenn ich mit meinem Professor über dieses Thema spreche, lehnt er meine Meinung ab und gibt mir eine sehr heftige Kritik (an meiner Universität wurde uns C (ANSI) (in Procedural) beigebracht Programmierklasse - im 1. Jahr an der Universität) vor C ++ (in der OOP-Klasse im 2. Jahr) und anderen ...
Aber im Alter von 13 Jahren wurde meinem Bruder von mir zuerst Java und sonst nichts beigebracht. Jetzt kann er fast alles, was ein normaler Student im zweiten Jahr mit Java machen kann.
Für Sie Profis würde ich gerne wissen, warum Sie der Meinung sind, dass uns zuerst die prozedurale Programmierung beigebracht werden sollte.
Antworten:
Kurze Zusammenfassung:
Denn in der realen Welt muss man früher oder später mit prozeduralem Code arbeiten.
Weil prozedurale Sprachen wie eine Erweiterung oder Einführung in objektorientierte Sprachen funktionieren können, anstatt nur eine Alternative zu sein.
Ergänzung zu Antwort 2. Da OOP komplexer als die prozedurale Programmierung ist, ist es besser, zuerst die prozedurale Programmierung zu lernen.
Denn in der realen Welt arbeiten Programmierer mit AKA "Multiparadigm Programming" und kombinieren nicht mehrere Möglichkeiten, um Probleme zu lösen, nicht nur ein einziges Paradigma.
Die meisten Programmiersprachen sind auf einer bestimmten Ebene Multiparadigmen, selbst wenn ihre Designer oder gemeinsamen Entwickler das Gegenteil sagen.
[NEU] Da die modulare Programmierung, die häufig mit der prozeduralen Programmierung gemischt und verwechselt wird, auf OOP angewendet werden kann, kann die Frage lauten: "Warum müssen wir die modulare Programmierung lernen, bevor wir die objektorientierte Programmierung lernen?"
Erweiterte Bohrung Beschreibung:
Punkt 1 ist sehr klar, keine weitere Erklärung.
Punkt 2, Klassen, Vererbung, Polymorphysmus, Schnittstellen usw.
Punkt 3, ich codiere Procedural Pascal, bevor ich Object Oriented Pascal lernte. Als ich dort ankam, sagte ich: "Schau, Klassen sind wie kleine prozedurale Programme ... ... und du kannst sie dazu bringen, miteinander zu reden, cool !!! ".
Ich hörte dasselbe von Leuten, die von einfachem C zu C plus plus gingen.
Punkt 4: In den meisten Fällen kombinieren Programmierer verschiedene Programmiertechniken oder -paradigmen oder Möglichkeiten zur Lösung eines Problems. Funktional, prozedural, OOP, logisch.
Selbst Java "Pure OO" ist nicht so einfach wie es heißt.
+1 Punkt für "Prozedurale Programmierung" anstelle von "Strukturierte Programmierung". Oder modulare Programmierung. Das ist wichtig.
Obwohl diese Begriffe oft zusammen gelehrt und austauschbar verwendet werden, sind sie es nicht. Strukturierte Programmierung umfasst viele Konzepte, nicht nur die Verwendung von Prozeduren, und eine davon besteht darin, das Programm so zu gestalten, dass es nicht wie "Spaghetti-Code" aussieht.
Heute habe ich mehrere "reine" OO-Programme gelesen, die wie "objektorientierter Spaghetti-Code" aussehen, was bedeutet, dass der Programmierer OOP verwendet hat, aber sein Code sieht aus wie ein Durcheinander.
Oft kann ich einen OO-Code lesen und feststellen, dass der Programmierer vor OOP die strukturierte Programmierung gelernt hat, da der Code klar und übersichtlich ist.
Und für die modulare Programmierung habe ich mehrere Apps gesehen. In C ++ und PHP werden keine Module verwendet. *
quelle
Ich würde denken, dass die Analogie der Mathematik ähnlich wäre. Sie müssen zuerst einige grundlegende Konzepte lernen (Addition / Subtraktion / ...) und dann zu komplexeren Themen (Algebra / Kalkül) übergehen. Das prozedurale Programm ist sehr linear und es ist einfacher, den Kontrollfluss zu erfassen, während Sie die Syntax lernen. OOP wird vielleicht als komplexer angesehen, es baut auf den einfacheren Konstrukten auf, die in prozeduralen Sprachen verwendet werden, ist aber abstrakter und schwerer zu verstehen. Wenn Sie mit Sprachen wie C beginnen, kommen Sie auch näher an die Hardware heran und beschäftigen sich mit Problemen der Speicherzuweisung und Zeigern, die Sie verstehen müssen, aber in Sprachen wie Java / C # nicht wirklich verwenden können. Es ist wirklich wertvoll, in der Schule dem ausgesetzt zu sein, unabhängig davon, ob es an erster oder zweiter Stelle steht.
FWIW, es wird sich irgendwann ändern. Als ich in die Schule kam, lernten wir in Pascal und PL / 1. Wir haben C erst im fortgeschrittenen Sprachkurs erreicht (das datiert mich). Ich habe Java erst in der Graduiertenschule gelernt - es war noch nicht erfunden worden!
quelle
Objektorientierte Programmierung ist eine Sammlung von prozeduralen Schnipsel auf organisierte Weise. Ich denke, die Lektion, die Sie lernen, ist, dass objektorientierte Methoden zur Aufrechterhaltung der Organisation und Wartbarkeit beitragen. Es gibt viele Programmierer, die diese Unterscheidung nicht treffen können und behaupten, ihre Programme seien objektorientiert, wenn sie prozeduraler sind.
quelle
Das tust du nicht.
Wir haben zuerst die funktionale Programmierung mit Schema gelernt . Dann gingen wir zu prozedural, dann zu OOP und dann zu deklarativer Programmierung über. Und ob Sie es glauben oder nicht, obwohl ich bereits mit Programmieren vertraut war, denke ich, dass es auch für andere einfacher war: weil FP wie Mathe ist! Sie kennen also die Grundlagen bereits.
Ich habe dies viele Male mit mir selbst diskutiert und bin letztendlich zu dem Schluss gekommen, dass es wirklich davon abhängt, wie gut Ihr Lehrer Ihnen die Konzepte beibringt.
Es gibt keine einzige Antwort, weil:
Beginnen Sie mit etwas Prozeduralem wie C (oder sogar Assembly), da Sie lernen, wie Computer wirklich funktionieren
Mit etwas objektorientiertem Java zu beginnen, könnte eine gute Wahl sein, da es relativ einfach zu erlernen und OOP auf das wirkliche Leben anzuwenden ist und weil es Ihnen das ** Formen beibringt
Mit funktionaler Programmierung wie Scheme zu beginnen, könnte eine gute Wahl sein, da Sie lernen, abstrakter zu denken (in Form von Funktionen anstelle von Variablen), was Sie letztendlich zu einem besseren Programmierer macht
Wenn Ihr Lehrer es nicht gut unterrichtet, spielt es keine Rolle, womit Sie beginnen. sie werden so ziemlich gleich ausfallen.
quelle
Eine Sprache kann objektorientiert sein wie C ++, Java oder C #. Und Sie können mit diesen Sprachen beginnen. Aber der Punkt ist, dass Sie selbst mit diesen OO-Sprachen zuerst die prozedurale Programmierung und dann OOP lernen müssen. Ich denke, dasselbe hast du deinem Bruder angetan.
quelle
=
Zuordnung,if
,for
usw.) in größere Stücke (Methoden), wie kann man je verstehen OOP hoffen. Wie bei den meisten Fähigkeiten können Sie, wenn Sie sehr klug, motiviert und / oder Zugang zu Einzelunterricht haben, mehrere verwandte Themen gleichzeitig lernen.Die prozedurale Programmierung, zumindest in einer Sprache wie C, reduziert die Programmierung auf eine sehr einfache Praxis: Algorithmen und Datenstrukturen und auf einer Abstraktionsebene, die ein glückliches Medium zwischen menschlich verständlichem Quellcode und Assembler-Code ist.
Auf diese Weise können die Schüler gleichzeitig ein bisschen Wissenschaft (Algorithmen, Datenstrukturen) und ein bisschen Technik (Quell-> Objekt-> Maschinenkompilierung, von-neuman (wahrscheinliche) Architektur) lernen.
OOP führt über C ++ / obj-C ein Code-Organisationsmuster ein, das nur noch zu lernen ist. Dies könnte das Erlernen der oben genannten Konzepte etwas erschweren.
OOP über Java (unter anderem) geht noch weiter, indem Hardware und Umgebung abstrahiert werden. Jetzt ist das zugrunde liegende Produkt kein Maschinencode, sondern eine Art Vermittler, der nicht verrät, wie die zugrunde liegende Hardware funktioniert. Der Effekt ist jedoch, dass sich der Schüler auf Code-Organisationsmuster konzentrieren kann.
Am Ende denke ich, dass es ein Kompromiss zwischen dem Erlernen der Funktionsweise der Hardware oder dem Erlernen eines Code-Organisationsmusters ist. Was wichtiger ist, weiß ich nicht wirklich. Die reale Welt erfordert zumindest teilweise Kenntnisse über beide.
Ich gehe davon aus, dass ein Bachelor-Programm, das mit prozeduraler Programmierung auf niedriger Ebene beginnt, wahrscheinlich Informatiker / Computeringenieure hervorbringt, und ein Programm, das mit übergeordneten Konzepten beginnt, Software-Ingenieure / Entwickler / Programmierer hervorbringt.
quelle
Der Mut von OOP-Objekten besteht aus prozeduraler Programmierung.
Wenn Sie keine for-Schleife ausführen können, verwenden Sie Zeiger ordnungsgemäß, deklarieren Sie Ihre Typen und Funktionen, und Sie können keine Schnittstellen für Ihre Klassen schreiben, geschweige denn, dass die Innenseiten etwas tun, das sich lohnt.
Sie würden OOP sowieso nicht in einer Einführungsklasse lernen, es wäre nur Syntax - ein direktes Einspringen in OOP würde das Erfassen der Dinge (zunächst) komplizierter machen als es bereits ist.
Bei OOP geht es nicht darum, Syntax für Klassenklassen zu deklarieren, sondern um Datenstrukturen, Entwurfsmuster, Polymorphismus, Vererbung und Komposition.
Um all diese Dinge zu tun, die Sie benötigen, um die prozedurale Programmierung zu kennen, was in C leicht zu bewerkstelligen ist. Sie können fast alles, was Sie mit C lernen, auf Java oder C ++ übertragen. Möglicherweise müssen Sie einige Dinge überdenken, die Sie in C für selbstverständlich gehalten haben, ABER ... Sie müssen die Grammatik kennen (wo Sie sich in Einleitung C befinden), um Sätze zu schreiben (müssen Prozeduren schreiben, um Schnittstellen zu definieren), dann Absätze (müssen Datenstrukturen kennen) und dann einige Entwurfsmuster (Tragödie, Komödie, fehlerhaft) kennen Held, wie sie interagieren und wann sie nicht verwendet werden sollen), bevor Sie komplette Romane schreiben können (komplettes OOP-System).
: Wenn ich Sie wäre , würde ich einige der folgenden Bücher abholen der Programmiersprache C , der Programmiersprache Java , Design Patterns , Gang of Four und Muster Schlüpfen . Ich würde definitiv eine Kopie von The C Programming Language abholen, wenn ich C / C ++ ernst nehmen würde.
Wenn Sie nur den ganzen Weg Java gehen möchten (und dies für die $ -ID tun), lesen Sie einige Bücher über Java-Entwurfsmuster und die Verwendung von Java mit den Apache- und Tomcat-Webservern sowie einige Bücher über die SQL-Datenbankprogrammierung. Java tritt so viel in den Arsch, es tut mir leid, aber PHP hat in der Vergangenheit unzählige Sicherheitslücken, die es genauso nervig machen wie Windows, Ihren Server nicht zu verwurzeln oder SQL-Datenbanken einzuschleusen.
Sie sollten sich auch die Zeit nehmen, um SQL zu lernen. Oracle MySQL Postgresql und MSSQL haben viele Gemeinsamkeiten in Bezug auf die Syntax. Wenn ich mich jedoch nur für das Lernen entscheiden müsste, wählen Sie Postgresql, nur weil es BSD-lizenziert ist, anstatt GPL (Sie sollten einen Vergleich nachschlagen und Kontrast auch bei GPL / BSD-Lizenzen)
quelle
Ich muss sagen, dass der meiste Code, der in objektorientierten Sprachen wie Java geschrieben wurde, nicht wirklich objektorientiert ist. Es ist schwierig, die Ideen hinter OO wirklich zu verstehen, daher ist der angeblich OO-Code eigentlich meistens prozedural.
Dies ist jedoch nichts wirklich Falsches daran, prozeduralen Code in Java zu schreiben. Ja, OO hat Vorteile, aber ich möchte einen beginnenden Programmierer nicht damit verwechseln. Auf dieser Basis sehe ich nichts Falsches daran, Java zu unterrichten. Erwarten Sie kein echtes OO, aber es funktioniert.
Java verbirgt jedoch viele Details auf niedriger Ebene darüber, was im Computer vor sich geht. C lässt diese viel mehr im Freien. Man kann gut behaupten, dass die Schüler lernen sollten, wie diese Details auf niedriger Ebene funktionieren, bevor sie eine Sprache verwenden, die sich um diese kümmert. Sie können aber auch geltend machen, dass Sie diese Details ignorieren und später erfahren sollten.
quelle
Einige andere haben bereits zu diesem Thema geantwortet, aber ich denke, es lohnt sich, dies expliziter zu formulieren.
Selbst wenn Sie anfangen, Programmieren mit einer objektorientierten Sprache wie Java zu lernen, lernen Sie zunächst prozedurale Programmiertechniken, bevor Sie zu den OO-Konzepten gelangen . Wenn Sie einem neuen Programmierer Java beibringen, führen Sie ihn nicht zuerst in Objekte und Klassen ein, sondern in Anweisungen und Variablen. Wenn der Schüler in der Lage ist, viel über Objekte und Klassen zu lernen, verfügt er bereits über mindestens die Grundlagen der prozeduralen Programmierung.
Zumindest müssen Sie also die prozedurale Programmierung in Java und dann die objektorientierte Programmierung in Java lernen. Ob Sie ein ganzes Jahr mit prozeduraler Programmierung verbringen oder nur die ersten Wochen des Programmierkurses verbringen und ob Sie eine andere Sprache dafür verwenden oder nicht, ist nur ein Streit über die Details.
quelle
Um es ganz klar zu sagen, ich denke, der Schwung dafür kommt hauptsächlich von alten Programmierern, die sich alte Zeiten wünschen.
Bevor sagen etwas anderes, ich absolut nicht halten jede Konkurrenzsituation für ältere Programmierer, viele viele von ihnen einfach erstaunlich qualifiziert. Leider sind manchmal diejenigen, die es nicht sind, die angeschwemmt werden und nie wirklich gut programmieren konnten, Professoren geworden, wenn sie es in der "realen Welt" nicht hacken können. (Nicht alle Professoren auch ... aber ... VIELE)
OOP ist weder der heilige Gral der Programmierung, als die es sich herausstellt, noch ist die prozedurale Programmierung ein Relikt. Es ist gut, zumindest einige von beiden zu kennen, aber ich denke, dass die allgemeine Praxis dessen, was als prozedurale Programmierung gelehrt wird, eine enorme Zeit- und Arbeitsverschwendung darstellt. Wir müssen das Programmieren im akademischen Bereich lernen , nicht nur den einen oder anderen Stil. Ich schreibe dem eine Menge schrecklichen Codes und Missverständnisse zu, einschließlich meines eigenen.
quelle
Zwei Gründe für mich: Eine OO-Programmierung löste Probleme der prozeduralen Programmierung. Wenn Sie also eine prozedurale Codierung und dann dieselben Dinge in OO schreiben, können Sie den Unterschied leichter verstehen.
Hier gibt es noch ein zusätzliches Element: Die beiden Ansätze zur Schulung zu Programmierthemen. Man kann mit so niedrig wie möglich beginnen (Beispiel Assembly, an vielen Stellen prozedural, einige andere beginnen mit Schaltkreisen) und dann nach oben gehen (in Richtung OO / Functional / Managed). Der andere Ansatz besteht darin, von der physischen Welt (z. B. Browser / Windows 7 usw.) aus zu beginnen und dann tiefer zu gehen. Jeder Ansatz hat Vor- und Nachteile. Ihre Universität hat sich für die erste entschieden und mit dem Verfahren begonnen. Es könnte eine Begründung geben oder sie haben einfach jemand anderen kopiert :-).
quelle
Es gibt keinen anderen Grund als die institutionelle Trägheit. Schauen Sie sich die CMU an, sie haben ihren gesamten OOP-Lehrplan verworfen und ihn durch funktionale Programmierung ersetzt. Die Antwort auf Ihre Frage lautet also erneut, dass die Administratoren der Schule, die Sie besuchen, eine willkürliche Entscheidung treffen. Für den Fall, dass sich jemand über die tatsächlichen Aussagen wundert, die ich hier gemacht habe, ist der Beitrag über die Änderung des Lehrplans an der CMU durch einen Professor / Administrator: Unterrichten von FP für Studienanfänger .
quelle