Ist die OO-Programmierung wirklich so wichtig wie die Einstellung von Unternehmen? [geschlossen]


55

Ich beende gerade mein Masterstudium (in Informatik) und bewerbe mich um eine Stelle. Ich habe bemerkt, dass viele Unternehmen speziell nach einem Verständnis der Objektorientierung fragen. Beliebte Interviewfragen betreffen Vererbung, Polymorphismus, Zugriffsmethoden usw.

Ist OO wirklich so wichtig? Ich hatte sogar ein Interview für einen Programmierjob in C und die Hälfte des Interviews war OO.

Wird in der realen Welt bei der Entwicklung realer Anwendungen fast immer die Objektorientierung verwendet? Werden Schlüsselmerkmale wie Polymorphismus VIEL verwendet?

Ich denke, meine Frage kommt von einer meiner Schwächen. Obwohl ich OO kenne, scheint es mir nicht möglich zu sein, es in meine Programme zu integrieren.


3
Es ist jedoch nicht alles verloren. Zu erkennen, dass es ein Problem gibt, ist der erste Schritt, um es zu beheben :)
verschlungenes Elysium

37
Ich habe mehrere Jahre gebraucht, um zu verstehen, WARUM genau OO ein nützliches Konzept ist. Ich konnte alle technischen Teile verstehen, aber nichts von alledem finden. Ich denke , eine Menge, die von stummen Beispielen war ich habe mit Hunden erstreckt Säugetiere erstreckt Tiere gezeigt ... Was meine Augen öffnete, war ein Blick in OO - Design - Muster, vor allem Zuhörern (auch bekannt als Observer) und Strategie - Muster
MCHL

1
Ja ist es. Ehrlich.
quant_dev

6
Siehe die Antwort von Thorbjørn Ravn Andersen. Um ein guter Programmierer zu sein, müssen Sie sich mit Modularität und API-Design auskennen. Nicht alle Programmierer in der Branche sind gut, aber die meisten verwenden OOP. Leider führt die Mischung aus OOP, nicht modularem Code und mangelhaften APIs zu Software von minderer Qualität, und Sie werden feststellen, dass eine Menge dieser Art von Code am Werk ist. Wenn Sie nicht viel Code in Ihrer Freizeit schreiben, wissen Sie wahrscheinlich nicht viel über "reales" OOP. Das ist in Ordnung, Sie sind in dieser Position nicht allein.
Joh

1
Ho ja er kann. Und glauben Sie mir, wenn Sie das gleiche Verständnis von OOP haben, das Sie hatten, als Sie Ihren Master-Abschluss gemacht haben, dann wissen Sie wahrscheinlich nichts über OOP.
Deadalnix

Antworten:


84

OOP ist ein Paradigma, mit dem Ihr Programm wachsen kann, ohne dass es unmöglich wird, es zu pflegen / zu verstehen. Dies ist ein Punkt, den Studierende so gut wie nie bekommen, weil sie nur kleine Projekte mit einer Dauer von zwei Wochen bis maximal zwei Monaten durchführen.

Dieser kurze Zeitraum reicht nicht aus, um das Ziel von OOP klar zu machen, insbesondere wenn die Leute am Projekt Anfänger sind. Für große Projekte ist es jedoch entscheidend, sich an die Modellierung zu halten. Ich würde sagen,> 50.000 Codezeilen. OOP ist nicht die einzige Lösung dafür, aber die branchenweit am weitesten verbreitete.

Aus diesem Grund möchten die Leute, dass Sie OOP kennen.

Ich möchte aus Erfahrung hinzufügen, dass fast alle Nachwuchsprogrammierer ernsthafte Mängel in der Modellierung und in der OOP haben. Die meisten von ihnen wissen, wie man Klassen schreibt, von ihnen erbt und solche grundlegenden Dinge, aber sie denken nicht in "OOP" und missbrauchen es am Ende. Aus diesem Grund wird jeder ernsthafte Personalvermittler immer nach Ihren Kompetenzen im OOP-Bereich suchen.

Da diese Dinge in der Schule nicht gelernt werden, gibt es einfach eine enorme Variation des Wissens zwischen verschiedenen Kandidaten. Und seien wir ehrlich: Ich glaube nicht, dass jemand mit schlechten OOP-Kenntnissen an einem großen Projekt arbeiten könnte, nur weil Lead-Entwickler mehr Zeit benötigen, um diese Leute zu verwalten, als nur den Code selbst zu schreiben.

Wenn Sie noch nicht an "OOP" denken, empfehle ich Ihnen, einige Bücher darüber zu lesen und sich in Unternehmen zu bewerben, die keine wirklich großen Projekte haben. sich daran zu gewöhnen, dass OOP weiterhin nützliche Arbeit für Ihren Arbeitgeber leistet (und solange er / sie Ihnen Ihr Gehalt gibt, ist dies auch für Sie nützlich).

EDIT: ha, und ich würde hinzufügen, dass ich bereits OOP-Code in C geschrieben habe, auch wenn es nicht die häufigste Verwendung von C ist, ist dies mit soliden Kenntnissen möglich. Sie müssen nur vtables manuell erstellen.

Und hinter der OOP-Technik verbirgt sich etwas: Software-Design. Software-Design ist sehr hilfreich, in C wie in allen anderen Sprachen. Viele Personalvermittler werden Ihre Software-Design-Kompetenzen testen, und die OOP-Frage ist gut dafür, aber OOP ist nicht die Hauptsache, die hier getestet wird. Aus diesem Grund haben Sie diese Fragen auch für einen C-Job.


2
Und ja .. wie ich in einem vorherigen Kommentar geschrieben habe, denke ich, dass ich an einem größeren Projekt arbeiten muss, um OOP zu schätzen :).
Ale

5
Sie brauchen keine vtables, um OOP zu sein. Die einfache Verwendung von structund Funktionen, die an dieser Struktur in C arbeiten, ist OOP.
edA-qa mort-ora-y

2
@ edA-qa mort-ora-y struct bietet keine OOP-Funktionalität. Polymorphismus? Erbschaft? Bedeutet Ihnen das etwas? OK, wie können Sie virtuelle Funktionen ohne vtable implementieren?
Deadalnix

2
@deadalnix: Sie implementieren sie auf dieselbe Weise, wie .NET und Java Mehrfachvererbung durchführen. Sie sollten wissen, dass die ersten C ++ - Compiler überhaupt keine Compiler waren, sondern Übersetzer, die C ++ - Code verwendeten und in C-Code umwandelten, der an einen C-Compiler übergeben wurde. Google "CFront".
gbjbaanb

3
Java und; NET führen keine Mehrfachvererbung durch. Und ja, C ++ ist automatisch in C übersetzbar, aber dies hat nichts mit dem Problem der Verwendung von vtable zu tun oder nicht. In der Tat müssen Sie: Sie können keine virtuellen Funktionen ohne eine vtable implementieren.
Deadalnix

38

Das überwältigende Problem bei der Computerprogrammierung ist der Umgang mit Komplexität, und moderne Programme können in der Tat sehr komplex sein, und dies scheint nur zuzunehmen.

Ein Großteil der Arbeit im Bereich der Softwareentwicklung für nicht triviale Computerprogramme konzentriert sich darauf, die Komplexität zu beherrschen und sie möglichst vielen zugänglich zu machen, ohne zuvor ein Leben lang zu lernen.

Beispiele:

  • Modularisierung: Sie vereinfachen Programme konzeptionell, indem Sie Codemodule verwenden, in denen jedes Modul nur wenig über andere Module weiß (statt z. B. eines Maussymbols, mit dem das Routing direkt die Netzwerkkartenpuffer manipulieren kann).
  • APIs: Sie geben einen einfachen Verwendungspfad zu den komplexen Programmen hinter den APIs. Wenn Sie eine Datei öffnen, ist es Ihnen egal, dass Netzwerkfreigaben anders behandelt werden als eine USB-Festplatte. Die API ist die gleiche.
  • Objektorientierung. Auf diese Weise können Sie vorhandenen Code wiederverwenden und mit neu hinzugefügtem Code transparent arbeiten lassen, während die zugrunde liegende Komplexität verborgen bleibt.

Mit anderen Worten, viele Tricks zu kennen, ist notwendig, wenn Sie an nicht-trivialen Software-Teilen arbeiten möchten, entweder alleine oder (höchstwahrscheinlich) mit anderen.


7
Ich finde es gut, dass Sie einen Unterschied zwischen Modularität, APIs und OO gemacht haben. Ich denke, es gibt ein weit verbreitetes Missverständnis in der Softwareindustrie, dass OO all diese Dinge meint.
Joh

3
Auch wenn die Kenntnis von OO selbst keine strenge Anforderung ist, reichen in bestimmten Bereichen (C oder Haskell) Verfahrens- und Funktionsparadigmen aus. Sie müssen noch Modularisierung und API-Design lernen.
Raynos

@Raynos, in C gibt es Funktionszeiger, mit denen Sie genau das tun können, was OO an sich tut. In ähnlicher Weise verwendet Haskell Pattern Matching, um explizit das zu tun, was der Compiler z. B. in Java tut.

@ThorbjornRavnAndersen Es ist eine kleine Nische, OO-Stil C und Haskell zu schreiben. Ich sage nur, dass die Wiederverwendung von Code im prozeduralen und funktionalen Paradigma erfolgen kann.
Raynos

3
@mathepic Ich sage nicht, dass man OO haskell schreiben soll (oder ob es überhaupt existiert). Ich sagte, du musst OO nicht kennen. Es gibt andere Möglichkeiten, mit Komplexität
umzugehen

14

Ja, vor allem, weil die beiden beliebtesten Entwicklungsplattformen, die in der kommerziellen Entwicklung verwendet werden (Java und .NET), möglicherweise objektorientiert sind und dies bedeutet, dass OO häufig verwendet wird (einschließlich Polymorphismus, Vererbung und allem anderen).

Unternehmen interessieren sich nicht speziell für die Objektorientierung als Technologie - dies ist keine ideologische Angelegenheit, sondern für Menschen, die Lösungen für ihre Probleme auf eine Weise entwickeln können, die mit ihrer IT-Strategie in Einklang steht.

Aber ich würde mir keine Sorgen machen, dass es eine Schwäche ist. Ohne Ihre Ausbildung zu missachten, sehen die meisten Menschen in der Geschäftswelt Programmierer, die die Universität verlassen (egal auf welchem ​​Niveau), nicht als fertigen Artikel an. Sie haben noch viel zu lernen und das wird verstanden (wahrscheinlich besser von den Unternehmen als von den Studenten).


2
Müssen Sie darauf hinweisen, dass sich Unternehmen nicht um OO kümmern - gute Unternehmen kümmern sich um wiederverwendbare / wartbare Codebasen, und OO-Muster sind der anerkannte Weg, dies zu tun.
HorusKol

1
@ HorusKol - Trotzdem waren Perl, Cobol und Visual Basic kommerziell erfolgreich und Smalltalk nicht. Sie haben Recht, Unternehmen mögen wartbaren Code, aber es ist keine absolute Anforderung, sie werden ihn mit anderen Faktoren abwägen.
Jon Hopkins

Nun, Cobol war schon vor OO da. Ich kann Smalltalk nicht kommentieren, aber ich stelle mir vor, dass es Probleme damit gegeben haben muss, wenn es nicht aufgegriffen wurde.
HorusKol

1
@HorusKol - Cobol und OO entstanden tatsächlich ungefähr zur selben Zeit (Ende der 50er Jahre), aber selbst wenn wir annehmen, dass OO erst in den 70er oder sogar in den 1980er Jahren richtig Fuß gefasst hat (warten Sie auf C ++), wenn es DAS ist Ein großes Geschäft für Unternehmen, warum es sich erst Ende der 90er Jahre (mit Java) durchsetzte. Die Antwort ist, dass es andere Möglichkeiten gibt, eine wartbare Codebasis als OO zu haben - Unternehmen kümmern sich um wartbaren Code, aber es gibt mehr als eine Möglichkeit, eine Katze zu häuten, und OO ist nicht die einzige Lösung.
Jon Hopkins

Es ist schon komisch, die Plattformen selbst OO zu nennen. Clojure ist nicht OO. Ich denke, Scala hat einige OO-Elemente, wird aber am besten auf funktionale Weise verwendet. F # ist so ähnlich. Schreiben von OO-Code in F # ist nur schmutzig.
Sara

7

Wie im wirklichen Leben unterscheidet sich die Programmierung im wirklichen Leben von der Theorie.

Ja, wenn Sie das OO-Paradigma stets im Hinterkopf behalten, können Sie besser verwaltbaren, verständlichen und leicht erweiterbaren Code schreiben.

Leider hat die reale Welt dies:

  • Projektzeitdruck
  • prozessorientierte Teammitglieder
  • standortübergreifende Teams, mehrere Anbieter
  • Legacy-Code hat keinerlei Orientierung
  • Solange es funktioniert, kümmern sich einige darum, wie Code geschrieben wird
  • Selbst wenn Code nicht funktioniert, besteht die Motivation darin, ihn zu reparieren, nicht "OO"
  • Module, Plattformbeschränkungen, Frameworks, die es Ihnen einfach nicht erlauben, gute OOs zu erstellen

In einem echten Job muss man sich mit den oben genannten Themen beschäftigen. Das klingt demoralisierend. Aber behandeln Sie dies als Heads-up. Bei der Einstellung von Unternehmen wird zu viel Wert auf OO gelegt. Es ist leicht zu verstehen, warum. Die einzige Möglichkeit, den Kandidaten zu testen, besteht darin, nach dem Verständnis von OO zu fragen. Und leider werden diese Fragen von vielen Kandidaten aufgearbeitet, bevor sie zu einem Vorstellungsgespräch erscheinen.

Real-Life-OO kommt langsam. Es hilft, wenn Sie weiterlesen und im Laufe der Zeit verbessern.


6

Ich hatte nach Abschluss meines Bachelor-Studiums das gleiche Gefühl und ein großartiges Buch, das mir zeigte, warum und wie wichtig OOP für reale Anwendungen ist, ist Head First: Design Patterns . Ich empfehle Ihnen aufrichtig, einen kurzen Blick darauf zu werfen. Es macht wirklich Spaß und es gibt viele gute Gründe, warum ein OOP-Ansatz wünschenswert ist, wenn Sie mit größeren, sich ständig ändernden Systemen arbeiten.


Ich bin froh, dass ich nicht der einzige bin! Vielen Dank. Ich schaue mir das Buch an :).
Ale

6

Selbst für einige Jobs in C müssen Sie möglicherweise objektorientiertes Design kennen (und wahrscheinlich besser darin sein, als wenn Ihr Compiler dies für Sie getan hätte), wie eine kürzlich erschienene Artikelserie über objektorientiertes Design im Linux-Kernel belegt. ( Teil 1 , Teil 2 )

GTK + verwendet auch viele objektorientierte Entwurfsmuster.


4

Ich muss eine gewisse Meinungsverschiedenheit darüber zum Ausdruck bringen, dass OO alles ist - man könnte sagen, dass OO Ihnen erlaubt, Städte zu bauen, aber Verfahrensprogramme sind die Bausteine.

Um meine Antwort in Form einer Analogie zu geben, braucht ein General Gegenstände, der Soldat Verfahrensweisen. Sobald Sie sich ausreichend mit OO vertraut gemacht haben, finden Sie Vorgehensweisen. Wenn dies Ihr Fachwissen ist und Sie gut genug sind, machen Sie sich keine Sorgen um OO, da es für jemanden einfach genug ist, diesen OO-Schachspielcode zu schreiben:

-findBestMove
-makeBestMove
-waitForPlayerInput

aber dann muss jemand den Code hinter -findBestMove schreiben und Sie können sicher sein, dass es nicht nur das ist:

foreach $move (@moves){
    $bestMove = ($move > $bestMove ? $move : $bestMove)
}
return $bestMove

Sorgen Sie sich dagegen, wenn Sie nicht wissen, wie der OO-Code gelesen wird. Weil Sie (fast) sicher sein können, dass Ihr Code mit irgendwelchen Objekten in Unordnung gerät. Es sei denn, Sie arbeiten am Fortran Legacy Behemoth von 12000 globalen Vars und 1200 Line "Modulen", die ich derzeit betreue.


4

Jon Hopkins schrieb:

Ja, vor allem, weil die beiden beliebtesten Entwicklungsplattformen, die in der kommerziellen Entwicklung verwendet werden (Java und .NET), möglicherweise objektorientiert sind und dies bedeutet, dass OO häufig verwendet wird (einschließlich Polymorphismus, Vererbung und allem anderen).

Das ist ziemlich genau das, was ich sagen wollte, aber es ist nicht nur Java und .Net, C ++ ist überall, Objective-C ist überall in OSX, all die coolen Kids machen Ruby oder Python und all diese Dinge und viele viele mehr haben einen Fokus auf Objektorientierung. Viele neuere Sprachen sind multiparadigm, so dass F # in erster Linie eine funktionale Sprache ist, aber auch die Objektorientierung unterstützt. Es ist überall und zumindest ein wenig Verständnis ist sehr nützlich. Ärgern Sie sich nicht zu sehr darüber, denn gerade abgeschlossene Universitätskurse bedeuten, dass Sie bereit sind, etwas über die Entwicklung von Code in der realen Welt zu lernen :)


3

Ich habe lange programmiert und finde, dass die Konzepte von OO auch beim Programmieren in C nützlich sind - auch wenn ich diese Konzepte im Test wahrscheinlich nicht bis ins kleinste Detail beschreiben würde. Irgendwann habe ich sogar eine OO-Sprache erstellt, wenn auch eine rudimentäre, um mich mit den Konzepten vertraut zu machen und OO aus einem neuen Blickwinkel zu genießen.

Übrigens, C ++ hat OO massiv und hässlich durcheinander gebracht, wohingegen Objective C es richtig macht.

Über Interviews sind sie zu einer Horrorshow geworden - von beiden Seiten des Tisches. Die meisten Befragten sind sehr verrückt nach ihnen. Die meisten Einstellungsmanager sind erstaunt darüber, wie viele Leute selbst bei sehr einfachen Programmiertests durchfallen.

Das heißt, es gibt einige enorme Duschtaschen in der Softwareindustrie, die NICHTS kennen und dennoch die Welt von zukünftigen Mitarbeitern erwarten.


C ++ ist eine Multiparadigmasprache, kann aber gut mit OO umgehen. Nein?
Nikko

1
Ich würde sagen, das C ++ gibt Ihnen die Möglichkeit, eine große hässliche Sauerei zu machen. Wenn es richtig gemacht wird, ist seine Schönheit seine Einfachheit.
Martin York

Das Überspringen der Grundlagen führt immer zu einem großen Durcheinander. C ++ hat nur eine Menge Grundlagen, die Sie verstehen müssen. Aus diesem Grund ist es möglich, C ++ für große Programme zu verwenden. Es ist notwendig.
tp1

@Ponk: Übrigens , C ++ hat ein riesiges und hässliches Durcheinander von OO verursacht, wohingegen Objective C es richtig macht. - Ich habe Objective C nicht ausprobiert, daher habe ich keinen Grund, an Ihnen zu zweifeln, aber wo kann ich ein gründlicheres und überzeugenderes Argument dafür finden?
Jim G.

3

Das Erlernen von OOP ist nicht so nützlich wie das Erlernen der Softwareentwicklung. Lesen Sie Code Complete 2 .

Sicher, es ist ein nützliches Tool, aber OOP selbst ist sehr klein. Wenn Unternehmen und Personalvermittler "OOP" sagen, meinen sie im Allgemeinen "Softwareentwicklung". Es wird als Oberbegriff verwendet.

Echte Personalvermittler werden den Unterschied zwischen dem Wissen, wie man Software entwickelt, und dem Kästchen "Hat 3 Jahre in 'OOP'" erkennen.


Ja, in diesem Zusammenhang ist OOP genau wie GUI, da in "Sie benötigen 5 Jahre GUI-Erfahrung für diese Rolle".
gbjbaanb

1

Die Antwort lautet ja, wie mehrere andere angemerkt haben.

ABER, wenn Sie auf Stapel von Nicht-OO-prozeduralem Spaghetti-Code arbeiten möchten, können Sie das auch dort herausfinden. Ich denke, Sie werden die OO-Arbeit vorziehen.

EDIT: Verzeihen Sie meinen Fall von Revolverhelden Zynismus und Sinn für Humor. Wie Raynos sagte, nur weil etwas OO ist, heißt das nicht, dass es gut ist. Die richtige Anwendung von OO erfordert echte Arbeit und Gedanken. Nur Instanzen davon zu haben, bedeutet nicht automatisch, dass eine App gut gemacht ist. Und umgekehrt bin ich mir sicher, dass es da draußen gut geschriebenen Verfahrenscode gibt. Meine Erfahrung in IT-Unternehmensshops in den 90er und 2000er Jahren war, dass viel schlechter Code geschrieben wurde und wahrscheinlich immer noch existiert. Aber näher an der Frage des OP ist mir aufgefallen, dass die intelligenteren Entwickler, wenn sie die Chance haben, zu mehr OO-Systemen wechseln.


3
-1 für den Nicht-OO-Code ist Spaghetti. und dieser OO macht gute "nicht Spaghetti" durch schwarze Magie.
Raynos

@ Raynos Das ist ein fairer Punkt. Und nur weil etwas OO nicht verwendet, heißt das nicht, dass es schlecht ist. Ich werde bearbeiten.
Bernard Dy

Es ist auch nicht nur ein prozedurales vs. prozedurales / OOP, es gibt auch funktionale Paradigmen.
Alternative

Ich habe an nicht wartbaren OO-Apps gearbeitet, in denen Objekte wie Konfetti verstreut waren. OOP ist kein Wundermittel, es ist nur eine definierte Art, Ihren Code zu organisieren.
gbjbaanb

2
Ja, ja, tausendmal ja! Bitte sehen Sie die Bearbeitung. Mein Kommentar war mehr ein Widerhaken gegen die zahlreichen Fälle von schlechtem Legacy-Code, an denen ich mit Vergnügen gearbeitet habe, als ein besonderer Stups von prozeduralem oder OO. Aber wenn ich die Wahl hätte, würde ich lieber an einem gut gestalteten OO-System als an einem gut gestalteten prozeduralen System arbeiten. und ein gut entworfenes System über ein schlecht entworfenes System jeden Tag.
Bernard Dy

1

OO ist eine grundlegende Basis, auf der andere Techniken aufgebaut sind. Ein wichtiger Punkt ist, zuerst den Unterschied zwischen einem Typ (einer Klasse) und einer Instanz dieses Typs vollständig zu verstehen. Versuchen Sie nicht, weiterzulesen, ohne dies vollständig zu verstehen (dies wird später klar), da Sie den Rest noch einmal durchlesen müssen, sobald Sie die Vision erfasst haben.

Sobald Sie den Dreh raus haben, werden Sie nie mehr darauf verzichten wollen. Ich bin kein Purist, wenn es um Verkapselung, Muster, Frameworks oder was auch immer geht. Bei der Arbeit müssen Sie sich an verschiedene Ansichten und Konzepte anpassen. Ich werde einige meiner bisherigen Berufserfahrungen auflisten:

In einer Firma wollten meine Kollegen so viel wie möglich faul laden (leere Konstruktoren, sperrige Eigenschaften, die überall auf Nullwerte prüfen mussten). Sie bauten webbasierte serverseitige Objekte, die nur ein kurzes Leben führten.

Der nächste Job war genau umgekehrt. Objekte, die sich in einer Desktop-Anwendung (Excel-basiert) befanden. Möglichst viele Initialisierungen sollten sich im Konstruktor befinden (oder in einer der vielen Konstruktorüberladungen). Leere Konstruktoren waren nicht erlaubt, da leere Objekte kein Existenzrecht hatten (was die Persistenz zu einer ziemlichen Herausforderung machte). Außerdem musste ich mich an die "Coding-Style-Standards" anpassen (wo man Klammern öffnet, nach Kommentaren Leerzeichen hinzufügt usw.), da mein Code nicht eingecheckt werden konnte, wenn er nicht über style-cop kam.

Derzeit arbeite ich in einem Unternehmen, in dem keiner der Entwickler jemals versucht hat, OO zu verstehen. Es ist schwer auszudrücken, wie extrem frustrierend das war. Ich musste meine Grep-Kenntnisse verbessern. Tatsächlich wurde meiner F12-Taste ein HotScripts-Makro zugewiesen, um einen Grep-Vorgang für den ausgewählten Text durchzuführen. Ich werde die anderen Frustrationen verschonen ...

Sobald Sie OO Fähigkeiten erhalten, werden Sie fast zu den Spaghettis allergisch! Jedoch in allen Fällen, sei geduldig und passe dich an. Zögern Sie, "es wegzuwerfen und von vorne zu beginnen". Dein Chef wird dich lieber wählen, wenn es darum geht, dich rauszuwerfen. Leider ist "Geld verdienen" wichtiger als eleganter Code.

Entschuldigung für die lange Antwort, aber ich habe versucht, den größten Teil Ihrer Frage abzudecken :-)


Vielen Dank für Ihre Geschichten. Ich habe es genossen, sie zu lesen! Derzeit arbeite ich an einem C ++ - Projekt und nutze diese Gelegenheit, um mir Möglichkeiten zu überlegen, wie ich OO-Techniken einsetzen könnte. Im Moment läuft es gut :). +1 für Sie antworten. Danke.
Ale

1

OOP ist nicht wegen sich selbst wichtig, sondern wegen dem, was es mit sich bringt. Etwas, das sich mit der Fähigkeit befasst, Dinge zu abstrahieren und zu isolieren, Dinge zu gruppieren und nur die Teile freizulegen, die benötigt werden, um miteinander zu interagieren.

Dies ist eine gebräuchliche Technik namens "Modularisierung", die es ermöglicht, komplexe Systeme als Aggregation von einfacheren zu erstellen, ohne auf hoher Ebene auf jedes einzelne Detail Rücksicht zu nehmen, und bei der Komponenten austauschbar sein müssen, auch wenn sie nicht genau die richtigen sind gleich.

Es wurde versucht, diese "Konstruktionskonzepte" in die Softwareentwicklung einzubeziehen, seitdem das Softwareprodukt selbst größer als die "Einzelentwicklerfähigkeit" geworden war. Daher war eine Möglichkeit erforderlich, Entwickler dazu zu bringen, an unabhängigen Teilen zu arbeiten und diese Teile zuzulassen zusammen interagieren.

Das heißt, diese Prinzipien sind nicht notwendigerweise nur in OOP zu finden (wenn die Berechnungstheorie gültig ist, gibt es unendlich viele mögliche Methoden, um zu diesen Ergebnissen zu kommen).

OOP ist einfach ein erfolgreicher Versuch , die Dinge zusammen zu stellen, zu diesen allgemeinen Bedingungen geben (wie Module, Verkapselung, Substitution) präzisere Definitionen und aufwendige Konzeptualisierung auf diesen Definitionen (Muster) , die können in Programmiersprachen passen.

Denken Sie an OOP zunächst nicht als " Sprachfeature ", sondern als " gemeinsames Lexikon ", das Softwareentwickler dazu bringt, sich dem Software-Design anzunähern.

Die Tatsache, dass eine gegebene Sprache Grundelemente hat oder nicht, die dieses Lexikon direkt erzwingen und beispielsweise sicherstellen, dass eine "Kapsel" nicht versehentlich von dem geöffnet wird, der dies nicht tun soll, ist ein sekundärer Aspekt des OOP-Entwurfs. Deshalb werden auch große C-Projekte oft als OOP "verwaltet", auch wenn die Sprache selbst keine direkte Unterstützung dafür bietet.

Der Vorteil von allem, was nicht erkennbar ist, bis eine Projektgröße in der Fähigkeit eines einzelnen Entwicklers verbleibt, alles zu verstehen und nachzuverfolgen (in solchen Situationen kann dies sogar als "Overhead" angesehen werden) oder in einer kleinen Gruppe, in der etwas entwickelt wird eine kurze Zeit. Und das ist der Hauptgrund, warum Junioren, die OOP anhand eines "Sprachfeatures" studiert haben, es oft falsch interpretieren und schlecht gestalteten Code produzieren.

Wie OOP in Sprachen passt, hängt davon ab, wie Sprachdesigner das OOP-Prinzip in ihrem eigenen Konstrukt interpretieren.

So wird "Kapselung" in C ++ zu "privaten Mitgliedern" (und eine "Kapsel" wird zu einer Klasse), "Substitution" wird zum Überschreiben virtueller Funktionen oder zur Parametrisierung / Spezialisierung von Vorlagen usw., während in D eine Kapsel ein "Modul" ist (und die Substitution erfolgt) durch Klassen usw.), wodurch ein bestimmtes Paradigma oder Muster direkt in einer bestimmten Sprache verfügbar gemacht wird und nicht in einer anderen und so weiter.

Was Personalvermittler bei der Beantwortung von OOP-Fragen suchen, ist nur die Überprüfung Ihrer Fähigkeit, Software-Design für zukünftige große Projekte und Entwicklungen zu abstrahieren und zu verstehen. OOP, für sie ist es nur ein "Wörterbuch", von dem sie angenommen haben, dass Sie und sie es wissen, damit Sie über andere allgemeinere Dinge sprechen oder sich in einer bestimmten Implementierung konkretisieren können.


0

Eine objektorientierte Sprache hilft Ihnen dabei, ein objektorientiertes Design in Ihrem Code beizubehalten, was gut ist. Es ist aber auch wahr, dass ein solches Design mit jeder anderen Paradigmasprache erzielt werden kann: Der Grund für die Popularität (insbesondere bei Unternehmen) von OO-Sprachen liegt wahrscheinlich im kommerziellen Erfolg von Java und C #.

Wenn Herr Gates sein Unternehmen richtig gegründet hätte, würden wir wahrscheinlich SCHEMA studieren, bevor wir uns auf eine Stelle bewerben.


Das Programm erschien im selben Jahr wie Microsoft (obwohl es zuvor sicherlich noch andere LISPs gab). Außerdem verdanken Java und C # einen Großteil ihres Erfolgs Alan Kay, insbesondere Smalltalk und Simula, sowie dem Erfolg von C ++.
JasonTrue

0

Die kurze Antwort lautet Ja

Die längere Version, warum Sie sich fühlen oder in einem Dilemma, warum es wichtig ist, beruht nur auf der Tatsache, dass Sie an keinen Projekten oder Implementierungen gearbeitet haben, die einem bestimmten Zweck dienen. In Klassenzimmern ist es durchaus gültig, Beispiele für Automobile zu haben, die dann auf PKW, LKW usw. ausgeweitet werden. Wenn Sie jedoch in die Softwareentwicklung einsteigen, ist dies eine Lösung, die auf die Erleichterung einiger Aufgaben abzielt. Wenn es nicht OOso wäre, müsste jeder ähnliche Codes über die Codebasis oder schreibenRäder jeden Tag neu erfinden. Stellen Sie sich vor, was für ein Durcheinander es wäre, wenn man in eine solche Codebasis eintauchen würde, um etwas zu reparieren. Die Beispiele im Klassenzimmer dienen einer vagen Definition oder Darstellung, wie / warum dies durchgeführt wird. Der eigentliche Test ist abgeschlossen, wenn Sie mit dem Erstellen Ihrer App beginnen. Zweifellos könnte sie fürchterlich verwendet werden, aber aufgrund ihrer klaren und prägnanten Verwendung ist sie äußerst vernünftig. Beginnen Sie also besser mit der Arbeit an diesem schwachen Bereich, wenn Sie keine Alptraumcodes ausgeben.


0

Es hängt davon ab, ob. Ein Grund, warum Sie OO kennen müssen, weil es die Verkehrssprache der Programmierwelt ist. Wie eine andere Antwort zeigt, ist fast jede Hauptsprache in irgendeiner Weise OO, was bedeutet, dass im Grunde jedes Unternehmen, das Sie einstellen könnte, eine OO-Sprache verwendet. Haben Sie jemals versucht, OCaml-Programmierer einzustellen? Es ist unmöglich; der talentpool ist zu klein. Wenn Sie Ihr Unternehmen mit OCaml gegründet haben und Ihr Unternehmen erfolgreich wird, können Sie Programmierer nicht schnell genug einstellen und das Geschäft wird eingestellt. Daher verwendet fast jedes Unternehmen mit mehr als 3 Programmierern eine OO-Sprache. Um mit Ihren Mitarbeitern zu kommunizieren und die Bibliotheken Ihrer Plattform zu nutzen, benötigen Sie Kenntnisse über OO.

Je nach Sprache des Unternehmens sind Vererbung und Polymorphismus entweder extrem wichtig oder nur mäßig relevant. Sie können in Java nichts tun, ohne 10 GoF-Entwurfsmuster und ein Framework für die Abhängigkeitsinjektion zu eliminieren. Java ist eine der am häufigsten verwendeten Sprachen, daher sind die OO-Prinzipien für die vielen Unternehmen, die Java verwenden, sehr wichtig.

Wenn das Unternehmen eine moderne hybride OO- / Funktionssprache mit Lambdas und Funktionszeigern wie Scala oder C # verwendet, wird die Vererbung plötzlich weniger wichtig, da Sie Funktionen höherer Ordnung haben, um viele der wirklich einfachen Dinge zu handhaben, die ansonsten viel erfordern würden Zeremonie. Sie müssen jedoch weiterhin in der Lage sein, mit OO-Inhalten zu arbeiten, da die meisten Bibliotheken, die Sie verwenden, auf OO-Weise geschrieben werden.

Wenn Vererbung und Polymorphismus für das Unternehmen nicht wichtig sind , werden Sie wahrscheinlich immer noch OO-Fragen haben, weil:

  • Sie werden von einer HR-Person interviewt, die nichts über Programmierung weiß und Fragen von einer Checkliste stellt. Haben Sie 3 Jahre X, Multitasking usw.
  • Sie werden von einem Ingenieur interviewt, der sicherstellen möchte, dass Sie nicht unter einem Felsen gelebt haben. OO ist die Verkehrssprache, daher werden Ihnen einige flüchtige Fragen dazu gestellt.
  • Sie werden von einem Ingenieur interviewt, der sich nicht besonders gut mit Interviews auskennt. Im Allgemeinen lieben Ingenieure Kleinigkeiten und Komplexität, sodass Sie viele Fragen zu Polymorphismus, Vererbung und GoF-Entwurfsmustern nur erhalten, weil diese Dinge für die Person, die Sie interviewt, interessant sind.

Warum die Gegenstimme?
Dan

-1

Mit einem Wort "Ja".

Sie denken vielleicht, Sie kennen die Theorie, aber Sie müssen Code schreiben und in die Praxis umsetzen. Es gibt buchstäblich Tausende von Beispielen und Übungen, die online verfügbar sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.