Artigo original: OOP Meaning – What is Object-Oriented Programming?

Na sociedade de hoje, impulsionada pela tecnologia, o conhecimento de programação de computadores está em alta demanda. Como desenvolvedor, você precisará conhecer várias linguagens de programação.

Nas últimas décadas, muitas linguagens de programação ganharam popularidade. Você pode ver como as linguagens populares são classificadas neste gráfico de classificação em tempo real aqui (site em inglês).

Enquanto novas linguagens estão sendo criadas, as existentes estão sempre sendo atualizadas para ficarem cada vez melhores.

Embora a maioria das linguagens de programação tenham algumas semelhanças, cada uma tem regras e métodos específicos que a tornam única.

Um conceito que é comum entre muitas linguagens de programação é a Programação Orientada a Objetos.

Quando me deparei com esse termo pela primeira vez, foi um pouco confuso. Levei algum tempo para realmente entender sua importância na programação. Isso, porém, serviu também como uma oportunidade para aprender seus conceitos-chave e saber da importância do conceito para a carreira de um desenvolvedor e para ser capaz de resolver desafios.

Neste artigo, abordaremos a Programação Orientada a Objetos (OOP – do inglês Object-Oriented Programming) como um todo, sem depender de uma linguagem específica. Você aprenderá o que é, por que é tão popular como paradigma de programação, sua estrutura, como funciona, seus princípios e muito mais.

Vamos começar.

O que é a Programação Orientada a Objetos?

Se você fizesse uma pesquisa rápida na internet sobre o que é programação orientada a objetos, descobriria que a OOP é definida como um paradigma de programação que se baseia no conceito de classes e objetos.

Agora, para um iniciante, isso pode ser um pouco confuso – mesmo assim, você não precisa se preocupar. Tentarei explicar da maneira mais simples possível, como na famosa frase: "Explique para mim como se eu tivesse 5 anos".

Aqui está uma breve visão geral do que você pode alcançar com a OOP: você pode usá-la para estruturar um programa em blocos de código simples e reutilizáveis (neste caso, geralmente chamados de classes), que você, então, usará para criar instâncias individuais dos objetos.

Então, vamos encontrar uma definição mais fácil de programação orientada a objetos e aprender mais sobre ela.

Explique OOP como se eu tivesse 5 anos

A expressão "orientada a objetos" é uma combinação de dois termos, objeto e orientada.

O significado dicionarizado de objeto é "uma entidade que existe no mundo real", e orientada significa "interessada em um tipo particular de coisa ou entidade".

Em termos básicos, OOP é um padrão de programação que é construído em torno de objetos ou entidades. Por isso, ela é chamada de programação orientada a objetos.

Para entender melhor o conceito, vamos dar uma olhada em programas comumente usados: um bom exemplo para explicar isso seria o uso de uma impressora quando você está imprimindo um documento.

A primeira etapa é iniciar a ação clicando no comando de impressão ou usando atalhos de teclado. Em seguida, você precisa selecionar sua impressora. Depois, você esperará uma resposta informando se o documento foi impresso ou não.

Por trás do que não podemos ver, o comando que você clicou interage com um objeto (impressora) para realizar a tarefa de impressão.

Talvez você se pergunte, como exatamente a OOP se tornou tão popular?

Como a OOP se tornou popular

Os conceitos de OOP começaram a surgir na década de 1960 com uma linguagem de programação chamada Simula. Embora, naquela época, os desenvolvedores não abraçassem completamente os primeiros avanços nas linguagens OOP, as metodologias continuaram a evoluir.

Avançando para a década de 1980, um editorial escrito por David Robinson foi uma das primeiras introduções à OOP, já que muitos desenvolvedores não sabiam que ela existia.

Até então, linguagens como C++ e Eiffel se tornaram mais populares e comuns entre os programadores de computadores. O reconhecimento continuou a crescer durante a década de 1990 e, com a chegada do Java, a OOP atraiu um grande número de seguidores.

Em 2002, em conjunto com o lançamento do .NET Framework, a Microsoft introduziu uma nova linguagem OOP chamada C# – que é frequentemente descrita como a linguagem de programação mais poderosa.

É interessante que, gerações depois, o conceito de organizar seu código em objetos significativos que modelam as partes do seu problema continua a intrigar os programadores.

Muitas pessoas que não têm ideia de como um computador funciona acham o pensamento de programação orientada a objetos bastante natural. Em contraste, muitas pessoas que têm experiência com computadores inicialmente acham que há algo de estranho nos sistemas orientados a objetos.

Estrutura da OOP

OOP

Imagine que você está administrando uma loja de animais de estimação, com muitas raças diferentes, e que você precisa controlar os nomes, a idade, os dias de atendimento e outros detalhes comuns de manutenção. Como você projetaria um software reutilizável para lidar com isso?

Lembre-se de que temos muitas raças. Assim, escrever código para cada uma seria cansativo. Podemos, no entanto, agrupar informações relacionadas para que possamos produzir código mais curto e reutilizável.

É aí que os blocos de construção entram para nos ajudar a fazer isso usando Classes, Objetos, Métodos e Atributos.

Vamos mergulhar a fundo e entender exatamente o que são esses blocos de construção:

Classes – são tipos de dados definidos pelo usuário que atuam como o modelo para objetos, atributos e métodos.

Objetos – são instâncias de uma classe com dados especificamente definidos. Quando uma classe é definida inicialmente, a descrição é o único objeto que é definido.

Métodos – são funções definidas dentro de uma classe que descrevem o comportamento de um objeto. Eles são úteis para a reutilização ou para manter a funcionalidade encapsulada dentro de um objeto por vez. A reutilização de código é um grande benefício ao depurar.

Atributos – são definidos no modelo de classe e representam o estado de um objeto. Os objetos contêm dados armazenados no campo de atributo.

Princípios da OOP

Creative-Business-Template-Presentation--2-
Princípios da OOP – encapsulamento, abstração, herança e polimorfismo

Para que possamos saber como escrever um bom código OOP, precisamos entender os 4 pilares da OOP que devemos seguir:

  • Encapsulamento
  • Abstração
  • Herança
  • Polimorfismo

Vamos mergulhar a fundo e entender melhor o que exatamente cada um deles significa.

Encapsulamento

Esse é o conceito que vincula os dados. As funções manipulam as informações e as mantêm seguras. Nenhum acesso direto é concedido às informações, caso elas estejam ocultas. Se você deseja obter acesso às informações, precisa interagir com o artigo responsável pelas informações.

Se você trabalha em uma empresa, é muito provável que tenha tido experiência com encapsulamento.

Pense em um departamento de recursos humanos. Os membros da equipe de recursos humanos encapsulam (escondem) os dados sobre os funcionários. Eles determinam como esses dados serão usados e manipulados. Qualquer solicitação de dados do trabalhador ou solicitação para atualizar as informações deve ser encaminhada por meio deles.

Ao encapsular dados, você torna as informações do seu sistema mais seguras e confiáveis. Você também pode monitorar como as informações estão sendo acessadas e quais operações estão sendo realizadas nelas. Isso torna a manutenção do programa mais fácil e simplifica o processo de depuração.

Abstração

Abstração se refere ao uso de classes simples para representar a complexidade. Basicamente, usamos a abstração para lidar com a complexidade, permitindo que o usuário veja apenas informações relevantes e úteis.

Um bom exemplo para explicar isso é dirigir um carro automático. Quando você tem um carro automático e deseja ir do ponto A ao ponto B, tudo o que precisa fazer é informar o destino e dar partida no carro. Então, ele o levará ao seu destino.

O que você não precisa saber é como o carro é feito, como ele recebe e segue as instruções corretamente, como o carro filtra diferentes opções para encontrar a melhor rota e assim por diante.

O mesmo conceito é aplicado ao construir aplicações em OOP. Você faz isso ocultando detalhes que o usuário não precisa ver. A abstração facilita e permite que você gerencie seus projetos em partes pequenas e gerenciáveis.

Herança

A herança permite que as classes herdem recursos de outras classes. Como exemplo, você poderia classificar todos os gatos juntos como tendo certas características comuns, como ter quatro patas. Suas raças os classificam ainda mais em subgrupos com atributos comuns, como tamanho e cor.

Você usa a herança na OOP para classificar os objetos em seus programas de acordo com características e desempenho comuns. Isso torna o trabalho com os objetos e a programação mais fácil, pois permite que você tenha características gerais em um objeto pai e faça com que os objetos filhos herdem essas características.

Por exemplo, você definirá um objeto funcionário, que define todas as características gerais dos funcionários da sua empresa.

Você poderá, então, definir um objeto gerente que herda as características do objeto funcionário, mas também adiciona características exclusivas dos gerentes da sua empresa. O objeto gerente refletirá automaticamente quaisquer alterações na implementação do objeto funcionário.

Polimorfismo

Esse é o poder de dois objetos diferentes responderem de um mesmo modo. O programa determinará qual uso é crítico para cada execução da coisa da classe pai, o que reduz a duplicação de código. Também permite que diferentes tipos de objetos interajam com a mesma interface.

Exemplos de linguagens OOP

Tecnologia e linguagens de programação estão evoluindo o tempo todo. Vimos o surgimento de muitas linguagens sob a categoria OOP, mas a Simula é creditada como a primeira linguagem OOP.

Linguagens de programação que são consideradas OOP puras tratam tudo como objetos, enquanto as outras são projetadas principalmente com algum processo procedural.

Exemplos de linguagens OOP:

  • Scala
  • Emerald
  • Ruby
  • JADE
  • Java
  • Python
  • C++
  • JavaScript
  • Visual Basic .NET
  • PHP

Ainda existem várias outras, mas essas são as mais conhecidas.

Benefícios da OOP

Durante as décadas de 1970 e 1980, linguagens de programação orientadas a procedimentos, como C e Pascal, eram amplamente usadas para desenvolver sistemas de software orientados a negócios. À medida que os programas executavam funcionalidades de negócios mais complexas e interagiam com outros sistemas, porém, as deficiências da metodologia de programação estrutural começaram a aparecer.

Devido a isso, muitos desenvolvedores de software recorreram a metodologias e linguagens de programação orientadas a objetos para resolver os problemas encontrados. Os benefícios de se usar essas linguagens incluíam:

Reutilização de código – por meio da herança, você pode reutilizar o código. Isso significa que uma equipe não precisa escrever o mesmo código várias vezes.

Integração aprimorada com sistemas operacionais modernos.

Produtividade aprimorada – os desenvolvedores podem criar programas com facilidade e rapidez por meio do uso de várias bibliotecas.

O polimorfismo permite que uma única função se adapte à classe em que é colocada.

É fácil de atualizar – e os programadores também podem implementar funcionalidades do sistema de modo independente.

Por meio do encapsulamento, os objetos podem ser autocontidos. Isso também torna a solução de problemas e a colaboração no desenvolvimento mais fáceis.

Por meio do uso de encapsulamento e abstração, o código complexo é ocultado, a manutenção do software é mais fácil e os protocolos da Internet são protegidos.

Conclusão

Hoje, a maioria das linguagens permitem que os desenvolvedores misturem paradigmas de programação. Isso geralmente ocorre porque eles serão usados para vários métodos de programação.

Veja o JavaScript, por exemplo – você pode usá-lo para programação OOP e funcional. Quando você está programando em JavaScript orientado a objetos, você precisa pensar cuidadosamente sobre a estrutura do programa e planejar no início da programação. Você pode fazer isso visualizando como poderá dividir as necessidades em classes simples e reutilizáveis que serão instâncias de modelo de objetos personalizados.

Os desenvolvedores que trabalham com OOP geralmente concordam que, em geral, usá-la permite melhores estruturas de dados e reutilização de código. Isso economiza tempo a longo prazo.