Incorporando gli schemi di progettazione GoF in Objective-C senza classi astratte / virtuali

2

Come qualcuno che sta diventando più a suo agio lavorando in Objective-C mi piacerebbe essere in grado di incorporare più modelli di progettazione e funzionalità OOP nei miei progetti, ma fatico a implementarli come richiesto da GoF perché non è possibile creare una classe astratta. Voglio 1) evitare molte sottoclassi, 2) minimizzare l'uso di respondsToSelector , conformsToProtocol , ecc, 3) evitare tecniche come swizzling il più possibile, 4) massimizzare l'incapsulamento, e 5) evitare condizionali lunghi o un sacco di typedef enum .

Ad esempio, in un progetto recente volevo separare RestKit (una libreria per accedere ai servizi RESTful) dalle mie sottoclassi UIViewController . L'ho fatto incorporando un Adapter tra i due con una classe base di ModelController , che poteva accedere ai modelli. Ho anche creato il protocollo ModelControllerDelegate per i miei VC da collegare. Ma ho avuto grandi difficoltà nel creare un ModelControllerDecorator senza l'uso di una classe base astratta. Volevo essere in grado di decorare il mio ModelController con aspetti diversi, come PaginationDecorator , CompressionDecorator , QueryableDecorator e così via.

Ho sentito che usare Objective-C ++ è un modo per incorporare più funzionalità OOP, ma che ne dici di utilizzare le funzionalità standard del linguaggio Objective-C? Come sei stato in grado di incorporare pattern di progettazione GoF che utilizzano le funzionalità in stile C ++ (come virtual classes) nei tuoi progetti?

    
posta tacos_tacos_tacos 13.06.2012 - 19:58
fonte

1 risposta

3

Non sono sicuro del motivo per cui penseresti che l'implementazione di OO di Objective-C sia in qualche modo inferiore a quella del C ++? Molti, incluso l' inventore del termine "OO", sosterrebbero che è vero il contrario: l'OO di Objective-C è buono come OO di Smalltalk perché, beh, l'OO di Objective-C è OO di Smalltalk. Utilizza persino la sintassi di Smalltalk!

Il libro GoF contiene il codice Smalltalk per tutti gli schemi di progettazione, il movimento del motivo di progettazione avviato in Smalltalk, molti modelli di progettazione sono stati scoperti e descritti in Smalltalk.

Si noti, tuttavia, che alcune delle implementazioni Smalltalk nel libro GoF sono di qualità discutibile. Significa che cercano di stare troppo vicino all'implementazione del C ++ e di non sfruttare alcune delle caratteristiche dinamiche di Smalltalk. Alcuni modelli non sono nemmeno necessari affatto in una lingua come Smalltalk o Objective-C, tuttavia il libro contiene ancora implementazioni Smalltalk per loro. (Tre dei GoF provengono dalla comunità C ++, solo uno dalla comunità Smalltalk, quindi questo tipo di pregiudizio non è davvero inaspettato.)

Inoltre non capisco perché pensi di non poter avere classi astratte in Objective-C. Naturalmente, puoi avere classi in cui alcuni dei metodi devono essere implementati da sottoclassi. Questo è il punto intero delle sottoclassi in primo luogo!

Informazioni su Objective-C ++: Objective-C è un linguaggio che è stato creato imbustando ortogonalmente Smalltalk lateralmente su C. Uno degli obiettivi principali del progetto era che le parti Smalltalk e C non dovevano interagire tra loro. Objective-C ++ è lo stesso. Le parti Smalltalk e C ++ non interagiscono. Il che significa che hai una lingua con due sistemi di tipo indipendenti, completamente ortogonali, e due sistemi di oggetti indipendenti, completamente ortogonali che non interagiscono o integrano affatto l'uno con l'altro. L'unica cosa che ha senso usare da C ++ in Objective-C ++ sono le cose che sono non su OO: templates, principalmente.

    
risposta data 14.06.2012 - 00:08
fonte

Leggi altre domande sui tag