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

Introdução à POO

Python SELF PT
Nível 15 , Lição 2
Disponível

2.1 Conceitos principais da POO

A base da abordagem orientada a objetos na programação é a paradigma da POO. Isso acontece 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 é definido por seus dados, que estão armazenados em suas variáveis internas. O comportamento do objeto — é a soma de todas as ações que seus métodos executam.

Existem milhares de objetos em um programa médio, em um grande — milhões. Para reduzir o caos, decidiu-se organizar os objetos em classes, e classes — em uma certa hierarquia.

Interessante! O conceito de hierarquia de classes foi retirado do reino animal, onde existem humanos, que são primatas, que são mamíferos, e assim por diante.

Cada objeto tem uma classe que o cria. Por um lado, a classe é um modelo de objeto, por outro lado — é um objeto independente com suas próprias características (mais sobre isso abaixo).

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

Classe:

Classe — é um modelo ou esquema para criar objetos, que define 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:

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

Encapsulamento:

Encapsulamento é sobre esconder a implementação interna da classe e fornecer um interface para interagir com os objetos dessa classe. Isso ajuda a proteger os dados e gerenciar o acesso a eles.

Herança:

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

Polimorfismo:

Polimorfismo permite usar uma única interface para trabalhar com objetos de diferentes classes. Isso é alcançado através de overrides de métodos nas classes filhas, que são herdados das mães.

Abstração:

Abstração é sobre extrair 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. Em seguida, vamos examinar 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, mas as responsabilidades de cada cargo são outra coisa completamente diferente.

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

Em termos de programação, abstração é, digamos, a forma correta de dividir um programa em objetos. Normalmente, qualquer grande programa pode ser representado de dezenas de maneiras como objetos interagindo entre si. Abstração permite selecionar as características principais e omitir as secundárias.

Abstração é como uma estratégia em uma guerra. Uma estratégia ruim — e nenhuma tática genial pode corrigir a situação.

2.3 Encapsulamento

O objetivo do encapsulamento é melhorar a qualidade da interação dos elementos simplificando sua interação.

E a melhor maneira de simplificar algo é ocultar todas as partes complexas dos olhares curiosos. Por exemplo, se você entrar na cabine de um Boeing, você não vai entender de imediato como pilotá-lo:

Por outro lado, para os passageiros do avião, tudo parece mais simples: compra o ticket, entra no avião, decola e aterra. Você pode facilmente viajar de continente a continente com apenas as habilidades de "comprar um ticket" e "embarcar no avião". Todas as complexidades como preparar o avião para o voo, decolagem, pouso e diversas situações de emergência estão ocultas de nós. Sem mencionar a navegação por satélite, piloto automático e os centros de controle de tráfego aéreo nos aeroportos. E isso torna nossa vida mais fácil.

Do ponto de vista da programação, encapsulamento é "ocultação da implementação". Eu gosto dessa definição. Nossa classe pode conter centenas de métodos e implementar comportamentos muito complexos em várias situações. Mas podemos ocultar de olhares curiosos todos os seus métodos (envolvendo seus nomes com "__" em ambos os lados), e para interagir com outras classes, deixar apenas dois ou três métodos. Então todas as outras classes do nosso programa verão nesta classe apenas três métodos e chamarão precisamente esses. E todas as complexidades estarão ocultas dentro da classe, como a cabine dos pilotos dos passageiros felizes.

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, a herança — é uma relação especial entre duas classes. Mas o que é muito mais interessante é o que a herança significa com relação à vida real.

Se precisássemos criar algo na vida real, teríamos dois caminhos:

  1. criar o que precisamos do zero, gastando muito tempo e esforço;
  2. criar o que precisamos baseado em algo já existente.

A estratégia mais otimizada parece ser: pegamos uma boa solução existente, a ajustamos um pouco, adaptamos às nossas necessidades e a usamos.

Se seguirmos a história do surgimento do homem, veremos que desde o início da vida no planeta se passaram bilhões de anos. Mas se imaginarmos que o homem surgiu do macaco (baseado no macaco), se passaram apenas alguns milhões de anos. Criar do zero — é mais demorado. Muito mais..

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

2.5 Polimorfismo

Polimorfismo — é um conceito da área de programação. Descreve a situação onde atrás de uma interface única se escondem diferentes implementações. Se tentarmos procurar analogias na vida real, uma delas seria o processo de dirigir um carro.

Se uma pessoa pode dirigir um caminhão, ela pode dirigir uma ambulância, ou um carro esportivo. A pessoa pode dirigir o carro independentemente de qual tipo de carro for, porque todos possuem a mesma interface de controle: volante, pedais e alavanca de câmbio. O sistema interno dos carros é diferente, mas todos eles têm a mesma interface de controle.

Voltando à programação, o polimorfismo permite lidar uniformemente com objetos de várias classes (geralmente têm um ancestral comum) – uma coisa que é difícil de superestimar. Seu valor aumenta quanto maior for o programa.

POO — são princípios. Leis internas. Cada um nos limita em algo, mas nos dá grandes vantagens quando o programa cresce em tamanho. Quatro princípios da POO — são como quatro pernas de uma cadeira. Se tirar pelo menos uma, toda o sistema se tornará instável.

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