1. O que é abstração em Java?**
A abstração é uma técnica de programação orientada a objetos para generalizar as coisas, introduzindo um melhor nível de abstração, você introduz flexibilidade, reutilização e melhor capacidade de manutenção em seu programa.
A propósito, a abstração está em toda parte, por exemplo, se você precisa escreover um programa que grava a saída em um arquivo, crie um método writeToFile()
, este é o nível mais baixo de abstração, pois é muito específico e nenhuma outra parte do código pode usá-lo.
Isto está OK se o escopo do seu aplicativo for limitado, mas suponha que você precise gravar no console, arquivo, banco de dados ou um soquete TCP, então você pode querer criar uma abstração write()
definida em uma interface e posteriormente uma implementação mais específica dessa interface.
Ao introduzir um nível mais alto de abstração, você pode fazer com que outros módulos de código dependam dessa abstração em vez de módulos específicos, o que significa mais facilidade para introduzir novos destinos ou modificar destinos existentes. A flexibilidade geral melhora.
2. Do que se trata Herança em Java?
A herança é outra técnica de design orientado a objetos, que permite a reutilização de código. Ao usar Herança, você pode definir funcionalidades para várias classes em um só lugar, superclasse, que é mais fácil de alterar e manter. A herança também ajuda a criar uma hierarquia de tipos, que é a chave para escrever um software flexível e altamente sustentável.
Sem a hierarquia de tipos, é impossível obter polimorfismo em tempo de execução (overriding), o que também é possível devido à herança. Em Java, herança é estender uma classe ou implementar uma interface. A linguagem de programação Java suporta herança múltipla de tipo (apenas para interfaces, herança múltilpla de classes não é permitida em Java), que é a capacidade de uma classe implementar mais de uma interface. Um objeto pode ter vários tipos: o tipo de sua própria classe e os tipos de todas as interfaces que a classe implementa.
Quando você estende uma classe, você não apenas herda o tipo, mas também o comportamento de uma classe, mas quando você herda a interface (uma interface contém variáveis e métodos como uma classe, mas os métodos em uma interface são abstratos por padrão, ao contrário de uma classe), você herda apenas o tipo. Embora a herança seja boa para reutilização de código, não é a única opção e às vezes até leva à inflexibilidade. Em uma seção posterior, leremos sobre Composição, que é uma alternativa de estender o comportamento e fornecer o novo recurso às classes.
3. Do que se trata Encapsulamento em Java?
O encapsulamento em Java é outro conceito OOP fundamental, que protege o aplicativo contra mudanças frequentes ou indesejadas. Ao encapsular algo que é variável e muitas vezes muda, um programador orientado a objetos limita o impacto de qualquer mudança futura no sistema geral.
Como o software gasta mais tempo em desenvolvimento do que em manutenção, um design encapsulado adequadamente permite que você incorpore alterações futuras com mais facilidade, sem afetar todas as partes de seu aplicativo que já está testado e funcionando. Ao limitar o impacto de uma mudança, você não apenas reduz o esforço de teste, mas também reduz o tempo de entrega e a qualidade geral.
Essa é a razão pela qual o encapsulamento é um dos conceitos críticos de programação orientada a objetos para dominar. Vários design patterns, como o padrão Decorator e Factory, são baseados no encapsulamento para fornecer uma solução fracamente acoplada e altamente coesa.
3. Do que se trata Polimorfismo em Java?