Programação Orientada a objeto
Programação Orientada a Objeto
Antes de começar sobre o que é programação orientada a objeto (POO, em inglês OOP), vamos nos questionamos o que é um objeto? Na área de programação, um objeto é uma coisa do mundo real. Podendo ser um copo, um monitor, um livro, mas nem sempre significa que ele é algo físico que podemos trocar. Podendo assumir a forma de uma consulta odontológica, reserva ao cinema ou uma conta bancaria. Na programação orientada a objeto, um objeto pode ser qualquer coisa de interessante para o desenvolvimento de um software, ou alguma coisa que queremos armazenar ou processar dados. Outro nome para um objeto é entidade.
A programação orientada a objeto contém quatros pilares, sendo:
- Abstração;
- Encapsulamento;
- Herança;
- Polimorfismo.
Abstração
A abstração é uns dos primeiros pilares do POO. Abstração significa simplifica a realidade, buscar o que é importante. Para exemplo uma pessoa é um objeto, porem se vamos projetar uma nova aplicação para processamento de dados sobre uma pessoa, não é interessante contém toda as informações que sabemos sobre uma pessoa. Com isso em mente vamos focar no que é relevante e importante uma pessoa possui tendo em vista seu contexto numa aplicação. Sabemos que todo mundo tem um tipo sanguíneo, entretanto, para um sistema bancário talvez essa informação não seja relevante.
Para criamos um objeto através da programação, necessitaremos que uma CLASSE.
Classe é um template (molde ou forma) para a criação de um objeto. A classe é escrita por programadores que define uma identidade, seus atributos e os métodos (ou comportamento) de uma classe.
Identidade deve ser o nome da classe, sendo único dentro de uma aplicação para que não haja conflitos;
Atributos tem a função de descrever um objeto, referenciada por campos que contem seus dados (ou informações sobre suas características). No exemplo pessoa seus atributos (pode também ser chamado por propriedades) seria nome, idade, altura e o que mais agregar na aplicação;
Métodos são comportamento ou ações que um objeto pode fazer. Exemplo falar, andar, comer.
Com uma classe (ou forma) criada, podemos usar essa classe para criar vários objetos, por meio da instanciação de um objeto. Uma instancia de objeto tem por objetivo criar um objeto que pode contém vários tipos de dados nos atributos e comportasse de diferentes maneiras.
Pessoa pessoa1 = New Pessoa();
Pessoa pessoa2 = New Pessoa();
Pessoa pessoa3 = New Pessoa();
Pessoa pessoa4 = New Pessoa();
pessoa1.Nome = “Willian”; pessoa2.Nome = “Alan”;
pessoa1.Idade = 27; pessoa2.Idade = 22;
pessoa1.Altura = 1.75; pessoa2.Altura = 1.95;
pessoa1.Peso = 100; pessoa2.Peso = 88.34;
pessoa1.Escrever(); pessoa2.Dormir();
pessoa3.Nome = “Maria”; pessoa2.Nome = “Victor”;
pessoa3.Idade = 35; pessoa1.Idade = 9;
pessoa3.Altura = 1,51; pessoa1.Altura = 1.11;
pessoa3.Peso = 49.89; pessoa1.Peso = 32,56;
pessoa3.Ler(); pessoa.Dancar();
Também podemos instancia um objeto usando o construtor;
Pessoa pessoa5 = New Pessoa(“Mateus”, 27, 1.79, 77.12)
Encapsulamento
O encapsulamento esconde detalhes de implementação do objeto(métodos) e o que sobra visível é sua interface, isto é, os conjuntos de todas as mensagens a que ele pode responder. Uma vez que o objeto é encapsulado, seus detalhes de implementação não mais imediatamente acessíveis. Ao invés disso, eles são empacotados e são somente indiretamente acessíveis através da interface do objeto. A única forma de acessar a um objeto encapsulado é através da troca de mensagens: é enviada uma mensagem ao objeto, o objeto mesmo seleciona o método pelo qual ele irá reagir à mensagem. Isso garante uma maior segurança a aplicação.
A lei é: “Não posso quebrar o que não posso acessar”
O encapsulamento usa os modificadores de acesso para limitar sua visibilidade no código. Abaixo tipos de modificadores de acesso (Referência de C#)
- Public: o acesso não é restrito;
- Protected: o acesso é limitado a classe que os contem ou aos tipos derivados da classe que os contem;
- Internal: o acesso é limitado ao assembly atual;
- Protected internal: o acesso é limitado ao assembly atual ou aos tipos da classe que os contem;
- Private: o acesso é limitado ao tipo recipiente;
- Private protected: o acesso é limitado á classe que o contém, ou a tipos derivados da classe que o contém no assembly atual.
Herança
Herança é um mecanismo que permite que características comuns a diversas classes sejam fatoradas em uma Superclasse (ou classe base). A partir de uma superclasse, outras classes podem ser especificadas. Cada Subclasse (ou classe derivada) apresenta as características (estrutura e métodos) da classe base e acrescenta a elas o que for definido de particularidade para ela.
Polimorfismo
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 subclasse, usando para tanto uma referência a um objeto do tipo da superclasse. A decisão sobre o qual o método que deve ser selecionado, de acordo com o tipo da classe derivada, é tomada em tempo de execução, através do mecanismo e ligação tardia.
POO
Abstração
para simplificar a realidade e focar apenas nos dados e processos relevantes para a aplicação que está sendo construída.
Encapsulamento
Os dados e os processos que manipulam esses dados são empacotados e sua complexidade é ocultada.
Herança
Uma classe pode derivar métodos e propriedades de outra classe, resultando em uma hierarquia de classes
Polimorfismo
Diferentes subclasses da mesma superclasse podem implementar sua interface compartilhada de diferentes maneiras
Uso esse anotação para estudo, talvez ter ajude. Se falei algo errado, pode ficar a vontade para apontar o erro
Referências
https://www.youtube.com/watch?v=m_MQYyJpIjg&ab_channel=ComputerScience
https://www.dca.fee.unicamp.br/cursos/PooJava/heranca/index.html
https://mmonlinetool.com/diferenca-entre-superclasse-e-subclasse-java/
https://www.devmedia.com.br/os-4-pilares-da-programacao-orientada-a-objetos/9264