Devo implementare una funzione o un metodo?

1

Di tanto in tanto incontro una funzione C nel codice dei miei colleghi. Principalmente è in alcune categorie oggettive utili e quelle funzioni sono principalmente un calcolo interno di qualcosa o un confronto di valori.

Poiché quei ragazzi non fanno più parte della compagnia, non posso chiedere loro perché hanno deciso di andare con una funzione C invece che con un metodo obiettivo C corretto.

Quindi la domanda è:

Perché implementare determinati algoritmi come funzione C anziché come metodo obiettivo C? Quali sono le considerazioni?

    
posta Earl Grey 18.05.2014 - 14:35
fonte

1 risposta

4

La maggior parte delle volte vorrai dei metodi. Ma ricorda che i metodi implicano tutti i tipi di spese generali. Quindi, se non hai per usare i metodi, usare le funzioni C può essere una scelta intelligente.

Devi scegliere i metodi se:

  • altro codice accederà direttamente a tale funzionalità. I metodi sono un modo conveniente per le funzioni di namespace; il modo in cui C di aggiungere prefissi criptici non viene ridimensionato.

  • la tua architettura richiede l'invio dinamico. Il pattern Visitor è un ottimo esempio di questo.

  • la tua funzionalità è un comportamento semantico di un oggetto. I getter / setter sono un esempio di tale funzionalità.

Dovresti scegliere le funzioni C se:

  • le prestazioni sono fondamentali. Chiamare una funzione C tende ad essere più economico di invocare un metodo. Le funzioni matematiche di supporto potrebbero essere un esempio.

  • nessun altro codice utilizzerà questa funzionalità: è un helper interno.

  • la funzionalità non richiede funzionalità OOP come la chiamata dinamica da chiamare. Può ancora chiamare internamente metodi su oggetti. Cioè, stai scrivendo una procedura o una subroutine, non un metodo.

  • le tue funzionalità sono semanticamente alcune operazioni che solo casualmente capita di avere oggetti come argomenti. Cioè il soggetto di interesse è l'azione, non l'oggetto.

Se avessi un "metodo" private static per quella funzionalità in Java, è estremamente probabile che questa dovrebbe essere una funzione C in Objective-C.

    
risposta data 18.05.2014 - 15:25
fonte

Leggi altre domande sui tag