Orientação a Objetos ou Programação Orientada a Objetos!

A 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 programação.

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, Python, Ruby, C++, Object Pascal, Java e C# são exemplos de linguagens de programação orientadas a objetos.

Perl (a partir do 5), PHP (a partir do 4.0), ColdFusion, Javascript, ActionScript e VB.NET são exemplos de linguagens de programação com suporte a orientação a objetos.

* 1 Conceitos fundamentais
* 2 Referências
* 3 Ver também
* 4 Ligações externas
* 5 Referências Bibliográficas

Conceitos fundamentais

* Classe É uma fábrica de objetos. 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.

* Estado São os valores que cada atributo recebe. Exemplo: o estado do atributo cor é 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. Exemplo: Um método Carro que recebe como parâmetro dois atributos (cor, placa), e outro método Carro que recebe como parâmetro (cor, placa, modelo).

* 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 variáveis 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

* Pacotes são referências para organização lógica de classes e interfaces

Que tal abrir um blog e colocar tudo isso la hein? :wink:

Nao gostei do termo ‘fabrica de objetos’ porque da entender que a classe e resposnavel pela sua criacao (ou de algo no minimo :shock: ).

Eu diria que a classe e “apenas” um modelo para os objetos de um determinado tipo.

Pode crê, mas é apenas pro pessoal novo ter uma ideia dessas coisas complexas.
Valeu pela opnião.

E o pessoal novo nao deve saber quem foi o autor que escreveu essas coisas complexas?

O GUJ tem uma seção de artigos e tutoriais. Acredito que lá é o lugar mais indicado para este tipo de conteúdo… obviamente acompanhado da bibliografia.

acho que seria mais interessante aplicar isto a um blog seu, ou você tentar sugerir a equipe do guj, a difundir uma pesquisa de forma a ser gerado um artigo por exemplo para alcançar este seu objetivo.

mas de qualquer forma valeu a intenção e seja mais objetivo em uma próxima vez quando for esclarecer ou planejar um tópico.

digo isto porque ficamos procurando onde estava uma pergunta sua e nos perdemos para saber qual o seu objetivo final com isto, se no assunto do tópico possui uma interrogação, que indica uma dúvida para um possível questionamento, que no caso contrário, o seu texto possui caráter informativo.

:wink: blz

Concordo claramente com vocês, valeu pela dica. Porém no final da frase não á ponto de esclamação e sim ponto de afirmação no que dá a entender que não é uma pergunta e sim um informativo.

Só um comentário: você não precisa de classes para ter objetos.

Artigos e Tutoriais seria o lugar mais adequado para este tópico…

Mas parabéns pela sua iniciativa!

Achei curioso a Sobrecarga ser um conceito fundamental e a Sobreescrita não (a menos que ela esteja implicita no contexto herança).

É pelo menos eu tentei lançar uma ideia ae né, se ajudar alguém firmeza, mas se tiver alguma coisa de errado me perdoem é porque eu estou começando agora e ainda sou NEWBA, HAHAHAH, FALOU GALERA.

Sim e é por isso que você deve ir em www.wordpress.org e iniciar um blog imediatamente. Ao escrever você não apenas aprende mais (ao pesquisar para não falar besteira) como compartilha isso.

Legal, Legal, da proxima vez eu fico quietinho na minha pronto, valeu.

Acho que você não entendeu, eu falei para você iniciar um blog exatamente porque o que escreveu tem valor.

Tabom, Tabom, eu entendi, eu entendi agora, mas esses lances de blog é muito complicado, deixa quieto.