Ir para conteúdo

Aprendendo Orientação A Objetos


Diogo

Posts Recomendados

Orientação a Objetos



 

Aula 1

Inícios dos conceitos de Orientação a Objetos

 

Apresentação

 

Olá!

 

Nesse cantinho do fórum XTibia eu vou ministrar, para quem se interessar a ler, aulas (ou tutoriais) de programação orientada a objetos.

 

Não ensinarei como programar; o básico de lógica de programação, blocos e comandos, procedimentos e afins você já deve saber.

 

Antes de começar, talvez seja melhor eu me apresentar:

 

Meu nome é Diogo Dias Barreiros, tenho 21 anos e estou atualmente cursando o curso de Bacharelado em Sistemas de Informação no CES/JF.

 

Tenho alguma experiência no campo da programação, principalmente quando diz respeito a PHP, linguagem que programo a mais de 6 anos.

 

Conheci a orientação a objetos em 2008 e logo gostei, pois mesmo quando utilizava a metodologia de programação estruturada, já estruturava meus sistemas de forma semelhante ao que a OO prega.

 

Bom, chega, vamos ao que interessa.

 

 

O que é Orientação a Objetos

 

Essa é simples, orientação a objetos é a vida real; na verdade, talvez fosse até mais realista usar o termo "orientação à vida" na computação, ou "é tão difícil viver nesse programa orientado a objetos" quando estivéssemos nos referindo ao mundo. Sim, eu sou nerd, mas isso não vem ao caso agora.

 

A orientação a objetos poderia ter surgido da observação da natureza. O observador perceberia, olhando para uma flor, que ela pode ser dividida em partes menores, como uma folha, e que essas partes menores têm características e comportamento próprio, como a cor da folha e respiração.

 

As partes menores interligadas, formariam o objeto maior chamado flor, que teria suas características, como nível de beleza e suas funções, como embelezar o ambiente, que poderiam ou não ser diretamente ligadas aos objetos menores, como pétala, folha, caule e afins.

 

Percebe?

 

A grosso modo, orientação a objetos também poderia ser considerado divisão de objetos. Mas uma divisão mais lógica e melhor organizada do que acontece na programação estruturada normalmente.

 

Quando estamos criando, por exemplo, nosso primeiro programa estruturado, a menos que tenhamos sido instruídos para tal, dificilmente pensaríamos em pensar em dividir nosso programa em "características" e "funções". Apenas colocamos um monte de estruturas uma abaixo a outra, ou dividida em arquivos, mas sem uma separação clara do que cada coisa faz, sem definir de forma perfeita o motivo daquilo que está naquele arquivo fazer o que faz por outro motivo que não seja "porque eu quero que seja assim".

 

E se cada um faz o que quer, porque quer, da forma que quer, sem se preocupar em organizar as coisas de forma padronizada, ou padronizando como quiser, infeliz daquele que realizará a manuntenção nesse código. A menos que saiba qual o padrão utilizado, seria uma loucura, por mais bem organizado que as coisas estejam.

 

Existem, por exemplo, empresas que utilizam linguagens estruturadas na criação de seus programas que no "manual de normas" definem que cada chamada ao banco de dados deve ser feita em uma função/procedimento. Dessa forma, todos sabem onde procurar quando querem encontrar uma chamada ao banco de dados... ou não.

 

Um código poluído, onde há mistura de funções e estrutura lógica do programa, é o terror de qualquer programador.

 

Então você também poderia dizer que orientação a objetos é um padrão de programação.

 

E já estamos começando a formar um conceito:

 

Um padrão de programação que utiliza uma divisão lógica e organizada para analizar problemas e desenvolver soluções.

 

Já sabemos também que parte fundamental dessa divisão é dividir as "coisas" em objetos com suas características e funções.

 

E pronto. Isso é a orientação a objetos, ao menos o conceito geral.

 

Lembra-se do exemplo da flor?

 

Vamos para um exemplo simples de um carro:

 

Tenho um carro.

 

Nesse carro tenho um motor.

 

Esse motor tem propriedades/características próprias, como fabricante e potência, e funções próprias, como queimar combustível para transformá-lo em movimento.

 

Voltando ao carro, ele tem também suas propriedades, como modelo e cor, e suas funções, como acelerar e freiar.

 

Mas pera ae? Não é o motor que faz o carro acelerar a partir da queima do combustível e os freios que fazem o carro parar?

 

Sim, mas o motor fora de uma estrutura não iria para lugar nenhum, um freio sozinho não serveria para nada, um capô sozinho é apenas um pedaço de metal... As funções dos objetos menores presentes em um objeto maior podem também serem as funções desse objeto maior.

 

Mas acho que estou complicando um pouco demais agora, vamos parar por aqui e deixar sua cabecinha assimilar esse conceito.

 

---

 

Exercícios

 

1. Desmembre o objeto "liquidificador" em pelo menos uma outra parte e diga suas respectivas propriedades e funções (ao menos uma).

Obs.: Escrever, como fiz acima, não utilizar nenhuma linguagem de programação para isso (caso saiba alguma).

 

2. Faça o mesmo que o exercício 1 com dois outros objetos à sua escolha.

 

 

Exemplos de respostas

 

1.

Objeto: Liquidificador

Outra parte: Copo

 

Copo

Propriedade: Material (plástico ou metal)

Função: Receber algo que será batido (conter algo)

 

Liquidificador

Propriedade: Cor

Função: Processar alimentos

 

 

2.

Objeto: Tênis

Partes: Cadarço e sola

 

Sola

Propriedade: Grau de conservação (se está gasta ou não)

Função: Diminuir o atrito que o pé sentirá

 

Cadarço

Propriedade: Amarrado (pode ou não estar amarrado)

Função: Ajudar a impedir o tênis de sair do pé

 

Tênis

Propriedade: Estilo (esporte, etc)

Função: Proteger os pés

 

Editado por Diogo
Modificar formatação visual do tópico
Link para o comentário
Compartilhar em outros sites

Orientação a Objetos é uma metodologia (ou um paradigma) alheio à linguagem de programação (não totalmente, a linguagem precisa dar suporte a essa metodologia...)

 

Quando entrarmos na parte da programação (e não apenas conceito da OO), entretanto, usarei Java para me auxiliar a ensinar.

 

Então sim, quem fizer essas aulas aprenderá a programar o básico do básico em Java (já que Java é totalmente orientado a objetos).

Link para o comentário
Compartilhar em outros sites

U.u eu estou aprendendo a programar em Java acho que isso vai me ajudar ;O

 

Espero mais topicos sobre isso eu fiz uma coisa em java aqui ;P

 

import java.awt.*;

import java.lang.*;

import java.awt.event.*;

import java.applet.Applet;

import java.awt.datatransfer.*;

 

/* Programa Desenvolvido By Zafor */

public class Calculadora extends Applet

{

}

 

class calf extends Frame implements WindowListener, ActionListener, KeyListener

{

String command, copy, arg, chg, txt;

double result;

String number = "123456789.0";

String operator = "/*-+=";

CopyPaste cp;

 

Menu Menu1;

MenuBar Menubar1;

MenuItem menuitem1, menuitem2, menuitem3;

TextField entrytext;

Button numbut []; //Botoes de Numero

Button combut []; //Botoes de Comando

Panel companel, numpanel;

 

public static void main(String[] arguments)

{

calf calWindow = new calf("Calculadora em Java By Zafor");

calWindow.setSize(238, 255);

calWindow.setVisible(true);

}

 

public calf(String title)

{

super(title);

addWindowListener(this);

addKeyListener(this);

 

cp = new CopyPaste();

 

setBackground(Color.lightGray);

setLayout(new GridLayout(1, 1));

Menubar1 = new MenuBar();

Menu1 = new Menu("Editar");

menuitem1 = new MenuItem("Copiar");

Menu1.add(menuitem1);

menuitem1.addActionListener(this);

menuitem2 = new MenuItem("Colar");

Menu1.add(menuitem2);

menuitem2.addActionListener(this);

menuitem3 = new MenuItem("Sair");

Menu1.add(menuitem3);

menuitem3.addActionListener(this);

Menubar1.add(Menu1);

setMenuBar(Menubar1);

GridBagLayout gridbag = new GridBagLayout();

GridBagConstraints constraints = new GridBagConstraints();

setLayout(gridbag);

constraints.weighty = 1;

constraints.weightx = 1;

Font bigFont = new Font("Tahoma",Font.TRUETYPE_FONT, 18);

entrytext = new TextField(20);

constraints.gridwidth = GridBagConstraints.REMAINDER;

gridbag.setConstraints(entrytext,constraints);

add(entrytext);

entrytext.setFont(bigFont);

entrytext.setEditable(false);

entrytext.setForeground(Color.black);

entrytext.setBackground(Color.white);

entrytext.addKeyListener(this);

entrytext.requestFocus();

 

constraints.weighty = 1;

constraints.weightx = 1;

companel = new Panel();

 

constraints.gridwidth = GridBagConstraints.REMAINDER;

gridbag.setConstraints(companel,constraints);

/*

Comandos

* Reiniciar

* Sair

* Voltar

*/

 

companel.setLayout(new GridLayout(1,3,5,5));

 

// Criar os Botões

Font comsFont = new Font("Tahoma",Font.ROMAN_BASELINE, 12);

String[] coms = { "Reiniciar","Sair","Voltar"

};

combut = new Button[3];

for (int i=0; i<=2; i++)

{

combut = new Button(coms);

companel.add(combut);

combut.addActionListener(this);

combut.setFont(comsFont);

combut.addKeyListener(this);

 

}

add(companel);

companel.addKeyListener(this);

 

constraints.weighty = 1;

constraints.weightx = 6;

numpanel = new Panel();

constraints.gridwidth = GridBagConstraints.REMAINDER;

gridbag.setConstraints(numpanel,constraints);

/*

Botoes

*/

numpanel.setLayout(new GridLayout(5,4,4,2));

// Para Criar os Botões

String[] nums = { "7","8","9","/",

"4","5","6","sqrt",

"1","2","3","*",

"%","0","-","1/x",

"+/-",".","+","="

};

numbut = new Button[20];

for (int i=0; i<=19; i++)

{

numbut = new Button(nums);

numpanel.add(numbut);

numbut.addActionListener(this);

numbut.addKeyListener(this);

if(operator.indexOf(nums) > -1)

{

numbut.setForeground(Color.black);

}

else

{

numbut.setForeground(Color.black);

}

 

}

add(numpanel);

numpanel.addKeyListener(this);

 

command = "+";

copy = "";

chg = "N";

txt = "";

arg = "";

result = 0;

}

 

public void actionPerformed(ActionEvent e)

{

if (e.getActionCommand() == "Sair")

{

setVisible(false);

System.exit(0);

}

else if (e.getActionCommand() == "Copiar")

{

String txt = entrytext.getText();

if (txt != null)

{

cp.doCopy(txt);

}

}

else if (e.getActionCommand() == "Colar")

{

cp.doPaste();

if (cp.ctxt != null)

{

entrytext.setText(cp.ctxt);

}

}

else if (e.getActionCommand() == "Voltar") back_space();

else if (e.getActionCommand() == "Reiniciar") entrytext.setText("");

else if (e.getActionCommand() == "C")

{

result = 0;

command = "+";

entrytext.setText("");

}

else

{

arg = e.getActionCommand();

txt = entrytext.getText();

if(number.indexOf(arg) > -1)

{

if (chg == "Y") txt = "";

txt = txt + arg;

entrytext.setText(txt);

chg = "N";

}

else check_entry();

}

}

 

public void keyPressed(KeyEvent k){}

public void keyReleased(KeyEvent k)

{

int ikey = k.getKeyCode();

if (ikey == 127) entrytext.setText("");

}

public void keyTyped(KeyEvent k)

{

int ikey = k.getKeyChar();

if (ikey == 8) back_space();

else if (ikey == 10)

{

arg = "=";

txt = entrytext.getText();

display_ans();

}

else

{

txt = entrytext.getText();

char ckey = (char) ikey;

arg = String.valueOf(ckey);

if(number.indexOf(arg) > -1)

{

if (chg == "Y") txt = "";

txt = txt + arg;

entrytext.setText(txt);

chg = "N";

}

else check_entry();

}

}

 

public void back_space()

{

txt = entrytext.getText();

int l = txt.length();

if (l > 0)

{

txt = txt.substring(0,l-1);

entrytext.setText(txt);

}

}

public void display_ans()

{

entrytext.setText(compute_tot(txt,command));

chg = "Y";

command = "+";

result = 0;

}

public void check_entry()

{

if(arg.equals("=")) display_ans();

else if(arg.equals("%"))

{

entrytext.setText(compute_tot(txt,arg));

chg = "Y";

}

else if(operator.indexOf(arg) > -1)

{

entrytext.setText(compute_tot(txt,command));

command = arg;

chg = "Y";

}

else if(arg == "sqrt")

{

entrytext.setText(compute_tot(txt,arg));

chg = "Y";

command = "";

}

else if(arg == "+/-")

{

Double tnum = Double.valueOf(txt);

double num = tnum.doubleValue();

num = num * -1;

entrytext.setText(String.valueOf(num));

chg = "Y";

}

else if(arg == "1/x")

{

entrytext.setText(compute_tot(txt,arg));

chg = "Y";

}

}

String compute_tot(String t, String c)

{

Double tnum = Double.valueOf(t);

double num = tnum.doubleValue();

 

if (c.equals("+")) result = result + num;

else if (c.equals("-")) result = result - num;

else if (c.equals("*")) result = result * num;

else if (c.equals("/")) result = result / num;

else if (c.equals("%")) result = num / 100;

else if (c.equals("+/-")) result = num * -1;

else if (c.equals("1/x")) result = 1.000 / num;

else if (c.equals("sqrt")) result = Math.sqrt(num);

return String.valueOf(result);

}

 

public void windowClosing(WindowEvent we)

{

setVisible(false);

System.exit(0);

}

public void windowClosed(WindowEvent we) {}

public void windowDeiconified(WindowEvent we) {}

public void windowIconified(WindowEvent we) {}

public void windowOpened(WindowEvent we) {}

public void windowActivated(WindowEvent we) {}

public void windowDeactivated(WindowEvent we) {}

}

 

 

class CopyPaste implements ClipboardOwner

{

 

Clipboard clip;

String ctxt;

 

CopyPaste()

{

clip = new Clipboard("clip");

ctxt = null;

}

 

void doCopy(String txt)

{

StringSelection trans = new StringSelection(txt);

clip.setContents(trans, this);

}

 

void doPaste()

{

ctxt = null;

Transferable toPaste = clip.getContents(this);

if (toPaste != null)

{

try

{

ctxt = (String)toPaste.getTransferData(

DataFlavor.stringFlavor);

}

catch (Exception e)

{

System.out.println("Error -- " + e.toString());

}

}

 

}

 

public void lostOwnership(Clipboard clip,

Transferable contents) {

}

}

É uma calculadora em Java eu peguei o programa de uma pessoa traduzi ele adicionei os botões,menu modifiquei o fundo e etc... se voce tiver alguma dica eu aceitarei ;D

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Pow cara... eu acho que você quis dizer que era pra escrever um algoritmo (frases curtas e objetivas) tendo apenas um verbo em cada frase, respeitando uma ordem, um formato ou um padrão de linguagem de programação.

:smile_positivo:

Link para o comentário
Compartilhar em outros sites

@zafor

Enquanto uma calculadora em java(oop) tem 200 linhas, uma em C(que não é oop) tem umas 50 linhas no max.. x.x

 

Eu acho oop dispensavel em maioria dos casos.. Maas, a moda pegou, então fazer o que, nada contra a maré é burrice!

 

obs:

não liguem pra mim, para se entender maioria dos codes atuais é necessario ter ao menos uma báse de oop

Link para o comentário
Compartilhar em outros sites

Pelo amor de deus, será que o XTibia possue só usuários crianças?

Depois esse infelizes (tipo o Zafor) reclamam que não existem tutoriais!

O usuário VaL veio tentar ensinar como se programar (assim que se começa), e se vocês continuarem seguindo esse tutorial, é provável que vocês sejam grandes programadores.

 

Aprovado :button_ok:

 

\\

Link para o comentário
Compartilhar em outros sites

Hehe belo tuto

 

Tomare que a comunidade se interesse

 

@eventide

 

Ah eu prefiro Java tbm...

 

Como é multi plataforma gere eh melhor

 

E um programador java ganha bem mais que um c ou c++

Link para o comentário
Compartilhar em outros sites

Eu prefiro C/C++, mas sei ambos ;z

 

As linguagens de programação são muito repetitivas, depois que você aprende uma bem, você estuda outra em no máximo 3 meses você já está programando muito bem, sabendo muita coisa da linguagem ;z

Link para o comentário
Compartilhar em outros sites

Pelo amor de deus, será que o XTibia possue só usuários crianças?

Depois esse infelizes (tipo o Zafor) reclamam que não existem tutoriais!

O usuário VaL veio tentar ensinar como se programar (assim que se começa), e se vocês continuarem seguindo esse tutorial, é provável que vocês sejam grandes programadores.

 

Aprovado :button_ok:

 

\\

 

 

 

Não vi ninguem fazendo comentario infantil no tópico, só você... 

 

e quanto ao programador java ganhar bastante,

se for deve ser porque é multi plataforma, mas eu não gosto de java, não pelo fato de ser oop, e sim porque pra se rodar algo com ele precisa do programa deles e porque aplicativos java são super pesados.. x.x 

Editado por Eventide
Link para o comentário
Compartilhar em outros sites

  • 5 weeks later...
  • 2 weeks later...
  • 1 month later...

eu aprendi POO no site criarweb ahuhauahuahuah na teoria ficou 'um pouco' confuso, aí dps que eles apresentaram a teoria em códigos (PHP) aí clareou... eh axo q tb sou nerd =P

 

as 'funções' dos objetos, também podem ser chamadas de métodos =)

 

achei super interessante o tutorial, mas achei que faltou frisar que todo objeto pertence à uma classe.... que é o ponto máximo na hierarquia da POO

 

classe flores {

propriedade nome

propriedade cor

 

método fotossíntese

}

 

classe carro {

propriedade marca

propriedade modelo

propriedade ano

proprieadade motor

 

método acelerar

método frear

}

 

aí com quando se definem as classes, é possível criar os objetos =)

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...