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.