Estou aprendendo OOP. Eu estudei muito sobre encapsulamento, mas quanto mais eu leio, mais fico confuso.
Entendo que ocultamos (tornando privados) dados e os expomos ao usuário da classe (outros desenvolvedores) como propriedades ou métodos. Eu também entendo por encapsulamento que escondemos detalhes.
Em um artigo (http://www.csharp-station.com/Tutorial/CSharp/lesson19), li:
Resumo do artigo
Ao projetar um objeto, você deve pensar em como os outros poderiam usá-lo. No melhor cenário, qualquer programa usando o objeto seria bem projetado e o código nunca mudaria. No entanto, a realidade é que os programas mudam frequentemente e, em um ambiente de equipe, muitas pessoas tocam o mesmo código uma vez ou outra. Portanto, é benéfico considerar o que pode dar errado, bem como a imagem primitiva de como o objeto deve ser usado.
No caso do objeto BankAccount, examine a situação em que o código fora do seu objeto pode acessar um campo Valor decimal ou um campo String de nome do cliente. No momento em que o código é escrito, tudo funcionaria bem. No entanto, mais tarde no ciclo de desenvolvimento, você percebe que o objeto BankAccount deve acompanhar um int CustomerID em vez de string CustomerName, porque você não deseja duplicar os relacionamentos entre informações (ou algum outro motivo válido para alterar a definição de estado interno) . Essas alterações causam um efeito ondulatório no seu código, porque ele foi criado para usar a classe BankAccount, como originalmente projetado (com CustomerName sendo uma sequência), e agora você deve alterar o código que acessa esse estado em todo o aplicativo.
O princípio do Encapsulation, orientado a objetos, ajuda a evitar esses problemas, permitindo ocultar o estado interno e o acesso abstrato a ele por meio de membros do tipo como métodos, propriedades e indexadores. O encapsulamento ajuda a reduzir o acoplamento entre objetos e aumenta a capacidade de manutenção do seu código.
Pergunta Como o encapsulamento ajudará ao fazer alterações no código e em seus efeitos de ondulação. Para um membro de dados, se eu alterar seu tipo de int para float (mesmo se estiver expondo essa propriedade usando), precisarei alterar o tipo de variável em que já estou usando esse código.
Por favor, me guie como o encapsulamento ajudará com essas mudanças.
Obrigado por esta ajuda e orientação.