Rechtschreibung selber gemacht

Über das Thema automatische Rechtschreibkontrolle habe ich schon einen Blogpost verfasst. Das Ergebnis war, dass es derzeit keine guten Rechtschreibprogramme gibt und wenn es sie gibt muss man sie interaktiv bedienen, was jedoch keinen Spaß macht. Auch eine Suche nach besserer Software brachte bisher keinen Erfolg. Was also liegt da näher, als selber eine Rechtschreibungssoftware zu erstellen?

Wie sie funktionieren soll ist simpel: vollautomatisch und on-the-fly. Das heißt, wenn erst der Nutzer aus einer Reihe von Vorschlägen auswählen muss dann taugt die Software nichts. Aber wie programmiert man eine Software? Nun, die Programmiersprache ist zweifellos Python, das ist klar. Und als Basis benötigt man vermutlich ein Wörderbuch. Man kann sich aber auch ein eigenes erstellen und zwar aus den Wörtern die man schon im Text hat. Die Problematik dürfte in den vielen Besonderheiten der deutschen Sprache zu suchen sein. Wie so eine Software im Detail aussehen kann weiß ich nicht, aber Fakt ist dass die Leute die sich bisher an diesem Problem versucht haben, damit gescheitert sind. Im Grunde ist das was die Leute aus dem aspell Team sagen komplett ohne Bedeutung, weil man dort nachwievor glaubt, dass man gute Arbeit geleistet hätte. Ich finde, dass wichtiger als Programmierfähigkeiten ist zunächst einmal die Einsicht, dass existiernde Programme nichts taugen.

Ich will mal versuchen wenigsten einen Prototypen zur Rechtschreibkorrektur zu erstellen. Ob es mir gelingt ist unklar, mal abwarten wie weit ich komme und wo die ersten unlösbaren Probleme auftauchen.

Eine erste Programmversion sieht so aus:

myfile = open('text.txt','r')
words = list(myfile.read().split())
print words

Der Code extrahiert alle Wörter aus einer Datei und zeigt sie an. Natürlich sind da noch viele Bugs enthalten. Man muss den Code noch weiter entwickeln.

Ein wenig elaborierter ist da schon der folgende Code:

myfile = open('text.txt','r')
words = list(myfile.read().split())
for i in range(len(words)):
  print i, words[i]

Diesmal wird die Liste etwas übersichtlicher formuliert und man sieht vor jedem Wort einen Counter der hochzählt. Was jetzt noch fehlt ist ein Wörterbuch gegen das man die Wörter testet. Die wohl einfachste Form besteht darin, sich selber eines zu erstellen, das zu Testzwecken aus nicht mehr als 5 Wörtern besteht.

Vielleicht noch ein kleiner Exkurs was das Ziel dieses kleinen Projektes ist. Und zwar geht es darum, zunächst einmal herauszufinden wie weit mit einem selbst geschriebenen Spellchecker kommt, und ab wo man scheitert. Denn, schaut man sich einmal existierende Programme an, so bestehen diese aus sehr vielen Lines of Code. Das heißt, die Aufgabe ist offenbar sehr kompliziert. Die Frage ist: warum? Zwar ist der aktuelle Prototyp noch nicht für irgendwas nützlich, die gute Nachricht ist jedoch, dass er einen vorhandenen Text aber auch nicht verschlechtert. Das heißt, er liest ihn ein und gibt ihn aus dem Bildschirm aus.

Die nächste Programmversion ist schnell erstellt. Sie kann bereits das Wörterbuch ausgeben und die Textdatei im Anschluss:

print "Dictionary:"
mydict = open('dict.txt','r')
words = list(mydict.read().split())
for i in range(len(words)):
  print i, words[i]
print "\nTextfile:"
myfile = open('text.txt','r')
words = list(myfile.read().split())
for i in range(len(words)):
  print i, words[i]

Die nächst folgende Programmiteration würde darin bestehen, dass man jedes Wort im Wörterbuch nachschlägt und es entweder findet oder nicht, und das als grafische Ausgabe mit angibt. Das ist jedoch etwas komplexer und wird in späteren Blogposts erläutert.

Es mangelt an Spell-Checking Programmen

Eigentlich sollte man denken, dass im Laufe der Jahre genug Manpower in die automatische Rechtschreibkontrolle investiert wurde. In der Tat ist die Anzahl an derartiger Software groß. Firefox besitzt einen eingebauten Spellchecker, unter Linux gibt es aspell, Online Webseiten werden auf http://praxistipps.chip.de/rechtschreibpruefung-online-die-3-besten-sites_27316 vorgestellt und speziell für englische Rechtschreibung gibt es noch weitaus mehr Programme. Leider sind derartige Tools in der Praxis nur wenig hilfreich. Sie basieren auf manueller Mitarbeit. Man muss sich einen Absatz anschauen die unterkingelten Wörter anklicken und einen der Vorschläge akzeptieren. Manchmal werden auch Wörter unterkringelt die zwar korrekt geschrieben sind, aber der Software unbekannt sind. Und ganz schwer ist es, wenn man Deutsch und Englisch mischt, im Regelfall wird die Rechtschreibkontrolle dann zur Farce.

Wo liegt das Problem? Eigentlich sollte man denken, es wäre möglich eine Software zu schreiben die nichts weiter kann als die Rechtschreibung zu checken. Wo man also einen fehlerhaften Text hineingibt und die korrigierte Fassung herauskommt. Leider gibt es so eine Software aktuell nicht. Jedenfalls nicht für Normaluser. Gerüchten zufolge ist im IBM Watson Bluemix API eine Rechtschreibkontrolle enthalten die auf semantischer Ebene arbeitet, aber wer hat schon einen Zugang zu dieser Höllenmaschine? Und so muss man leider konstatieren, dass bis heute das Problem noch nicht gelöst wurde. Also lieber Hacker, wer schreibt die erste brauchbare Rechtschreibkontrolle? Sie müsste folgende Features besitzen:

– gemischte Sprachen: Deutsch und Englisch im selben Text
– Umlaute
– sehr große Wortliste
– Kontexterkennung
– interaktionsfrei, das heißt der User muss nirgendwo draufklicken sondern die Software agiert autonom

Die gute Nachricht lautet dass vom technischen her eine solche Software möglich ist. Man muss da keine superneue Technologie wie neuronale Netze oder ähnliches einsetzen. Sondern das Geheimnis besteht darin, dass man sehr viele Features hintereinanderschaltet. Also in einer Pipeline viele kleine Details berücksichtigt. Es bedarf also keines komplett neuen Systems mit innovativen Algorithmen sondern es reicht aus, wenn die Software immer weiter verbessert bis sie irgendwann perfekt ist.

Als Ausgangsbasis gibt es bereits viele Dinge auf die man zurückgreifen kann. Eine Programmiersprache wie Python ist bereits als OpenSource vorhanden, eine Entwicklungsumgebung mit der man komplexe Software entwickeln kann wie Geany gibt es ebenfalls. Offene Wörterbücher sind in Wikipedia enthalten (und zwar für alle Sprachen), auch Librarys zum Grammatik-Check werden in der Literatur diskutiert. Was noch fehlt ist eine Software die man ähnlich einfach nutzen kann wie den Befehl „grep“ unter Linux. Wo man also ein Tool hat, was tatsächlich in der Lage ist, die Rechtschreibung zu checken und zu verbessern.

Existierende Programme wie Hunspell scheitern weniger an der fachlichen Realisierung. Hunspell wurde beispielsweise in C++ programmiert, steht als Debian Package bereit und lässt sich mit unterschiedlichen Wörterbüchern nutzen, sondern das eigentliche Problem ist dass die Projektverantwortlichen nicht in der Lage sind, die Schwächen zu sehen. Sie beschreiben Hunspell als leistungsfähige Software zu Rechtschreibkorrektur und glauben dass es produktiv eingesetzt werden kann. Dabei ist Hunspell auf dem heutigen Niveau unbenutzbar. Im Grunde macht es nichts weiter als zu einem Absatz per Zufall irgendwelche Wörter zu unterkringeln damit dann der User anfangen darf selber die Rechtschreibung zu korrigieren. Worum es geht ist nicht Rechtschreibkontrolle sondern das Ziel ist die interaktionsfreie Rechtschreibkontrolle.

In der Software „Apache UIMA“ gibt es eine Komponente „DKPro Core“ welche einen Spellchecker besitzt „DKPro Spelling“. Leider gibt es dazu keinerlei Dokumentation und es ist zweifelhaft ob man damit überhaupt etwas sinnvolles anfangen kann. Lädt man sich das Apache UIMA Package auf seinen PC herunter (22 MB) stellt man fest, dass davon 90% Dokumentation sind. Darin steht drin, dass UIMA ein Framework ist um mit Java und C++ eigene NLP Tools zu schreiben. Wie das gehen soll bleibt offen und jemanden der das schon gemacht hat gibt es auch nicht. Anders gesagt, UIMA ist ein Fake und keine richtige Software.

In der wissenschaftlichen Literatur wird das Thema „Spellchecking“ ausführlich diskutiert. Leider sind die meisten Paper sehr theoretisch. Offenbar besitzen Google und IBM sehr leistungsfähige Programme, die jedoch wie allgemein zu vermuten war, nicht allgemein verfügbar sind. Die best-practice Methode zur Konstruktion eines Spellcheckers soll kurz erläutert werden. Im Kern geht es darum, ein Language Modell zu programmieren. Obwohl in der Fachliteratur gesagt wird, dass dieses Language Modell mit Hilfe von Bayschen Netzen, Neuronalen Netzen oder mit der „Damerau–Levenshtein distance“ erzeugt wird, ist das nur die halbe Wahrheit. Im Kern ist ein language Modell nichts weiter als ein Computerprogramm. Also Sourcecode der in C++, Python oder Java erstellt wurde, als Künstliche Intelligenz funktioniert und in der Lage ist Dinge wie Rechtschreibkontrolle auszuführen. Natürlich kommen dabei Dinge wie die „Levenshtein distance“ zum Einsatz aber nicht nur. Worum es eigentlich ist vielmehr der Software-Engineering-Prozess zum Erstellen einer derartigen Software. Kernbestandteil ist also nicht ein konkreter Rechtschreib-Korrektur-Algorithmus sondern im Kern befindet sich ein Bugtracker und ein verteiltes Versionscontrollsystem zur Programmierung der Software.

Anders formuliert, wenn die Software nicht perfekt arbeitet ist das keineswegs ein Problem des Dictionary oder des Bayschen Netzes was die Wahrscheinlichkeit berechnet wann zwei Wörter aufeinander folgen, sondern es ist ein Problem für das Software-Engineering-Team, dass einen Bug-Eintrag erhält wie „Dieses !#§& Programm ist nicht im Stande meine Rechtschreibfehler zu verbessern. Ist mir egal, wie ihr das Problem löst, macht was sonst gibt es heute kein Abendbrot.“

Auf der Suche nach Performance.

Zunächst ein kleiner Rückblick. Zuerst habe ich mit Python angefangen, dann aber aus Performance-Gründen auf C++ gewechselt, dann aber wegen der langen Compile-Zeiten und weil Python auch Mathlabplotbib besitzt wiederzurück zu Python gewechselt. Und da stehe ich jetzt und muss mit ansehen wie der cpython Interpreter sehr langsam den Code abarbeitet.

Fragen wir dochmal Google was die Alternative ist. Zu der Frage “Was ist die schnellste Scripting Sprache” gibt es einige Diskussionsbeiträge. Als Alternative zu Python wird genannt: GWAN (serverseitig), Javascript mit V8 Engine und LuaJIT. Aber wirklich schneller und vor allem verbreiteter als Python ist keine davon. Ja mehr noch, die Python Anhänger werden sagen, dass Python schneller ist als die V8 Javascript-Engine weil man in Python externe C++ Bibliotheken einbinden kann und C++ ist zweifellos die schnellste Sprache überhaupt. Was also tun? Wiederzurück zu C++ wechseln? wohl kaum, für den Alltagsbetrieb und zum Erstellen von Prototypen ist die Sprache ein Graus. Selbst wenn man viel Zeit investiert in die Einarbeitung ist das Programmieren aufwendig und der Sourcecode liest sich nicht besonders elegant. Im Grunde wäre Python die ideale Sprache nur ist diese leider langsam.

Meiner Ansicht nach geht es darum, dass man beide Sprachen nutzt. Die Frage ist nur wie man das möglichst ohne Aufwand macht. Boost.Python ist sehr komplex zu benutzen, die Anleitung ist auch nicht besonders einsteigerfreundlich. Bevor man Boost.Python online hat, kann man gleich den Code in C++ schreiben. Es gibt aber noch SWIG. Auf den ersten blick scheint das leichter benutzbar zu sein. Ist SWIG womöglich eine elegante Methode wie man Python Programme ohne viel Aufwand richtig schnell bekommt?

Leider nein, auch SWIG ist eine Ochsentour. Ähnlich wie bei Boost.Python gilt, dass es Leute gibt die damit klarkommen und bei all den Compilerschaltern noch einen Plan haben. Für Einsteiger ist es jedoch nichts. Offenbar ist es nicht so simpel eine C++ Bibliothek zu schreiben, die man in Python einbinden kann. Desweiteren machen SWIG und Boost.Python einen etwas veralteten Eindruck. Im Grunde wäre die bessere Alternative vermutlich Java zu benutzen, aber Java ist nicht so leistungsfähig wie Python.

Geany vs Eclipse

Bisher dachte ich, dass Eclipse in Verbindung mit pydev die optimale Entwicklungsumgebung darstellt. Die komplexe Installation musste man eben ertragen. Doch es gibt möglicherweise eine Alternative. Der Texteditor/IDE Geany ist einen Blick wert. Geany ist zunächst als Ersatz für Gedit gedacht, das heißt, man kann damit ganz normal eine Textdatei öffnen und speichern. Wer will kann aber auch eine python Datei erstellen, dort dann „Hello World“ reinschreiben und mit einen Klick auf die Menüleiste startet sie dann. Der Vorteil von Geany ist, dass es anders als Eclipse sehr viel leichter zu installieren ist und das die Bootup-Zeit besser ist. Es fehlt zwar eine Refactoring Funktion aber dafür gibt es Syntax-Highlighting, Autoformat mit etwas Nachrüsten sowie einen Class-Browser.

Wer will kann unter Geany sogar Make-Files verwalten um aus größere Projekte zu starten. Das ist aber kein Muss. Man kann auch einfach nur so eine Python, Java oder was auch immer Datei erzeugen und die dann ausführen. Am ehesten Vergleichen lässt sich Geany mit VIM. Es ist ein Allzweck-Texteditor der sich an Programmierer richtet und leicht zu bedienen ist.

Der eigentliche Clou von Geany ist, dass die Build-Optionen zum Kompilieren sich halbwegs leicht konfigurieren lassen. Wer schonmal mit Kdevelop oder Eclipse herumgespielt hat wird wissen, dass es gar nicht so simpel ist, dort ein Include für eine externe Library anzugeben. Im Regelfall muss man sich erst durch viele Menüs klicken und selbst dann klappt es nicht immer. Bei Geany hingegen gibt es ein simples Config-Menü. Dort trägt man manuell ein, dass die Befehlszeile „g++ -std=c++11 -pthread -lBox2D file.cpp“ ausgeführt wird und sonst gar nichts. Und tatsächlich, exakt das wird dann ausgeführt und man erhält die fertige Binärdatei: sehr simpel aber effektiv. Irgendwelche Path-Menüs wo man automatisch nach Librarys suchen lassen kann wie bei Eclipse gibt es nicht. Entweder man hat die Library in seinem System korrekt installiert und weiß wie der Command-Line Befehl lautet oder man hat Pech gehabt. Das macht die Sache um einiges übersichtlicher.

Zugegeben, Geany ist deutlich komplexer aufgebaut als Gedit. Es ist mehr als ein simpler Texteditor, infolge dessen gibt es relative viele Menüs wo man etwas einstellen kann. Offenbar ist das Programmieren einer IDE ein komplexes Unterfangen, man muss sich also in Geany zunächst einarbeiten bevor man damit loslegen kann. Der Unterschied zu anderen Umgebungen wie Netbeans oder Eclipse liegt darin, dass diese Lernkurve irgendwann abgeschlossen ist. Das heißt irgendwann hat man alle Menüs einmal angeklickt. Bei Eclipse hingegen kann man mehrere Jahre die IDE nutzen und wird immernoch alles sehr ungewohnt und neu finden.

Tutorial für Python und Geany

Wer das Progrmamieren erlernen will hat es heute leichter denn je. Es gibt zahlreiche Programmiersprache und viele gute Texteditoren mit denen auch Neueinsteiger schnell eigene Programme entwickeln können. Im folgenden wurde Geany als IDE und Python als Programmiersprache ausgewählt um das berühmte Hello World Beispiel zu erläutern.

Nachdem man Geany gestartet hat, gibt man den folgenden Sourcecode ein und klickt auf Run und hat damit das erste Python Programm geschrieben und ausgeführt. Es gibt einen String auf dem Bildschirm aus.

geany1

Um die Sache ein wenig spannender zu machen wird jetzt das Programm um objektorientierte Elemente erweitert. Eine eigene Klasse wird angelegt, ein Konstruktor definiert und eine Methode aufgerufen.

geany2

Wiederum drückt man nach der Eingabe auf Run. Der Vorteil gegenüber anderen Sprachen wie C++ liegt darin, dass man relativ schnelle Resultate erzielt. In vielen Fällen gibt es überhaupt keine Compiler-Fehler und wenn doch sind es simple Tippfehler die man ohne weitere Recherche on-the-fly beheben kann. Links in der Navigationsleiste von Geany baut sich automatisch die Programm-Gliederung auf mit einer Übersicht über alle Methoden und Klassen. Auf diese Weise kann die Komplexität des Programms langsam erhöht werden.

geany3

Eine Besonderheit von Geany ist, dass dort für alle gängigen Programmiersprachen bereits voreingestellt ist wie die Compiler-Befehle lauten. Bei Python steht in der Dialogbox einfach drin, dass nach einem Klick auf „Execute“ folgendes aufgerufen wird: python „%f“. Also dasselbe was man auch auf der Command-Line eingeben würde. Man kann diese Aufrufparameter ändern und wieder zurücksetzen auf Standard. Speziell bei Python braucht man vor Ausführung eines Programms nochnichtmal eine Kompilierung anstoßen, sondern kann das Programm direkt starten. Bei anderen Sprachen wie Java muss man vorher noch auf „Build“ klicken um eine Bytecode Datei zu erzeugen.

Python vs. C++

Das Robot-Control-System was hier in zwei Blog-Einträgen bereits vorgestellt wurde ist mit Python programmiert. Aber dass soll nicht heißen, dass Python die beste Sprache dafür ist. Ein kleiner Exkurs zu C++ und SFML hat ergeben, dass man auch damit sehr ordentliche Programme schreiben kann. Um ehrlich zu sein, eigentlich kommt mir C++ ein wenig professioneller vor. Wenn man dort einen Grafikbildschirm öffnet ist er einfach da. Man startet das Programm und es werden die benötigten 60fps angezeigt. Kein Ruckeln, kein hoher CPU Verbrauch sondern die Applikation läuft einfach. Wenn also die C++ Community behauptet, dass alle anderen Programmiersprachen auf der Welt nur ein müder Ersatz sind für C++ so kann man ihnen nur beipflichten. Dennoch wird das Robot-Control-System zunächst weiterhin in Python entwickelt werden. Warum? C++ ist zwar eine mächtige Sprache wenn der Code einmal erstellt wurde, aber genau das ist das Problem. Bei Python geht der Edit-Compile-Run Zyklus um einiges schneller, insbesondere dann wenn man zwischendurch noch Stackoverflow fragt weil Probleme aufgetreten sind. Wenn hingegen die Python App inkl. der nötigen Algorithmen bereits fertig ist und es nur noch um Fragen wie Packaging, Bereitstellen auf verschiedenen Zielplattformen und niedrigen Ressourcenverbrauch geht, macht es Sinn den Quellcode nochmal neu für C++ zu schreiben. Die Aufgabe, vorhandenen Python Code nach C++ zu konvertieren ist eine überschaubare und sehr dankbare Tätigkeit, weil man damit die Qualität der Software beträchtlich steigert. Eine sauber programmierte SFML Applikation ist um einiges besser als ein lieblos zusammenprogrammierter Python Prototyp.

Zugegeben, anders als die Überschrift vermuten lässt geht es nicht darum Python mit C++ zu vergleichen, sondern im Grunde lautet die Empfehlung beide Sprachen zu nutzen. Man wird dadurch die Vorteile der anderen Sprache viel besser zu würdigen wissen. Für Python Programmierer wirkt C++ wie eine Offenbarung, weil dort alles so schön effizient läuft. Man ist auch nicht abhängig von irgendwelchen CPython, Jython und sonstigen Interpretern sondern hat am Ende die eine ausführbare Binärdatei die dann mit maximaler Performance läuft. Umgekehrt ist aus Sicht von C++ aber Python ebenfalls eine Verbesserung, weil man dort sehr viel schneller zu vorzeigbarem Code gelangt und man sich stärker auf die eigentliche Applikation kümmern kann.

Beide Sprache miteinander zu verbinden ist mehrmals versucht worden. Es gibt die Boost.Python Library die jedoch sehr schwer verständlich ist, und es gibt neuere Sprachen wie go welchen ebenfalls versprechen das beste von beiden Welten zu vereinen. Wirklich empfehlenswert ist davon nichts. Nach wie vor gilt C++ pur und Python pur als State-of-the-art in der jeweiligen Domäne. Sondern man sollte das ganze lieber von einem Software-Engineering-Prozess aus betrachten. Solange man in der Prototypenphase ist und noch nicht genau weiß was man eigentlich will, ist Python das Mittel der Wahl. Wenn man hingegen bereits einen Prototypen hat und jetzt richtige Software programmieren möchte, ist C++ besser geeignet um ans Ziel zu gelangen.

Sowohl Python als auch C++ müssen sich Kritik gefallen lassen. Python gilt als Anfängersprache die sehr langsam ausgeführt wird und vom Status her noch unterhalb von Java angesiedelt ist. Ist diese Kritik unsachlich? Wohl kaum, es beschreibt Python angemessen. Auf der anderen Seite gilt C++ als Pointerlastige und schwer zu erlernde Sprache wo der Code unleserlich ist und dauernd Compilerwarnungen angezeigt werden. Auch dieser Einwand ist berechtigt. Aber ich glaube nicht, dass man die Sprache verändern sollte. Sondern C++ und Python sind gut dort wo sie heute sind. Als Best-Practice kann man sagen, dass man sich in Eclipse sowohl pydev als auch CDT installieren sollte um beides zu nutzen. Eclipse ist das derzeit mächtigste IDE Framework, Python ist die mächtigste Prototyping Sprache und C++ die beste Programmiersprache.

Große Unklarheiten bezüglich objektorientierter Programmierung bei Stackoverflow

Sucht man einmal gezielt nach einem Fragetyp bei Stackoverflow wird man feststellen, dass es sehr viele davon gibt. Konkret geht um es um eine Frage, bei dem der User wissen möchte wie er eine Variable oder Methode in „another class“ aufruft bzw. verändert. Meist hat er zwei Klassen und möchte jetzt aus Klasse A auf Klasse B zugreifen und weiß nicht wie. Geschätzt gibt es von dieser Frage bei Stackoverflow mehr als 1000 die eingestellt wurden. Und im Regelfall ist dazu die Beteiligung der Community hoch. Entweder wird die Frage vorsorglich downgevoted nach dem Motto wer so eine Frage stellt hat ungenügendes Wissen bezüglich OOP oder aber die Antworten versuchen mit mehr oder klugen Hinweisen auf nested Classed, static methods oder übergebenen Parametern die Frage halbwegs zu beantworten. Leider ist die einzig richtige Antwort nur sehr selten darunter. Sie lautet, dass über Multilevel inheritance man meherere Klassen zusammenschalten kann und danach jede Variable im Programm von überall aus manipulieren kann. Das gilt für jede Programmiersprache egal ob Python, Java, C++ oder PHP.

Lediglich in einem Fall hat ein User als Teilantwort auf Vererbung hingewiesen, das aber nur als eine Möglichkeit unter vielen erläutert und dann auch nur in Verbindung mit 2 Klassen, nicht jedoch mit 3 oder mehr. Dieses massive Wissensdefizit rührt daher, dass Multilevel-inheritance selbst in us-amerikanischen Büchern zum Thema objektorientierte Programmierung nur selten thematisiert wird. Obwohl es mächtiger wie auch leichter verständlich ist als sein großer Bruder, die multiple Inheritance. Zumindest dem Namen her dürfte das vielen bekannt sein, aber relevant für die Praxis war das nie.

Der Witz ist, dass das Wissensdefizit bei Stackoverflow eklatant ist und sich so in Zukunft fortsetzen kann. Im Grunde kann man schon die Uhr danach stellen, dass auch nächste Woche wenigstens 10 Fragen erneut wissen wollen, wie man denn in einer „another class“ Zugriff auf die Variablen nimmt. Und um fair zu sein, ist das sogar die wichtigste Frage die man als Einsteiger in die objektorientierte Programmierung stellen kann. Denn, man hat ja im Schritt 1 sich schon an die Vorgaben gehalten und seine Programm in einzelne Klassen unterteilt und fast automatisch gibt es dadurch das oben genannte Problem. Der Normalfall ist, dass die User eine Klasse mit der GUI haben wo sie dann in C++, Java oder in einer sonstigen Sprache die Bildschirmdarstellung erledigen und in einer zweiten Klasse sind dann die Daten und die Programmlogik des Programms. Jetzt ergibt sich fast schon auf natürlichem Wege die Frage wie das eine mit dem anderen gekoppelt wird, das also die Datenklasse Textfelder in der GUI verändert und die GUI Eingabedaten an das Hauptprogramm sendet. Das bisher den regelmäßigen Teilnehmern bei Stackoverflow die mit ihrem Wissen prahlen und als Antwortgeber in Erscheinung noch nicht aufgefallen ist, dass die üblichen Antworten möglicherweise unvollständig oder sogar falsch sind, zeigt deutlich auf dass in der Programmierer-Community offenbar eine Lernresistenz existiert. Und ja, mit einem simplen multiple Inheritance lassen sich fast alle dieser Probleme lösen man muss das Konzept nur kennen.