Über Ruby und Objektmodell

Ich habe im Metapro-Buch noch einmal etwas über Rubys grundlegende Sprachspezifikationen wie Objekte, Klassen und Methoden gelernt. Machen Sie sich also eine Notiz als Memorandum.

Rubys MetaPro scheint Sprachelemente wie Klassen, Module und Instanzvariablen zu bedienen ...

Innerhalb des Objektmodells

Was ist ein Objektmodell? Die Idee, ein Objekt zu erfassen, das programmbezogene Daten als ein Modell zusammenfasst. Führen Sie den folgenden Code aus

book.rb


class Book
 def name
  @name = 'metapro-ruby'
 end
end

book = Book.new
book.class          # => Book

Instanzvariable

Instanzvariablen sind im Objekt enthalten Es besteht keine Verbindung zwischen Ruby-Objektklassen und Instanzvariablen Instanzvariablen werden nur angezeigt, wenn ein Wert zugewiesen wurde Wenn Sie die Namensmethode nicht aufrufen, ist die Buchinstanzvariable nicht vorhanden.

book.rb


book.name
book.instance_variables         # => [:@name]

Über die Methode

Objekte verfügen neben Instanzvariablen über Methoden

book.rb


book.name
book.methods.grep(/name/)       # => [:name]

Zu diesem Zeitpunkt ist zu beachten, dass die Namensmethode im Buch nicht vorhanden ist. Objekte haben nur Instanzvariablen und Verweise auf Klassen

Die name-Methode ist eine Instanzmethode der Book-Klasse, und ein Objekt (eine Instanz) der Book-Klasse ist erforderlich, um sie aufzurufen. Selbst wenn dieselbe Methode auf eine Klasse fokussiert ist, wird sie als Instanzmethode bezeichnet, und wenn sie sich auf ein Objekt konzentriert, wird sie als Methode bezeichnet.

Zusammenfassung

--Objektinstanzvariablen sind im Objekt vorhanden

Über den Unterricht

Klassen sind Objekte, und was für Objekte gilt, gilt auch für Klassen Klassen haben wie Objekte Klassen, die Klassenklassen sind.

book.rb


'metapro-ruby'.class            # => String
String.class                    # => Class

Ruby-Klasse Die Klasseninstanz ist die Klasse selbst Die Klasse verfügt auch über Methoden, und die Methoden der Klasse sind Instanzmethoden der Class-Klasse.

Class.instance_methods(false)     # => [:allocate, :new, :superclass]

Array.superclass                  # => Object
Object.superclass                 # => BasicObject
BasicObject.superclass            # => nil

Die Object-Klasse verfügt auch über Methoden, die mit jedem Objekt verwendet werden können Die BasicObject-Klasse ist die Wurzel der Ruby-Klassenhierarchie und verfügt über einige grundlegende Methoden.

Modul

Die Oberklasse der Klasse ist Modul Um genau zu sein, ist eine Klasse ein Modul, das drei Instanzmethoden (new, allocate, superclass) zum Erstellen von Objekten und zum Erben von Klassen hinzufügt.

Class.superclass                 # => Module

Konstante

Alle Referenzen, die mit Großbuchstaben beginnen, sind Konstanten, einschließlich Klassennamen und Modulnamen. Der wichtige Unterschied zwischen Konstanten und Variablen ist der Umfang, und alle Konstanten im Programm sind wie ein Dateisystem in einem Baum angeordnet (Module und Klassen sind Verzeichnisse, Konstanten sind Dateien).

module MyModule
 MyConstant = 'OUTER CONSTANT'
 
 class MyClass
  MyConstant = 'INNER CONSTANT'
 end
end

MyModule::MyConstant            # => "OUTER CONSTANT"
MyModule::MyClass::MyConstant   # => "INNER CONSTANT"

Zusammenfassung

~~ ・ Die Class-Klasse ist eine Unterklasse der Module-Klasse, und die Klasse ist auch ein Modul ~~

Ich habe einen Kommentar von @scivola erhalten und ihn korrigiert. Vielen Dank.

Recommended Posts

Über Ruby und Objektmodell
Erläuterung des Ruby Range-Objekts
Über Ruby-Hashes und -Symbole
Informationen zu Ruby-Klassen und -Instanzen
Erläuterung zum Ruby String-Objekt
Über Ruby einfache Anführungszeichen und doppelte Anführungszeichen
Informationen zum Ruby-Produktoperator (&) und zum Summenoperator (|)
Über objektorientierte Vererbung und über Ertrag Ruby
Erklärt Ruby Array-Objekte
Klasse und Modell
Über Ruby-Symbole
Über Ruby Hash
Über Ruby-Arrays
Informationen zur Ruby-Vererbung
Über Rubinblock
Über Ruby Hash
Informationen zur Objektorientierung
Rubin und Edelstein
Über Ruby-Methoden
Über Rubys Kernel-Modul
Informationen zu Ruby-Fehlermeldungen
[Ruby] Klassen und Instanzen
Informationen zur Behandlung von Ruby-Ausnahmen
Symbole und zerstörerischer Rubin
Über Ruby Hash (Fortsetzung)
Modell- und Tabellenerstellung
[Ruby] Big Decimal und DECIMAL
Über Bean und DI
Über Klassen und Instanzen
Über bekommt und bekommt.chomp
Informationen zu Ruby-Instanzmethoden
Über Weiterleiten und Weiterleiten
Ruby-Vererbung und -Delegierung
Über Kapselung und Vererbung
Informationen zu Serializable und serialVersionUID
Über Logik nachdenken Ruby
[Ruby] Ich habe über den Unterschied zwischen each_with_index und each.with_index nachgedacht
Unterschiede zwischen Klassen und Instanzen in Ruby
Eine grobe Anmerkung zu Ruby-Arrays und Hash-Objekten
Über Java-Setter und Getter. <Unterschied zur Objektorientierung>
Achten Sie auf Ruby-Methodenaufrufe und Variablenreferenzen
Über für Anweisung und wenn Anweisung
Über synchronisierte und Wiedereintrittssperre
[Ruby] Fragen und Überprüfung der Anzahl der Methodenargumente
Ruby-Syntaxfehler und Gegenmaßnahmen
Über reguläre Ausdrücke in Ruby
[Java] Über String und StringBuilder
Ungefähr der gleiche und der gleiche Wert
Ruby C Erweiterung und flüchtig