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!
[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.