Come Evitare l'uso di totali parziali nel mio codice Do I?
-
27-09-2019 - |
Domanda
Sto imparando programmazione e progettazione del software e Java a scuola in questo momento. La classe che si sta mi è confuso Software Design. Stiamo usando Word per eseguire semplice codice VB per fare semplici programmi. Il mio istruttore dice che sto perdendo la coesione utilizzando totali parziali. Sto avendo un momento difficile pensare a un modo per evitarli. Ecco un esempio di alcuni pseudocodice sto parlando (i moduli sono chiamati forma di un modulo del driver che non viene mostrato):
CaluculateDiscountPrice module
DiscountPrice = (FloorPrice * (1 – DiscountRate))
End module
CalculateDeliveryPrice module
If DeliveryFee = “Yes” Then
DeliveryPrice = DiscountPrice + 20
ElseIf DeliveryFee = “No” Then
DeliveryPrice = DiscountPrice
End If
End module
CalculateTradeInCredit module
If TradeInCredit = “Yes” Then
CreditedPrice = DeliveryPrice – 5
ElseIf TradeInCredit = “No” Then
CreditedPrice = DeliveryPrice
End If
End module
CaluculateCostOfBed module
CostOfBed = CreditedPrice
End module
Fondamentalmente DiscountPrice
viene utilizzato per unire i primi due moduli e quindi DeliveryPrice
secondo due. Presumibilmente, l'ultimo modulo non può nemmeno bisogno di essere lì è ho risolto questo problema. Qualsiasi aiuto al principiante?
Soluzione
Quando guardo il tuo esempio, quello che salta fuori di me è un problema con accoppiamento tra i moduli. (Se non avete già studiato questo concetto, è probabilmente presto sarà.) Tuttavia, troppo accoppiamento e troppo poco la coesione vanno spesso insieme, quindi spero di poter ancora dare una risposta utile. (Definizioni troppo semplificata, ma adeguate-for-qui: moduli coesive fanno uno focalizzato cosa invece di diverse cose non collegati, e moduli accoppiati dipendono gli uni dagli altri a fare qualunque cosa facciano Noi di solito vogliono moduli per avere una forte coesione interna, ma l'accoppiamento debole per. altri moduli.)
deduco dal pseudocodice che si desidera calcolare il prezzo di un letto in questo modo:
* start with the floor price
* discount it
* add in a delivery fee
* subtract a trade-in credit
* the result is the cost of the bed
Quando si esprimono così, si potrebbe notare che queste operazioni sono (o possono essere) abbastanza indipendenti l'uno dall'altro. Per esempio, la tassa di consegna in realtà non dipende dal prezzo scontato, proprio sulla necessità o meno di una tassa di consegna è da addebitare.
Ora, il modo in cui hai strutturato il vostro disegno, la variabile 'DeliveryPrice' è in realtà un prezzo "al momento della consegna", che fa dipendono dal prezzo scontato. Questo è il genere di cosa che vogliamo eliminare. Possiamo dire che i moduli siano troppo strettamente accoppiati perché dipendono vicenda in modi che non sono realmente necessari per risolvere il problema. Possiamo dire che mancano di coesione perché stanno realmente facendo più di una cosa - vale a dire il modulo prezzo di consegna è aggiungendo la tassa di consegna per il prezzo scontato invece di il calcolo della tassa di consegna .
E 'difficile vedere con esempi di giocattoli, ma questo importa come i disegni diventano più complessi. Con poche righe di pseudocodice, sembra perfettamente naturale avere un "totale parziale" filettato tra loro. Ma cosa succede se la tassa di consegna dipende da un calcolo complesso che coinvolge la distanza a casa del cliente, il peso dell'acquisto, e il giorno della settimana? Ora, avendo esso anche coinvolgere qualunque sia il prezzo scontato otterrebbe davvero confuso.
Quindi, con tutto questo in mente, prendere in considerazione questo progetto alternativo:
CalculateDeliveryFee module
If DeliveryFeeCharged = “Yes” Then
DeliveryFee = 20
End If
End module
CalculateTradeInCredit module
If TradeInCreditApplied = “Yes” Then
TradeInCredit = 5
End If
End module
CaluculateCostOfBed module
DiscountPrice = (FloorPrice * (1 – DiscountRate))
AsDeliveredPrice = DiscountPrice + DeliveryFee
WithTradeInPrice = AsDeliveredPrice - TradeInCredit
CostOfBed = WithTradeInPrice
End module
Ora, l'accoppiamento è ridotto - la consegna e moduli di trade-in non si sa nulla circa i prezzi da letto. Ciò migliora anche la loro coesione, dal momento che stanno facendo qualcosa di più concentrato - calcolare le tasse, non sommando i prezzi e le tariffe. Il calcolo prezzo effettivo non dipende gli altri moduli, ma che è inerente al problema. E il calcolo è coesa - la "una cosa" che sta facendo è il calcolo del prezzo del letto