Programação_Orientada_ObjetoII

Share Embed Donate


Short Description

Programação_Orientada_ObjetoII, técnico em informática- modulo I...

Description

Curso Técnico em Informática

Programação Orientada a Objetos II

Robson Braga de Andrade Presidente da Confederação Nacional da Indústria

Rafael Lucchesi Diretor do Departamento Nacional do SENAI

Regina Maria de Fátima Torres Diretora de Operações do Departamento Nacional do SENAI

Alcantaro Corrêa Presidente da Federação da Indústria do Estado de Santa Catarina

Sérgio Roberto Arruda Diretor Regional do SENAI/SC

Antônio José Carradore Diretor de Educação e Tecnologia do SENAI/SC

Marco Antônio Dociatti Diretor de Desenvolvimento Organizacional do SENAI/SC

Confederação Nacional da Indústria Serviço Nacional de Aprendizagem Industrial

Curso Técnico em Informática

Programação Orientada a Objetos II Diogo Vinícius Winck

Florianópolis/SC 2011

É proibida a reprodução total ou parcial deste material por qualquer meio ou sistema sem o prévio consentimento do editor.

Autor Diogo Vinícius Winck

Fotografias Banco de Imagens SENAI/SC http://www.sxc.hu/ http://office.microsoft.com/en-us/ images/ http://www.morguefile.com/ http://www.bancodemidia.cni.org.br/

SENAI/SC — Serviço Nacional de Aprendizagem Industrial Rodovia Admar Gonzaga, 2.765 - Itacorubi - Florianópolis/SC CEP: 88034-001 Fone: (48) 0800 48 12 12 www.sc.senai.br

Prefácio Você faz parte da maior instituição de educação profissional do estado. Uma rede de Educação e Tecnologia, formada por 35 unidades conectadas e estrategicamente instaladas em todas as regiões de Santa Catarina. No SENAI, o conhecimento a mais é realidade. A proximidade com as necessidades da indústria, a infraestrutura de primeira linha e as aulas teóricas, e realmente práticas, são a essência de um modelo de Educação por Competências que possibilita ao aluno adquirir conhecimentos, desenvolver habilidade e garantir seu espaço no mercado de trabalho. Com acesso livre a uma eficiente estrutura laboratorial, com o que existe de mais moderno no mundo da tecnologia, você está construindo o seu futuro profissional em uma instituição que, desde 1954, se preocupa em oferecer um modelo de educação atual e de qualidade. Estruturado com o objetivo de atualizar constantemente os métodos de ensino-aprendizagem da instituição, o Programa Educação em Movimento promove a discussão, a revisão e o aprimoramento dos processos de educação do SENAI. Buscando manter o alinhamento com as necessidades do mercado, ampliar as possibilidades do processo educacional, oferecer recursos didáticos de excelência e consolidar o modelo de Educação por Competências, em todos os seus cursos. É nesse contexto que este livro foi produzido e chega às suas mãos. Todos os materiais didáticos do SENAI Santa Catarina são produções colaborativas dos professores mais qualificados e experientes, e contam com ambiente virtual, mini-aulas e apresentações, muitas com animações, tornando a aula mais interativa e atraente. Mais de 1,6 milhões de alunos já escolheram o SENAI. Você faz parte deste universo. Seja bem-vindo e aproveite por completo a Indústria do Conhecimento.

Sumário Conteúdo Formativo Apresentação

9

38

Seção 6 - Estudo de caso: sistema de cliente

41

Seção 7 - Javabeans

Java Básico

43

Seção 1 - String

45

Seção 2 - Array

Seção 1 - O que é Java?

47

Seção 3 - Construtor

16

Seção 2 - Tipos de distribuições JAVA

48

Seção 4 - Final e static

50

Seção 5 - Estudo de caso: relação de clientes

52

Seção 6 - Tratamento de exceções

16

Seção 3 - Alô SENAI!

19

Seção 4 - O que aconteceu?

19

Seção 5 - Variável

21

Seção 6 - Tipos primitivos de dados

54

Seção 7 - Estudo de caso: objetos de calcular

22

Seção 7 - Promoção e casting

57

Seção 8 - Utilizando pacotes

25

Seção 8 - Operadores aritméticos

25

Seção 9 - Controle de fluxo

29

Seção 10 - Escopo de variável

30

Seção 11 - Usando a documentação do Java

Revendo a Orientação a Objetos Seção 1 - Orientação a objetos: classes, objetos e instâncias Seção 2 - Atributos, métodos, interface, estados e comportamento

Seção 1 - Visão geral

86 Unidade de estudo 7

13

32 Unidade de estudo 2

83

Avançando no Java

12 Unidade de estudo 1

33

Collections

11 42 Unidade de estudo 3

33

82 Unidade de estudo 6

58 Unidade de estudo 4 AWT e Swing 59

Seção 1 - Visão geral

59

Seção 2 - Alô SENAI!

63

Seção 3 - Containers e gerenciadores de layout

64

Seção 4 - Eventos

64

Seção 5 - Estudo de caso: objetos de calcular

JDBC 87

Seção 1 - Visão geral

88

Seção 2 - Interfaces do JDBC

94 Unidade de estudo 8 Apêndice 1 Preparando o Ambiente de Trabalho 95

Seção 1 - Instalando JDK e NetBeans

97

Seção 2 - Instalando o PostgresSQL

100 Unidade de estudo 9 Apêndice 2 - Padrões de Codificação 101 Seção 1 - Classes, interfaces e pacotes

68 Unidade de estudo 5 Arquivos

69

Seção 1 - Visão geral

34

Seção 3 - Os três pilares da orientação a objetos

69

Seção 2 - Manipulando arquivos

34

Seção 4 - Estudo de caso: Tamagotchi com personalidade

76

Seção 3 - Estudo de caso: editor de texto

37

Seção 5 - Visibilidade

102 Seção 2 - Nomeando atributos e variáveis 103 Seção 3 - Métodos 103 Seção 4 - Endentação, comentários, blocos de código, espaços e linhas brancas

Finalizando

104

Referências

106

8

CURSOS TÉCNICOS SENAI

Conteúdo Formativo Carga horária da dedicação Carga horária: 150 horas

Competências Analisar e implementar os recursos avançados da programação orientada a objetos para solução de problemas computacionais.

Conhecimentos ▪▪ Orientação a objetos: classes, objetos e instâncias. ▪▪ Comentários. ▪▪ Composição, agregação. ▪▪ Construtores. ▪▪ Encapsulamento. ▪▪ Herança. ▪▪ Interface de desenvolvimento (IDE). ▪▪ Interfaces gráficas. ▪▪ Métodos e atributos. ▪▪ Padrões de desenvolvimento (frameworks). ▪▪ Padronização de código. ▪▪ Polimorfismo. ▪▪ Reutilização de códigos. ▪▪ APIs. ▪▪ Sobrecarga e sobrescrita de métodos e construtores.

Habilidades ▪▪ Aplicar os conceitos de orientação a objetos. ▪▪ Utilizar interfaces de desenvolvimento (IDE) de sistemas orientado a objetos. ▪▪ Utilizar os padrões de projeto em aplicações computacionais. ▪▪ Desenvolver aplicações para desktop.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

9

Atitudes ▪▪ Organização e zelo na utilização de equipamentos. ▪▪ Foco no conteúdo trabalhado. ▪▪ Acesso a sítios relacionados ao tema trabalhado. ▪▪ Organização e limpeza dos ambientes coletivos. ▪▪ Dedicação e empenho nas atividades curriculares e extracurriculares. ▪▪ Capacidade de abstração. ▪▪ Trabalho em equipe. ▪▪ Apresentação de novas soluções para situações problemas. ▪▪ Cumprimento de prazos. ▪▪ Análise crítica de suas produções.

10

CURSOS TÉCNICOS SENAI

Apresentação Bem-vindo à disciplina de Programação Orientada a Objeto II. Este material foi elaborado para facilitar o seu aperfeiçoamento neste importante paradigma de desenvolvimento de software. A Programação Orientada a Objetos tornou-se um padrão amplamente utilizado, principalmente por limitar a complexidade e permitir soluções elegantes para problemas complexos, características que você verificará no decorrer desta unidade curricular. O grande objetivo deste material é apresentar os conceitos de orientação a objetos na prática. Para isto, serão explorados detalhes da linguagem de programação Java. Esta linguagem consolidou-se e continua expandido o seu uso nos mais diversos projetos. Pela frente há grandes desafios que contribuirão no seu desenvolvimento profissional, e este material o ajudará nesta tarefa, portanto, dedique-se e supere-os! Agora é com você. Bons Estudos!

Diogo Vinícius Winck Bacharel em Ciências da Computação pela Universidade do Estado de Santa Catarina (UDESC), especialista em Redes de Computador e mestre em Ciências da Computação pela Universidade Federal de Santa Catarina (UFSC). Atua como líder técnico do time de Framework na TOTVS (Linha de Produtos Datasul), é Professor Universitário no SENAI Joinville. Em conjunto com Vicente Goetten, foi o autor do livro AspectJ - Programação Orientada a Aspectos com Java -, publicado pela editora Novatec. Atualmente, pesquisa e aplica metodologias ágeis e Lean Software em projetos WEB/RIA, na criação de frameworks e no desenvolvimento de ferramentas.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

11

Unidade de estudo 1 Seções de estudo Seção 1 - O que é Java? Seção 2 - Tipos de distribuições JAVA Seção 3 - Alô Senai! Seção 4 - O que aconteceu? Seção 5 - Variáveis Seção 6 - Tipos primitivos de dados Seção 7 - Casting e promoção Seção 8 - Operadores aritméticos Seção 9 - Controle de fluxo Seção 10 - Escopo de variável Seção 11 - Usando a documentação do Java

Java Básico SEÇÃO 1

O que é Java Em 1995, a Sun lançou uma linguagem de programação chamada Java. Ela foi fruto de um projeto iniciado em 1992 que não deu certo comercialmente. O sucesso inicial aconteceu com os applets, que eram brinquedos para web que, naquela época, era estática. Em 2009, a Sun foi adquirida pela Oracle. O Java se consolidou e, hoje, está presente nas mais variadas empresas, como IBM, Oracle e NASA. Mas por que esse sucesso? Porque o Java consegue lidar bem com problemas comuns das demais linguagens: portabilidade, gerenciamento de memória, custo de ferramenta. Além disso, atualmente, é possível encontrar configurações para o uso dessa linguagem, por exemplo: em servidores web, desktops ou dispositivos móveis. Afinal de contas, o que é o Java? O Java é:

▪▪ um framework/ambiente de execução presente em browsers, mainframes, sistemas operacionais (SO’s), celulares, palmtops, cartões inteligentes, eletrodomésticos.

▪▪ uma linguagem orientada a objetos;

▪▪ Javadoc: ferramenta para geração da documentação em HTML. ▪▪ Tecnologias de Deployment: Java Web Start e plug-ins para distri-

▪▪ uma coleção de APIs (classes,

componentes, frameworks) para o desenvolvimento de aplicações, distribuída gratuitamente por meio do site e neutra de plataforma;

O Java é uma linguagem de alto-nível que pode ser caracterizada como: simples, orientada a objetos, distribuída;

▪▪ multithreaded, dinâmica, portável; ▪▪ independente de arquitetura; ▪▪ de alto desempenho, robusta e segura. A plataforma Java é composta por:

▪▪ JVM: Java Virtual Machine ou Máquina Virtual Java, que é responsável pela execução dos programas. ▪▪ JRE: Java Runtime Environment ou Ambiente de Execução a Java, que é o pacote necessário para executar programas Java, composto pelas bibliotecas e JVM. ▪▪ JDK: Java Development Kit ou Kit de Desenvolvimento Java, que é o kit necessário para desenvolver aplicações, contendo a JRE e ferramentas, como, por exemplo, o compilador Java. Também compõem a plataforma, recursos como:

▪▪ NetBeans: ambiente de desenvolvimento de código aberto para aplicações JSE, JME e JEE.

buição de aplicações.

▪▪ User Interface Tookits: Java Foundation Classes, formado por Swing e

Java 2D(Awt).

▪▪ Integration Libraries: bibliotecas de integração, tais como, Java IDL, JDBC, JNDI, Java RMI e Java RMI-IIOP.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

13

Figura 1: Visão geral da plataforma Java Fonte: Adaptada de Oracle (2011)

As APIs (Application Programming Interface ou Interface de Programação de Aplicativos) Java mais conhecidas do JSE são:

▪▪ ▪▪ ▪▪ ▪▪ ▪▪ ▪▪ ▪▪ ▪▪

java.io – manipulação de arquivos; java.lang – classes básicas do Java; java.net – infraestrutura de software para rede; java.nio – definição de buffers; java.security – classes para segurança; java.text – textos, datas, números, mensagens; java.util – utilitários, coleções, datas etc; java.util.concurrent – programação concorrente.

A estrutura da linguagem é mantida por um processo chamado JCP (Java Community Process). Existem outras implementações dos padrões definidos pelo JCP, além da disponibilizada pelo Oracle, como: O JCP é um processo no qual, as partes interessadas na definição da plataforma Java ou de novas funcionalidades podem se envolver, respondendo aos JSRs (Java Specification Requests), sugerindo, por exemplo, melhorias.

Outra característica foi o desenvolvimento de uma cultura de partilha de informações – existem muitos grupos de usuários onde se compartilham informações. Além disso, são publicados, diariamente, na internet informações, artigos e tutorias.

14

CURSOS TÉCNICOS SENAI

Neutralidade de plataforma indica que qualquer programa desenvolvido pode executar sem modificações em diferentes plataformas de computação (exemplo: Linux, Windows etc.). Esta capacidade deve-se ao fato de que os programas são compilados para o um formato chamado bytecode. Este é utilizado pela máquina virtual Java, que interpreta as instruções. A figura a seguir, ilustra o funcionamento da linguagem.

Figura 2: Funcionamento e Distribuição do Java

Durante a execução, a API e a JVM (Java Virtual Machine ou Máquina Virtual Java) “isolam” o programa Java do sistema operacional, esta relação pode ser observado na figura a seguir.

A máquina virtual corresponde a um computador abstrato e, por conta desse modelo, é possível a sua construção por meio de hardware. Quando uma aplicação Java é executada em uma máquina comum, faz-se necessário uma implementação concreta dessa abstração e isso se torna disponível por meio da instalação e configuração do JRE. Durante a execução, cada aplicação Java (o bytecode) executa dentro da sua própria instância da JVM, permitindo um alto grau de isolamento e segurança. O código compilado no Java é portável entre versões diferentes da JVM, por isso, o desenvolvedor não precisa preocupar-se com detalhes da JVM no ambiente de execução. Uma instância (runtime) é criada quando a aplicação inicia e destruída quando a aplicação termina, isso implica, por exemplo, que três aplicações ao mesmo tempo, demandam três JVMs. As etapas de execução de um programa Java são: 1. Class Loader: esta é primeira atividade executada pela JVM, sendo responsável por carregar as classes necessárias para rodar a aplicação. A sequência da carga é: a. carrega as classes nativas do JRE – Java Runtime Environment (Ambiente de Execução Java em uma tradução livre). b. são carregadas as extensões do JRE, disponíveis, por exemplo, em $JAVA_HOME/jre/lib/ ext c. são carregadas as classes do sistema local, a ordem definida na variável de classpath define a precedência.

Figura 3: Execução de um programa Java

d. são carregadas as classes do sistema remotas, disponíveis, por exemplo, em um servidor.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

15

2. Bytecode Verifier: nesta etapa os Classes Javas (bytecodes) carregadas da dinamicamente/ intranet/internet são verificadas antes de serem executadas, pois o Class Loader considera as classes remotas potencialmente inseguras. Verifica-se, por exemplo, se o formato do arquivo recebido está correto ou se não há violações de segurança. 3. Execução: o programa é executado. 4. Garbage Collection: esta é a coleta de lixo. Durante a execução de um programa objetos são alocados. Quando estes deixam de ser necessários, precisam ser eliminados da memória, disponibilizando espaço que era utilizado por ele. Em linguagens como C++ e Pascal, o programador deve realizar essa tarefa. No Java, a responsabilidade está delegada ao Garbage Collector (coletor de lixo). Ele deve identificar, marcar e eliminar da memória objetos que não são mais referenciados de maneira válida.

▪▪ Java Standard Edition (JSE): voltada para desenvolvimento de aplicações cliente e composta pelas APIs básicas do Java. Disponibiliza, por exemplo, APIs para desenvolvimento de telas. ▪▪ Java Enterprise Edition (JEE): permite melhor componentização das aplicações. É utilizada para desenvolvimento de aplicações empresariais, como, por exemplo, comércio eletrônico. ▪▪ Java Micro Edition (JME): projetado para atender às necessidades de desenvolvimento para aplicativos móveis, como celulares. ▪▪ Java Card: fornece um ambiente seguro para que aplicações rodem

em smart cards e outros dispositivos com grande limitação de memória e de capacidade de processamento. Isso possibilita o uso de ferramentas de mercado para a criação das aplicações e as aplicações desenvolvidas podem ser executadas com segurança em cartões de diferentes fornecedores.

▪▪ Java TV: refere-se à JSR-927, que trata da especificação para TV digital.

SEÇÃO 3 Alô Senai!

A realização desta seção, e das próximas, depende de preparação do ambiente de trabalho, segundo a unidade de estudo 8 (Apêndice 1). A melhor forma de iniciar o entendimento, ou a relembrar como funciona uma linguagem, é por meio de exemplos simples. Nesta seção, será elaborado um primeiro programa: Alô Senai!, que irá imprimir uma linha simples no console: “Alô Senai!”. A realização dessa tarefa será feita no Netbeans. Estando ele aberto, deve-se criar um novo projeto chamado JavaBasico. Na figura a seguir, são detalhados os passos para fazer isso.

SEÇÃO 2

Tipos de distribuições JAVA A partir de 2009, a tecnologia Java passou por um amplo processo segmentação de sua atuação, principalmente, após a aquisição da Sun pela Oracle. Várias plataformas foram derivadas para necessidades específicas. Destacam-se algumas:

Figura 4: Novo projeto no NetBeans

16

CURSOS TÉCNICOS SENAI

Podem-se observar alguns pontos importantes no arquivo apresentando. Na figura 5, esses pontos são detalhados.

Figura 5: Exemplo de arquivo Java

O próximo passo é adicionar ao main, o seguinte trecho de código de modo, então o projeto ficará como na figura 6.

System.out.println(“Alo Senai!”);

Figura 6: Código fonte do programa AloSenai

PROGRAMAÇÃO ORIENTADA A OBJETOS II

17

Alguns pontos sobre este exemplo merecem destaque.

▪▪ O método main indica que a classe é um ponto de entrada de aplicação.

▪▪ public é um modificador de acesso (será visto na seção de Orientação a objetos). ▪▪ static é um modificador que indica que o método pertence a classe e não a uma instância.

▪▪ System é uma classe padrão e possui vários métodos úteis sobre a plataforma que está sendo executada, como E/S.

▪▪ // e /* */ são comentários. ▪▪ void é o valor de retorno do método. Quando um método não

retorna nenhum valor, uma espécie de valor vazio tem que ser especificado.

▪▪ String args [ ] é um vetor de strings que é formado quando são passados ou não argumentos por meio da linha de comando. ▪▪ System.out.println apresentada no console, a mensagem passada como parâmetro e entre aspas. Se for utilizado o System.out.print não será feita a quebra de linha no final da mensagem. O Netbeans torna a execução dos projetos criados de maneira bem simples. Na figura a seguir, pode-se observar como executar esse primeiro exemplo. Pode-se também ver o resultado da execução. Confira.

Figura 7: Resultado da execução

Alguns erros podem acontecer na execução, por descuido do desenvolvedor. É importante considerar algumas características da linguagem Java:

▪▪ ela diferencia letras maiúsculas de minúsculas (case-sensitive). Se o desenvolvedor escrever SYSTEM ao invés de System um erro será acusado;

▪▪ as linhas de comando finalizam com ; (ponto-e-vírgula); ▪▪ todo sinal de ‘abre chaves’ deve possuir um sinal de ‘fecha chaves’

correspondente.

18

CURSOS TÉCNICOS SENAI

SEÇÃO 4

O que aconteceu? Quando foi acionado o botão executar projeto, o NetBeans compilou o código Java, gerando um ByteCode. Além disto, iniciou a máquina virtual Java (JVM), indicando para ela onde estava o código recém gerado. A Máquina Virtual Java procurou no ByteCode por um método main. Este é utilizado como ponto de entrada das aplicações Java Desktop. Um esquema dessa execução já foi detalhado na figura 3. Durante a execução, a JVM identificou a chamada para o método println, presente no atributo out da classe System. O método println imprime, na saída padrão, a String passada por parâmetro. Nesse exemplo, a saída padrão era o console de execução e a String passada era “Alô Senai!”. Altere o exemplo adicionando ‘\n’ ao final de mensagem. Ele é um caractere especial de saída que informa ao sistema se a saída em tela terá alguma característica diferente, nesse caso será uma quebra de linha. Confira alguns caracteres especiais de saída que podem ser testados: \n \t \r \\ \ “

nova linha; tabulação; retorno do carro (impressora); barra inversa; aspas duplas.

Essa mesma operação poderia ser feita por meio do console do sistema operacional. Portanto, seria preciso utilizar o comando javac para compilar o programa. E o comando java instanciar a máquina virtual e executar o bytecode. No ambiente, o Windows ficaria da seguinte maneira:

C:\\javac AloSenai.java C:\\java AloSenai

SEÇÃO 5 Variável

Uma variável é uma região de memória capaz de reter e representar um valor ou expressão. Ela possui um identificador e um tipo de dado. O identificador é o nome dado a uma variável, método, atributo, interface ou classe. Na linguagem Java, as variáveis são fortemente tipadas. Isso indica que toda declaração de uma variável deve explicitar o tipo de dado que a variável poderá tratar.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

19

O tipo de dado especifica as operações que uma variável pode executar, os valores que pode conter, por exemplo, uma variável para armazenar a idade de um aluno pode ser do tipo inteira. Sendo inteira, ela armazena apenas números inteiros. A forma geral de declaração de variável é: tipoVariável identificadorVariável;

O desenvolvedor, que deseja declarar uma variável para armazenar os juros de um empréstimo, poderia fazer da seguinte forma: double juros;

São permitidas algumas variações. Veja: double juros = 0.05; //declaração com atribuição do valor double vlParcela, vlEmprestimo; //declaração de múltiplas variáveis

Na figura 8, é um exemplo de onde o desenvolvedor gostaria de calcular o valor de um empréstimo, utilizando juros simples, e exibir, no console, o resultado.

Figura 8: Cálculo da parcela de um empréstimo

20

CURSOS TÉCNICOS SENAI

O Java impõe regras na criação de identificadores (nome de variáveis). São elas:

▪▪ deve-se ter atenção quanto ao uso de letras maiúsculas e minúsculas; ▪▪ deve-se iniciar com: uma letra, o sinal de cifrão “$” ou com um

sinal de sublinhado “-“;

▪▪ pode-se utilizar caracteres Unicode e ter qualquer tamanho. Não

deve conter espaços;

▪▪ Não se deve utilizar as palavras reservadas, contidas na tabela a seguir. Tabela 1: Palavras reservadas do Java

▪▪ byte – representa um valor inteiro. Seu tamanho é 1 byte. Pode armazenar os valores de -128 a 127. O valor padrão para o byte é 0. Exemplo: byte semana = 0; ▪▪ short – representa um valor inteiro com 2 bytes de tamanho. Pode armazenar os valores de -32.768 a 32.768. O valor padrão para o short é 0. Exemplo: short dia = 0;

abstract

continue

for

New

switch

assert

default

goto

package

synchronized

boolean

do

if

private

this

break

double

implements

protected

throw

▪▪ int – representa um valor inteiro com 4 bytes de tamanho. Pode armazenar os valores de -2.147.483.648 a 2.147.483.647. O valor padrão para o int é 0. Exemplo: int idade = 30;

byte

else

import

public

throws

▪▪ long – representa um valor

case

enum

instanceof

return

transient

catch

extends

int

short

try

char

final

interface

static

void

class

finally

long

strictfp

volatile

const

float

native

super

while

Além dessas regras, existe uma convenção amplamente aceita pelos desenvolvedores da comunidade Java, que pode ser observada na unidade de estudo 9 (apêndice 2).

SEÇÃO 6

Tipos primitivos de dados Existem oito tipos de dados primitivos. Eles são chamados de primitivos, pois correspondem diretamente a regiões de memória e não ponteiros para objetos na memória. Confira:

▪▪ boolean – representa um valor lógico. Pode armazenar os valores

true ou false. O valor padrão para o boolean é false. Exemplo: boolean cancelou = false;

▪▪ char – representa qualquer caractere (Unicode) entre aspas simples.

Seu tamanho é 2 bytes. Pode armazenar valores entre ‘\u0000’ a ‘\ uFFFF’. O valor padrão para o char é ‘\u0000’. Exemplo: char sexo = ‘M’;

inteiro com 8 bytes de tamanho. Pode armazenar os valores de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. O valor padrão para o long é 0L. Exemplo: long inteiroGrande = 9.223.372.036.854.775.807L;

▪▪ float – representa um valor real com 4 bytes de tamanho, definido segundo a norma IEEE754. Pode armazenar valores entre 1.40129846432481707e-45 a 3.40282346638528860e+38. O valor padrão para o float é 0.0f. Exemplo: float pi = 3.14f; ▪▪ double – representa um valor

real com 8 bytes de tamanho, definido segundo a norma IEEE754. Pode armazenar valores entre 4.94065645841246544e-324 a 1.79769313486231570e+308. O valor padrão para o double é 0.0d. Exemplo: double estrelas = 1e40; double preco = 119.99; Nenhuma variável pode ser usada antes de ser inicializada. Mais exemplos de uso de variáveis podem ser observados na figura 9.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

21

Os tipos primitivos, por não serem objetos, não possuem operações que permitam realizar manipulações elaboradas, como, por exemplo, conversão para Strings. Essa deficiência foi suprida pela criação dos objetos Wrappers. Os objetos Wrapper correspondem ao objeto do tipo primitivo. Para cada tipo primitivo existe um wrapper. Confira na tabela a seguir. Tabela 2: Objetos Wrappers

Tipo primitivo Classe wrapper

Métodos de conversão String -> tipo

boolean

Boolean

Boolean.parseBoolean (String vl)

byte

Byte

Byte.parseBype(String vl)

char

Character

String.charAt(int pos)

double

Double

Double.parseDouble(String vl)

float

Float

Float.partFloat(String vl)

int

Integer

Integer.parseInt(String vl)

long

Long

Long.parseLong(String vl)

short

Short

Short.parseShort(String vl)

Os objetos wapper disponibilizam operações, como:

▪▪ ValueOf(): retorna o objeto wrapper criado; ▪▪ parseInt(), parseDouble() ou parseX() – de acordo com o wrapper

em questão: retorna o tipo primitivo nomeado;

▪▪ toString(): retorna a String com o valor do tipo primitivo encapsula-

do no objeto.

Figura 9: Exemplos de declaração e uso de variáveis

22

CURSOS TÉCNICOS SENAI

SEÇÃO 7

Promoção e casting Na seção anterior, pôde-se observar que cada tipo de variável possui um tamanho e um formato: algumas suportam caractere, outras suportam números inteiros ou reais. Por conta destas diferenças, deve-se tomar um pouco de cuidado ao atribuir variáveis de tipos diferentes. Quando se atribui uma variável, com tipos de dados mais restritos, para outra com tipo de dado mais amplo, isso é chamado de promoção. Nesses casos, não há preocupações: a JVM faz conversão automática. Por exemplo, atribuir, uma variável do tipo short (menor) para outra variável do tipo int (maior): não há problema! Alguns exemplos de promoção podem ser observados a seguir: byte short int long float double

var0 = 10; var1 = var0; var2 = var1; var3 = var2; var4 = var3; var5 = var4;

Há dois casos especiais: float, mesmo sendo menor em tamanho na memória que o long, pode receber valores de long, por conta do padrão que ele utiliza para armazenar. O segundo caso é o da promoção de char, que só pode ser feita para int (e superiores). Uma característica da promoção é que não há risco de perda de precisão, e, por isso, a JVM faz automaticamente. Entretanto, há casos onde é necessário igualar valores, mesmo que haja risco de perda de precisão. Nesses casos, a JVM não pode decidir pelo desenvolvedor e é necessário realizar um cast, caso ilustrado na figura 10. Pode-se, também, observar a mensagem dada pelo compilador.

Figura 10: Problemas de conversão

A mensagem de erro por incompatibilidade entre tipos de classes é apresentada da seguinte maneira:

Exception in thread “main” java.lang.RuntimeException: Uncompilable source code - possible loss of precision required: int found: double at Arredondamento.main(Arredondamento.java:13)

Nesse caso, e em situações similares, faz-se necessário, realizar um casting, indicando, explicitamente para a JVM, a conversão que deve ser feita. O tipo desejado é colocado entre parênteses e usado como um prefixo para a expressão que deve ser modificada. Na figura 11, pode-se observar o exemplo anterior corrigido de modo a utilizar o cast. Observe o formato padrão do casting.

tipoDado variavelDestino = (tipoDado) variavelOrigem;

PROGRAMAÇÃO ORIENTADA A OBJETOS II

23

Figura 11: Conversão utilizando cast

Na tabela a seguir, podem ser observados todos os possíveis casos de casts/promoções, presentes na linguagem Java. Nos casos em que aparece promo, significa que a conversão é automática. Nos demais, é apresentado o cast que deve ser utilizado. Tabela 3: Tabela de conversão

PARA

byte

short

char

int

long

float

double

byte

----

promo

(char)

promo

promo

promo

promo

short

(byte)

---

(char)

promo

promo

promo

promo

char

(byte)

(short)

---

promo

promo

promo

promo

int

(byte)

(short)

(char)

---

promo

promo

promo

long

(byte)

(short)

(char)

(int)

---

promo

promo

float

(byte)

(short)

(char)

(int)

(long)

----

promo

double

(byte)

(short)

(char)

(int)

(long)

(float)

----

DE

Fonte: adaptado de Caelum (2010)

24

CURSOS TÉCNICOS SENAI

SEÇÃO 8

Operadores aritméticos Você sabe quais são os operadores aritméticos disponibilizados pelo Java? Não? Então confira: Adição ‘+’. Exemplo: total = a + b; Subtração ‘– ‘. Exemplo: total = a – b; Multiplicação ‘*’. Exemplo: total = a * b; Divisão ‘/’. Exemplo: total = a / b; Módulo (resto de divisão inteira) ‘%’. Exemplo: total = a % b; Este operador pode ser usado, somente, quando ambos operandos são inteiros.

SEÇÃO 9

Controle de fluxo Agora que você já sabe quais são os operadores aritméticos, confira algumas informações sobre o controle de fluxo. O entendimento sobre a estrutura de execução de programas em Java está ligado à compreensão do conceito de bloco de código. Blocos de código delimitam conjuntos de comando, possibilitando tratar escopo de variáveis, sincronia entre processos e controlar exceções. Um bloco é delimitado por chaves { }.Observe um trecho de código, onde há dois blocos de código:

if( condição booleana ) { //código do if } else{ /* código do else. Importante observar que o bloco do else pode ser suprimido */ }

Os dois blocos de códigos do trecho apresentado, são:

▪▪ o primeiro vinculado ao if. ▪▪ o segundo vinculado ao else. O Java disponibiliza as seguintes estruturas de controle de fluxo:

▪▪ ▪▪ ▪▪ ▪▪ ▪▪

if-els; while; do-while; for; switch. PROGRAMAÇÃO ORIENTADA A OBJETOS II

25

If-else é a estrutura de testes. Dependendo da satisfação da condição declarada, executa um determinado bloco de código, senão, caso exista, é executado o bloco complementar. A sintaxe geral do if-else pode ser observada no quadro 1.10. Uma condição booleana é uma expressão que utiliza um conjunto de operadores relacionais (tabela 4) e/ou operadores lógicos (tabela 5). O seu resultado é um valor booleano. Os operadores relacionais são: Tabela 4: Operadores relacionais

Operador

Símbolo

Exemplo

Resultado

maior

>

A>B

Verdadeiro se A maior que B, senão, falso

menor

<

A=

A >= B

Verdadeiro se A maior ou igual a B, senão, falso

menor ou igual

>> < > = instanceof == != & ^ | && || ?: = += -= *= /= %= &= ^= |= = >>>=

Maior precedência

Menor precedência

O while é a estrutura de repetição, desviando o fluxo de um programa, de modo que repita um bloco de código, enquanto uma determinada condição booleana for verdadeira. A sintaxe geral do if-else pode ser observada a seguir.

while( condição booleana ) { //código }

Observe na figura a seguir, um programa que calcula os números da série de Fibonacchi menores que 100, sendo eles: { 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 e 89}.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

27

Figura 13: Exemplo de while – série de Fibonacci

Outra estrutura de repetição amplamente utilizada é o for. Essa estrutura deve ser usada, quando se deseja controlar a quantidade de vezes que serão executados um determinado bloco de código. O fluxo de um programa é desviado, de modo que repita um bloco de código, enquanto uma determinada condição booleana for verdadeira. A sintaxe geral do for pode ser observada a seguir.

for(inicialização, condição booleana, incremeto ) { //código }

Na figura 14, pode-se observar um programa que calcula os 10 primeiros números da série de Fibonacchi, dessa vez, utilizando um for.

28

CURSOS TÉCNICOS SENAI

Figura 14: Exemplo de for – série de Fibonacci

A linguagem Java permite controlar o fluxo de execução dos laços de repetição, utilizando as palavras-chave:

▪▪ break – interrompe a execução do laço, o fluxo continuará executando o próximo comando, após a estrutura. O break não consegue sair de todas as estruturas encadeadas, sendo necessário o uso de múltiplos breaks nesses casos; ▪▪ continue – faz com que seja interrompida a execução do bloco de

código, passando para próximo ciclo do laço. A estrutura de repetição continua sendo executada a partir do seu início.

SEÇÃO 10

Escopo de variável O escopo de uma variável é o alcance que uma variável possui, permitindo o seu acesso ou mesmo a sua existência. O escopo é definido pelos blocos de código, onde essa variável foi declarada, existe e pode ser acessada. Na figura 15, pode-se observar um exemplo de um problema relacionado a escopo. Nesse trecho de código é declarada uma variável em um bloco de código e o desenvolvedor tenta acessá-la em outro, ocasionando o problema. Duas variáveis são criadas: contaLacoInterno e contaLacoExterno.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

29

A variável contaLacoExterno possui o escopo mais amplo, sendo declarada no main. Ela pode ser utilizada em qualquer lugar no método após a sua criação.A variável contaLacoInterno possui seu escopo restrito ao bloco de código do while. Após o fechamento desse bloco, ela deixa de existir, sendo eliminada pelo Garbage Collector. Tentativas de acesso à ela, geram um erro de compilação.

Figura 15: Escopo de variável

SEÇÃO 11

Usando a documentação do Java A documentação da linguagem, ferramentas e API podem ser acessadas online no site da Oracle ou pode ser feito um download separado do SDK. Ela é composta por uma coleção de arquivos HTML, com as classes e métodos da linguagem Java. A documentação é hierárquica, de forma que a página inicial lista todos os pacotes como hyperlinks. Na figura 16, pode-se observar um exemplo de documento. Todo projeto pode ter sua documentação, gerada, automaticamente, nesse formato, por meio do uso da ferramenta javadoc. As páginas são estruturadas nos seguintes tópicos:

▪▪ ▪▪ ▪▪ ▪▪

30

CURSOS TÉCNICOS SENAI

a hierarquia da classe; uma descrição da classe e seu propósito geral; uma lista de variáveis associadas; uma lista de construtores;

▪▪ uma lista de métodos; ▪▪ uma lista detalhada de variáveis, com descrições do propósito e uso

de cada variável;

▪▪ uma lista detalhada de construtores, com descrições. ▪▪ uma lista detalhada de métodos, com descrições.

Figura 16: Exemplo de documentação

Nessa primeira unidade de estudos, você conheceu um pouco sobre Java, na próxima unidade, você irá revisar os conceitos de orientação a objetos e conhecer um estudo de caso. Prepare-se, vem muita coisa interessante pela frente!

PROGRAMAÇÃO ORIENTADA A OBJETOS II

31

Unidade de estudo 2 Seções de estudo Seção 1 – Orientação a objetos: classes, objetos e instâncias Seção 2 – Atributos, métodos, interface, estados e comportamento Seção 3 – Os três pilares da orientação a objetos Seção 4 – Estudo de caso: Tamagotchi com personalidade Seção 5 – Visibilidade Seção 6 – Estudo de caso: sistema de cliente Seção 7 – Javabeans

Revendo a orientação a objetos SEÇÃO 1

Orientação a objetos: classes, objetos e instâncias Aplicar o paradigma de desenvolvimento orientado a objeto exige o pleno conhecimento dos conceitos que envolvem a orientação a objetos (OO), por isso, é importante revisar os conceitos que a compõem. O termo orientação a objetos remete à tentativa de simular nos computadores, aquilo que o desenvolvedor percebe no mundo real. Procura-se trazer para o desenvolvimento da solução, os elementos presentes no problema, que se procura resolver na forma de abstrações. Uma abstração é uma simplificação concentrada nas características relevantes do elemento avaliado. Pode-se simplificar o esforço presente no Paradigma Orientado a Objeto (POO), no esforço realizado pelo desenvolvedor na procura por identificar as características de um problema, decompondo a solução em um conjunto de objetos definidos por classes. Um objeto é uma construção de software, que encapsula estado e comportamento, permitindo que se modele software em termos reais e abstratos. Podem ser de vários tipos, como entidades físicas: nota-fiscal, cliente, aluno etc.; abstratas: listas, pilhas, vetores, conexões etc. Não seria produtivo durante o desenvolvimento, codificar cada objeto isoladamente. Imagine, o desenvolvedor precisa criar um código para cada aluno de uma escola, ou funcionário de uma empresa. Por conta disso, os objetos são agrupados pelos seus métodos e atributos comuns, formando uma classe de objetos. As classes implementam as responsabilidades de um sistema. Nelas são definidos atributos e métodos. Elas são como formas, utilizadas para modelar os biscoitos. São utilizadas para definir a forma inicial, mas a partir do momento em que os biscoitos são retirados, passam a se diferenciar uns dos outros. Cada solução teria a necessidade de classes diferentes, por exemplo:

▪▪ um sistema de gerenciamento escolar teria classes como: Aluno, Professor, Contrato, Sala etc.; ▪▪ tratando-se de um sistema para controle de locadoras poderiam exis-

tir as classes: Cliente, Filme, Mídia etc.;

▪▪ no caso de um sistema de controle empresarial seriam necessárias classes como Funcionário, Gerente, Cliente, Setor, Item etc.

SEÇÃO 2

Atributos, métodos, interface, estados e comportamento Os atributos são características relevantes de uma classe de objetos para a solução de um problema, sobre os quais podem ser executadas ações. O estado de um objeto é determinado pelo conjunto dos valores dos atributos. Para evitar estados inválidos ou inconsistentes e acessos indevidos, os atributos devem ser apenas manipuláveis por operações do próprio objeto. Um comportamento é uma ação executada por um objeto em resposta a alguma mensagem ou mudança de estado. Ele é acionado pela execução de algum método. Entretanto, essa relação não é explícita, já que um mesmo comportamento pode ser realizado por vários métodos. Os métodos são operações (ações) explicitamente detalhadas e codificadas nas classes. O conjunto das operações públicas de um objeto forma a lista de serviços disponibilizados. A esse serviço é dado o nome de interface do objeto. Uma interface é um contrato com o mundo exterior, informando o que um objeto pode fazer, mas não sua implementação. Uma interface não possui implementação e não pode ser instanciada.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

33

Cada classe de solução teria a necessidade atributos diferente, por exemplo:

▪▪ em um sistema de gerenciamento escolar, a classe Aluno precisaria

de atributos como: nome, endereço, telefone, número da matrícula etc.

▪▪ num sistema para controle de locadoras, a classe Filme necessitaria de atributos como: nome, gênero, ano de lançamento etc. ▪▪ no caso de um sistema de controle empresarial, a classe funcionário precisaria de atributos como: nome, endereço, setor e etc. Na figura a seguir, você pode observar um diagrama que reúne todas as informações aprendidas até agora.

O polimorfismo é a capacidade de uma mesma referência, como, por exemplo, um ponteiro para objetos, representar implementações diferentes, sendo que a implementação é selecionada por algum mecanismo automático, assim, permite-se que um único nome expresse comportamentos diferentes, possibilitando a utilização de um mesmo nome de método em mais de uma classe e, ainda, assuma implementações diferentes em cada classe.

SEÇÃO 4

Estudo de caso: Tamagotchi com personalidade

Figura 17: Diagrama dos conceitos da orientação a objetos Fonte: Adaptado de Winck e Goetten (2006)

Tamagotchi é um brinquedo, lançado pela empresa Bandai(1996). O seu objetivo era criar um animal de estimação virtual. Normalmente, esse brinquedo era apresentado como um chaveiro.

SEÇÃO 3

Os três pilares da orientação a objetos A orientação a objetos está apoiada em três pilares essenciais: encapculamento, herança e polimorfismo. Veja um pouco mais sobre cada um deles. O encapsulamento é uma característica desejável na implementação de sistemas OO. Ele permite conhecer o que é feito, mas ignora-se o modo como é feito. Na OO, o encapsulamento é o pacote formado pelas operações e pelo conjunto de atributos de um objeto. Ele protege a estrutura interna de cada objeto contra a utilização arbitrária, que fuja dos objetivos propostos pelo projeto da classe. A herança é um mecanismo para reuso de código que possibilita a criação de uma classe baseada em outra previamente existente. A nova classe irá receber as características da classe-base, utilizando as partes comuns e especializando os pontos onde a classe derivada necessita de um comportamento mais específico.

34

CURSOS TÉCNICOS SENAI

Figura 18: Tamagotchi

Nele, eram reproduzidos vários comportamentos de um bicho de estimação real. O proprietário era obrigado, por exemplo, a alimentar, passear, medicar, brincar com seu companheiro virtual etc., caso não fosse cuidado, adequadamente, o bichinho poderia morrer. Inspirado nos Tamagotchi, este estudo de caso simulará apenas o humor de um animal de estimação.

Observe na figura a seguir, um diagrama de classes desse estudo de caso.

Figura 19: Figura 19: Diagrama de classes

Esse exercício depende da criação de novas entidades: Animal, Humor, Alegre, Agitado, Triste e Bravo. Como o desejo é tratar apenas o humor do animal de estimação, este, quando solicitado, irá se apresentar e indicar o seu humor. Tal comportamento será implementado por meio de um método, no caso, falar(). Veja o código da classe Animal:

public class Animal { private String nome = “”; private Humor humor; Animal(String nome){ this.nome = nome; } public Humor getHumor() { return humor; } public void setHumor(Humor humor) { this.humor = humor; } public String getNome() { return nome; } public void falar(){ System.out.println(“Oi! Meu nome é “+nome); System.out.println(“Hoje eu estou “+humor.toString()); } }

A classe Animal está associada à classe personalidade, que, por sua vez, possui quatro especializações: Agitado, Alegre, Bravo e Triste. No exemplo, a classe Animal não sabe detalhes (encapsulamento) sobre as classes especializadas de humor. Essa classe sabe que ao solicitar a operação toString (sobreposição/polimorfismo) da classe humor, receberá o texto correto.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

35

Na figura 19 você pôde ver o uso dessas classes. Os códigos das demais classes você confere a seguir.

Código fonte da classe Humor public class Humor { public String toString() { return “Normal”; } }

Código fonte da classe Agitado public class Agitado extends Humor{ public String toString() { return “Agitado”; } }

Código fonte da classe Alegre public class Alegre extends Humor{ public String toString() { return “Alegre”; } }

Código fonte da classe Bravo public class Bravo extends Humor{ public String toString() { return “Bravo”; } }

Código fonte da classe Triste public class Triste extends Humor{ public String toString() { return “Triste”; } }

36

CURSOS TÉCNICOS SENAI

Figura 20: Programação dos códigos e classes

SEÇÃO 5 Visibilidade

O encapsulamento só é garantido se a classe restringir o acesso direto a seus elementos. Um bom exemplo é uma classe que representa um carro. A velocidade do carro é resultado dos métodos acelerar/frear e não da alteração direta da propriedade velocidade.Na implementação, feita no Java da orientação a objetos, foram disponibilizados quatros tipos de visibilidade ou controles de acesso:

▪▪ public (público) - permite o acesso a todos os objetos; ▪▪ protected (protegido) – garante acesso à instância, ou seja, para

aquele objeto e para todas as subclasses;

▪▪ private (privado) – garante acesso apenas para a instância. ▪▪ default (pacote) – não é uma visibilidade padrão da orientação a ob-

jetos. Está disponível no Java e permite acesso a instâncias do mesmo pacote da classe.

PROGRAMAÇÃO ORIENTADA A OBJETOS II

37

Nenhum atributo de uma classe deve ser declarado como público, e acessado diretamente por um objeto externo, a menos que haja uma grande justificativa.

Os atributos devem possuir métodos de acesso get/set, possibilitando a sua manipulação controlada. Isto pode ser observado na classe Animal nos atributos nome e humor.

SEÇÃO 6

Estudo de caso: sistema de cliente Uma empresa necessita controlar seus clientes. O diretor comercial dessa empresa deseja ter acesso ao nome do cliente, telefone e endereço. Os clientes possuem um valor máximo para compra, se tentar comprar além do que o valor permitido, o sistema não deve impedir. Um cliente pode ser considerado especial, pois, ele não possui limite no valor de compras. Nesses casos, também, se deseja saber o nome da pessoa de contato e o telefone dela. Se um cliente estiver devendo, é importante que seja informado qual cliente está devendo. Um cliente devedor não pode fazer novas compras. Analisando o problema, modelou-se o digrama. Confira na figura a seguir.

Figura 21: Diagrama de classes para um sistema de controle de clientes

A classe Cliente possuirá os seguintes atributos: nome, telefone, endereco e limite de compras. Deve possuir um método que avalia se uma determinada compra pode ser feita. Observe o código da classe Cliente:

38

CURSOS TÉCNICOS SENAI

package org.senai.cliente; public class Cliente { private String nome; private String telefone; private String endereco; private double limiteCompras; public Cliente() { } public Cliente(String nome) { this.nome = nome; } public void setNome(String nome) { this.nome= nome; } public String getNome() { return nome; } public String getEndereco() { return endereco; } public void setEndereco(String endereço) { this.endereco = endereço; } public double getLimiteCompras() { return limiteCompras; } public void setLimiteCompras(double limiteCompras) { this.limiteCompras = limiteCompras; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } public boolean liberarCompra(double value){ return value
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF