Sto imparando OOP. Ho studiato molto sull'incapsulazione ma più leggo e più mi confondo.
Capisco di nascondere (rendendo privati) i dati e di esporli all'utente della classe (altri sviluppatori) come proprietà o metodi. Capisco anche per incapsulamento che nascondiamo i dettagli.
In un articolo (http://www.csharp-station.com/Tutorial/CSharp/lesson19) ho letto:
Estratto dall'articolo
Quando progetti un oggetto, devi pensare a come gli altri potrebbero usarlo. Nel migliore dei casi, qualsiasi programma che utilizza l'oggetto sarebbe ben progettato e il codice non cambierebbe mai. Tuttavia, la realtà è che i programmi cambiano spesso e in un ambiente di squadra molte persone toccano lo stesso codice in una volta o nell'altra. Pertanto, è utile considerare cosa potrebbe andare storto così come l'immagine incontaminata di come l'oggetto dovrebbe essere usato.
Nel caso dell'oggetto BankAccount, esaminare la situazione in cui il codice esterno all'oggetto può accedere a un campo Importo decimale o a un campo CustomerName stringa. Nel momento in cui il codice è scritto, tutto funzionerebbe bene. Tuttavia, più avanti nel ciclo di sviluppo, ti rendi conto che l'oggetto BankAccount dovrebbe tenere traccia di un CustomerID int anziché della stringa CustomerName perché non vuoi duplicare le relazioni tra le informazioni (o qualche altro motivo valido per alterare la definizione di stato interno) . Tali modifiche causano un effetto di increspatura nel codice perché è stato creato per utilizzare la classe BankAccount, come originariamente progettato (con CustomerName come stringa) e ora devi modificare il codice che accede a tale stato nell'intero applicazione.
Il principio orientato agli oggetti di Incapsulamento aiuta a evitare tali problemi, consentendo di nascondere lo stato interno e l'accesso astratto ad esso, anche se si digitano membri come metodi, proprietà e indicizzatori. L'incapsulamento aiuta a ridurre l'accoppiamento tra gli oggetti e aumenta la manutenibilità del codice.
Domanda In che modo l'incapsulamento aiuta quando si apportano modifiche nel codice e dai suoi effetti a increspature. Per un membro dati, se cambio il suo tipo da int a float, (anche se sto esponendo questo usando la proprietà) dovrò cambiare tipo di variabile dove sto usando già usando questo codice.
Gentilmente guidami come l'incapsulamento ti aiuterà con questi cambiamenti.
Grazie per questo aiuto e guida.