Conceitos de Programação Orientada a Objetos

Programação Orientada a Objetos (POO)

Trata-se de um paradigma de programação relativamente recente, que se baseia fundamentalmente no conceito de Objetos. É uma forma de desenvolvimento de sistemas de software que o trata como um conjunto de componentes que interagem entre si para resolver um problema. Esses componentes são denominados Objetos.

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

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

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 idéia ou conceito e classifica objetos que tenham propriedades similares.

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).

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 Programação Orientada a Objetos

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 (1325 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica 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

5 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

Escreva um comentário

Seu e-mail não será divulgado


*