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: 27.788 ]

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 2)

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

GNU/Linux: Liberdade e Cosmovisão

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

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

Leitura recomendada

Terasology: O Minecraft gratuito e com gráfico realista

Declaração de IRPF 2006 pelo Linux

Construindo uma aplicação JDialog

Lançamento do GFP 0.1.4.5 - Gerenciador Financeiro Pessoal

Portugol Online - Software livre para facilitar o estudo de algoritmos

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts