Entendendo orientação a objetos na prática (parte 1)

Originalmente este artigo compõe uma série em meu site pessoal chamada "aprender programando". Nesta parte são expostos os conceitos fundamentais da orientação a objetos. Ao fim desta, espera-se que o leitor compreenda especialmente o conceito de encapsulamento e faça a diferenciação entre classes e objetos. Boa leitura!

[ Hits: 29.512 ]

Por: Isaque Vieira de Sousa Alves em 10/01/2010


Apresentação



Olá, pessoal. Não sou professor, sou apenas um estudante de sistemas de informação indo para o 3° ano do curso (falta pouco!).

Como colega de outros estudantes, percebo que apesar de todo o esforço de muitos professores em sala de aula ou laboratórios, muito pouco do que eles passam é realmente aproveitado.

Observei o seguinte: há uma grande dificuldade em se apreender conceitos simples como polimorfismo, herança e até ocorrem confusões quanto aos termos overload e override. Além disso, a maioria dos estudantes parece perdido frente a conceitos como encapsulamento: não sabem decidir quando declarar um método ou atributo como público, privado ou protegido (public, private ou protected).

Isso é ruim, muito ruim.

Decidi então partilhar um pouco do que aprendi (Sei... existem muitos conceitos, muitos posts pela internet apresentando o mesmo assunto), mas não vamos ficar só na teoria, na apresentação de conceitos ou códigos previamente elaborados.

Minha proposta aqui vai além, e meu objetivo é demonstrar claramente cada conceito com base em uma das melhores questões de avaliação de programação que eu já vi.

Vou dividir esse post em pelo menos 3 partes, uma contemplando a teoria mesmo e apresentando conceitos básicos de design e desenvolvimento orientados a objetos, e as outras caindo na prática pra criarmos uma solução à questão proposta.

Nesta primeira parte iremos abordar uma definição trazendo também uma contextualização histórica e apresentaremos alguns conceitos básicos.

Uma boa leitura!

    Próxima página

Páginas do artigo
   1. Apresentação
   2. Orientação a objetos - definição e histórico
   3. Conceitos básicos
   4. Conclusão e referencias
Outros artigos deste autor

Linux, a pirataria de software e a desvalorização do desenvolvedor (parte 1)

Linux, a pirataria de software e a desvalorização do desenvolvedor (parte 2)

Diagnosticando problemas variados em ambientes GNU/Linux (parte 1)

GNU/Linux: Liberdade e Cosmovisão

Projetos de software livre descontinuados: um problema com solução

Leitura recomendada

Desenvolvendo aplicações em J2ME no Linux

Introdução ao Desenvolvimento Android

As novidades do Java 1.5

Construindo uma aplicação JDialog

Transforme seu celular em terminal sem fio SSH/Telnet

  
Comentários
[1] Comentário enviado por Feko em 10/01/2010 - 14:41h

Show de bola :D
Se for possível, na parte 2, aborde um pouco de operator overload. Isso tá bastante obscuro pra mim.

[2] Comentário enviado por mateusbarsotti em 11/01/2010 - 09:48h

Ótimo artigo, parabéns.
Um resumão muito bom. Vou salvar em arquivo e deixar como fonte de consulta. Estou estudando para certificação e isso vai me ajudar bastante.

Valeu

[3] Comentário enviado por isaque_alves em 11/01/2010 - 12:03h

Tá valendo moçada.

Olha, Feko, até onde sei e aprendi, Java, que é a linguagem que usarei nesta abordagem, não oferece a possibilidade de você implementar operator overloading.

C++ e C# sim.

Sobrecarregar operadores não é uma tarefa lá muito amiga. Muita gente sente muita dificuldade mesmo.
Basicamente o objetivo de sobrecarregar um operador é alterar seu comportamento para incluir outros possíveis operandos em sua esfera de ação. Por padrão, os operadores comuns (+, -, *, =, etc) só entendem argumentos baseados em tipos inteiros primitivos (int, char, byte, etc). Sobrecarregar pode oferecer uma nova funcionalidade, como por exemplo, 'somar' dois retângulos, ou duas circunferências (claro que isso é apenas uma situação hipotética... e meio pobre...).
Em suma, uma boa implementação usando operator overload requer antes de tudo, um ótimo entendimento de... Polimorfismo.

Alguns exemplos pra você ver melhor:
* http://bit.ly/4ZpbVl -> C# operator overload
* http://bit.ly/5dBMqS -> C++ operator overload

[4] Comentário enviado por everton_fuzz em 11/01/2010 - 15:27h

Acho que você só deve tomar cuidado com a definição de herança multipla.

"Ocorre quando uma classe herda suas características de mais de uma classe ou interface. Em Java, a herança múltipla é realizada pelo uso de implementações de interfaces."

Implementar uma interface nao é utilizar herança multipla, mas sim uma 'herança parcial', pois uma interface só possui métodos.

Java NAO incorpora herança multipla. Alguns dizem inclusive que Interfaces são 'gambiarras' inventadas para suprir a necessidade de utilizar caracteristicas de classes distintas.

No mais esta ótimo!, parabens pelo artigo!

Att.

Éverton

[5] Comentário enviado por isaque_alves em 11/01/2010 - 17:30h

Com certeza, Éverton...
Realmente Java não 'tem' herança múltipla de classes...
Talvez a infelicidade tenha sido usar a expressão "Em Java, a herança múltipla é realizada pelo uso de implementações de interfaces"...
Na verdade a herança múltipla é apenas simulada por meio de Interfaces.

[6] Comentário enviado por everton3x em 12/01/2010 - 09:34h

Parabéns pelo artigo. Muito esclarecedor, principalmente para quem tem dificuldade com OO.

[7] Comentário enviado por luizcarlos18rj em 15/04/2016 - 15:42h

Quando sai a parte 2? Eu aprendi programação estrutural orientada a eventos, nunca entendi OO


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts