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