Fundamentos da Programação Orientada a Objetos (OOP)

Classificado em Computação

Escrito em em português com um tamanho de 5,68 KB

O Paradigma da Programação Orientada a Objetos (OOP)

O Paradigma OOP inverte a ordem tradicional de programação. O foco principal está nos dados e, em seguida, nos algoritmos que operam sobre esses dados. A implementação da funcionalidade é, em geral, escondida dos usuários.

O que é OOP?

OOP é um conjunto de objetos que trocam mensagens para, ao final do processamento, resolver o problema do usuário. Cada objeto possui uma funcionalidade que é exposta aos usuários (interface), enquanto sua implementação é, em geral, escondida (encapsulamento).

Classes e Objetos

  • Uma Classe é um modelo, uma especificação, um molde, a partir do qual se criam objetos.
  • A Superclasse Base: Na plataforma Java, existe uma superclasse chamada Object, da qual todas as outras classes são extensões.
  • Um Objeto é uma instância de uma classe. É composto por:
    • Os dados (propriedades, atributos) de um objeto, chamados Campos Instância.
    • Os procedimentos que operam os dados do objeto, chamados Métodos.
  • Individualidade: Um objeto específico (instância de uma classe) possui seus campos instância (valores) particulares, o que o torna distinto de outros objetos.
  • O Estado de um objeto é o conjunto de valores de um objeto específico.

Construção de Objetos e Encapsulamento

Construção de Objetos

Em Java, usamos Construtores para criar novas instâncias. Um construtor é um método especial cujo propósito é criar e inicializar objetos. Construtores têm sempre o mesmo nome da classe. Para criar objetos, combinamos o construtor com o operador new.

Construtor Padrão (Default)

É um construtor sem parâmetros. Se você escrever uma classe sem construtor, o compilador irá providenciar um construtor padrão. O construtor padrão define todas as variáveis instância com valores padrão: dados numéricos com zero, dados booleanos com false e variáveis objeto (referências) com null. Se uma classe fornece ao menos um construtor, mas não fornece o padrão, será ilegal construir objetos sem parâmetros de construção.

Overloading (Sobrecarga)

Ocorre quando diversos métodos têm o mesmo nome, mas diferentes parâmetros.

Encapsulamento

Programas devem interagir somente com os dados do objeto por meio de métodos definidos na classe. Isso define uma “Caixa-preta” para acesso aos dados, o que é fundamental para a reusabilidade e confiabilidade do código.

Variáveis e Parâmetros

  • Parâmetro Implícito: Métodos de instância operam nos objetos e acessam seus dados de instância. Implicitamente, eles estão acessando o objeto e seus dados. O parâmetro implícito não aparece na declaração do método. Para que este parâmetro seja explicitado, podemos usar a palavra-chave this.
  • Variáveis de Instância: São variáveis associadas aos atributos de um objeto. Cada instância da classe (objeto) contém sua própria cópia destas variáveis, permitindo a diferenciação e individualidade entre os objetos.
  • Variáveis de Classe (Estáticas): São variáveis associadas à classe. Há somente uma cópia de cada uma destas variáveis, independentemente do número de objetos criados. Os valores associados a estas variáveis existem na memória, mesmo se nenhum objeto tiver sido criado. Ou seja, estas variáveis são independentes da existência de objetos.

Modificadores de Acesso e Packages

  • public: Acesso de qualquer classe, de qualquer lugar.
  • private: Nenhum acesso fora da classe.
  • protected: Acesso de qualquer classe dentro do package e de qualquer subclasse.

Packages são formas convenientes para organizar seu trabalho e separar seu código do código produzido por outros programadores.

Herança e Polimorfismo

Herança

A herança é implementada por meio da palavra-chave extends. Ela indica que se está criando uma nova classe a partir de outra classe já existente (superclasse).

Override (Sobrescrita de Método)

Pode haver funções definidas na superclasse que não são apropriadas para a subclasse (Exemplo: o cálculo de getSalario() para um Gerente é diferente do cálculo para um Empregado, pois o Gerente tem bônus). Neste caso, definimos outro método getSalario() na classe Gerente que sobrepõe a função na superclasse. Este conceito é chamado Override.

Keyword super

Precisamos indicar ao compilador que desejamos o método da superclasse e não da classe base. Em Java, isto é indicado pela palavra-chave super.

Polimorfismo

O Polimorfismo ocorre quando um método assume comportamentos diferentes dependendo do objeto que o chama. Este conceito só funciona entre objetos pai-filho (superclasse e subclasse).

Impedindo Herança

Classes que não podem ser estendidas devem ser declaradas com a palavra-chave final. Pode-se também definir métodos com a palavra-chave final. Se isto for feito, nenhuma subclasse pode efetuar override neste método. Todos os métodos de uma classe final são também automaticamente final.

Entradas relacionadas: