Perché è così difficile sapere dove usare le interfacce, i generici nella progettazione del programma?

4

Sto cercando di imparare c # dalla prima serie di testa, inoltre ho anche consultato altri libri come Pro C # di Andrew Tolson.

Ora il punto è che capisco perfettamente l'interfaccia, la sintassi generica e posso usarla anche per i programmi dati negli esercizi.

Ciò che trovo difficile è usare questi concetti nei miei programmi. Ad esempio, l'altro giorno stavo creando un account Twitter per la gestione dei client e nonostante i miei sforzi non ero in grado di utilizzare nessuno dei concetti sopra menzionati nel codice. Stavo persino avendo difficoltà a creare lezioni utili.

Quali sono alcune linee guida che posso usare per decidere quali classi ho bisogno di creare per il mio programma, assumendo che conosca la sintassi di come per creare una classe, ma non l'idea di quando per farlo?

    
posta Win Coder 30.01.2013 - 13:16
fonte

3 risposte

8

Se vuoi sviluppare un senso per quando utilizzare interfacce, generici e schemi di progettazione, dovresti leggere " Head Primi modelli di progettazione '.

È un libro molto accessibile per qualcuno al tuo livello con il desiderio di saperne di più.

Per favore non fraintendermi. Anche il libro di Troelsen è buono. Basta pensare a "Head First Design Patterns" come "Level 2". Inoltre, non lasciare che il fatto che gli esempi di codice siano scritti in Java ti spaventano. I concetti sottostanti si applicano ugualmente a Java e C #.

    
risposta data 30.01.2013 - 13:39
fonte
5

Penso che stai seguendo una progressione naturale che tutti i programmatori attraversano. Spiegazioni ed esempi di concetti di programmazione sono presentati quasi sempre nel più semplice contesto possibile. L'obiettivo è concentrarsi sul concetto e non farsi distrarre da molti altri concetti. Hai mai notato che molti esempi non includono error-handline? Ottieni un tentativo / cattura al massimo.

Il prossimo passo è fare qualcosa di più complicato. Usiamo il tuo client Twitter come esempio. L'hai costruito e funziona e non vedi alcun "bisogno" di nulla di tutto ciò. Molto comune. Ora, guarda se riesci a creare lo stesso handle dell'applicazione gestendo un account Facebook, Evernote o qualche altro account di servizio online. Quali parti sono difficili da cambiare? Come si evita la duplicazione del codice? Prova a cercare alcuni dei concetti che hai menzionato e vedi se riesci a scoprire "perché" li useresti.

Il prossimo passo, prova e aggiungi un altro programmatore al tuo progetto.

    
risposta data 30.01.2013 - 14:05
fonte
1

Pensa al significato inglese dell'interfaccia. Sia l'interfaccia C # che i generici forniscono il significato inglese dell'interfaccia. Il concetto di interfaccia va oltre il suo tipico utilizzo nel codice di stile OOP.

I generici sono utilizzati per il comportamento polimorfico acheived sulla sintassi della lingua. Ad esempio

void foo<T>(T bar)
{
    //type T must implement the "+" interface
    bar + baz; 
}

L'operazione "+" è incorporata nella sintassi della lingua. Il tipo T implementa l'interfaccia "+" (il significato inglese). In effetti si ottiene un comportamento polimorfico. Internamente l'operazione "+" è molto diversa per interi e decimali, ma il metodo foo gestisce entrambi! Non devi preoccuparti di come "+" è implementato. Ti interessa solo se il tipo implementa l'interfaccia "+".

Le interfacce C # vengono utilizzate per ottenere un comportamento polimorfico su metodi definiti (piuttosto che sulla sintassi del codice sorgente).

void foo(IBar bar)
{
    bar.doSomething();
}

Potrebbero esserci diversi tipi che implementano IBar. Ognuno fa qualcosa () in modo molto diverso. Più o meno come con i generici non ti interessa come fanno Qualcosa (). Ti interessa solo che implementano l'interfaccia. La differenza è che "l'interfaccia" è un contratto di metodi definiti piuttosto che la sintassi del codice sorgente.

    
risposta data 30.01.2013 - 19:45
fonte

Leggi altre domande sui tag