Qual è la differenza tra una funzione e un componente?

3

Ho appena ascoltato Radio di engineering del software sui componenti. La loro descrizione dei componenti era molto vaga, li faceva sembrare versioni di funzioni di livello più basso. Sto cercando di capire quali componenti significano nel contesto di pattern composito .

  1. Qual è la differenza di scopo tra una funzione e un componente?

  2. Che cosa ha a che fare un componente con il pattern composito?

  3. Puoi descrivere cosa è un componente usando una metafora divertente? Ad esempio, spiega come creare un componente come cuocere una torta di mele.

posta chopper draw lion4 07.09.2014 - 05:02
fonte

3 risposte

2

Non esiste una nozione chiara del termine » componente «. Potresti usarlo in molti modi diversi. Ma se vai alla radice della parola (in termini di linguistica) hai » componere «, che è esso stesso un »compositum « di » cum «(con) e» ponere «(messo). Quindi se metti insieme qualcosa hai una composizione "di singole parti.

Ci sono due aspetti principali per i componenti:

  • Composizione » messo insieme «
  • Compartimentalizzazione » cose indipendenti «

Quindi un componente software è una unità o parte di software, che di per sé potrebbe essere utilizzato indipendentemente dalla composizione reale - ma d'altra parte è usato per costruire un sistema più grande. Idealmente hai un software in cui ogni componente è ortogonale , il che significa che nessun componente dipende da un altro componente e fanno ciascuno il loro lavoro, dove nessuna funzionalità è duplicata (una forma di DRY ).

Nella maggior parte dei casi potresti sostituire » componente « con » parte «.

I am trying to figure out what components mean in the context of the composite pattern.

Il punto del modello composito è quello di mettere parti indipendenti sotto un'interfaccia unica. Hai componente di base come un contratto per ogni parte da rispettare. Hai una foglia che è la parte e hai il composito , che contiene una raccolta di quelle parti .

1) What is the difference in purpose between a function and a component?

Un componente è il oggetto / operatore di una funzione (in OO-termini ). D'altra parte, se prendi lingue funzionali , penso che sarebbe corretto parlare di funzioni come componenti in un composizione funzionale . In un senso più ampio, potresti parlare di un componente in un tutto, che rappresenta una funzione: ad es. » un componente di stampa « che indica la funzione che può essere stampata.

2) What does a component have to do with the composite pattern?

Vedi sopra: Composite riguarda la messa insieme di componenti .

3) Can you describe what a component is by using a funny metaphor? For example, explain how creating a component like baking an apple pie.

  • Un modo per dirla: un componente è come un ingrediente per un pasto.
  • Un altro modo per dirlo: un componente è un giocatore in una partita di calcio. Ognuno di loro è diverso e deve giocare un altro ruolo nel gioco, ma insieme, sono un team e giocano a calcio .
risposta data 07.09.2014 - 10:36
fonte
1

Non penso che la discussione del podcast sui "componenti" sia direttamente nel contesto del pattern composito . Stanno parlando di ingegneria del software basata sui componenti . Suppongo che questa sia una delle trappole dell'ambiguità della terminologia dello sviluppo del software.

Ma, mettendo da parte per discutere il pattern composito, c'è una bella spiegazione qui , nel caso in cui non l'hai letto .

Fondamentalmente, nel modello composito, una classe Componente è semplicemente una classe che fornisce alcune funzionalità astratte. Nella maggior parte dei casi di utilizzo del mondo reale, è una classe con un'interfaccia per l'output di dati, come un post o un messaggio. In ruby, implementerò una classe Message :

class Message

    def initialize
        @message = ''
    end

    def display
        #abstract
    end

end

Nel modello composito, una Foglia è una singola entità, che generalmente visualizza solo una unità di informazioni. Nel nostro esempio, un singolo messaggio produrrà semplicemente la stringa con cui viene creata un'istanza con:

class Single < Message

    def initialize(message)
        @message = message if message.is_a?(String)
    end

    def display
        puts @message
    end

end

Nel pattern composito, un Composito è un oggetto che può contenere altri componenti, indipendentemente dal fatto che quei componenti siano essi stessi Composite o semplicemente Leaves singoli. Per il nostro esempio, creerò una classe di messaggi multipli:

class Multiple < Message

    def initialize
        @message = []
    end

     def display

        @message.each do |message|

            message.display

        end

    end

    def add (message)
        message = Single.new(message) if message.is_a?(String)
        @message << message if message.is_a?(Message)
    end

end

Il risultato finale è che più oggetti messaggio possono contenere singoli messaggi e più messaggi nidificati multipli

m1 = Multiple.new
m1.add 'Hello!'
m1.add 'Hola!'
m1.add 'Bienvenue!'

m2 = Multiple.new
m2.add 'Salut!'
m2.add 'Jumbo!'

m1.add m2

m1.display

Questo codice verrà emesso:

Hello!
Hola!
Bienvenue!
Salut!
Jumbo!

In metafora, suppongo che una Componente potrebbe essere come un dirigente di un'azienda. Qualsiasi dirigente esecutivo può lavorare da solo o essere il capo di una divisione o dipartimento. Ma quando vai in giro e chiedi quanti soldi avrà bisogno ogni dirigente per il prossimo anno fiscale, non ti interessa quale sia. Se lavorano da soli, ti diranno semplicemente quale sia il loro stipendio / dovrebbe essere. Se sono a capo di una divisione, aggiungeranno il denaro necessario a tutti gli impiegati che lavorano sotto di loro. Questi dipendenti potrebbero anche non essere i capi delle sottodivisioni, nel qual caso lo stesso processo si verificherebbe in modo ricorsivo.

Spero che ti aiuti!

    
risposta data 07.09.2014 - 07:43
fonte
0

Penso, in poche parole:

Un componente ha informazioni sullo stato.

come:

  • Controlli
  • classi di connessione

Una funzione non ha informazioni sullo stato.

come:

  • calcoli a matrice
  • parser di string
risposta data 27.10.2015 - 10:27
fonte

Leggi altre domande sui tag