È possibile scrivere un codice senza metodi di classe, globali e variabili di classe? [chiuso]

3

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?

    
posta random_guy 03.05.2013 - 19:39
fonte

1 risposta

6

È possibile creare un linguaggio di programmazione o scrivere un codice orientato agli oggetti senza metodi / variabili statici / di classe? Assolutamente. Case study: il linguaggio di programmazione Javascript. L'intuizione chiave è che, se si strizza un po 'e si tiene la testa in un linguaggio scomodo, le classi iniziano a sembrare oggetti. Oggetti speciali che fanno cose divertenti quando li colpisci in un certo modo, certo, ma oggetti comunque. Aggiungi un prototipo di sistema (come fa JavaScript) e all'improvviso non hai solo gli approcci standard per il riutilizzo del codice orientato agli oggetti, ma anche molti altri. E tutto senza un supporto speciale per la statica - invece, aggiungi un campo alla tua "classe" (che in realtà è un oggetto) e hai una variabile statica / di classe. Aggiungi un metodo alla tua "classe" e hai un metodo statico / di classe.

Ma per quanto riguarda i globals? Beh, non sono esattamente sicuro di cosa intendi per globali, quindi generalizziamo e parliamo di variabili libere , o di variabili da alcuni degli obiettivi che racchiudono (compreso quello globale, che è lo scopo "enclosing-est": :)). Riesci a immaginare quanto sarebbe difficile scrivere un programma senza variabili libere? Non è divertente :(, ma le persone hanno provato e ci sono riusciti, e potresti trovare questi articles interessanti.

Quando chiedi:

So my questions is: What am I missing? What you can't do without class methods, and class variables? What problems that could only be solved by using those?

Penso che la vera domanda a cui stai andando sia "quali sono i minimi costrutti necessari per creare un linguaggio di programmazione completo di Turing?" o forse "quali sono i minimi costrutti necessari per creare un pratico linguaggio di programmazione?"

Quelle domande sono terribilmente difficili da rispondere. Ad esempio, degno di dottorato, motivo per cui le persone trascorrono le loro vite ricercando le risposte . Forse conoscere i sistemi formali di computazione, come un calcolo lambda, ti aiuterebbe a capire meglio queste domande. Ma alla fine, sono domande scivolose e quasi impossibili da rispondere quando si introducono considerazioni pratiche (in modo che le persone reali possano usarle) nel mix. Se ci provi abbastanza, puoi programmare senza quasi ogni singolo costrutto di programmazione moderno - vuol dire che è tutto solo zucchero?

    
risposta data 03.05.2013 - 21:33
fonte

Leggi altre domande sui tag