Programação Orientada a Objectos - Parte I

Started by KTachyon, July 09, 2006, 04:10:53 AM

Previous topic - Next topic

KTachyon

Introdução

Com a evolução da programação os programadores viram-se confrontados com as abordagens que tomavam para desenvolver os seus programas. A programação linear baseada simplesmente em separação em funções que simplificavam a organização do seu software não era suficiente para manter o seu código legível e viam-se mesmo confrontados com a dificuldade de ler o código após alguns meses sem lhe mexerem, dificultando o contínuo desenvolvimento.

Para além destas dificuldades, via-se acrescida a dificuldade de trabalho em equipa, onde os comentários no código deixavam de ser suficientes para facilitar a correcta compreenção de todo o código pelos colegas de equipa.

Com o aparecimento cada vez mais acrescido destas dificuldades, os programadores viram-se confrontados com a necessidade de mudar o seu próprio modelo de programação. Com o aparecimento da programação orientada a objectos puderam-se contornar muitas das dificuldades que a programação impunha.

Programação Orientada a Objectos

Para uma compreensão mais facilitada deste modelo de programação decidi utilizar como linguagem de exemplo o Java, por ser uma linguagem simples e de fácil compreenção. Utilizarei também o Objective-C apenas para demonstrar certos aspectos deste modelo que estão implícitas na própria linguagem de programação.

A programação orientada a objectos (chamarei a partir de agora OOP - Object Oriented Programming) tem a haver com a construção dos programas tendo em conta a realidade em que vivemos, separando as diferentes funcionalidades em objectos. O programa é definido por objectos que comunicam entre si accionando as diferentes funções dos próprios objectos para atingir os objectivos.

Um objecto é constituido por características (variáveis) e comportamentos (métodos/funções), funcionando como se fossem objectos reais no mundo real. Podem existir objectos com o mesmo comportamento, mas com características (atributos e identidade) diferentes.

Os objectos são definidos em Java a partir de classes, e no Objective-C definindo o interface e a implementação. No Objective-C, a definição do interface mostra directamente o que um objecto faz na realidade: tem um comportamento interno que pode ser accionado por interacções externas, e tem um conjunto de funções que outros objectos externos podem utilizar.

Normalmente, um objecto não pode aceder e/ou modificar as variáveis (características) de outro objecto. Em caso de necessidade de modificação das variáveis de um objecto são normalmente fornecidas funções para o fazer, recebendo os argumentos necessários (com raras excepções).

Tanto no Objective-C, como no Java, a criação das Classes ou Imprementação e Interface, não significam que se tem um objecto. Esses são só a definição do objecto (o protótipo ou a planta do objecto). Para se utilizar um objecto, este tem que ser primeiro criado (normalmente com a utilização da instrução \\'new\\'). O objecto criado é comum ser chamado de instância.

Pode-se pensar nas classes e nas instâncias como a definição de uma espécie e um elemento da espécie. A classe pode definir, por exemplo, a espécie Cão, enquanto que o objecto criado (instância), é um elemento dessa espécie, por exemplo, o Bobi.

Em exemplo de uma definição de um objecto:

Class Carro {

  public float kilometragem;

  private String marca;

  private String matricula;



  public void Carro(String marca, matricula) {

this.marca = marca;

this.matricula = matricula;

kilometragem = 0;

  }



  public void Buzina {

System.out.println("Piiiiiiiiiiip");

  }

}

Esta classe mostra um objecto \\'Carro\\' com as características \\'kilometragem\\', \\'marca\\' e \\'matricula\\', e a accao \\'Buzina\\', que pode ser accionada por qualquer objecto exterior. O método carro serve para a inicialização do que for necessário, mais própriamente para inicializar os valores iniciais das variáveis e comportamentos iniciais.

Para criar um novo Carro, utiliza-se:

Carro super_carro;

super_carro = new Carro("Lamborghini", "69-69-PT");

A variável \\'super_carro\\' irá apontar para um espaço de memória onde se encontra a informação deste objecto. Caso se faça o seguinte:

Carro carro2 = super_carro;

carro2.kilometragem = 100;

System.out.println(super_carro.kilometragem);

Irá ser mostrado o valor \\'100\\', pois o \\'carro2\\' passou a apontar para a mesma àrea de memória para onde aponta a variável \\'super_carro\\'.

Em Java, quando qualquer coisa deixa de ser utilizada, o Garbage Collector trata de limpar o espaço na memória que o objecto ocupava, mas noutras linguagens pode não ser assim, sendo necessário que o programador trate de limpar a memória quando esta deixa de ser utilizada (como é o cado do Objective-C, embora esta linguagem também tenha uma espécie Garbage Collector, é normalmente preferível que se limpe o espaço ocupado de forma directa, deixando o Garbage Collector para casos especiais).

(Continua...)


by KhAoTiK TaChYoN.
My Q4 estimate: Macs: 5.89M; iPods: 4.19M; iPhones: 30.0M; iPads: 18.05M; Revenue: 37.00B; EPS: 9.50
AAPL Q3 result: Macs: 4.02M; iPods: 6.80M; iPhones: 26.0M; iPads: 17.04M; Revenue: 35.02B; EPS: 9.32

encod3

Muito Bom. Parabéns!
Continua assim.. hehe
cumpz

Teotónio Ricardo

Espero pela continuação...

Muito bom.

southafrikanse

Programação Orientada a Objectos (POO) é uma cadeira na faculdade que eu vou ter no próximo ano na faculdade.

A linguagem estudada é JAVA e aquilo que  o KhAoTiK TaChYoN eu percebo perfeitamente.

Infelizmente, é uma das disciplinas onde tenho enormes dificuldades, porque são conceitos que não consgo perceber muito bem.

KhAoTiK sabes o que são TADs?
Blog Pessoal | Tugatrónica | Fórum Webtuga
"Knowledge is knowing that a tomato is a fruit, but Wisdom is knowing not to put it in a fruit salad."

KTachyon

QuoteKhAoTiK sabes o que são TADs?

Pela sigla não estou a ver.
My Q4 estimate: Macs: 5.89M; iPods: 4.19M; iPhones: 30.0M; iPads: 18.05M; Revenue: 37.00B; EPS: 9.50
AAPL Q3 result: Macs: 4.02M; iPods: 6.80M; iPhones: 26.0M; iPads: 17.04M; Revenue: 35.02B; EPS: 9.32

southafrikanse

Quote
QuoteKhAoTiK sabes o que são TADs?

Pela sigla não estou a ver.

Tipos Abstractos Dados (em Inglês ADTs)
Blog Pessoal | Tugatrónica | Fórum Webtuga
"Knowledge is knowing that a tomato is a fruit, but Wisdom is knowing not to put it in a fruit salad."

KTachyon

Quote
Quote
QuoteKhAoTiK sabes o que são TADs?

Pela sigla não estou a ver.

Tipos Abstractos Dados (em Inglês ADTs)
Ah, ya, já sei o k é. Mas o nome que os meus profs usavam era TDAs, Tipos de dados abstracto.
My Q4 estimate: Macs: 5.89M; iPods: 4.19M; iPhones: 30.0M; iPads: 18.05M; Revenue: 37.00B; EPS: 9.50
AAPL Q3 result: Macs: 4.02M; iPods: 6.80M; iPhones: 26.0M; iPads: 17.04M; Revenue: 35.02B; EPS: 9.32

southafrikanse

Os conceitos disso até se percebia bem, mas depois aplicar esses conceitos era uma coisa horrível....

Nós duplos, nós simples, iteradores, estruturas simplesmente ligadas, duplamente ligadas, estáticas, dinâmicas.... ui que horror, existe gente que gosta mesmo disto mas eu não sou nada destas coisas e no entanto tenho que aprender esta porcaria toda.

Nem sei como é que consegui passar à discplina de ATAI....
Blog Pessoal | Tugatrónica | Fórum Webtuga
"Knowledge is knowing that a tomato is a fruit, but Wisdom is knowing not to put it in a fruit salad."

KTachyon

Eu axo k é mais complicado programar isso em Java, pk em C, percebendo os conceitos obrigatórios para se perceber C é mais que suficiente. Mas, de kk maneira, a linguagem k os profs escolheram foi o Java... Mas eu curti as partes mais lá para a frente em que se programam árvores e grafos.
My Q4 estimate: Macs: 5.89M; iPods: 4.19M; iPhones: 30.0M; iPads: 18.05M; Revenue: 37.00B; EPS: 9.50
AAPL Q3 result: Macs: 4.02M; iPods: 6.80M; iPhones: 26.0M; iPads: 17.04M; Revenue: 35.02B; EPS: 9.32

southafrikanse

Pois... eu também tive que aprender as árvores binárias, AVL, de pesquisa, heaps e isso tudo mas concordo contigo e os meus profs disseram a mesma coisa....

Se uma pessoa percebe linguagem C, então percebe a maioria das linguagens....
Blog Pessoal | Tugatrónica | Fórum Webtuga
"Knowledge is knowing that a tomato is a fruit, but Wisdom is knowing not to put it in a fruit salad."

Pure_Water

olho meu amigo java

btw,

self.marca = marca;
self. matricula = matricula;

deveria ser this em vez de self.

bom topico
http://www.espiritohonda.com\" target=\"_blank\" rel=\"nofollow\"]
http://www.80swerethebest.blogspot.com\" target=\"_blank\" rel=\"nofollow\"]

KTachyon

My Q4 estimate: Macs: 5.89M; iPods: 4.19M; iPhones: 30.0M; iPads: 18.05M; Revenue: 37.00B; EPS: 9.50
AAPL Q3 result: Macs: 4.02M; iPods: 6.80M; iPhones: 26.0M; iPads: 17.04M; Revenue: 35.02B; EPS: 9.32

southafrikanse

Quoteolho meu amigo java

btw,

self.marca = marca;
self. matricula = matricula;

deveria ser this em vez de self.

bom topico

Tens razão  

É para verem as dificuldades que eu tenho em JAVA, sempre se usou this, nunca usei nem sei se é possível usar self
Blog Pessoal | Tugatrónica | Fórum Webtuga
"Knowledge is knowing that a tomato is a fruit, but Wisdom is knowing not to put it in a fruit salad."

KTachyon

Ya, em Java é this. Self é em Objective-C (e em OOP BASICs). Já corrigi
My Q4 estimate: Macs: 5.89M; iPods: 4.19M; iPhones: 30.0M; iPads: 18.05M; Revenue: 37.00B; EPS: 9.50
AAPL Q3 result: Macs: 4.02M; iPods: 6.80M; iPhones: 26.0M; iPads: 17.04M; Revenue: 35.02B; EPS: 9.32