Orientação a objetos
orientação a objetos , também conhecida como
Programação Orientada a Objetos (POO) ou ainda em inglês
Object-Oriented Programming (OOP) é um
paradigma de
análise ,
projeto e
programação de sistemas de
software baseado na composição e interação entre diversas unidades de software chamadas de objetos.
Em alguns contextos, prefere-se usar modelagem orientada ao objeto, em vez de projeto .
A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre estes objetos.
Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software.
Cada classe determina o comportamento (definidos nos métodos) e estados
possíveis (atributos) de seus objetos, assim como o relacionamento com
outros objetos.
Smalltalk , Perl , Python , Ruby , PHP , ColdFusion , C++ , Object Pascal , Java , Javascript , ActionScript , C# e VB.NET são exemplos de linguagens de programação com suporte a orientação a objetos.
Conceitos fundamentais
Classe
representa um conjunto de objetos com características afins. Uma classe
define o comportamento dos objetos, através de métodos, e quais estados
ele é capaz de manter, através de atributos. Exemplo de classe: Os
seres humanos.
Objeto é uma instância de uma classe .
Um objeto é capaz de armazenar estados através de seus atributos e
reagir a mensagens enviadas a ele, assim como se relacionar e enviar
mensagens a outros objetos. Exemplo de objetos da classe Humanos: João,
José, Maria.
Atributos
são características de um objeto. Basicamente a estrutura de dados que
vai representar a classe. Exemplos: Funcionário: nome,
endereço,telefone, CPF, ....; Carro: nome, marca, ano, cor, ...; Livro:
autor, editora, ano. Por sua vez, os atributos possuem valores. Por
exemplo, o atributo cor pode conter o valor azul.
Métodos
definem as habilidades dos objetos. Bidu é uma instância da classe
Cachorro, portanto tem habilidade para latir, implementada através do
método deUmLatido(). Um método em uma classe é apenas uma definição. A
ação só ocorre quando o método é invocado através do objeto, no caso
Bidu. Dentro do programa, a utilização de um método deve afetar apenas
um objeto em particular; Todos os cachorros podem latir, mas você quer
que apenas Bidu dê o latido. Normalmente, uma classe possui diversos
métodos, que no caso da classe Cachorro poderiam ser sente(), coma() e
morda().
Mensagem
é uma chamada a um objeto para invocar um de seus métodos, ativando um
comportamento descrito por sua classe. Também pode ser direcionada
diretamente a uma classe (através de uma invocação a um método
estático).
Sobrecarga
é a utilização do mesmo nome para símbolos ou métodos com operações ou
funcionalidades distintas. Geralmente diferencia-se os métodos pela sua
assinatura.
Herança
(ou generalização) é o mecanismo pelo qual uma classe (sub-classe) pode
estender outra classe (super-classe), aproveitando seus comportamentos
(métodos) e estados possíveis (atributos). Há Herança múltipla
quando uma sub-classe possui mais de uma super-classe. Essa relação é
normalmente chamada de relação "é um". Um exemplo de herança: Mamífero
é super-classe de Humano. Ou seja, um Humano é um mamífero.
Associação
é o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode
tratar-se de uma associação simples "usa um" ou de um acoplamento
"parte de". Por exemplo: Um humano usa um telefone. A tecla "1" é parte
de um telefone.
Encapsulamento
consiste na separação de aspectos internos e externos de um objeto.
Este mecanismo é utilizado amplamente para impedir o acesso direto ao
estado de um objeto (seus atributos), disponibilizando externamente
apenas os métodos que alteram estes estados. Exemplo: você não precisa
conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A
carcaça do telefone encapsula esses detalhes, provendo a você uma
interface mais amigável (os botões, o monofone e os sinais de tom).
Abstração
é a habilidade de concentrar nos aspectos essenciais de um contexto
qualquer, ignorando características menos importantes ou acidentais. Em
modelagem orientada a objetos, uma classe é uma abstração de entidades
existentes no domínio do sistema de software.
Polimorfismo
é o princípio pelo qual duas ou mais classes derivadas de uma mesma
superclasse podem invocar métodos que têm a mesma assinatura (lista de
parâmetros e retorno) mas comportamentos distintos, especializados para
cada classe derivada, usando para tanto uma referência a um objeto do
tipo da superclasse. A decisão sobre qual o método que deve ser
selecionado, de acordo com o tipo da classe derivada, é tomada em tempo
de execução, através do mecanismo de ligação tardia. No caso de
polimorfismo, é necessário que os métodos tenham exatamente a mesma
identificação, sendo utilizado o mecanismo de redefinição de métodos.
Esse mecanismo de redefinição não deve ser confundido com o mecanismo
de sobrecarga de métodos.
Interface
é um contrato entre a classe e o mundo externo. Quando uma classe
implementa uma interface, ela está comprometida a fornecer o
comportamento publicado pela interface [1] .
Pacotes são referências para organização lógica de classes e interfaces [1] .
DISALLOWED (DmRelatedItem)