Evgenii Legotckoi
Evgenii Legotckoi26. Juni 2016 02:24

Benutzerhandbuch #10 - Ruby - Objektorientiertes Denken

  • Objektorientiert * ist ein sehr eingängiger Begriff. Etwas objektorientiert zu nennen, kann ziemlich clever klingen. Ruby bezeichnet sich selbst als objektorientierte Skriptsprache, aber was bedeutet "objektorientiert" wirklich?

Auf diese Frage gibt es viele mögliche Antworten, die wahrscheinlich alle auf dasselbe hinauslaufen. Anstatt die Antwort schnell zusammenzufassen, lassen Sie uns ein wenig über das traditionelle Programmierparadigma nachdenken.

Herkömmlicherweise wurde ein Programmierproblem einem Datenrepräsentationsansatz und Prozeduren unterzogen, die mit diesen Daten arbeiten. In diesem Modell sind die Daten inert, passiv und hilflos. Sie sind einem großen, aktiven, logischen und allmächtigen Verfahrensorgan völlig ausgeliefert.

Das Problem bei diesem Ansatz ist, dass solche Programme von Programmierern geschrieben werden, die nur Menschen sind und Details bis zu einem gewissen Punkt klar genug im Kopf behalten können. Bis das Projekt groß wird und sein prozessualer Kern so weit wächst, dass es nicht schwer genug ist, sich an alle Dinge zu erinnern. Kleine Speicherlücken und Tippfehler führen zu gut versteckten Fehlern. Komplexe und unbeabsichtigte Handlungen beginnen im prozeduralen Kern zu erscheinen, und seine Entwicklung wird wie der Versuch, einen wütenden Tintenfisch so zu transferieren, dass er Ihr Gesicht nicht berühren kann. Programmieranleitungen sind verfügbar, um die Fehler des traditionellen Paradigmas zu minimieren und zu lokalisieren, aber es gibt eine bessere Lösung, die die grundlegenden Änderungen beinhaltet, mit denen wir arbeiten.


Was macht objektorientierte Programmierung? Es ermöglicht uns, den Großteil der umständlichen und sich wiederholenden Arbeit an die Daten selbst zu delegieren. Dadurch ändert sich das Konzept der Daten von passiv zu aktiv. Lassen Sie uns umschreiben:

  • Wir hören auf, jedes Datenelement als offene Kiste zu verarbeiten, aus der wir einige Dinge herausnehmen und einige Dinge hineinlegen.
  • Wir beginnen mit jedem Datenelement als geschlossene Arbeitsmaschine mit einer Reihe von Schaltern und Wählscheiben zu arbeiten.

Was oben als Maschine beschrieben wurde, kann von außen sehr einfach und von innen komplex sein; Wir können von außen nichts dazu sagen, und wir erlauben uns nicht, dieses Auto zu öffnen (außer in Fällen, in denen wir sicher sind, dass innen etwas nicht stimmt), also sollten wir nur die Dinge tun, die es ermöglichen, Schalter und Wählscheiben zu öffnen mit Daten interagieren. Nachdem diese Maschine gebaut ist, wollen wir nicht mehr darüber nachdenken, wie sie im Inneren funktioniert.

Wir denken vielleicht, dass wir nur mehr Arbeit für uns selbst tun, aber das trägt dazu bei, alle Arten von fehlerhaften Phänomenen zu verhindern.

Beginnen wir mit einem Beispiel, das für die Praxis zu einfach ist, aber zumindest einen Teil des Konzepts veranschaulichen sollte. Ihr Auto hat einen Tageskilometerzähler. Seine Aufgabe ist es, die vom Fahrzeug seit dem letzten Zurücksetzen zurückgelegte Strecke beizubehalten. Wie würden wir es in einer Programmiersprache schreiben? In C ist der Pfadzähler nur eine numerische Variable, möglicherweise vom Typ * float *. Das Programm manipuliert die Variable, indem es den Wert inkrementell erhöht und bei Bedarf zufällig auf Null zurückkehrt. Was ist hier falsch? Ein Fehler in einem Programm kann aus den unterschiedlichsten Gründen auftreten, wenn einer Variablen ein falscher Wert zugewiesen wird. Jeder, der in C programmiert hat, weiß, wie es ist, Stunden oder Tage damit zu verbringen, nach einem Fehler zu suchen, der sich, einmal gefunden, als absurd einfach herausstellt. (Der Moment, in dem dieser Fehler gefunden wird, wird normalerweise durch einen lauten Knall auf der Stirn angezeigt)

Das gleiche Problem wird in einem objektorientierten Ansatz aus einem anderen Blickwinkel betrachtet. Das erste, was ein Programmierer beim Entwerfen eines Pfadzählers fragt, ist nicht "Welcher Datentyp ist am besten geeignet, um ein bestimmtes Ding zu beschreiben?", sondern "Wie genau soll dieses Ding funktionieren?" Der Unterschied ist hier ziemlich groß. Es dauert etwas länger, um zu entscheiden, wie genau der Trackzähler mit der Außenwelt interagieren soll. Wir haben uns entschieden, eine kleine Maschine mit einer Steuerung zu entwickeln, die es Ihnen ermöglicht, den Zähler zu erhöhen, zurückzusetzen, seinen Wert abzulesen und sonst nichts.

Wir bieten keine Möglichkeiten, dem Zähler einen beliebigen Wert zuzuweisen. Wieso den? Denn wir wissen, dass der Zähler so nicht funktionieren sollte. Es gibt nur wenige Dinge, die Sie mit der Theke machen können, sie sind alle erlaubt. Wenn also etwas anderes im Programm fälschlicherweise versucht, einen anderen Wert (z. B. die Temperatur der Klimaanlage im Auto) und den Zähler einzugeben, wird uns sofort mitgeteilt, dass etwas schief gelaufen ist. Es heißt, dass wir während der Programmausführung (oder vielleicht zur Kompilierzeit, je nach Art der Sprache) einem Pfadzählerobjekt keinen Wert zuweisen dürfen. Die Meldung ist möglicherweise nicht korrekt, reicht jedoch aus, um den Fehler zu verstehen. Oder? Aber es weist uns schnell in die Richtung der Fehlerursache. Dies ist nur eine von mehreren Möglichkeiten, wie Sie mit objektorientierter Programmierung Zeit sparen können.

In diesem Fall gehen wir normalerweise einen Abstraktionsschritt, weil es einfach ist, eine Fabrik zu bauen, die Maschinen herstellt, die Maschinen nach Kundenwunsch herstellen. Wir können nicht einen Timer für alles erstellen, aber wir können viele Timer aus einer Vorlage erstellen. Eine Vorlage (oder eine Zählerfabrik, wenn Sie so wollen) entspricht einer sogenannten Klasse, und aus dieser Vorlage (oder von einer Fabrik erstellt) wird ein individueller Zähler erstellt, der einem Objekt entspricht. Die meisten objektorientierten Sprachen erfordern, dass eine Klasse definiert wird, bevor ein Objekt erstellt wird, Ruby jedoch nicht.

Es ist erwähnenswert, dass die Verwendung einer objektorientierten Sprache nicht bedeutet, sich an das richtige OOP-Design zu halten. Tatsächlich ist es in jeder Sprache möglich, Code zu schreiben, der in allem unordentlich, schlampig, obskur, fehlerhaft und wackelig ist. Was Ruby für Sie tut (im Vergleich zu C++). Es macht das Üben der objektorientierten Programmierung selbst dann natürlich, wenn Sie im kleinen Maßstab arbeiten. Sie müssen nicht auf hässlichen Code zurückgreifen, um Aufwand zu sparen. Wir werden diskutieren, wie Ruby dieses wunderbare Ziel erreicht, während wir dieses Tutorial durcharbeiten. Im nächsten Kapitel wird es "Schalter und Drehregler" (Objektmethoden) geben und von diesen gehen wir zu "Fabriken" (Klassen) über. Bist du noch bei uns?

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken