Eine Frage an die OOP-Experten. - Seite 15

 
Alexey Navoykov:
Ich sehe also keinen Sinn darin, Ihr "Kung Fu" speziell mit dem OOP zu vergleichen.

Er meint es ernst!

Tag Konow:
Ich bin gerade dabei, mein Konzept patentieren zu lassen. Es gibt Investoren. Es ist also ernst.

Gestern Abend habe ich das Thema Schlafwandeln gelesen.... Aus irgendeinem Grund habe ich mir eine lange Liste von Windows-Entwicklern vorgestellt - wie im Abspann von Star Wars!

und am Ende der Liste - in großen Buchstaben ReTeg Konow !


@Peter Konow kannst du so ein Text-Sprite machen?)
 
Alexey Navoykov:
Sie erinnern sich an alles, was mit dem Projekt zu tun hat, an dem Sie gerade arbeiten. Was ist mit früheren Codes? Erinnern Sie sich noch genauso genau an das, was Sie vor einem Jahr geschrieben haben? Wo sich Dinge geändert haben usw. Jetzt geht es darum, Ihren alten Code zu optimieren oder zu korrigieren.

Und nichts davon hat etwas mit OOP zu tun. Wenn Ihr Code auf öffentlichem Zugriff auf globale Variablen basiert, ist das in keinem Paradigma akzeptabel, weder in prozeduralen noch in OOP, geschweige denn in funktionalen. Daher sehe ich keinen Sinn darin, Ihr "Kung Fu" mit OOP zu vergleichen.

Alles beruht auf dem phänomenalen Gedächtnis von Peter.

Und ich stimme zu, wenn man sich alle Variablen merkt, die im gesamten Projekt verwendet werden, wann und wo sie geändert werden, und wenn man leicht die Stellen findet, an denen eine falsche Änderung vorgenommen wurde - dann wird genau diese OOP in der Tat bedeutungslos. Peter arbeitet in der Tat auf "Assembler-Ebene". Welche OOP-Hacks und Entwurfsmuster man sich auch ausdenkt, letztlich sind alle Datenzugriffe gewöhnliche Speicheradressen, und innerhalb des dem Prozess zugewiesenen Adressraums sind alle Speicheradressen vollständig zugänglich. Der Prozessor selbst weiß nichts über die Kapselung.

So, und so arbeitet Peter. Es gab eine Zeit, in der ich mich selbst für Assembler interessierte.

Die einzige Frage ist, wie er es schafft, mit dem Prozessor in Bezug auf die Speicherkapazität zu konkurrieren.

 
Georgiy Merts:

Das ist alles Peters phänomenalem Gedächtnis zu verdanken.

...

Die einzige Frage ist, wie er es schafft, mit dem Prozessor in Bezug auf die Speicherkapazität zu konkurrieren.

Was ist das für ein Phänomen, wenn wir über ein und dasselbe Projekt sprechen, an dem er die ganze Zeit arbeitet? Natürlich hat jeder Programmierer das alles ständig im Kopf.
Wenn er sich nach einiger Zeit eindeutig an den Code erinnern könnte, wäre das eine andere Geschichte.
 
Alexey Navoykov:
Was ist also das Phänomen, wenn es sich um ein und dasselbe Projekt handelt, an dem er ständig arbeitet? Natürlich hat jeder Programmierer das alles ständig im Kopf.
Wenn er sich nach einer Weile deutlich an den Code erinnern konnte, war es ein weiteres Gespräch.

Nun, dann bin ich nicht irgendwer. Auch ich arbeite meistens an demselben Projekt, kann mich aber nur noch an die Grundzüge erinnern. Solche Details wie was und von welchem Verfahren geändert wird - sehe ich nur im Moment der direkten Entwicklung. Und dann, wenn ich auf diesen Bereich zurückkomme, verbringe ich viel Zeit damit, zu verstehen, warum das so ist und nicht anders. Daher bin ich ein Befürworter der Beschneidung aller Rechte, so dass man im Idealfall an jeder Stelle des Programms nur Zugriff auf das hat, was man an dieser Stelle tun soll.

 
Alexey Navoykov:
Sie erinnern sich an alles, was mit dem Projekt zu tun hat, an dem Sie gerade arbeiten. Was ist mit früheren Codes? Wissen Sie noch so genau, was Sie vor einem Jahr geschrieben haben? Wo sich Dinge geändert haben usw. Jetzt geht es darum, Ihren alten Code zu optimieren oder zu korrigieren.

Und nichts davon hat etwas mit OOP zu tun. Wenn Ihr Code auf dem öffentlichen Zugriff auf globale Variablen basiert, ist das in keinem Paradigma akzeptabel, weder in prozeduralen noch in OOP, geschweige denn in funktionalen. Daher sehe ich keinen Sinn darin, Ihr "Kung Fu" mit OOP zu vergleichen.
Ja, ich erinnere mich an alten Code und verstehe ihn sehr schnell. Das Projekt ist so groß, dass einige Teile seit Monaten oder sogar Jahren nicht mehr geändert wurden, und wenn es an der Zeit ist, etwas zu verbessern (z. B. eine alte Liste), gehe ich alle Details in kurzer Zeit durch, um mein Gedächtnis aufzufrischen, wie es funktioniert, ohne Kommentare, die im Quellcode fast nicht vorhanden sind. Ich erinnere mich, dass ich mir den bloßen Code angesehen habe. Und aus irgendeinem Grund habe ich das Gefühl, dass das jeder kann.
 

Alexey Navoykov:

...

Und nichts davon hat etwas mit OOP zu tun. Wenn Ihr Code auf dem öffentlichen Zugriff auf globale Variablen basiert, ist das in keinem Paradigma akzeptabel, weder im prozeduralen, noch im OOP, geschweige denn im funktionalen. Daher sehe ich keinen Sinn darin, Ihr "Kung Fu" mit OOP zu vergleichen.

Nein, Kung Fu ist hier genau OOP. Eine Menge von Bewegungen und Techniken, unter denen in einem Kampf 10% der nützlich. Aber was für schöne Stile! Und Drache und Affe und Flamingo und Kröte... Ich habe einen bestimmten Sambo. Man hackt und erhält das Ergebnis.

 
Реter Konow:

Nein, hier ist OOP das Kung-Fu. Jede Menge Moves und Tricks, von denen 10 % in einem Kampf nützlich sein werden. Aber was für schöne Stile! Drache, Affe, Flamingo und Kröte... Ich habe einen bestimmten Sambo. Man hackt und erhält das Ergebnis.

Das ist sie nicht.

Ich habe schon hundertmal über die Nützlichkeit von Kapselung und Rechteeinschränkungen gesprochen.

Die Nützlichkeit von Vererbung und Polymorphismus wird deutlich, wenn es um Listen von Elementen geht, für die es zwar eine gemeinsame virtuelle Schnittstelle gibt, deren Implementierung aber sehr unterschiedlich ist.

Hier die einfachste Situation, auf die ich gerade diese Woche gestoßen bin: Es gibt eine Liste von Strukturen, von denen eines der Felder ein Doppelwert ist. Es kam die Idee auf, diese Werte mit Hilfe von OOP anzunähern.

Ohne OOP muss ich entweder vollständige Prozeduren schreiben, die die entsprechenden SLAEs erstellen und lösen. Oder, wenn ich bereits ein solches Programm habe, um mit einem Array von Werten zu arbeiten - schreiben Sie Prozeduren, die ein solches Array erstellen und es an die Bibliotheksfunktion übergeben würden.

Mit OOP - Ich erbe von CLSMCore Klasse, und überladen virtuelle Funktionen, die Punktwerte zurückgeben. Ich kann sofort die Koeffizienten des Näherungspolynoms ermitteln.

Das heißt, unter gleichen Bedingungen (wenn wir eine Bibliotheksfunktion oder Klasse haben), würde ich ohne OOP verlieren, indem ich ein zusätzliches Zwischenfeld einführe. Ganz zu schweigen von der Notwendigkeit, genau herauszufinden, wie man es befüllt. (Funktionen zum Abrufen von Werten - mit oder ohne OOP - müssen geschrieben werden). Der Hauptvorteil liegt meiner Meinung nach in der Einfachheit der Unterstützung und Änderung. Bei OOP gibt es weniger zu verstehen. Und am Anfang habe ich absolut den gleichen Aufwand für das Schreiben der CLSMCore-Klasse betrieben, wie ich ihn ohne OOP für die Annäherungsfunktion der Bibliothek betrieben hätte.

 
Georgiy Merts:

Das ist sie nicht.

Ich habe schon hundertmal über die Nützlichkeit von Kapselung und Rechteeinschränkungen gesprochen.

Die Nützlichkeit von Vererbung und Polymorphismus wird deutlich, wenn man mit Listen von Elementen arbeitet, die eine gemeinsame virtuelle Schnittstelle haben, aber die Implementierung unterscheidet sich erheblich.

Hier die einfachste Situation, auf die ich gerade diese Woche gestoßen bin: Es gibt eine Liste von Strukturen, von denen eines der Felder ein Doppelwert ist. Es kam die Idee auf, diese Werte mit Hilfe von OOP anzunähern.

Ohne OOP muss ich entweder vollständige Prozeduren schreiben, die die entsprechenden SLAEs erstellen und lösen. Oder, wenn ich bereits ein solches Programm habe, um mit einem Array von Werten zu arbeiten - schreiben Sie Prozeduren, die ein solches Array erstellen und es an die Bibliotheksfunktion übergeben würden.

Mit OOP - Ich erbe von CLSMCore Klasse, und überladen virtuelle Funktionen, die Punktwerte zurückgeben. Ich kann sofort die Koeffizienten des Näherungspolynoms ermitteln.

Das heißt, unter gleichen Bedingungen (wenn wir eine Bibliotheksfunktion oder Klasse haben), würde ich ohne OOP verlieren, indem ich ein zusätzliches Zwischenfeld einführe. Ganz zu schweigen von der Notwendigkeit, genau herauszufinden, wie man es befüllt. (Funktionen zum Abrufen von Werten - mit oder ohne OOP - müssen geschrieben werden). Der Hauptvorteil liegt meiner Meinung nach genau in der Einfachheit der Unterstützung und Änderung. Bei OOP gibt es weniger zu verstehen. Und am Anfang habe ich so viel Arbeit in das Schreiben der CLSMCore-Klasse gesteckt, wie ich ohne OOP in die Annäherungsfunktion der Bibliothek gesteckt hätte.

Ich habe zum Beispiel nie verstanden, wozu die Überladung von Funktionen notwendig ist. Es ist absurd, nicht wahr? Wir machen eine Funktion ohne Parameter, schreiben alle Berechnungen der überladenen Funktionen hinein, machen die Variablen global und haben Zugriff auf die Ergebnisse von jeder anderen Funktion. Na, ist das nicht schön!

Aber nein! Wir werden alle Berechnungen in Funktionen mit gleichem Namen, aber unterschiedlichen Parametern unterteilen. Und wir werden einen Haufen von Eingabeparametern für jede Funktion erstellen. Nein, das ist nicht genug. Lassen Sie uns die Namen der Parameter unleserlich machen. Und wir werden alle Arten von Arrays erstellen, die zusammen mit ihnen weitergegeben werden. Und wir werden ein Dutzend solcher Funktionen machen, so dass wir über jede einzelne nachdenken müssen. Und wir werden dafür sorgen, dass der Zugang zu ihnen verschlüsselt wird. Damit die Syntax anspruchsvoller wird. Das ist Professionalität!

Tut mir leid, George. Ich habe genug davon.


ZS. Nur ein globales Array für die Ergebnisse von 10 überladenen Funktionen und eine Funktion ohne Parameter, die deren Arbeit erledigt. Warum ist es schlimmer als das? 10 Mal weniger Syntax.

 
Реter Konow:

Ich für meinen Teil habe nie verstanden, warum Funktionen überladen werden müssen. Es ist lächerlich, nicht wahr? Sie erstellen eine Funktion ohne Parameter, schreiben alle Berechnungen von überladenen Funktionen hinein, machen Variablen global und haben Zugriff auf die Ergebnisse jeder anderen Funktion. Na, ist das nicht schön!

Aber nein! Wir werden alle Berechnungen in Funktionen mit gleichem Namen, aber unterschiedlichen Parametern unterteilen. Und wir werden einen Haufen von Eingabeparametern für jede Funktion erstellen. Nein, das ist nicht genug. Lassen Sie uns die Namen der Parameter unleserlich machen. Und wir werden alle Arten von Arrays erstellen, die zusammen mit ihnen weitergegeben werden. Und wir werden ein Dutzend solcher Funktionen machen, so dass wir über jede einzelne nachdenken müssen. Und wir werden dafür sorgen, dass der Zugang zu ihnen verschlüsselt wird. Damit die Syntax anspruchsvoller wird. Das ist Professionalität!

Tut mir leid, George. Es tut mir leid, George.


ZS. Nur ein globales Array für die Ergebnisse von 10 überladenen Funktionen und eine Funktion ohne Parameter, die deren Arbeit erledigt. Warum ist es schlimmer als das? 10 Mal weniger Syntax.

Richtig, erzählen Sie mir mehr über diese Funktion. Sie haben eine mit einem monstergroßen Schalter, mit dem Sie eine von einem Dutzend Funktionen auswählen können. Bei einem solchen Wechsel kann man sehr leicht einen Fehler machen, indem man versehentlich Code schreibt, der zu einem der nicht vorhandenen Zweige gehört.

Mit einer Überlastung sind die Dinge viel einfacher. Wir haben zehn verschiedene Nachkommen, und zu jeder Zeit arbeiten wir mit EINER Klasse, und die hat EINE überladbare Funktion. Wir können sie nicht versehentlich in eine andere Klasse schreiben, weil wir dafür eine ganz andere Datei öffnen müssen.

Außerdem ist das Parsen selbst in diesem sehr großen Schalter meiner Meinung nach viel anstrengender als das Öffnen der einen Klasse, die wir brauchen, und das anschließende Parsen nur einer Funktion.

Im Assembler-Code läuft die gesamte Handhabung dieses Schalters ohnehin auf denselben Schalter hinaus, der von diesem Zeiger abhängt. Aber im Falle von OOP ist dies alles vor dem Programmierer verborgen und beeinträchtigt seine Arbeit nicht. Ohne OOP müssen Sie damit umgehen.

Grob gesagt: Wenn Sie laufen, senden Sie in einer bestimmten Reihenfolge Signale an Ihre Muskeln, die diese bewegen. Aber auf der Ebene des Bewusstseins erinnert man sich einfach daran, welche Bewegung man machen muss. Hier ist OOP genau diese Art von "Erinnerung an die auszuführende Bewegung". Du "verstehst nicht, warum wir uns an die Bewegung erinnern müssen, wenn wir einen Haufen Muskeln und Nerven haben, die mit ihnen verdrahtet sind". nun... Ich habe schon oft gesagt, dass es für die Titanen des Gedächtnisses völlig ausreicht, sich zu merken, welche Muskeln in welcher Reihenfolge angespannt werden müssen, um loszulegen. Es hat keinen Sinn, sich an die ganze Bewegung zu erinnern. Für andere, die sich nicht so viel merken können, ist es viel sinnvoller, sich die ganze Bewegung zu merken, und was es mit den Muskeln auf sich hat, in welcher Reihenfolge sie angespannt werden und in welchem Ausmaß - es ist sinnvoller, das vor dem Verstand zu verbergen.

 

Реter Konow:

Ich für meinen Teil habe nie verstanden, warum Funktionen überladen werden müssen. Es ist lächerlich, nicht wahr? Sie erstellen eine Funktion ohne Parameter, schreiben alle Berechnungen von überladenen Funktionen hinein, machen Variablen global und haben Zugriff auf die Ergebnisse jeder anderen Funktion. Na, ist das nicht schön!


Unglaublich, Sie bauen eine Art von Fahrrad, ohne den üblichen Ansatz richtig studiert zu haben. Peter, finden Sie ein gutes Buch, vielleicht Stroustrup, in einigen Buch schrieb er einen Text-Editor, auf ein echtes Problem werden Sie etwas lernen, ich erinnere mich nicht an den Inhalt, aber es ist unwahrscheinlich, dass Sie etwas Schlechtes zu lehren.