Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduo Programao Orientada a Objetos Introdu Programa Existem duas formas importantes de programao de computadores: A programao estruturada (PE) A programao orientada a objetos (POO) Na programao estruturada, a preocupao maior com as estruturas de controle, ou seja, como construir programas usando as estruturas de sequncia, seleo e repetio. Assim, na programao estruturada, preocupa-se com os algoritmos e cada mdulo que compe um programa um algoritmo especfico. Foi o que se estudou em PC-I, usando a linguagem C. Na programao orientada a objetos, a preocupao maior com os dados que o programa ir tratar. Assim, na programao orientada a objetos, preocupa-se com as estruturas de dados e com as operaes que podem ser executadas sobre estes dados. Na POO, cada estrutura de dados e suas operaes associadas denominada classe. Assim, na POO, cada mdulo que compe um programa uma classe. Em PC-II, vamos usar a linguagem Java.
1
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa Exemplo. Programao estruturada (linguagem C)
Cada operao possvel sobre o novo tipo de dados uma funo independente.
A manipulao de dados do novo tipo pode ser feita em qualquer funo do programa.
2
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa Exemplo. Programao orientada a objetos (linguagem Java)
Fracao.java
A classe Fracao define a estrutura de dados e as operaes possveis sobre essa estrutura.
Exemplo.java
A classe Exemplo constroi objetos da classe Fracao e usa esses objetos como desejar.
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa Na programao orientada a objetos, o principal conceito o de objeto. Mas o que um objeto?
Programao Estruturada int x, y; fracao a, b; x = 5; a.num = 3; a.den = 2;
x e y so variveis do tipo primitivo int, ou seja, x e y so exemplares do tipo int. a e b so variveis de um novo tipo fracao, definido pelo usurio, ou seja, a e b so exemplares do tipo fracao.
x e y so objetos da classe primitiva Integer, ou seja, x e y so exemplares da classe Integer. a e b so objetos de uma nova classe Fracao, definida pelo usurio, ou seja, a e b so exemplares da classe Fracao. Uma classe define todas as operaes (mtodos) possveis sobre seus objetos.
4
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa Um programa Java constitudo por um conjunto de classes. Essas classes podem ser primitivas (Java API) ou construdas pelo usurio. O programa corresponde uma classe executvel: classe que contm o mtodo main().
public class Primeira { public void saudar() { System.out.println("Programao em Java"); } }
Primeira.java
Programa1.java
public class Programa1 Esta a { classe public static void main(String[] args) executvel, { ou seja, o Primeira p = new Primeira(); programa p.saudar(); em si. } } A execuo do mtodo main() cria um objeto p da classe Primeira. Este objeto chama seu mtodo saudar().
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa Este programa Java constitudo por 2 classes: Primeira e Programa1. Cada uma destas classes deve ser escrita em um arquivo separado. Os nomes dos arquivos devem ser exatamente iguais aos nomes das classes, acrescentando-se a extenso .java, ou seja: Primeira.java e Programa1.java Primeira e Programa1 so identificadores (nomes escolhidos pelo prprio programador). Identificadores podem ser constitudos por letras, dgitos, sublinhados (_) e smbolos de cifro ($) mas no podem iniciar com dgito e no podem conter espaos. Lembrar que Java faz distino entre letras maisculas e minsculas. Uma das classes do programa (a classe executvel, ou seja, a classe que corresponde ao programa em si) deve conter a declarao:
public static void main(String[] args) { ... }
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa Cada classe define: Uma estrutura de dados: constituda por um conjunto de campos que caracterizam um particular tipo de dado. Operaes possveis: um conjunto de funes (denominadas mtodos) que implementam as operaes possveis sobre os dados armazenados nos campos. Assim, uma classe rene em uma nica entidade os possveis dados (valores dos campos) e instrues (funes que estabelecem o comportamento computacional) dos objetos da classe. A esta caracterstica especial das classes d-se o nome de encapsulamento. Para facilitar a descrio de classes, vamos adotar a seguinte notao grfica para representar uma classe:
Nome da classe Campos que compem a estrutura de dados da classe Mtodos que estabelecem o comportamento computacional da classe
ELFS
A classe Ponto compreende os campos CoordX e CoordY, do tipo int (o sinal indica que esses campos so privados) e o mtodo mostrar(), do tipo void (o sinal + indica que esse mtodo pblico).
7
1. Introduo Programao Orientada a Objetos Introdu Programa Um objeto um exemplar de uma classe. Quantos exemplares uma classe pode ter? Exemplo: Ponto p1, p2; Os objetos p1 e p2 so A classe Ponto define
um novo tipo de dado.
Portanto, se uma classe uma entidade genrica, cada objeto desta classe uma entidade especfica, caracterizado por: Seu estado: o conjunto dos valores especficos atribudos aos campos do objeto; Seu comportamento: o conjunto de mtodos (determinados pela classe) que tratam os dados especficos do objeto.
A partir de uma classe possvel construir um nmero qualquer de objetos, todos com as mesmas caractersticas, ou seja, os mesmos campos e os mesmos mtodos. No entanto, cada objeto possui seu prprio estado e, consequentemente, seu prprio comportamento.
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa As classes podem formar uma hierarquia (superclasses, classes, subclasses). A construo de uma nova classe faz uso do mecanismo de herana: a nova classe herda campos e mtodos de sua superclasse, podendo possuir, no entanto, caractersticas (campos e mtodos) que lhe so prprias. Por exemplo:
Ponto int CoordX int CoordY + void mostrar()
Neste caso, a classe Ponto superclasse de Circulo, que superclasse de Cilindro (ou seja, Cilindro subclasse de Circulo, que subclasse de Ponto). A classe Circulo herda da classe Ponto os campos CoordX e CoordY e o mtodo mostrar(). Mas a classe Circulo tem suas caractersticas prprias: o campo Raio e o mtodo mostrar(), que redefine o mtodo mostrar() herdado. A classe Cilindro possui os campos: CoordX, CoordY, Raio (herdados de Circulo) e Altura (prprio da classe), e os mtodos: area() e mostrar() (herdados de Circulo), alm de volume() e mostrar() (que lhe so prprios). Observar novamente que o mtodo mostrar() da classe Cilindro redefine o mtodo mostrar() herdado da classe Circulo.
9
1. Introduo Programao Orientada a Objetos Introdu Programa Voc notou que, nas classes, os campos so privados e os mtodos so pblicos. Por que? As classes so constitudas de uma parte privada (no acessvel fora da classe) e de uma parte pblica (acessvel fora da classe). Um programa pode usar objetos de uma classe, mas este uso controlado pois existem detalhes da classe (pertencentes sua parte privada) que permanecem protegidos de acessos no-autorizados. Esta abordagem de ocultar informaes facilita a reusabilidade das classes: capacidade de desenvolver classes e, com um bom desenvolvimento de suas interfaces (partes pblicas), torn-las disponveis a vrias aplicaes.
Um programa que usa a classe Ponto pode usar o mtodo mostrar(), mas no pode acessar os campos CoordX e CoordY. Por exemplo: Ponto p = new Ponto(5,30); p.mostrar(); p.CoordX = 3;
ELFS
Pode ser necessrio alterar a implementao da classe, por exemplo, modificar o tipo dos campos de int para float, ou modificar a implementao do mtodo mostrar(). Se no houver alterao na forma de acessar a parte pblica da classe, no haver necessidade de alterao nos programas que usam essa classe.
10
1. Introduo Programao Orientada a Objetos Introdu Programa Desenvolvimento de programas Java A linguagem Java est disponvel nas seguintes plataformas de desenvolvimento: Java Standard Edition (JavaSE): plataforma para o desenvolvimento de aplicaes desktop. a plataforma que contm as classes necessrias para o desenvolvimento de qualquer aplicao Java. Java Enterprise Edition (JavaEE): plataforma dedicada ao desenvolvimento de aplicaes para a Internet (aplicaes web). Java Micro Edition (JavaME): plataforma voltada para o desenvolvimento de aplicaes para dispositivos mveis (telefones celulares, palmtops, televisores e aparelhos eletrnicos em geral). Esta plataforma um subconjunto da JavaSE.
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa Para desenvolver programas Java: Passo 1: Instalar a plataforma Java (JavaSE) http://java.sun.com/javase/downloads/ Opo: JDK 6, que corresponde ao JDK (Java Development Kit ) e ao JRE (Java Runtime Environment ).
A pasta docs ser criada quando a documentao for instalada (passo 2).
jdk<version> __________________|____________________ | | | | | | bin demo docs include jre lib ... ___|___ | | bin lib
Passo 2: Instalar a documentao Java http://java.sun.com/javase/downloads/ Opo: Java SE 6 Documentation, que deve ser descompactada na raiz e ir criar a pasta docs, como mostrado acima. Passo 3: Instalar o ambiente de desenvolvimento (JCreator) http://www.jcreator.com importante que o ambiente de desenvolvimento
seja o ltimo a ser instalado, pois depende da plataforma e da documentao.
12
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa JCreator IDE (Integrated Development Environment )
Prestar ateno nesse boto: procurar pela documentao de qualquer classe disponvel na Java API.
Arquivos rea de edio de programas. Notar, pelas abas acima, que pode conter vrios arquivos. Classes
Documentao sobre como usar o IDE e documentao da Java API (Applications Programming Interface)
ELFS
13
1. Introduo Programao Orientada a Objetos Introdu Programa Botes importantes da barra de ferramentas:
Executar o programa Parar a execuo do programa ativo
A opo File | New | File... deve ser usada para criar um novo arquivo-fonte (*.java). Ser preciso escolher (na janela seguinte) uma das Java Classes: Java Class (classe no executvel) Main Class (classe executvel) e, em seguida, o nome do arquivo.
ELFS
14
O compilador corresponde ao programa java.exe, presente na pasta bin da instalao da plataforma JavaSE. Com a compilao so criados arquivos .class (a compilao de um arquivo-fonte pode gerar vrios arquivos .class) O carregador de classes transfere para a memria os arquivos .class, a partir do computador local ou de uma rede (local ou Internet). O verificador assegura que os arquivos .class so vlidos e no violam restries de segurana impostas pela linguagem Java. O interpretador (JVM) executa o arquivo .class referente classe executvel da aplicao.
15
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa Um programa Java no executado diretamente pelo hardware de um computador (como um programa executvel em C). Um programa Java executado pela Mquina Virtual Java (JVM-Java Virtual Machine), um programa conhecido como interpretador. Isto d portabilidade ao cdigo do programa, ou seja, o mesmo programa Java pode ser executado em diferentes mquinas sob diferentes sistemas operacionais, pois existem implementaes da JVM para cada plataforma computacional (Linux, Solaris, Windows, etc). A compilao de um programa Java gera instrues em uma linguagem intermediria (conhecida como bytecode) reconhecida pela JVM, em vez de instrues em linguagem de mquina como ocorre para outras linguagens (C, C++, Pascal, etc). A JVM executa os bytecodes numa plataforma computacional especfica.
ELFS
16
Editor
Disco
Verificador de Bytecode M
Memria Principal
Compilador
Disco
A JVM (que est sendo executada em uma mquina real) interpreta os bytecodes e os executa.
Carregador de Classes M
Interpretador M
Disco
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa Erros muito comuns Erros de Compilao
Primeira.java: cannot resolve symbol symbol: method printl (java.lang.String) location: class java.io.PrintStream System.out.printl("Programao em Java");
O nome do mtodo println foi digitado incorretamente. Quando houver dvidas deve-se consultar a API. Se um arquivo .java contm uma classe pblica os nomes do arquivo e da classe devem ser iguais. O arquivo .class no foi encontrado (possivelmente esteja em um outra pasta). Tentativa de executar uma classe no executvel.
18
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa Um dos pontos fortes da linguagem Java seu conjunto de classes predefinidas: a Java API (Applications Programming Interface). A Java API est organizada em pastas (denominadas pacotes) e precisa ser constantemente consultada para que se conhea os campos e os mtodos de cada uma das classes predefinidas. Alguns exemplos:
Pacote java.lang java.io java.math javax.swing java.util Descrio Classes muito comuns (este pacote importado automaticamente pelo compilador em todos os programas Java). Classes que permitem a entrada e a sada de dados em arquivos. Classes para executar aritmtica de preciso arbitrria. Classes de componentes GUI Swing para criao e manipulao de sofisticadas interfaces grficas de usurio. Classes de utilitrios como: manipulaes de datas e horas, processamento de nmeros aleatrios, armazenamento e processamento de grandes volumes de dados, quebra de strings em unidades lxicas (tokens).
19
ELFS
1. Introduo Programao Orientada a Objetos Introdu Programa A Java API est em: JAVA_HOME\docs\api\index.html
C:\Arquivos de programas\Java\jdk1.6.0
ELFS
20
1. Introduo Programao Orientada a Objetos Introdu Programa Conveno de nomes em um programa Java Nome de Classe: Escrito com a primeira letra em maiscula. Se o nome for composto de vrias palavras, a primeira letra de cada palavra deve ser maiscula (Exemplos: Primeira, TestePrimeira). Nome de Campo: Deve comear com uma palavra escrita em minsculas. Se contiver outras palavras, a primeira letra de cada palavra deve ser maiscula (Exemplos: nome, contaCorrente). Nome de Constante: Deve ser escrito somente em letras maisculas, com as palavras separadas por sublinhados (Exemplos: MAX_TAMANHO, ALTURA_MINIMA, JAVA_HOME). Nome de Mtodo: Deve comear com um verbo no infinitivo, escrito em minsculas. Se contiver outras palavras, a primeira letra de cada palavra deve ser maiscula (Exemplos: saudar, fazerConexao).
ELFS
21
public class Somar { public static void main( String[] args ) { String pNum,sNum; // nmeros fornecidos int num1,num2,soma; // nmeros convertidos pNum = JOptionPane.showInputDialog("Primeiro inteiro"); sNum = JOptionPane.showInputDialog("Segundo inteiro"); // converter do tipo String para o tipo Integer e somar num1 = Integer.parseInt(pNum); Os mtodos showInputDialog e num2 = Integer.parseInt(sNum); showMessageDialog implementam soma = num1 + num2; caixas de dilogo. JOptionPane.showMessageDialog(null,"A soma " + soma, "Resultado",JOptionPane.PLAIN_MESSAGE); System.exit(0); // terminar a execuo do programa } }
ELFS
O terceiro parmetro do mtodo showMessageDialog o ttulo da caixa de dilogo e o quarto parmetro o tipo de caixa de dilogo.
22
1. Introduo Programao Orientada a Objetos Introdu Programa Algumas classes da Java API A classe Math Contm valores de constantes e vrias funes matemticas. Faz parte do pacote java.lang (includo automaticamente). A classe apresenta duas constantes: Math.PI (com o valor 3.14159265358979323846) Math.E (com o valor 2.71828182845904523536) Alguns mtodos da classe:
Mtodo Math.abs(x) Math.ceil(x) Math.cos(x) Math.exp(x) Math.floor(x)
ELFS
Descrio valor absoluto de x arredonda x para o menor inteiro no menor que x cosseno trigonomtrico de x (x em radianos) exponencial de x (ou seja, ex) arredonda x para o maior inteiro no maior que x
23
ELFS
24
1. Introduo Programao Orientada a Objetos Introdu Programa A Classe String Os objetos da classe String so imutveis (uma vez criado, um objeto String no pode ser alterado). Toda operao sobre um objeto String gera um novo objeto String. Com a classe String, pode-se criar um objeto diretamente, sem usar o operador new. Exemplo: String nome = "Thais Helena"; A classe oferece diversos mtodos que podem ser usados para manipulao de sequncias de caracteres. Os mtodos devem ser chamados por objetos da classe.
Descrio concatena o objeto ob ao String s substitui, no objeto ob, todas as ocorrncias do char x pelo char y constroi novo string de ob, com os caracteres de ndices i at j-1
25
1. Introduo Programao Orientada a Objetos Introdu Programa Outros mtodos da classe String:
Mtodo ob.toLowerCase() ob.toUpperCase() ob.endsWith(s) ob.startsWith(p) ob.indexOf(c) ob.lastIndexOf(c) ob.equals(s) ob.compareTo(s) ob.charAt(i) ob.trim() ob.format(s, a) ob.length() ob.isEmpty() Descrio transforma os caracteres alfabticos de ob em letras minsculas transforma os caracteres alfabticos de ob em letras maisculas verifica se o objeto ob termina com o sufixo s verifica se o objeto ob comea com o prefixo p retorna o ndice da primeira ocorrncia do char c no objeto ob retorna o ndice da ltima ocorrncia do char c no objeto ob compara o objeto ob ao String s compara, lexicograficamente, o objeto ob com o String s retorna o caractere de ndice i presente no objeto ob remove caracteres branco do incio e do final do objeto ob retorna ob formatado segundo o formato f e argumentos a retorna o comprimento do objeto ob retorna True, se o comprimento do objeto ob for igual a zero
ELFS
26
1. Introduo Programao Orientada a Objetos Introdu Programa A classe Scanner A classe Scanner permite a leitura de dados (de tipos primitivos ou Strings) a partir de arquivos. System.in o arquivo padro de entrada (teclado) e System.out o arquivo padro de sada (rea de sada do IDE) Um objeto da classe Scanner quebra o contedo do arquivo em tokens (o delimitador padro o espao em branco). possvel mudar o delimitador usado com o mtodo useDelimiter(). O mtodo hasNext () indica se existe ou no um prximo token para ser lido. O mtodo next() retorna um token (ou seja, um objeto da classe String). Outros mtodos da classe Scanner so: hasNextXxx() (indica se o prximo token, caso exista, pode ser interpretado como do tipo Xxx, onde Xxx pode ser Int, Float, Double, Boolean) nextXxx() (retorna um token do tipo Xxx)
27
ELFS
import java.util.*; public class Leitura { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Qual o seu nome?"); String nome = in.next(); // Uma nica palavra System.out.println(nome + ", qual sua idade?"); in.reset(); // Usar aps ler strings int idade = in.nextInt(); // L um inteiro System.out.println("Voc diz que tem " + idade + " anos."); System.out.println("Qual seu peso?"); float peso = in.nextFloat(); // L um float System.out.printf("Voc diz que pesa %5.1f kg", peso); } } A classe Scanner usa para um valor do tipo float, o ponto ou a vrgula decimal, dependendo de como est configurada a plataforma computacional usada.
ELFS
28
1. Introduo Programao Orientada a Objetos Introdu Programa Classes Wrapper (Invlucro) Em Java pode-se trabalhar com tipos primitivos (que no so objetos). Para facilitar a manipulao de dados destes tipos existem classes wrapper (do pacote java.lang) para cada tipo primitivo: Boolean (para boolean), Byte (para byte), Character (para char), Short (para short), Integer (para int), Long (para long), Float (para float) e Double (para double). Quase todas estas classes tm dois construtores definidos. Exemplo: Integer(String i) e Integer(int i). Classes wrapper constroem objetos imutveis: uma vez que um valor primitivo atribudo ao objeto esse valor no pode ser alterado. Classes wrapper so teis na converso de tipos pois disponibilizam diversos mtodos para isto (verificar API). Exemplos: int i = 77;
Integer i2 = new Integer(i); int j = i2.intValue(); String s = "77"; int k = Integer.valueOf(s).intValue(); int k = Integer.parseInt(s);
ELFS
29
1. Introduo Programao Orientada a Objetos Introdu Programa A ferramenta Javadoc Javadoc uma ferramenta para gerar APIs em formato HTML a partir de comentrios especiais includos no cdigo-fonte de uma classe. As informaes completas sobre essa ferramenta encontram-se em: http://java.sun.com/javase/6/docs/technotes/guides/javadoc Para gerar a API: Exemplo:
ExemploJavadoc.java import java.util.*; /** * Usado para testar a funcionalidade de <code>javadoc</code> num * arquivo contendo uma nica classe. * * Essa classe mostra muitas das convenes usadas na documentao * disponvel em: * <a href="http://java.sun.com/javase/6/docs/technotes/guides/javadoc"> Javadoc Technology</a>. * <p> * Visite esta pgina sempre que precisar obter mais informaes sobre o * Javadoc. * </p>
ELFS
30
ELFS
31
32
33
ELFS
34