Programação Orientada a Objetos

    




Programação Orientada a Objeto ( POO )

1. Introdução

    O Paradigma da Programação Orientada a Objeto (POO) é um conjunto de bases computacionais que se baseiam na ideia de que o mundo é formado por objetos que podem ser representados. Esses objetos podem ser divididos entre dados e funções, sendo respectivamente suas características e ações que podem tomar. O POO gerencia a complexidade dos problemas os abstraindo e os encapsulando em objetos que podem relacionar e conversar entre si. 

    O Objeto é o centro e a representação de um conceito real em um determinado contexto de modelagem. Um objeto pode representar um conceito tanto concreto como abstrato, como expressar um carro que no caso seria um objeto concreto e uma equipe de engenheiros que seria um objeto abstrato.

    Dentro da história não existe uma única origem para esse paradigma, mas suas contribuições transpassam diversos períodos e tecnologias, tendo contribuições vindas de algumas linguagens de programação, das engenharias de software, das inteligencias artificiais (IA) e dos banco de dados. 

2. Usuários de POO.

    POO é a base para algumas linguagens de programações como: Java, C++ e Ada.

3. Diferenças do POO

    O POO é bem diferente de outros paradigmas, sua abordagem serve para expressar de forma mais modular as divisões do mundo, diferente da Programação Direta o POO usa estruturas como classes e objetos para criar um sistema de código que é mais organizado e mais fácil de ser manipulado e de se realizar manutenção. 

4. Aplicação no código

    Para POO não existe uma definição formal e universal, mas existem conceitos e características que estão dentro do que é esse paradigma. 

    Dentro do POO quando o implementamos diretamente no código criamos uma classe que em si é o esqueleto do objeto, seus métodos e informações são passadas de forma, lá existe todas as características e métodos/ações que o objeto terá ou poderá realizar.  

    Exemplo de Classe em Java: 


    Está classe deve então ser instanciada para que possa se tornar um objeto completo e para que seus métodos possam ser utilizado. 

    Exemplo de Objeto Instanciado em Java:


4.1. Fundamentos do POO

    A Programação Orientada a Objeto (POO) é muito conhecida por conta do seu poder de expressar o mundo de diversas maneiras e muito dessa adaptabilidade vem diretamente de seus fundamentos que são: Abstração, Encapsulamento, Herança, Polimorfismo.

4.2. Abstração

    Abstrair é remover os aspectos irrelevantes de algo e extrair apenas aquilo que é necessário para seu projeto. É separar os aspectos e dar enfoque no comportamento observável de um objeto. 

Exemplo: Em uma aplicação para uma concessionária, informações como modelo, quilometragem rodada e cor do veículo são relevantes, pois impactam diretamente na venda e no interesse do cliente. Por outro lado, detalhes como pequenos arranhões ocultos ou o histórico de trocas de óleo podem não ser necessários no nível inicial do sistema, pois não afetam a funcionalidade principal da aplicação.

4.2.1. Classes Abstratas

    Dentro do código podemos criar classes que são "esqueletos" de outras classes, classes que servem para mostrar a outras classes uma visão abstrata do que deve ser implementado, assim temos classes que tem suas próprias características, mas também tem um punhado de atributos vindas de outras classes, essas são as tão conhecidas Classes Abstratas.

Exemplo de Classe Abstrata


Exemplo de Implementação:


4.3. Encapsulamento

    O Encapsulamento é um sistema de privacidade dentro do POO, é basicamente o que define o acesso do código as informações de dentro de uma classe, existem 4 tipos de "classificações" dentro do JAVA, porém a implementação desse conceito vária a depender das linguagens de programação,. estas tags definem o nível de acesso de um atributo ou método e são eles:  
  • default – O atributo ou método pode ser acessado apenas dentro do mesmo pacote.
  • public – O atributo ou método pode ser acessado de qualquer lugar do código.
  • private – O atributo ou método só pode ser acessado dentro da própria classe.
  • protected – O atributo ou método pode ser acessado dentro da própria classe, dentro do mesmo pacote e por subclasses (mesmo que estejam em pacotes diferentes).


4.4. Herança 

    Herança está intrinsecamente ligado a o conceito de abstração, é uma forma de arruma-la e simplificar o entendimento do problema, promove reuso. Um classe "Pai" é estendida de uma classe "Filha" sendo ela abstrata ou não e com isso ela recebe os métodos e os atributos da classe "Pai". 

Exemplo de Classe Pai em Java:


Exemplo de Classe Filha em Java:


4.5. Polimorfismo

    Polimorfismo é o fundamento da multiplicidade de expressões de um mesmo método. O mesmo método pode ter implementações distintas quando aplicada a diferentes tipos de dados, o polimorfismo permite redefinição de comportamento herdado, um novo objeto pode ser introduzido para realizar todo o comportamento do objeto existente (por herança), adaptando partes desse comportamento a uma nova realidade (por polimorfismo). 

  • Polimorfismo em tempo de compilação (Overload): Relacionado à sobrecarga de métodos e à escolha do método com base nos parâmetros passados.
Exemplo de Polimorfismo Overload: 


  • Polimorfismo em tempo de execução (Override): Relacionado à sobrescrita de métodos e à invocação de métodos com base no tipo real do objeto instanciado.
Exemplo de Polimorfismo Override: 


5. Vantagens 
  • Maior facilidade para reutilização de código e por conseqüência do projeto;
  • Possibilidade do desenvolvedor trabalhar em um nível mais elevado de abstração;
  • Utilização de um único padrão conceitual durante todo o processo de criação de software;
  • Maior adequação à arquitetura cliente/servidor;
  • Maior facilidade de comunicação com os usuários e com outros profissionais de informática;
  • Ciclo de vida mais longo para os sistemas.
6. Desvantagens
  • Complexidade no aprendizado para desenvolvedores de linguagens estruturadas;
  • Maior esforço na modelagem de um sistema OO do que estruturado (porém menor esforço de codificação, sendo uma vantagens);
  • Dependência de funcionalidades já implementadas em superclasses no caso da herança, implementações espalhadas em classes diferentes.
7. Casos de Uso

    O POO deve ser usado em momento onde temos a necessidade de gerir um sistema complexo que represente o mundo real, o paradigma vai te ajudar a justar os conceitos, objetificar o seu sistema e o ajudar com a manutenção tudo de uma forma dinâmica. 

Referências

RICARTE, Ivan Luiz Marques. Programação Orientada a Objetos: Uma Abordagem com Java. 2001. Disponível em: https://www.dca.fee.unicamp.br/cursos/PooJava/Aulas/poojava.pdf. Acesso em: 23 fev. 2025.

SOUZA, Vítor E. Silva. O Paradigma Orientado a Objetos. Disponível em: https://www.inf.ufes.br/~vitorsouza/archive/2020/wp-content/uploads/academia-br-paradigmaoo.pdf. Acesso em: 23 fev. 2025.

OLIVEIRA, Prof. Dr. Juliano Lopes de. Paradigma de Orientação a Objetos. Disponível em: https://ww2.inf.ufg.br/~juliano/ensino/graduacao/TutorialParadigmaOO.pdf. Acesso em: 23 fev. 2025.








Comentários

Postagens mais visitadas