Fundamentos da programação orientada a objetos
A Orientação a Objetos e uma tecnologia que enxerga os sistemas como sendo coleção de objetos integrantes. Ela permite melhorar a (re)usabilidade e extensibilidade dos softwares.
A tecnologia orientada a objetos e fundamentada no que, coletivamente, chamamos de modelo de objetos, que engloba os princípios da abstração, hierarquização, encapsulamento, classificação, modularização, relacionamento, simultaneidade e persistência.
“Orientação a Objetos consiste em considerar os sistemas computacionais como coleção de objetos que interagem de maneira organizada.”
O que significa Orientação a Objetos?
Orientação a objeto é um conceito que esta relacionado com a ideia de classificar, organizar e abstrair coisas. Veja a definição formal:
“O termo orientação a objetos significa organizar o mundo real como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam estes dados.”
Vamos falar uma linguagem, mas simples para isto vamos para um ambiente que você conhece bem: A sua casa!
Agora vamos olhar a sua estante, o seu guarda-roupa, o seu armário, a sua cozinha. Em todos estes lugares você classificou coisas no seu domínio e, somente de olhar para eles você já sabe relacionar a classificação que utilizou em cada um deles e como classificou as coisas que estão nestes lugares.
Na estante você agrupou e organizou os livros, no guarda roupa suas camisas, calças, meias, ternos, etc. Todos os objetos que você classificou nestes lugares foram organizados baseados em alguma concepção que você possuía sobre eles.
No contexto orientado a objeto a estante, o armário, a cozinha são chamados de “classes”.
No contexto de software podemos dizer que:
- Uma classe é um gabarito para a definição de objetos. Através da definição de uma classe, descrevem-se as propriedades e atributos que o objeto terá.
- Uma classe mantém dois elementos importantes: estrutura e comportamento.
- Uma estrutura representa os atributos que descrevem a classe.
- Um comportamento representa os serviços que a classe suporta.
Na ‘classe’ do seu guarda-roupa, uma camisa amarela pode ser colocada em outra classe. A ‘classe’ camisa. Cada camisa tem uma estrutura que é: a textura, a cor, o tamanho e o modelo. Cada camisa tem um comportamento que é : ordenar , rasgar , desbotar .
Se você concordar que existe uma classe camisa. Vai concordar que existem diversos tipos de camisas com suas características, ou seja, existem diversos objetos camisas que podem ser criados a partir da classe camisa. Daí temos o conceito de objetos:
O conceito de orientação a objetos é abordado desta mesma maneira sempre. No contexto do software podemos então dizer que:
É através de objetos que (praticamente) todo o processamento ocorre em aplicações desenvolvidas com linguagens de programação orientadas a objetos.
- Primeiro você classifica e abstrai os elementos no sistema para proporcionar certa ordem, e, ao fazer isto você define uma classe;
- Feita a definição da classe você pode criar objetos desta classe. (instanciar)
Exemplo clássico da planta de uma casa.
- A Classe seria um gabarito (como uma planta de uma casa)
- O objeto é concretização do gabarito (casas feitas a partir da mesma planta)
Quando levamos estes conceitos para as linguagens de programação nada se altera.
Existem alguns conceitos básicos que estão vinculados ao conceito de orientação a objetos. São eles:
- Herança
- Encapsulamento
- Polimorfismo
A herança permite implementar a funcionalidade a sua classe de tomar emprestado o resto da estrutura e comportamento de classes de nível mais alto.
Pensemos na classe Carro
Esta classe define os comportamentos e atributos de um carro; E existem atributos que serão comuns a todos os carros.
As rodas e o motor são atributos comuns a qualquer carro. Já uma Ferrari possui atributos que somente ela possui: o seu alto valor por exemplo.
A definição formal seria:
Herança é um mecanismo que permite que características comuns a diversas classes sejam agrupadas em uma classe base, ou superclasse. A partir de uma classe base, outras classes podem ser especificadas. Cada classe derivada ou subclasse apresenta as características (estrutura e métodos) da classe base e acrescenta a elas o que for definido de particularidade para ela.
Encapsular significa “ocultar informações” ele define que cada objeto contém todos os detalhes de implementação necessários sobre como ele funciona e oculta os detalhes internos sobre como ele executa os serviços.
Quando você acelera um carro você esta enviando uma mensagem ao motor do carro usando o acelerador e o carro sabe que tem que acelerar.
Você não precisa saber como é feita a aceleração no motor você apenas pisa fundo no acelerador, a implementação de como é feita a aceleração esta encapsulada do cliente.
Polimorfismo significa muitas formas, na orientação a objetos você pode enviar uma mesma mensagem para diferentes objetos e fazê-los responder da maneira correta. Você pode enviar a mensagem de dar marcha-ré para cada objeto semelhante a um carro e cada um vai se comportar de maneira diferente para atender a sua solicitação.
Uma definição mais formal diria:
“Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma identificação (assinatura), mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse.”
Componentes Básicos da Orientação a Objetos
- Objeto ® Abstração que agrupa características e comportamentos.
- Classe ® Tipo de Objeto. Define quais características um objeto pode ter e seu comportamento.
- Instância ® É o Objeto propriamente dito. Possui características próprias
- Mensagem ® Representa uma ação do objeto ou uma mudança de estado. Define a comunicação entre objetos.
- Método ® Define a implementação de uma mensagem, ou seja, o comportamento dos objetos de uma classe.
- Propriedade ® Define uma característica de um objeto.
Conceitos Adicionais
- Protocolo ® Conjunto de mensagens que define o comportamento de um objeto. Interface.
- Encapsular ® Garantir que os atributos só podem ser alterados por algum método.
- Construtor ® Método encarregado de criar e estabelecer valores iniciais para um objeto.
- Destrutor ® Método encarregado de destruir o objeto e fazer a coleta de lixo.