2011-02-02 6 views
6

Desidero estendere la classe String con un metodo per creare una stringa URL da una stringa. Ho trovato un collegamento qui che mostra come è possibile spostare le estensioni nel proprio pacchetto:Il modo migliore per estendere il comportamento della classe Pharo Smalltalk?

Smalltalk Daily 07/13/10: Extending Behavior II.

Tuttavia, non riesco a trovare alcuna opzione "sposta nel pacchetto" in Pharo Smalltalk. Va bene solo estendere la classe principale con il nuovo metodo, o c'è un modo migliore?

risposta

8

In Pharo o Squeak mettere i metodi di estensione per MyPackage in una categoria metodo chiamato *mypackage (o se si vuole essere più descrittivo *mypackage-slug).

I metodi in queste categorie appartengono automaticamente al pacchetto MyPackage (almeno dal punto Monticello di vista)

8

"È consentito solo estendere la classe core con il nuovo metodo, o c'è un modo migliore?"

Ci sono dei compromessi a questa decisione. In effetti, Pharo aveva String >> asUrl fino a poco tempo fa, quando it was removed as part of cleaning the system. Da un lato, è considerato da alcuni uno stile negativo (vedi Best Practices di Kent Beck) per avere metodi di conversione tra oggetti che non hanno protocolli simili (sono semanticamente simili). Inoltre, questo porta a classi core gonfie (come String e Object). Tuttavia, nella tua applicazione, potrebbe esserci una buona ragione per bilanciare questi fattori e, dal momento che lo stai assemblando con la tua app, e non con il sistema, esci.

Problemi correlati