CodeGym /Curso Java /Frontend SELF PT /Introdução à POO

Introdução à POO

Frontend SELF PT
Nível 39 , Lição 1
Disponível

2.1 Principais Conceitos da POO

Na base da abordagem orientada a objetos para programação está o paradigma POO. É quando todas as entidades do programa são tratadas como objetos. Objetos são dados + métodos/funções que fazem algo com esses dados.

Também podemos dizer que um objeto tem estado e comportamento. O Estado do objeto é garantido pelos seus dados, que são armazenados em suas variáveis internas. O Comportamento do objeto é o conjunto de todas as ações que seus métodos realizam.

Existem milhares de objetos em um programa médio, e milhões em um grande. Para reduzir o caos, foi decidido organizar objetos em classes, e classes de objetos em uma hierarquia.

É interessante!
O conceito de hierarquia de classes foi retirado do mundo animal, onde existem pessoas, que são primatas, que são mamíferos, e assim por diante.

Cada objeto tem uma classe, através da qual ele é gerado. Por um lado, uma classe é um tipo de molde de objeto, por outro — é um objeto independente com suas próprias peculiaridades (falaremos sobre isso mais adiante).

Para entender melhor o conceito de classes, confira as seguintes definições:

Classe — é um molde ou esquema para criar objetos, que define os atributos e métodos, característicos de todos os objetos desse tipo. Classes permitem organizar dados e funções que trabalham com esses dados em um todo.

Objeto — instância de uma classe. Cada objeto possui estado (definido pelos atributos) e comportamento (definido pelos métodos).

Encapsulamento — consiste em esconder a implementação interna da classe e fornecer uma interface para interagir com objetos dessa classe. Isso ajuda a proteger os dados e gerenciar o acesso a eles.

Herança — permite que uma classe (filha) herde atributos e métodos de outra classe (pai). Isso facilita a reutilização do código e simplifica sua manutenção.

Polimorfismo — permite usar uma interface única para trabalhar com objetos de diferentes classes. Isso é alcançado por meio da redefinição de métodos em classes filhas que são herdadas das classes pai.

Abstração — consiste em destacar as características comuns dos objetos e criar classes que representam essas características comuns. Isso ajuda a simplificar sistemas complexos e melhorar sua compreensão.

Se você entendeu pelo menos metade — ótimo. A seguir, vamos analisar cada um desses pontos com mais detalhes.

2.2 Abstração

Um bom exemplo de abstração na vida real é a descrição de cargos em uma empresa ou organização. O nome do cargo é uma coisa, enquanto as responsabilidades de cada cargo específico são outra completamente diferente.

Imagine que você está projetando a estrutura de sua futura empresa. Você pode dividir as responsabilidades do secretário: "espalhar" por vários outros cargos. Pode dividir o cargo de diretor executivo em vários cargos independentes: diretor financeiro, diretor técnico, diretor de marketing, diretor de recursos humanos. Ou, por exemplo, unir os cargos de gerente de escritório e recrutador em um só.

Do ponto de vista da programação, abstração é, digamos, a divisão correta do programa em objetos. Normalmente, qualquer programa grande pode ser representado de dezenas de maneiras como objetos interagindo. A abstração permite selecionar as características principais e ignorar as secundárias.

abstração

Abstração é como estratégia em assuntos militares. Estratégia ruim — e nenhuma tática genial irá corrigir a situação.

2.3 Encapsulamento

O objetivo do encapsulamento é melhorar a qualidade da interação das coisas simplificando-as.

Encapsulamento

E a melhor maneira de simplificar algo é esconder toda a complexidade dos olhos curiosos. Por exemplo, se você for colocado na cabine de um Boeing, você não entenderá imediatamente como pilotá-lo:

cabine de um Boeing

Por outro lado, para os passageiros do avião, tudo parece mais simples: comprou a passagem, sentou no avião, decolou e pousou. Você pode facilmente voar de um continente para outro, possuindo apenas as habilidades de "comprar passagem" e "entrar no avião". Todas as complexidades como preparação do avião para o voo, decolagem, pouso e várias situações de emergência são ocultadas de nós. Sem mencionar a navegação por satélite, piloto automático e centros de controle nos aeroportos. E isso nos facilita a vida.

Do ponto de vista da programação, encapsulamento é "ocultação de implementação". Eu gosto dessa definição. Nossa classe pode conter centenas de métodos e implementar um comportamento muito complexo em várias situações. Mas podemos esconder de olhos curiosos todos os seus métodos (colocando "__" antes e depois dos nomes), e para interagir com outras classes deixar apenas alguns métodos. Então todas as outras classes do nosso programa verão apenas três métodos nessa classe, e chamarão apenas eles. E toda a complexidade ficará oculta dentro da classe, como a cabine dos pilotos dos felizes passageiros.

2.4 Herança

A herança tem dois lados: o lado da programação e o lado da vida real. Do ponto de vista da programação, herança — é uma relação especial entre duas classes. Mas é muito mais interessante saber o que herança é do ponto de vista da vida real.

Se precisássemos criar algo na vida real, teríamos duas opções:

  1. criar o que precisamos do zero, gastando muito tempo e energia;
  2. criar o que precisamos com base em algo já existente.

A estratégia mais otimizada é assim: pegamos uma solução existente, fazemos algumas melhorias, adaptamos às nossas necessidades e usamos.

Se rastrearmos a história do surgimento do ser humano, veremos que desde o surgimento da vida no planeta passaram-se bilhões de anos. E se imaginarmos que o ser humano surgiu do macaco (com base no macaco), então passaram-se apenas alguns milhões de anos. Criar do zero — leva mais tempo. Muito mais tempo.

Na programação, também é possível criar uma classe com base em outra. A nova classe se torna uma descendente (herdeira) de uma já existente. Isso é muito vantajoso quando há uma classe que contém 80%-90% dos dados e métodos que precisamos. Nós apenas declaramos a classe apropriada como pai da nossa nova classe, e então na nova classe aparecem automaticamente todos os dados e métodos da classe-pai. Legal, né?

2.5 Polimorfismo

Polimorfismo — é um conceito da área da programação. Ele descreve a situação em que por trás de uma única interface existem diferentes implementações. Se tentarmos encontrar seus análogos na vida real, um desses análogos seria o processo de dirigir um carro.

Se uma pessoa pode dirigir um caminhão, ela pode ser colocada atrás do volante de uma ambulância ou de um carro esportivo. Uma pessoa pode dirigir um carro independentemente de que carro seja, porque todos eles têm a mesma interface de direção: volante, pedais e alavanca de câmbio. O mecanismo interno dos carros é diferente, mas todos eles têm a mesma interface de direção.

Se voltarmos à programação, o polimorfismo permite se referir uniformemente a objetos de diferentes classes (geralmente com um ancestral comum) — algo que é difícil de superestimar. Sua importância cresce conforme o programa aumenta de tamanho.

POO — são princípios. Leis internas. Cada um deles nos limita de alguma forma, dando em troca grandes vantagens quando o programa cresce para um tamanho maior. Os quatro princípios da POO são como as quatro pernas de uma cadeira. Retire pelo menos uma, e todo o sistema se tornará instável.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION