Come ricordi i tipi di incapsulamento per un uso efficace?

3

Ho cercato di imparare C # .NET per lo scorso mese o giù di lì, e l'array di idee che mi sembra sempre in difficoltà è l'incapsulamento. Poiché questo è uno dei tre pilastri dell'OOP, ritengo di operare in perdita per non comprenderne più chiaramente l'uso e le implementazioni. Quando si apprende, tuttavia, è spesso utile sviluppare o assimilare mnemonici per aiutare a mantenere tutte queste conoscenze. Avere un buon manuale di riferimento a portata di mano è una cosa, ma mantenere una base funzionante di comprensione è un'altra.

Quando si tiene traccia di se un tipo / metodo è public , private , protected , static o sealed , mi sorprendo a chiedermi cosa e perché tutti allo stesso tempo.

La mia domanda, quindi è come fai a ricordare le parole chiave di incapsulamento e quando usarle ? Prova ed errore è ciò che sta funzionando per me ora come studente, ma spero di andare oltre prima di fare un uso professionale di questa abilità.

    
posta Nathanus 15.04.2011 - 20:42
fonte

4 risposte

4

Quando ho iniziato a programmare l'incapsulamento era un concetto difficile da ingoiare. Forse perché mi sono concentrato sul lavoro da solo piuttosto che in una squadra. Coprire tutti i modificatori è troppo per questo forum. Quindi mi concentrerò sull'incapsulamento, privato e pubblico.

Mentre, questo non è l'unico motivo per incapsulare ... Posso illustrare con un esempio.

L'incapsulamento ha davvero iniziato a dare più senso quando ho iniziato a lavorare in una squadra. Quando lavori con un altro sviluppatore, vuoi dividere le attività. Supponiamo che ti venga assegnato il compito di creare uno strumento di posta elettronica. Per prima cosa, tu e il dev2 state insieme e discutete di cosa avrete bisogno:

  • Un Emailer richiede che dati e funzionalità funzionino correttamente.
  • Dati
  • : Da, A, Oggetto, Corpo, Messaggio, Allegati
  • Funzionalità
  • : Send (), GetSmtpServer ()

L'attività diventa la classe o "oggetto". I dati diventano proprietà. La funzionalità diventa funzioni.

public class Emailer
    {
      public string From
      public string To
      public string Subject
      public string Body
      public string Message
      public string[] Attachments
      public Email(){}
      public Send()
      {
          //functionality
      }
      private GetSmtpServer()
      {
         //functionality
      }
    }

Puoi chiedere, "Perché ho reso privato GetSmtpServer ()?"
Perché l'altro sviluppatore vuole sapere come usare l'Email. Non ha bisogno di sapere tutti i miei dettagli nitidi. Quindi, non ha bisogno di vedere GetSmtpServer() . Questo è il motivo per cui l'ho reso privato.

Infine, l'incapsulazione raggruppa elementi simili in un'unica unità. Questo rende il tuo codice auto-documentante. In altre parole, posso guardare la classe chiamata "Emailer" e avere una buona idea di cosa dovrebbe fare. Quando vedo "Invia ()" posso indovinare che invierà un'e-mail.

D'altra parte, se aggiungo a Emailer un metodo chiamato "CreateInventory ()", non sarebbe ovvio come funzioni questa funzione. Non ci sono ulteriori dettagli su questo, oltre a ciò è l'abuso di incapsulamento e un altro argomento.

    
risposta data 15.04.2011 - 21:11
fonte
4

immagina che le classi siano membri della famiglia. Hanno cose diverse

  • Pubblico è qualcosa di accessibile agli altri, anche da altre famiglie

  • Lo ha protetto qualcosa che appartiene a padre / madre e solo lui / lei oi suoi / i suoi figli possono accedervi

  • Privato è qualcosa che appartiene solo a un membro della famiglia

  • statico - è qualcosa di comune tra padri o madri o bambini. Ad esempio: quanti mogli / mariti possono avere un uomo / una donna secondo la legge

risposta data 15.04.2011 - 21:14
fonte
2

Da dove cominciare? Sembra che tu abbia incasinato un concetto.

Primo public , private e protected sono modificatore di accesso , tu dimenticato internal . Esse specificano a quale livello si può accedere a ciò che si è dichiarato. L'idea è di mostrare solo i desideri che devi mostrare. ma qui alcune linee guida per il 3 'p':

  • I privati sono per qualcosa che vuoi mantenere "segreto"
  • Protetto è quando vuoi dire i "segreti" quando qualcuno deriva dal tuo codice
  • Public è la tua interfaccia.

Statico non ha nulla a che fare con l'incapsulamento.
sigillato proibire la derivazione.

L'idea dell'incapsulamento è di mantenere il più segreto possibile senza interrompere la funzionalità. Al di fuori di una classe, non è necessario sapere come funziona. quelle cose sono incapsulate.

    
risposta data 15.04.2011 - 21:05
fonte
1

Durante la progettazione della classe, chiediti 'Qual è il minimo indispensabile che voglio che faccia' la cosa più semplice. Quindi, chiedi 'Che cosa sarà necessario per fare una cosa?' e "L'utente fornirà tali esigenze o la classe eseguirà internamente?". Se internamente, quali informazioni aggiuntive saranno necessarie per farlo?

Inizia a costruire la classe con il costruttore che prende le cose di cui ha bisogno e il verbo / funzione che prende informazioni aggiuntive per il caso d'uso. Man mano che progredisci nella progettazione, aggiungendo più funzionalità, ricorda di mantenere l'interfaccia pubblica il più semplice possibile - minimalista.

Ecco il trucco per OOP - mentre progetta, sarai tentato di dire Oh! sarebbe davvero facile migliorare questa classe facendo X in questo momento. Chissà, ci piacerebbe avere X in futuro, potrei farlo ora visto che posso vedere cosa ci vuole ...

A seconda di cosa sia, è una tentazione a cui dovresti resistere. Hai un programma da costruire e il principio YAGNI entra in gioco. Fai solo ciò di cui hai bisogno.

La tua interfaccia pubblica è la tua descrizione del lavoro, chi vuole aggiungere cose inutili alla descrizione del proprio lavoro?

Una volta che public e private diventano la tua seconda natura, puoi iniziare a riflettere sul mondo della protezione, dove inizia il vero divertimento.

    
risposta data 13.07.2011 - 10:47
fonte

Leggi altre domande sui tag