É utilizada para a definição de entidades do mundo real. Sendo onde são criadas as classes. Essas entidades são consideradas tudo que é real, tendo como consideração as suas características e ações. Como exemplo: a entidade sendo o Carro, a característica sendo seu tipo, cor e tamanho e ações sendo acelerar, ligar
É o processo utilizado para proteger os campos e operações de uma classe (atributos e métodos), permitindo apenas aos membros públicos de serem acessados. Como por exemplo os métodos GET/SET sendo acessados por usuários da mesma classe.
A herança é um princípio que permite criar uma nova classe a partir de uma já existente. ... A principal vantagem da herança é a capacidade para definir novos atributos e métodos para a subclasse, que se somam aos atributos e métodos herdados.
Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma identificação, assinatura, mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse. Como por exemplo o método calcularVelocidade(). Ele pode ser usado pela classe carro() e pela classe moto(), são métodos com a mesma identificação mas com comportamentos diferentes.
Coesão se refere ao princípio da responsabilidade única de uma classe.
E acoplamento se refere ao quanto um classe depende de outra para funcionar
Um código com alta coesão e baixo acoplamento, é um código com mais facilidade de manutenção e mudança no negócio.
SOLID é um acrônimo dos cinco primeiros princípios da programação orientada a objetos e design de código
Uma entidade ou classe, tem uma única responsabilidade. Um software com baixo acoplamento.
Você deve ser capaz de estender um comportamento de uma classe, sem modificá-lo. - Classes abertas para extensão, mas fechadas para modificação.
Um objeto ou instância de uma sub-classe tem que conseguir substituir o objeto herdado da sua classe(pai) principal
Classes não devem depender de métodos que não usam implemetando de interfaces
Um módulo não deve depender de detalhes de implementação mas sim de uma abstração(interface).
Esse tipo de arquitetura é uma abordagem para escrever programas de software. Onde a aplicação é dividida em diversos componentes mínimos e independentes, sendo cada serviço.
- Que cada serviço tem a sua responsabilidade, ou seja, um serviço de login não pode cadastrar usuário
- Um serviço deve ser independente, não deve depender de outros serviços que interajam com ele
- Tratativas de falhas inesperadas sem quebras a aplicação
- Entre outros
- Atualização independente sem afetar outros serviços
- Facilidade de manutenção. Sendo mais fácil de entender um erro pelo fato de um serviço ser restrito apenas a um recurso
- Liberdade de escolha de tecnologias, ferramentas ou estruturas dentro de um serviço
Design Patterns ou padrões de projetos são soluções generalistas para problemas recorrentes durante o desenvolvimento de um software. Ou seja, um conjunto de soluções/arquiteturas de projetos específicos para cada situação.
O princípio básico do MVC é a divisão da aplicação em três camadas: a camada de interação do usuário [View], a camada de manipulação dos dados [Model] e a camada de controle [Controller].
API REST é uma interface que fornece dados em um formato padronizado baseado em requisições HTTP. Sendo multiplataforma Elas utilizam verbos/métodos para definir qual é a finalidade da requisição que está sendo enviada. GET/POST/PUT/DELETE
E que APIs REST se comunicam através de um requisição HTTP trocando dados em formato JSON.
Mapeamento objeto-relacional é uma técnica de muito utilizada para converter dados entre bancos relacionais e linguagens orientadas a objeto
O Hibernate é de fato o framework ORM, ou seja, a implementação física do que você usará para persistir, remover, atualizar ou buscar dados no SGBD. Por outro lado, o JPA é uma camada que descreve uma interface comum para frameworks ORM.