Come faccio a spiegare un metodo rubino con un'analogia del mondo reale? [chiuso]

0

Sto cercando una buona analogia per aiutare il concetto di un metodo in rubino nella mia testa. Quando capisco veramente un concetto, nella mia mente lampeggia un'immagine che collega qualcosa di fisico ai concetti astratti che sto cercando di imparare.

Ad esempio, qualcuno mi ha spiegato il concetto di una variabile nel modo seguente:

A variable is like a box you can put things in. The name of the variable is like taking a sharpie and writing a word, like "forks" on the side of the box. Picking a good name is important. You can stick anything in the box, but if you write 'forks' on the side of the box, you would expect forks to be in the box. You can put anything in the box, then carry it around to various people, and tell them "there are forks in this box." When they need a fork, they go to the fork box and get out a fork.

Questo è il tipo di analogia fisica, basata sulle immagini e concreta, sto cercando un metodo rubino.

Al momento la maggior parte delle definizioni che ho trovato sono inutili per me. Ad esempio, su turtorialspoint, il primo risultato per la ricerca su google "che cos'è un metodo ruby" ha la seguente definizione.

Ruby methods are very similar to functions in any other programming language. Ruby methods are used to bundle one or more repeatable statements into a single unit.

Lascia che ti faccia un esempio del perché questa definizione sia inutile per me. Sostituirò ogni parola e concetto in questa definizione che non capisco con la parola "blah".

Ruby blah are very similar to blah in any other programming language. Ruby blah are used to blah one or more blah blah into a single blah.

In sintesi, posso ottenere una buona analogia fisica per il concetto di un metodo in ruby?

    
posta Tara Roys 25.01.2014 - 02:34
fonte

6 risposte

3

Al livello simile delle tue caselle variabili - come un'analogia lontana - questi metodi possono essere visti come ricette. per esempio:

per diventare spaghetti:

  • bollire l'acqua salata
  • gettare gli spaghetti
  • controlla ripetutamente se gli spaghetti sono pronti
  • tira fuori gli spaghetti

in pseudocode:

def make_spaghetti()
    boil_salted_water()
    while not ready()
        wait(30)
    take_out()

Hai un nome e alcune istruzioni e, come per le scatole, il nome della ricetta dovrebbe dare un'idea precisa di ciò che è stato fatto.
Nota come le istruzioni come boil_salted_water sono le stesse ricette più piccole (prendi una pentola, versa dell'acqua, ecc.).

ps: ora se chiedi il contesto della ricetta come chi è il cuoco, la cucina, gli ingredienti, ecc. fai riferimento alla risposta di @ 9000.

    
risposta data 25.01.2014 - 10:06
fonte
1

NON uso analogie, ma se lo fossi sarebbe come questo (non specifico rubino)

Una variabile è post-nota. Può avere valori di qualsiasi tipo e di solito c'è un tipo scritto o associato al post-it. Anche le note di post possono essere di dimensioni diverse (minuscole come byte e extra large per il doppio e il decimale perché sai che sono molte cifre da scrivere).

Un array è una scatola di note post-it. La casella potrebbe avere da 0 a molte note e puoi aggiungerne di più o eliminarle

Un'interfaccia è un adattatore cavo. Un po 'come un cavo micro < - > usb. Il computer, l'adattatore di alimentazione o un altro dispositivo utilizza uno slot USB, mentre l'altro capo utilizza qualcos'altro (il telefono che utilizza un micro usb).

Una classe è un dispositivo come il tuo telefono. Fa roba e ha un'interfaccia ad esso. Come il touchscreen o il micro usb (due interfacce diverse, una per l'altra umana per la macchina). O un memory stick se vuoi qualcosa di diverso.

Un metodo è una ricetta. Ti dice di cosa ha bisogno (ingredienti) e cosa produce (altri ingredienti o un muffin).

POTREBBE avere un post-it riferimento a una ricetta

Un metodo virtuale è una ricetta avanzata. Puoi cambiare la torta o il muffin che crea aggiungendo glassa o anche cambiando un ingrediente (carota invece di cioccolato).

Una classe con una classe base è un telefono hackerato. Fa di più e cose che non era destinato a fare. O un 32x per la sega genesis. Lo fa fare molto più di quanto dovrebbe essere in grado di fare (ha il suo chip di elaborazione)

Una tupla è un kabob shish. Può avere davvero tutte le cose che vuole e diversi tipi (carne, pepe, frutta, formaggio ANYTHING)

IDK se ne vuoi ancora. Questi sono stati molto divertenti da fare e molti di questi non ho pensato fino ad ora e sono stati facili da inventare.

    
risposta data 25.01.2014 - 10:34
fonte
1

È possibile utilizzare un forno a microonde manualmente, impostando l'ora per cui si desidera utilizzarlo. Potresti voler sciogliere il burro per 15 secondi, quindi premi 1, 5 e "Avvia".

Ma il microonde ha anche dei comodi bottoni che puoi usare, come defrost , popcorn , rice , ecc. Se li consideri come metodi ruby, sarebbe:

food_item.bacon
food_item.defrost
food_item.rice

Non devi mettere l'ora manualmente. Il microonde sa già cosa, perché qualcuno ha scritto questi metodi:

def bacon
    # Push the buttons to cook bacon, 8:00 minutes
    push 8
    push 0
    push 0
    push "Start"
end

Se si scioglie spesso il burro, è possibile aggiungere un comodo pulsante / metodo:

def butter
    # Push the buttons to melt butter, 15 seconds
    push 1
    push 5
    push "Start"
end

Quindi potresti semplicemente premere il pulsante del burro o chiamarlo nel tuo codice:

food_item.butter

... ora ho fame: /

    
risposta data 31.01.2014 - 01:08
fonte
0

Un modo tipico per spiegare i metodi, le interfacce e il polimorfismo è quello di prendere diversi oggetti del mondo reale simili come esempio.

Ad esempio, prendi una gallina, un'anatra e un tacchino.

Tutti implementano un'interfaccia per spostarsi su una superficie solida che consiste del metodo walk(direction) . Questo metodo è implementato in modo leggermente diverso in ciascuno (puoi distinguere un'andatura da un'altra) ma in modo coerente.

Tutti implementano un'interfaccia per produrre suoni, che consiste in un metodo che chiameremmo quack() . Di nuovo, ha implementazioni chiaramente differenti in tutte e tre.

A differenza di altri due, l'anatra implementa un'altra interfaccia acquatica, con metodi swim(depth) e dive . Un tentativo di chiamare uno di questi sulla gallina o il tacchino finirà in un messaggio di errore infuriato e rumoroso, o anche in una terminazione anormale di loro.

Un'interfaccia più importante è aerea, composta da take_off , fly e land metodi. Il supporto di questa interfaccia non è uniforme. Mentre l'anatra e il tacchino implementano ragionevolmente tutti e tre, la gallina ha mere implementazioni di stub di take_off e land e manca un'implementazione di fly . Quest'ultimo è una regressione nell'implementazione, perché gli antenati di hen hanno un'implementazione ben funzionante. Ma dal momento che nessuno sembra mai invocare hen.fly() , non è nemmeno pianificato di essere corretto. D'altra parte, duck ha un'implementazione migliorata di land(surface) che accetta sia land che water oggetti come argomento.

Nelle lingue con una gerarchia di classi statiche un uccello dovrebbe essere formalmente certificato come anatra per funzionare come tale. Ruby implementa digitazione anatra , consentendo a un uccello che cova come un'anatra e cammina come un'anatra per essere accettato come un'anatra.

Si noti che quanto sopra si applica solo alle situazioni in cui è coinvolta la locomozione e la produzione del suono. In altri contesti, ad es. la torrefazione, un uccello che non implementa le giuste interfacce di cottura e degustazione, potrebbe rendere inaspettatamente una successiva operazione alimentare. Ruby non dispone di strumenti incorporati per verificarlo in anticipo, ma ha una flessibilità sufficiente per implementare tale controllo manualmente quando richiesto, a un costo aggiuntivo.

È importante notare che tutti i metodi hanno un parametro implicito, self . Non c'è alcun modo di quack in modo astratto, uno ha bisogno di un'istanza di un es. anatra; il sé dell'anatra definisce i dettagli concreti dell'invocazione del metodo. L'intero punto degli oggetti (cioè di self ) è il mantenimento di alcuni stati. Per esempio, il livello di fame dell'anatra è una parte dello stato dell'anatra. L'implementazione di quack consulta il valore della fame di self e aumenta di conseguenza il volume.

L'importanza dello stato interno può essere vista su metodi come get_mass . Vari altri metodi, come peck , drink o excrete cambiano la massa di riepilogo. get_mass è condiviso da tutti gli oggetti nell'universo. È probabile che abbia solo un'implementazione canonica, ereditata da tutti gli oggetti, compresi i nostri tre uccelli. Diverse implementazioni di quack e walk di diversi uccelli sono un esempio di polimorfismo di implementazione .

Spero che questo aiuti:)

    
risposta data 25.01.2014 - 05:14
fonte
0

Da un'altra prospettiva:

Un metodo è un'azione che puoi chiedere a qualcosa (di solito memorizzato in una variabile) da eseguire per te.

Ad esempio, puoi chiedere a una lavagna di cancellarsi . Non importa come è fatto, potrebbe essere una lavagna elettronica di fantasia con capacità di auto cancellazione, o quando si preme il pulsante di cancellazione si chiama al piano di sotto e qualcuno si avvicina e cancella la lavagna per voi. Ma il risultato è ciò che conta: hai una lavagna sporca, quando chiami il metodo di cancellazione viene pulito.

Allo stesso modo, potresti avere un metodo microwave.cook (pasto, durata, potenza) - in cui fornisci il microonde al tuo pasto, imposta una durata e potenza, e premi il pulsante di cottura. Il risultato (il valore di ritorno del metodo) è un pasto cotto (o potrebbe mutare l'oggetto pasto che stai passando per farlo cuocere).

Hai metodi complessi (shuttle.go_to_the_moon) e semplici metodi (meal.are_you_cooked?) - che non fanno nulla, ma chiedi semplicemente all'oggetto il suo stato. L'implementazione di un metodo è come la ricetta dal punto di vista dell'oggetto: come lavagna, per cancellarmi, devo inviare una chiamata al reparto di pulizia e dire loro che devo essere pulito. Se stai scrivendo il metodo, devi ovviamente capirlo. Ma se lo chiami, non devi preoccupartene.

(Non mi piace molto l'analogia della ricetta, dato che è incentrata sul codice, e quando si progetta il codice del software non ha importanza tanto quanto lo si chiama).

    
risposta data 31.01.2014 - 01:35
fonte
0

Un oggetto è un'entità con identità , stato e comportamento .

Fai un'analogia con. dire. organismi viventi.

L'identità è abbastanza facile - due organismi sono uguali quando sono uguali (nello stato e nel comportamento), ma occupano lo stesso spazio (ad esempio è lo stesso cane, solo due persone lo chiamano con due nomi diversi).

Lo stato sono variabili, cioè attributi fisici. Colore della pelle, colore degli occhi, salute ... quelle sono tutte parti dello stato; quando simulato in un programma, sarà variabile.

Il comportamento è, beh, come un oggetto cambia il proprio stato o esterno quando reagisce a uno stimolo. Questi sono metodi. Un sacco di istanze della stessa classe (molti cani con la stessa razza) condividono lo stesso comportamento di base in base al loro stato (i metodi sono definiti nella classe, mentre gli attributi sono definiti in un'istanza; il metodo manipola le variabili di istanza). Inoltre, esiste un modello individuale di comportamento (classe singleton).

    
risposta data 31.01.2014 - 01:53
fonte

Leggi altre domande sui tag