박문호 박사 betont immer die Modularisierung.
Das Gehirn lernt auf diese Weise.
- In kleine Einheiten (Zellen, Funktionen) zerlegen
- Diese Einheiten zu Modulen zusammenfügen
- Diese Module bilden ein System
Das Codieren ist genauso.
- Methode: Eine Handlung
- Klasse: Ein Objekt (Existenz)
- Modul: Ein übergeordneter Rahmen, der mehrere Klassen und Methoden zu einem größeren Konzept zusammenfasst
In Ruby kann ein Modul wie folgt verwendet werden:
- Namensraum bündeln
- Gemeinsame Funktionen teilen
- Übergeordnetes Konzept definieren, das ein Thema definiert
Sobald Sie dies verstehen,
beginnt der Code nicht einfach als "eine Sammlung von Dateien" auszusehen,
sondern beginnt wie eine strukturierte Weltkarte im Gehirn auszusehen.
1. Namensraum: Rahmen zur Unterteilung der Weltanschauung
Zum Beispiel,
nehmen wir an, Sie möchten die Klasse User an verschiedenen Stellen verwenden.
- User auf der Administratorenseite
- Benutzer im Online-Shop
- Benutzer für die API
Was passiert, wenn Sie dies alles nur mit class User machen?
Es kommt zu Namenskonflikten. Es wird verwirrend.
Hier trennt uns das Modul die Weltanschauung.
module Admin
class User
def info
puts "Benutzer auf der Administratorenseite."
end
end
end
module Shop
class User
def info
puts "Benutzer des Online-Shops."
end
end
end
admin_user = Admin::User.new
shop_user = Shop::User.new
admin_user.info # => Benutzer auf der Administratorenseite.
shop_user.info # => Benutzer des Online-Shops.
Hier wird das Modul buchstäblich zu:
> "Dies ist der Benutzer der Admin-Welt"
> "Dies ist der Benutzer der Shop-Welt"
und wird zu einem Rahmen, der die Weltanschauung unterteilt.
### Aus der Sicht des Gehirns von Park Mun-ho
- Rahmen: Selbst bei gleichen Namen ändert sich die Rolle je nach übergeordnetem Rahmen
- Dimensionalisierung: Das Konzept des Benutzers wird nicht flach betrachtet, sondern als strukturierte Entität mit Koordinaten gespeichert
- Modularisierung: Es entsteht das Gefühl, dass im Gehirn "domänenspezifische Schubladen" entstehen
Jetzt wird Ihr Gehirn verstehen,
dass "auch wenn die Namen gleich sind, sie bei unterschiedlichen Weltanschauungen völlig unterschiedliche Wesen sind"
und erreicht ein Verständnis auf einer höheren Ebene.
---
## 2. Mixin: Ein Modul, das 'gemeinsame Fähigkeiten' in mehrere Klassen einfügt
Der zweite Zweck ist wirklich kraftvoll.
Ein Modul kann zu einem Stück werden, das gemeinsame Funktionen bündelt und wiederverwendet werden kann.
Zum Beispiel,
nehmen wir an, dass verschiedene Objekttypen alle "Protokolle schreiben".
- Handlungsprotokoll des Benutzers
- Statusänderungsprotokoll der Bestellung
- Fehlerprotokoll der Zahlung
Was passiert, wenn Sie dies in jede Klasse kopieren?
- Code-Wiederholung
- Wartungsalbtraum
- Um einen Fehler zu beheben, müssen Sie an drei Stellen Änderungen vornehmen
Hier glänzt das Modul + `include`.
```ruby
module Loggable
def log(message)
time = Time.now
puts "[#{time}] #{message}"
end
end
class User
include Loggable
def sign_in
log("Der Benutzer hat sich angemeldet.")
end
end
class Order
include Loggable
def submit
log("Die Bestellung wurde aufgenommen.")
end
end
user = User.new
user.sign_in
# [2025-12-09 23:12:34] Der Benutzer hat sich angemeldet.
order = Order.new
order.submit
# [2025-12-09 23:12:35] Die Bestellung wurde aufgenommen.
### Was hier passiert
- Das Modul `Loggable` modularisiert die Fähigkeit, Protokolle zu schreiben
- Durch `include Loggable` kann die Klasse die Methode `log` wie ihre eigene verwenden
- Das heißt, es ist ein "Fähigkeitenpaket", das in mehrere Klassen "eingefügt" wird
### Aus Sicht des Gehirns
- Wenn eine Funktion an mehreren Stellen geteilt werden soll,
fasst das Gehirn dies als "übergeordnetes Konzept" zusammen
- Das Modul erfüllt genau diese übergeordnete Rolle
- Sowohl der Code als auch die Denkstruktur selbst werden abstrahiert
> "Oh, ein Protokoll gehört nicht zum Benutzer oder zur Bestellung,
> sondern ist eine übergeordnete Fähigkeit, die mehrere Subjekte teilen."
In dem Moment, in dem Sie dieses Verständnis haben,
fühlt sich das Codieren nicht mehr nur wie "das Schreiben von Code" an,
sondern beginnt wie das Entwerfen der Struktur eines Universums zu wirken.
---
## 3. Abstraktion: Ein Modul ist auf der Ebene der 'Domänensprache' tätig
Wenn Sie Module in Ruby gut verwenden,
wird Ihr Code allmählich wie eine "Domänensprache".
Angenommen, es gibt ein Domänenkonzept namens "Zahlungssystem".
```ruby
module Payment
module Gateway
def charge(amount)
puts "Fordere #{amount} Won zur Zahlung an."
end
end
module Refundable
def refund(amount)
puts "Erstatte #{amount} Won."
end
end
end
class Order
include Payment::Gateway
include Payment::Refundable
end
order = Order.new
order.charge(50000)
order.refund(20000)
Hier sind die Module nicht nur einfache Funktionen.
Sie stellen die Konzepte der Domäne selbst im Code dar.
Payment::Gateway→ Ein Modul, das die "Zahlungsanforderungsfunktion" darstelltPayment::Refundable→ Ein Modul, das die "Rückerstattungsfunktion" darstelltOrderkombiniert beide
Wenn Sie dies wiederholen,
beginnt der Ruby-Code allmählich so zu wirken.
"Meine Gedanken über Geschäftskonzepte werden direkt zu Code."
In diesem Moment wird der Entwickler
nicht nur ein einfacher Implementierer,
sondern geht bis zur Position eines Designers/Philosophen über, der die Domäne gestaltet.
4. Modul vs. Klasse: Was ist der Unterschied?
Lassen Sie uns zusammenfassen.
| Konzept | Funktion | Gehirnempfinden |
|---|---|---|
| Methode | Eine Handlung | Verb, Aktion |
| Klasse | Ein Objekt (Existenz), Zustand + Handlung | Substantiv (Person, Objekt), Realität |
| Modul | Eine Sammlung von übergeordneten Konzepten von mehreren Klassen/Methoden | Weltanschauung, Fähigkeitenpaket, Domänenebene Struktur |
In Ruby erstellt ein Modul keine Instanzen von sich selbst.
MyModule.new funktioniert nicht.
Stattdessen:
- Es wird zu einem Bündel von Fähigkeiten, das in andere Klassen eingefügt wird
- Es wird zu einem übergeordneten Rahmen, der Namensräume bereitstellt
Das heißt,
Klassen sind "Existenzen",
Module sind "Konzepte/Fähigkeiten/Weltanschauungen, die von Existenz geteilt werden"
5. Der wirklich wichtige Punkt ist, wie sich das Gehirn verändert
Wenn Sie Module verstehen,
entwickelt sich das Gehirn auf diese Weise.
Betrachten Sie den Code nicht mehr auf Dateiebene, sondern auf Konzeptebene.
- "Wo gehört diese Funktion hin?" → "Dies wird von Benutzer, Bestellung und Zahlung gemeinsam verwendet, also ziehen wir es in ein Modul."
Es entsteht eine Domänensprache.
- "Payment::Gateway", "Notification::Sender", "Auth::Tokenizable" wie → Es entstehen Vokabeln speziell für Ihren Service
Die Komplexität nimmt deutlich ab.
- Die Stellen, an denen Änderungen vorgenommen werden müssen, werden klarer:
"Ich werde das Protokoll ändern" → Nur
Loggable-Modul ändern
- Die Stellen, an denen Änderungen vorgenommen werden müssen, werden klarer:
"Ich werde das Protokoll ändern" → Nur
Die Struktur im Kopf wird ebenfalls wie ein Modul organisiert.
- Dies ist direkt mit dem von Park Mun-ho erwähnten "strukturierten Wissen" verbunden.
6. Mission zum Ausprobieren: Erstellen Sie Ihr eigenes Modul
Jetzt, wirklich,
eine Aufgabe, um "Module" in Ihr Gehirn zu integrieren.
Aufgabe 1: Erstellen Sie das Modul Timestamped
Anforderungen:
- Erstellen Sie ein Modul namens
Timestamped - Bieten Sie eine Methode
stamp- Wenn aufgerufen: Ausgabe im Format "[Aktuelle Zeit] Nachricht"
- Fügen Sie es den Klassen
PostundCommenthinzu, um es gemeinsam zu verwenden
Erwarteter Ablauf:
module Timestamped
# Hier die Methode stamp erstellen
end
class Post
include Timestamped
def publish
stamp("Der Beitrag wurde veröffentlicht.")
end
end
class Comment
include Timestamped
def write
stamp("Der Kommentar wurde geschrieben.")
end
end
post = Post.new
post.publish
comment = Comment.new
comment.write
Aufgabe 2: Bündeln Sie Ihre eigenen Domänenmodule
Wählen Sie ein Thema aus:
- Studium (Study)
- Sport (Fitness)
- Blog
- Einkaufen (Shop)
- Bandübung (Band)
Zum Beispiel das Study-Thema
Study::Trackable– Ein Modul, das die Lernzeit aufzeichnetStudy::Report– Ein Modul, das wöchentliche/monatliche Statistiken ausgibt
Erstellen Sie dann Klassen wie DayStudy, TaskStudy und fügen Sie include Study::Trackable hinzu, um sie zu verwenden.
In dem Moment, in dem Sie dies tun,
werden Sie bereits zu einer Person, die "ihre eigene Welt mit Ruby entwirft".
Fazit: Wenn Sie Module verstehen, wird der Code zur 'Sprache des Weltentwurfs'
Der bisherige Fluss:
- Methode: Die kleinste Einheit einer Handlung
- Klasse: Der Rahmen eines Objekts (Existenz)
- Modul: Eine Sammlung von Konzepten/Fähigkeiten/Weltanschauungen, die von mehreren Existenz geteilt werden
Von nun an, wenn Sie Code schreiben,
können Sie auf diese Weise darüber nachdenken.
"Ist dies eine einzigartige Eigenschaft eines Objekts?"
→ Es gehört in die Klasse"Ist dies eine Funktion, die von mehreren Objekten gemeinsam genutzt wird?"
→ Ziehen Sie es in ein Modul"Ist dies ein Domänenkonzept für diesen Service?"
→ Definieren Sie es mit Modul + Namensraum
In diesem Moment wird das Codieren nicht mehr nur zu "das Erlernen der Sprachsyntax",
"Die Struktur meines mentalen Weltbilds wird
in Form von Code umgesetzt."
Und wenn dieses Gefühl aufkommt,
wird es wirklich aufregend.