Logo Hardware.com.br
Equipe GdH
Equipe GdH Geek Moderador
3.5K Mensagens 82 Curtidas

Artigo: Programação Orientada a Objetos: uma introdução

#1 Por Equipe GdH 29/10/2007 - 10:42
ImagemArtigo: Programação Orientada a Objetos: uma introdução

Este texto tem como objetivo explicar os conceitos básicos por trás da programação orientada a objetos e mostrar porque este tipo de paradigma de programação pode facilitar muito o desenvolvimento de um software.
Marcio Frayze David
29/10/2007

https://www.hardware.com.br/artigos/programacao-orientada-objetos/

Comente aqui!
peczenyj
peczenyj Geek Registrado
3K Mensagens 75 Curtidas
#2 Por peczenyj
29/10/2007 - 11:20
Sugestão: que se aborde o tema "encapsulamento" e sua relação com a herança, assim como o tema "composição".

Herança é algo que deve ser planejada desde o começo, pois ela pode quebrar o encapsulamento. Dependendo do caso a Herança pode ser proibida (como no java com uma classe final).

Herança também causa um acoplamento muito forte. Em alguns casos é preferivel/aconselhavel usar a composição.

Quando aprendemos alguma linguagem OO, saimos criando classes e extendendo-as para praticar, porém nunca falam dos perigos dessa pratica.

Num outro momento seria interessante mostrar 3 linguagens OO como C++, Java e Ruby para demonstrar alguns conceitos como

- Sobrecarga de métodos e operadores
- Herança multipla (C++ tem, java não tem mas usa interfaces, Ruby não tem mas tem mixins -- sem falar no problema do diamante)
- Exceptions (java obriga a colocar alguns try/catch's)
- Generics (Java 1.5 tem! Ruby usa duck typing)

Posso até colaborar, se alguem tiver interesse. Observem que dei dicas aqui para quem quiser pesquisar por sua propria conta ;-)

Aproveitando, deem uma olhada nesse artigo:
http://fragmental.com.br/wiki/index.php/Fantoches
http://blog.caelum.com.br/2006/10/14/como-nao-aprender-orientacao-a-objetos-heranca/
http://blog.caelum.com.br/2006/09/14/nao-aprender-oo-getters-e-setters/
revoltado
revoltado Veterano Registrado
1.3K Mensagens 7 Curtidas
#4 Por revoltado
30/10/2007 - 10:19
Obrigado pelos comentários smile.png

peczenyj:
É verdade, esqueci de falar sobre composição, e realmente é importante saber quando usar herança e quando usar composição.
Tem outras coisas que gostaria de ter falado, como interfaces, exemplos utilizando java, exception entre outras coisas.
Mas "pegar" todos esses conceitos leva um bom tempo (pelo menos pra mim demorou batante para que pudesse realmente entender OO) e como o texto é mais voltado para iniciantes, tive que "cortar" umas coisas... quem sabe complemento em breve smile.png
Estou escrevendo um outro texto, dessa vez focando em exemplos utilizando Java, mas o texto ainda está muito confuso e está faltando muita coisa... quando tiver algo mais concreto devo publicar em meu blog, e se o carlos permitir, aqui também smile.png

FelipeBZ:
Obrigado!! big_green.png
Linux Registered User # 253244
revoltado
revoltado Veterano Registrado
1.3K Mensagens 7 Curtidas
#6 Por revoltado
30/10/2007 - 10:54
peczenyj disse:
Por isso mesmo q eu sugeri vc escrever uma segunda parte ;-)

Qual é o seu blog?

Boa sorte.


Meu blog: http://www.insaners.org/marcio/

Estava lendo seu blog... Tem muita coisa interessante big_green.png Parabens! Já está cadastrado no meu RSS hehe
Os links que você enviou também são interessantes. Obrigado!

[]´s
Marcio F. David
Linux Registered User # 253244
peczenyj
peczenyj Geek Registrado
3K Mensagens 75 Curtidas
#7 Por peczenyj
30/10/2007 - 11:29
Um exemplo que acabei de ver.

Um Camarada estava escrevendo uma classe Agenda. Ele tinha outra classe chamada ConexaoComBanco que fazia a conexão com banco de dados.

Ai ele pergunta: Agenda deveria extender ConexaoComBanco ?

Esta claro que não caiu a ficha pra ele, pois uma Agenda não é um ConexaoComBanco. Agenda Tem uma ConexaoComBanco. Perceba que tens uma segunda parte interessante por ai smile.png

O exemplo do Carro-Vaga-Estacionamento é perfeito, no link sobre os Fantoches.
cogitas
cogitas Membro Senior Registrado
210 Mensagens 0 Curtidas
#9 Por cogitas
30/10/2007 - 23:57
Buenas!

Olhes, realmente adorei esse artigo. Simplesmente o melhor que já lí a respeito de POO para iniciantes. É o chamado "pá-pum", pá leio, pum entendo.

Não sei se compreendi por conta de outras leituras, acho que sim. Fica aí uma dica, ler vários documentos sobre o mesmo assunto. Irás pegando um pouco de cada um rumo a uma compreensão mais completa.

É isso, grande abraćo, grato pelo artigo e os melhores votos de sucesso!
visites: http://cogitas3d.site.vu
Gentoo 2005.0 - Athlon 2800 - 1gb ram - nVidia gf 5200 128mb
Entre-Trópicos
Entre-Trópic... Zumbi Registrado
4.5K Mensagens 912 Curtidas
#10 Por Entre-Trópic...
02/11/2007 - 12:37
Tenho mais uma coisa para acrecentar no que não se pode discutir: Política, Religia, Futebol e POO.
Cada um que aprende uma coisa e entende bom começa a ver coisas erradas nas outras anteriores.

1. Programação Estruturada
É ruim? mas funcionou muito bem para fazer o UNIX e etc


2. Herança é ruim:
Nas bibliotecas de vários compiladores "tudo" é feito por herança. Vários programas na internet e até profissionais são feitos com herança

Justamente porque se usa o conceito original da herança, aí alguém vê alguma coisa errada e diz que herança é ruim. O problema é a heranaça ou o programador? Se eu tenho um diretório(classe) e quero fazer um diretório especial então uso a herança que é mais fácil, pq basicamente o diretório só vai ter uma pequena diferença(especial).

3. POO
http://fragmental.com.br/wiki/index.php/Fantoches

Tenho a impressão que esse artigo é uma tradução, deve ser por isso que leio e não compreendo certas frases afinal.
Um "problema" que vi:
A Classe Carro tem uma classe Vaga QUE TEM UMA CLASSE CARRO. Depois que o carro for estacionado vai ficar com um atributo Vaga que contém um Carro(pra quê?).

4. Herança e Composição
Herança tem esse problema... composição não tem...
E isso que dizer que vice-versa não existe? Sim, mas aí fica-se defendendo um lado só e pronto. Eu acho que deveria explicar os dois lados e mostrar Acertos e Erros e que a pessoa que escolha.

5. Artigos (pelo amor de Deus não tô massacrando ninguém)
Fico incomodado com esses "artigos" cheios de: o código JavaBean é Anti-Full logo o FrameWork não é CopyLeft. Por favor façam algo mais profissional(mais neutro para ser entendido) e não algo que os colegas entendam.
http://blog.caelum.com.br/2006/10/14...jetos-heranca/
http://blog.caelum.com.br/2006/09/14...ers-e-setters/


No mundo virtual nós(programadores) somos so Deuses, então cada um faça da forma que achar melhor. Porque se não fica algo tôlo, não gosto de herança, então se voçê souber de algum programa que usa herança, vai deixar de usá-lo????????
O que importa é funcionar. Não ta funcionando pq tô usando isso, então qual o outro conceito melhor, pronto.
peczenyj
peczenyj Geek Registrado
3K Mensagens 75 Curtidas
#11 Por peczenyj
02/11/2007 - 14:30
O primeiro passo depois de aprender um conceito (como OO) é praticar.

Depois de praticar muito, vamos ler sobre ele. O pessoal da Caelum indica 3 livros interessantes:

* Refactoring, Martin Fowler

Livro do cientista chefe da ThoughtWorks, a famosa empresa onde nosso amigo Carlos Villela trabalha. Um excelente catálogo das gambiarras (smells, mal cheiro) que acabam aparecendo no seu código e como você pode fazer para conserta-las de maneira sensata. Ok, você já sabia disso. Exemplos clássicos são o uso de herança apenas por preguiça, uso do switch em vez de polimorfismo, entre milhares. Uma pena o código não usar a conveção da Sun e estar lotado de underscores…

* Effective Java, Joshua Bloch

Livro do ex bambambam da Sun (você pode encontrar o nome dele como @author das principais classes do Java SE), agora no Google. Aqui ele mostra como enfrentar os principais problemas e limitações da linguagem. Se você já programa a algum tempo sem dúvida alguma já passou por boa parte dos casos catalogados. Uma excelente leitura, além de simples pois cada caso é relatado em um texto bem curto. Entre os casos interessantes está o uso de factory methods, os problemas da herança e do protected, uso de coleções, objetos imutáveis e serialização.

* Design Patterns, Erich Gamma et al

O clichê dos clichês não poderia estar fora da lista! Livro do atual líder do projeto Eclipse, entre outros. Compre! E ao contrário do que muitos fazem não saia lendo o catálogo dos patterns decorando-os, concentre-se em ler toda a primeira parte onde eles revelam duas regras de ouro da programação orientada a objetos: “Evite herança, prefira composição” e “Programe voltado a interfaces e não à implementação“.

Outra boa referência é "Concepts of Programming Languages", Sebesta, Robert W. Os primeiros capitulos são otimos!

http://www.dca.fee.unicamp.br/~leandro/paradigmasLP/aulas_turmaA.html
revoltado
revoltado Veterano Registrado
1.3K Mensagens 7 Curtidas
#12 Por revoltado
05/11/2007 - 10:13
Entre-Trópicos disse:
Tenho mais uma coisa para acrecentar no que não se pode discutir: Política, Religia, Futebol e POO.
Cada um que aprende uma coisa e entende bom começa a ver coisas erradas nas outras anteriores.
(..)
É ruim? mas funcionou muito bem para fazer o UNIX e etc


O unix usa um esquema bem interessante, ele "quebra" o sistema inteiro em pequenos programas, que fazem algo simples e bem feito. Ai, esses programas "conversão" entre si até conseguirem fazer o que deve ser feito.
Como sao programas relativamente pequenos, fica relativamente fácil de faze-los. Agora, um sistema para um banco com 20 pessoas fazendo o mesmo programa por exemplo, fica bem complicado de ser feito usando este paradigma (eu nao disse que é impossivel, mas é mais complicado).

Sobre herança ser "ruim" também já vi gente falando isso... mas claro que isso é bobera! Só tem que tomar cuidado mesmo para não usar em hora errada, pq realmente pode trazer problemas serios para o sistema, mas quando bem aplicada, é muito útil.

Eu particularmente gosto da ideia de um professor meu da faculdade, que disse para nós associarmos herança com a expressão "é um(a)". Dessa forma, se eu consiguir dizer "X é umY" (onde X e Y são 2 classes) é por que provavelmente trata-se de uma herança. Se essa frase soar estranho, desconfie.

Exemplo: Passaro é um Animal. Essa frase não tem nada de errado, afinal, passaro é mesmo um animal (um tipo especifico). Logo, deve fazer sentido eu fazer com que a classe Passaro seja filha de Animal.

Seguindo o exemplo do peczenyjAi e do amigo dele, quando ele pergunta:
"Agenda deveria extender ConexaoComBanco ?"
Bastaria a pessoa pensar: Agenda é uma ConexaoComBanco? Não? Então não é herança! smile.png Fica claro que a Agenda não se resumi a uma simples ConexaoComBanco, embora ela precise disso para existir. Para este caso, faz mais sentido a frase "Uma Agenda contem uma ConexaComBanco" ai fica claro que não é uma herança. Sempre penso nessas 2 frases quando preciso decidir se vou usar ou não herança.

[]´s
Linux Registered User # 253244
leodogremio
leodogremio Novo Membro Registrado
8 Mensagens 0 Curtidas
#14 Por leodogremio
18/02/2009 - 22:28
jack5on disse:
Excelente artigo para iniciantes. Me estimulou a estudar POO. Gostei muito!

Pois é cara, eu já tinha tentado aprender esse tipo de programação várias vezes com livros e apostilas, mas as coisas nunca estavam claras, eles partiam da idéia de que você já tivesse algum conhecimento sobre banco de dados.
Este tutorial explicou bem claro como funciona e serviu bem como base pra agora sim começar a ler mesmo aquelas apostilas.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal