Sto progettando il mio linguaggio di programmazione per divertimento, e sto pensando di renderlo completamente orientato agli oggetti (niente statica, niente globale, nessuna variabile di classe, nessun metodo di classe), quindi ho bisogno di trovare un modo per eliminare completamente le esigenze dei metodi di classe, ma, prima di tutto, devo assicurarmi di conoscere tutti i problemi che potrebbero essere risolti usando i metodi di classe.
Quindi, di solito, i metodi di classe sono usati per creare helper e nomi di costruttori, sì? (Qualcos'altro?).
Attualmente, questo è quello che devo sostituire con i progetti orientati agli oggetti:
Ad esempio: gli helper File, sto pensando di progettarlo in questo modo:
class File
def initialize(path)
@path = path
end
def copy(destination)
# Copy file from @path to destination
# Then open destination path by creating new file instance
end
end
In realtà sto usando C, ma ho scritto l'esempio in Ruby in modo che sia più facile da capire.
Nessun metodo di classe e potresti concatenarlo in questo modo:
File.new("directory/file").copy("new_path").copy("other_path")
Se è troppo lungo, potrei semplicemente abbandonare il "nuovo" metodo come quello che fa Python:
File("directory/file").copy("new_path").copy("other_path")
Gli helper per la matematica possono essere sostituiti con i mixin:
module Math
def pow(value)
@value = @value ** value
end
end
class Integer
include Math
def initialize(value)
@value = value
end
end
Chiamalo in questo modo:
Integer.new(100).pow(10).pow(10).pow(10)
Nel caso avessi ancora bisogno di alcuni helper:
module Helpers
# Some block of codes
end
class Object
include Helpers
end
E ora è accessibile ovunque.
Per aggiungere altri helper, modifica il modulo Helpers:
module Helpers
# Add more helpers
end
Possiamo creare una factory class invece di un costruttore nominato:
class Lexer
def initialize(source)
@source = source
end
end
class LexerFactory
def create_from_file(file)
return Lexer.new(File.read(file))
end
def create_from_string(string)
return Lexer.new(string)
end
end
class Base
def initialize(lexer_factory)
@lexer_factory = lexer_factory
end
def lexer
@lexer_factory
end
end
lexer = Base.new(LexerFactory.new).lexer.create_from_file("directory/file")
Quindi le mie domande sono: cosa mi manca? Cosa non puoi fare senza i metodi di classe e le variabili di classe? Quali problemi potrebbero essere risolti usando quelli?