Conceitos de Programação Orientada a Objetos

Programação Orientada a Objetos (POO)

Programação Orientada a Objetos – POO (Object-Oriented Programming – OOP) é um paradigma de programação que usa tipos de dados personalizados. Em vez de operar apenas com tipos de dados primitivos, podemos construir novos tipos de dados, conforme nossa necessidade.

Esses novos tipos de dados, que chamamos de classes, podem conter estruturas semelhantes a funções, denominadas métodos, e variáveis internas, chamadas de atributos. As classes dão origem a objetos, em um processo denominado instanciação.

Os objetos são os “blocos de construção” de software na OO.

Vantagens da Orientação a Objetos

  • Fornece uma estrutura modular para a construção de programas
  • Objetos podem ser reutilizados em aplicações diferentes
  • O software se torna mais fácil de manter
  • O desenvolvimento é mais rápido, devido ao reuso de código
  • Encapsulamento: não é necessário conhecer a implementação interna de um objeto para poder usá-lo

Objeto

Trata-se de uma ocorrência específica de uma classe; é uma “instância de classe”.

Os objetos são a base da OO (Orientação a Objetos).

Os objetos representam entidades do mundo real, como aviões, pessoas, contas correntes, etc., mas também podem representar outros conceitos, como gráficos (círculos, quadrados, cones, esferas, etc.)

Um objeto possui características próprias (atributos) e executa determinadas ações (métodos), sendo esses atributos e métodos provenientes da classe que origina o objeto.

Abstração

Abstrair significa selecionar aspectos específicos de um problema a ser analisado, deixando de lado outros aspectos. É a  representação de uma entidade do mundo real na forma de idéias.

As entidades abstraídas podem se comunicar entre si, por meio da troca de Mensagens.

De acordo com o autor Correia (2006):

“Pelo princípio da abstração, nós isolamos os objetos que queremos representar do ambiente complexo em que se situam, e nesses objetos representamos somente as características que são relevantes para o problema em questão”.

Mensagens

Os objetos se comunicam a partir da troca de mensagens.

Uma mensagem é um sinal enviado de um objeto a outro, o qual requisita um serviço, usando uma operação programada no objeto chamado. Por exemplo, para que um objeto execute um método, é necessário enviar a este objeto uma mensagem solicitando a execução do método desejado.

As mensagens somente ocorrem entre objetos que possuem uma Associação.

As mensagens também são programadas. Quando uma mensagem é recebida, uma operação é invocada no objeto chamado.

Há vários formatos de mensagens: procedures (subs e functions), passagem de sinais entre threads, acionamento de eventos, etc.

Mensagens em Programação Orientada a Objetos

O que são Classes

Uma Classe é uma coleção de objetos que são descritos com os mesmos atributos e as mesmas operações. Uma classe representa uma ideia ou conceito e classifica objetos que tenham propriedades similares.

As classes são os blocos de construção mais importantes dos sistemas orientados a objetos, e devem possuir responsabilidades bem definidas dentro da aplicação.

Uma classe é um tipo personalizado de dados.

Desta forma, uma classe é um tipo abstrato de dados, um “molde” para a criação de objetos. Cada classe criada se torna um novo tipo disponível para declarar variáveis e criar objetos

Por convenção, começamos o nome de uma classe com letra maiúscula, e capitalizamos cada palavra subsequente que o compuser.

As classes representam os blocos de construção mais importantes dos sistemas orientados a objetos, e devem possuir responsabilidades bem definidas dentro da aplicação.

Uma classe é como se fosse um tipo abstrato de dados, um “molde” para a criação de objetos.

Um objeto é, portanto, um “Instância de uma Classe

As classes possuem atributos e métodos.  Atributos são características da classe, que são comuns a todos os objetos derivados, e que podem apresentar valores diversos. Já os Métodos são as operações possíveis em uma classe (nos objetos instanciados a partir dela).

Orientação a Objetos - Classes, Métodos e Atributos

Atributo de Classe

Ou Propriedade: Característica particular de uma ocorrência de uma classe, como por exemplo o nome e a idade de uma pessoa.

Existem dois tipos principais de propriedades:

  • Estáticas: Mantém o mesmo valor durante toda a sua existência. Por exemplo, a data de nascimento de uma pessoa é uma propriedade estática, pois mantém o mesmo valor durante toda a existência do objeto instanciado.
  • Dinâmicas: Podem ter valores que variam com o passar do tempo. A idade de uma pessoa pode ser considerada um atributo dinâmico, pois pode variar ao longo do tempo.

Método

É a lógica contida em uma classe para atribuir-lhe comportamentos. São as funções e procedimentos contidos na classe.

O ato de invocar um método é a passagem de mensagens para o objeto.

Toda classe possui um método especial chamado de método construtor, que inicializa o objeto instanciado.

As classes também usam métodos destruidores para finalizar os objetos após seu uso.

Um método é uma sequência de declarações (comandos) que possui um nome de identificação. É similar a uma função ou procedimento.

Um método possui um nome e um corpo onde ficam os comandos que serão executados quando o método for chamado, e também podem receber dados para processamento (parâmetros) e retornar informações.

Os métodos são a forma principal de passagem de mensagens entre objetos. Um método deve executar sempre uma operação única. Os métodos também precisam ter um tipo de retorno, que pode ser um tipo de valor, de referência ou ainda void (não retornam valor).

Classe – Notação UML para representação

A seguir temos a forma padrão para representação de uma classe usando um diagrama de classes UML:

Classe UML

Instância de Classe

É o objeto, uma ocorrência específica de uma classe.

As classes originam instâncias sob requisição, no processo denominado Instanciação. O projetista / analista cria a classe. A classe é então usada para criar objetos em tempo de execução.

Veja a seguir um exemplo de criação de classe na linguagem C#. É declarado um atributo da classe Caixa – lado – e um método – Volume():

class Caixa {
double lado;
double Volume()
{
return lado * lado * lado;
}
}

Herança

Herança, em orientação a objetos, é a capacidade de um novo objeto tomar atributos e operações de um objeto existente.

Assim, podemos criar classes mais complexas sem que precisemos repetir código.

Aqui, a palavra-chave é Reuso de código, e é uma das metas a se atingir ao desenvolver software. O reuso permite reduzir o esforço dispendido no desenvolvimento de software ao reaproveitarmos códigos de uma classe na criação de outras classes.

A Herança é, portanto,  um conceito extremamente importante em Orientação a Objetos.

Usamos a herança, por exemplo, para evitar repetição ao definirmos classes com características em comum e que são relacionadas entre si.

A herança é um relacionamento entre classes, que permite que uma classe “adquira” os membros (atributos e métodos) de outra classe.

Um exemplo clássico de herança seria a classificação de mamíferos no reino animal.

Homens, Baleias e Gatos são mamíferos, que compartilham muitas características entre si, mas claramente possuem atributos que os diferem uns dos outros.

Como podemos modelar Baleias, Gatos e Humanos em um software?

Podemos criar classes distintas para cada animal, mas essas classes teriam muitos comportamentos (“métodos”) em comum entre eles, como Respirar, Mamar e Reproduzir-se, o que ocasionaria repetição desnecessária de código.

Usamos então Herança para resolver esse problema. Podemos criar uma classe chamada Mamífero que possua as características comuns a todos os animais mamíferos, e então criar as classes Humano, Baleia e Gato herdando essas funcionalidades e também implementando as funcionalidades específicas de cada animal, como Falar, Nadar e Miar.

Herança de Classes em Orientação a Objetos

O quadro a seguir mostra duas classes, Humano e Gato, que herdam os atributos e métodos da superclasse Mamífero, e implementam seus próprios atributos e métodos adicionais: atributos nome e sobrenome e métodos andar() e falar() para a classe Humano, e os atributos raça e nome e métodos andar() e miar() para a classe Gato:

Herança de Classes - POO

 

Encapsulamento

Encapsulamento é a combinação de atributos e operações dentro de uma classe, deixando visível apenas o que é necessário para a comunicação entre dois objetos, como por exemplo alguns detalhes da implementação ou ainda a lógica de um método.

O encapsulamento permite ocultar a complexidade do código. Não é necessário entender como a operação funciona para poder utilizá-la. Um exemplo clássico é o de um motorista conduzindo um veículo. O motorista não precisa saber exatamente como um motor funciona internamente para poder dirigir o automóvel – o detalhes da “implementação” do motor ficam ocultos do motorista.

O encapsulamento protege os dados, permitindo o acesso a eles apenas a partir de métodos específicos e autorizados.

Desta forma, os objetos encapsulados podem ser comparados uma caixa preta: conhecemos  asua interface externa, porém não precisamos nos preocupar com o que acontece internamente na caixa.

Encapsulamento – Níveis de Acesso

Há três níveis principais de acesso dos objetos:

  • Público
  • Privado
  • Protegido

Vamos discutir em mais detalhes esses níveis de acesso em uma lição especial sobre o assunto.

Polimorfismo

Uma operação de um objeto qualquer pode assumir vários comportamentos dependendo da chamada recebida, tratando e devolvendo respostas ao chamador.

Poli = Muitos; Morphos = Formas. Portanto, Polimorfismo = “múltiplas formas”.

Portanto, o polimorfismo ocorre quando um objeto tem um comportamento diferente para uma mesma ação. Por exemplo, usando nosso exemplo de classes de animais, nas classes Gato e Humano existe um comportamento (método) em comum: Andar. Porém, cada uma dessas classes implementa o método Andar de forma diferente – os gatos andam em quatro patas, enquanto os humanos andam em duas. Ambos podem percorrer a mesma distância andando, ou seja, executando o método andar, mas o farão de forma diferente entre si.

Então, dependendo de como um método é invocado, seu comportamento será diferente.

Neste artigo publicamos uma pequena introdução à Orientação a Objetos. Nos próximos artigos desta série vamos nos aprofundar nesses assuntos, e apresentar muitos outros conceitos relativos a esse tópico.

Sobre Fábio dos Reis (1193 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

10 Comentários em Conceitos de Programação Orientada a Objetos

  1. Ótimo post, bem esclarecedor

  2. Valtemir Luiz // 22/02/2018 em 19:55 // Responder

    Parabéns Professor excelente contéudo!!

  3. Ana Vitória // 21/02/2019 em 17:32 // Responder

    Muito bom, ajudou

  4. Parabéns pela explicação!
    Show!
    Esse conteúdo também agrega muito https://bit.ly/ProgramacaoPHPsobre PHP.
    Abraço.

  5. Caramba nunca vi uma explicação mais sucinta e assertiva de POO, muito obrigado pelo insight!

  6. Ótimo post e sempre revendo. Baita conteúdo didático. De fato, um verdadeiro Professor. Obrigado.

Escreva um comentário

Seu e-mail não será divulgado


*