Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
1
http://www.tiagodemelo.info
Linguagem de Programação IIIProf. Tiago Eugenio de Melo
Última atualização: 27/04/13 às 10:30:47.
2
http://www.tiagodemelo.info
Sumário Introdução à Programação Orientada a Objetos Introdução à Java Apresentação da IDE Eclipse Fundamentos da Linguagem Java Classes e objetos Encapsulamento GUI Manipulação de arquivos Associação de objetos
4
http://www.tiagodemelo.info
Introdução
Estruturação de software Sistemas de software modernos requerem um alto
grau de confiabilidade, disponibilidade e tolerância a falhas.
Sistemas de software são intrinsecamente complicados e têm se tornado ainda mais complicados com os novos requisitos impostos pelas aplicações modernas:
Alta confiabilidade. Alto desempenho. Desenvolvimento de software rápido e barato. Complexidade e tamanhos grandes.
5
http://www.tiagodemelo.info
Introdução A chave do sucesso para um promissor
desenvolvimento de software está no controle de sua complexidade.
Necessidade de melhores ferramentas e metodologias para gerenciar a complexidade.
Técnicas para redução da complexidade: Particionamento do sistema em partes que sejam
muito bem limitadas (modularidade). Representação do sistema como uma hierarquia. Maximização da independência entre as partes do
sistema (baixo acoplamento e alta coesão).
6
http://www.tiagodemelo.info
Introdução Na Crise de Software (1968) foi possível
identificar vários problemas na produção de software:
Pouco predizível. Baixa qualidade. Alto custo de manutenção. Muita duplicação de esforços.
Criação de diversas metodologias de desenvolvimento.
Surgimento do Paradigma Orientado a Objetos.
7
http://www.tiagodemelo.info
Introdução Objetos em software: ideias básicas
A característica mais importante (e diferente) da abordagem orientada a objetos é a unificação de dois elementos: dados e funções.
A unificação desses dois elementos deu origem ao que chamamos de encapsulamento.
Objeto = dados (privados) + funções (públicas)
8
http://www.tiagodemelo.info
Introdução Abstração de Dados
Uma das tarefas mais importantes em desenvolvimento de software é a análise do domínio do problema e a modelagem das entidades e fenômenos relevantes para a aplicação.
A abstração envolve três operações: Classificação/Instanciação. Generalização/Especialização. Agregação/Decomposição.
9
http://www.tiagodemelo.info
Introdução Classificação/Instanciação
Permite agrupar objetos similares em uma mesma categoria.
Exemplo
Empregado
João Maria
Cla
ssifi
caçã
o Instanc iação
10
http://www.tiagodemelo.info
Introdução Generalização/Especialização
A generalização permite que todas as instâncias de uma categoria específica sejam também consideradas instâncias de uma categoria mais abrangente.
O inverso não é necessariamente válido. Exemplo:
Empregado
Secretária EngenheiroMotorista Gen
era l
izaç
ão
Especia lização
11
http://www.tiagodemelo.info
Introdução Agregação/Decomposição
Agregação é uma abstração que permite a identificação das categorias constituintes de outras categorias.
Ela é um mecanismo que forma o todo a partir das partes. Exemplo:
Agr
ega ç
ão
Decom
p osição
12
http://www.tiagodemelo.info
Introdução Agregação vs Generalização
Agregação e generalização são noções completamente diferentes e complementares.
Elas são conceitos ortogonais. Nas hierarquias de generalização/especialização a
noção de herança está implicitamente representada, enquanto que nas hierarquias de agregação/decomposição isso nem sempre é verdade.
13
http://www.tiagodemelo.info
Introdução O modelo de objetos proporciona
modularidade, trazendo os seguintes benefícios:
Reusabilidade: software pode ser escrito a partir de componentes já existentes que podem ser usados em diversas aplicações.
Extensibilidade: novos componentes de software podem ser desenvolvidos a partir de componentes já existentes sem afetar os componentes originais.
14
http://www.tiagodemelo.info
Introdução Linguagens de Programação Orientadas a
Objetos Para transformar as abstrações do mundo
diretamente nas abstrações de uma linguagem de programação é necessária a passagem por passos intermediários.
Modelo OO da realidade
Realidade
Projeto OO
Código
15
http://www.tiagodemelo.info
Introdução Breve história da orientação a objetos:
1967 Simula 6719721976198319881995
Artigo de Dahl sobre ocultamento da informaçãoPrimeira versão de Smalltalk
Primeira versão de C++Primeira versão de EifelPrimeira versão de Java
16
http://www.tiagodemelo.info
Introdução Programação Orientada a Objetos
Programação orientada a objetos é um modelo de programação baseado em conceitos, tais como objetos, classes, tipos, ocultamento de informações, herança e polimorfismo.
A essência da programação orientada a objetos é a resolução de problemas baseada na identificação de objetos do mundo real pertencentes ao domínio da aplicação e o processamento requerido por esses objetos e, então, na criação de simulações deles.
17
http://www.tiagodemelo.info
Introdução Programação Orientada a Objetos
Características positivas: Modularidade. Suporte explícito para generalização/especialização. Visão unificada de dados e processos. Atividade incremental e evolucionária. Reusabilidade.
18
http://www.tiagodemelo.info
Introdução Muito do interesse no modelo de objetos é
devido à crescente percepção da indústria de software de que ele é uma maneira melhor de construir programas complexos, pois consegue promover a reutilização de software, melhorando a sua qualidade e reduzindo o seu custo de desenvolvimento.
19
http://www.tiagodemelo.info
Introdução Linguagens Orientadas a Objetos vs
Linguagens Baseadas em Objetos Uma linguagem é baseada em objetos quando ela
dá apoio explícito somente ao conceito de objetos. Uma linguagem é baseada em classes quando ela
dá apoio para a criação de objetos e existe um mecanismo de agrupamento de objetos para a criação de novas classes, mas não dá suporte para um mecanismo de herança.
JavaScript é um exemplo de linguagem baseada em objetos.
20
http://www.tiagodemelo.info
Introdução Uma linguagem é dita orientada a objetos
quando ela proporciona suporte linguístico para objetos, requer que esses objetos sejam instâncias de classes e, além disso, oferece suporte para um mecanismo de herança.
Resumindo:
Linguagem Orientada a Objetos = Objetos + Classes + Herança
21
http://www.tiagodemelo.info
Introdução Linguagens Orientadas a Objetos vs
Linguagens Procedurais C é um exemplo de linguagem que é orientada a
ações, enquanto Java é orientada a objetos. A unidade de programação em C é a
função/procedimento, enquanto que em Java é a classe.
No paradigma procedural usam-se os verbos para identificação dos requisitos, enquanto que no paradigma orientado a objetos usam-se os substantivos.
22
http://www.tiagodemelo.info
Introdução Comparação entre linguagens orientadas a
objetos e linguagens procedurais:
Paradigma Procedural Paradigma de Objetostipos de dados classes/tipos abstratos de dados
variável objeto/instânciafunção/procedimento operação/serviçochamada de função envio de mensagem
23
http://www.tiagodemelo.info
Introdução Erros comuns quando se conhece a Orientação
a Objetos Pensar na POO simplesmente como uma
linguagem Supor que se está programando de maneira
orientada a objetos simplesmente porque se está utilizando uma linguagem orientada a objetos.
Medo de reutilização Os programadores gostam de criar e muitas
vezes não consideram interessante reutilizar um componente.
Muitos programadores não confiam no software que não escreveram.
24
http://www.tiagodemelo.info
Introdução Erros comuns quando se conhece a Orientação
a Objetos Pensar na POO como uma solução para tudo
Apesar das vantagens da POO, existem situações em que não se deve usar a OO.
25
http://www.tiagodemelo.info
Objetos e classes Objetos
Um objeto é uma entidade que possui um estado que pode ser alterado ao longo do seu tempo de vida.
O seu estado interno pode ser alterado através do envio de mensagens.
O envio de uma mensagem por um objeto implica na execução de uma operação correspondente da interface pública do objeto recipiente.
A única maneira de outras comunidades se comunicarem com outros objetos é através do envio de mensagens.
26
http://www.tiagodemelo.info
Objetos e classes Portanto, um objeto encapsula (i) estado (dados) e
(ii) métodos (código) que podem acessar dados. Ilustração do conceito de objeto:
Objetos também possuem um comportamento bem definido e uma identidade que é única.
27
http://www.tiagodemelo.info
Objetos e classes O comportamento define como um objeto age e reage em
termos de suas mudanças de estado e passagem de mensagens.
Na teoria de tipos abstratos de dados, o termo comportamento é usado para denotar a interface abstrata (ou interface pública) de um objeto.
Operação é definida como sendo alguma ação que um objeto realiza sobre um outro objeto para elicitar uma reação.
Identidade é a propriedade de um objeto que o distingue dos demais objetos.
Em resumo, um objeto possui: (i) um estado, (ii) um comportamento bem definido e (iii) uma identidade única.
28
http://www.tiagodemelo.info
Objetos e classes Classes
Uma classe é uma descrição de um molde que especifica as propriedades e o comportamento de um conjunto de objetos similares.
Todo objeto é instância de apenas uma classe. Atributos são propriedades nomeadas de um objeto e que
armazenam os estados abstratos de cada objeto. Operações caracterizam o comportamento de um objeto e
são o único meio de acessar, manipular e modificar os atributos de um objeto.
Métodos são as implementações das operações que compõem a interface pública de um objeto.
29
http://www.tiagodemelo.info
Módulos e Pacotes Módulos/Pacotes agrupam as classes
relacionadas. Eles definem restrições de acesso do seu
conteúdo para clientes fora do módulo. Módulos utilizam o conceito de tipo abstrato de
dados (TAD), possuindo duas partes: Especificação. Implementação.
30
http://www.tiagodemelo.info
Encapsulamento É definido como sendo uma técnica para
minimizar as interdependências entre módulos programados independentemente, através de interfaces externas restritas.
Benefícios: Manutenção. Evolução do software.
31
http://www.tiagodemelo.info
Encapsulamento Existem quatro opções definidas:
Pública. Qualquer um dos três tipos de clientes pode fazer acesso, manipular e invocar diretamente atributos e métodos declarados como public.
Privada. Atributos e métodos declarados como private são acessíveis somente dentro da própria classe. Não estão disponíveis para clientes por instanciação, herança ou módulo.
Visível pela subclasse. Se um atributo ou método é declarado como protected, somente os clientes por herança têm acesso a eles.
Acesso ao Módulo/Pacote. Sem a especificação do controle de acesso, atributos e métodos são declarados como friendly.
32
http://www.tiagodemelo.info
Derivação das classes As classes podem ser derivadas de três
formas: Clientes por instanciação: são os que criam
instâncias da classe e manipulam essas instâncias através dos métodos.
Clientes por herança: são as subclasses que herdam os métodos e estrutura da classe.
Clientes por módulo: são as classes que estão dentro do mesmo módulo/pacote.
33
http://www.tiagodemelo.info
Herança O que é herança?
Mecanismo para derivar novas classes a partir de classes existentes através de um processo de refinamento.
Uma classe derivada herda a representação de dados e operações de sua classe base.
Além disso, pode adicionar novas operações, estender a representação de dados ou redefinir a implementação de métodos já existentes.
34
http://www.tiagodemelo.info
Herança Terminologia:
Classe derivada ou subclasse ou classe filha: é uma classe que herda parte dos seus atributos e métodos de outra classe.
Classe base ou superclasse ou classe pai: é uma classe a partir da qual classes novas podem ser derivadas.
Exemplo
35
http://www.tiagodemelo.info
Herança A herança é usada para a construção de:
Implementação. Comportamento.
36
http://www.tiagodemelo.info
Herança múltipla
A herança múltipla permite combinar diversas classes para produzir uma nova classe.
Quando uma classe herda de mais de um pai, existe a possibilidade de conflitos: operações e atributos com mesmo nome, mas com semânticas diferentes.
Exemplo:
37
http://www.tiagodemelo.info
Agregação versus Generalização O uso de heranças longas ou de herança
múltipla podem confundir programadores. Exemplo:
38
http://www.tiagodemelo.info
Herança A herança é uma forma de reutilização de software
em que novas classes são criadas a partir das classes existentes, absorvendo seus atributos e comportamentos e adicionando novos recursos que as novas classes exigem.
Em relação ao nível, a hierarquia pode ser realizada de dois modos:
Direta, em que uma subclasse herda explicitamente da superclasse, através da palavra-chave extends.
Indireta, em que uma subclasse herda de dois ou mais subníveis acima na hierarquia da classe (pacotes).
39
http://www.tiagodemelo.info
Herança O ocultamento de informações é mantido através do
controle de acesso, com o uso da palavra private.
A subclasse pode, entretanto, acessar os membros public e protected de sua superclasse.
A subclasse também pode usar os membros com acesso de pacote de sua superclasse se a subclasse e a superclasse estiverem no mesmo pacote.
Quando um método de subclasse sobrescreve um método de uma superclasse, o método de superclasse pode ser acessado a partir da subclasse que precede o nome do método de superclasse com a palavra-chave super, seguida pelo operador ponto (.).
40
http://www.tiagodemelo.info
Herança Membros de classe definidos como final possuem valor
fixo e podem ser usados fora da classe. Assim, sendo recomenda-se que sejam declarados como public.
O objeto de uma subclasse pode ser tratado como um objeto de sua superclasse, mas o contrário não é necessariamente verdadeiro.
Assim como o projetista de sistemas não-orientados a objetos deve evitar a proliferação desnecessária de funções, o projetista de sistemas orientados a objetos deve evitar a proliferação desnecessária de classes.
A proliferação pode classes cria problemas de gerenciamento e pode impedir a reutilização de softwares.
41
http://www.tiagodemelo.info
Polimorfismo O que é polimorfismo?
Significa que variáveis podem referenciar mais do que um tipo.
Não é um conceito novo e várias linguagens de programação aplicam.
Funções são polimórficas quando seus operandos (parâmetros atuais) podem ter mais do que um tipo.
Tipos são ditos polimórficos se suas operações podem ser aplicadas a operandos de mais de um tipo.
42
http://www.tiagodemelo.info
Acoplamento dinâmico O que é acoplamento?
Acoplamento é uma associação possivelmente entre um atributo e uma entidade.
Exemplo: Variáveis são entidades de programas e seus atributos
são seu nome, seu tipo e sua área de armazenamento.
43
http://www.tiagodemelo.info
Acoplamento dinâmico Um acoplamento pode ser estático ou
dinâmico. Um acoplamento é estático ou adiantado se
ocorre antes do tempo de execução e permanece inalterado durante a execução do programa.
Um acoplamento é dinâmico ou atrasado se ocorre durante o tempo de execução e muda no curso da execução do programa.
A maior vantagem do acoplamento dinâmico é que as associações podem ser alteradas em tempo de execução.
44
http://www.tiagodemelo.info
Acoplamento dinâmico Em programação orientada a objetos, temos o
uso de verificação estática de tipos associada com acoplamento dinâmico.
O acoplamento dinâmico é usado para a associação do nome de uma operação à sua implementação.
Essa associação é decidida apenas em tempo de execução, pois a implementação a ser executada depende do tipo do objeto que recebe a mensagem.
45
http://www.tiagodemelo.info
Acomplamento dinâmico Exemplo de Python:
46
http://www.tiagodemelo.info
Acoplamento dinâmico Classes Abstratas vs. Classes Concretas
Uma classe abstrata é uma classe que não tem instâncias diretas, mas cujas classes descendentes têm instâncias diretas.
Uma classe concreta é uma classe que pode ser instanciada.
Existem duas ideias principais envolvidas com a noção de classe abstrata:
Presença de operações abstratas. Habilidade de criar instâncias.
47
http://www.tiagodemelo.info
Acoplamento dinâmico Classes Abstratas vs. Classes Concretas
Se uma classe contém operações abstratas então a classe não pode ser instanciada porque se um objeto for criado, ele não será capaz de responder a todas as mensagens.
Portanto, a presença de uma operação abstrata implica na inabilidade de instanciar objetos.
Entretanto o contrário não é verdadeiro.
48
http://www.tiagodemelo.info
Acoplamento dinâmico O que é delegação?
Mecanismo parecido com o de herança, mas que opera diretamente entre objetos.
Exemplos de linguagens de programação: Self. Actor.
Neste modelo, os objeto são vistos como protótipos ou exemplares que delegam seu comportamento para objetos relacionados chamados delegados.
Um relacionamento delaga-para pode ser estabelecido dinamicamente.
49
http://www.tiagodemelo.info
Pacotes Introdução
À medida que os aplicativos se tornam mais complexos, os pacotes ajudam os programadores a administrar a complexidade dos componentes.
Os pacotes também facilitam a reutilização de software, permitindo que os programas importem classes de outros pacotes.
Outro benefício dos pacotes é que eles fornecem uma convenção para nomes de classe únicos. Isto evita os conflitos de nomes de classes desenvolvidas por programadores diferentes.
50
http://www.tiagodemelo.info
Pacotes Passos para criação de uma classe reutilizável:
Definir uma classe public. Se a classe não for public, ela pode ser utilizada somente por outras classes no mesmo pacote.
Escolher um nome de pacote e adicionar uma instrução package ao arquivo do código-fonte para a definição da classe reutilizável.
Compilar a classe de modo que ela seja colocada na estrutura de diretórios de pacotes apropriada.
Importar a classe reutilizável para dentro de um programa e utilizar a classe.
51
http://www.tiagodemelo.info
Construtores Quando um objeto é criado, seus membros podem ser
inicializados por um método construtor.
O construtor é um método com o mesmo nome que a classe.
As variáveis podem ser inicializadas de três formas:
1.Com seus valores default (Java):• 0 para valores numéricos.• False para valores lógicos.• Null para referências.
2.Em um construtor da classe.
3.Ou seus valores podem ser configurados mais tarde, depois que o objeto for criado.
52
http://www.tiagodemelo.info
Construtores Os construtores nunca são herdados – eles são
específicos para a classe em que são definidos.
Quando um objeto de uma subclasse é instanciado, o construtor da superclasse deve ser chamado para fazer qualquer inicialização necessária das variáveis de instância da superclasse do objeto de subclasse.
Uma chamada explícita ao construtor de superclasse (através da referência super) pode ser fornecida como a primeira instrução no construtor de subclasse.
Caso contrário, o construtor de subclasse chamará o construtor default da superclasse ou o construtor sem argumentos implicitamente.
53
http://www.tiagodemelo.info
Construtores Métodos que fazem a interface externa de uma classe
devem ser declarados como public, sendo herdados pelas sub-classes.
Variáveis devem ser private.
Se tiver o objetivo de que a classe seja usada como super-classe por outras pessoas, deve-se manter as variáveis como private e prover métodos de acesso e manipulação como public. Controla-se assim a manipulação da classe base por parte da classe derivada.
Usamos o atributo protected quando definimos classes dentro de um package e desejamos dar ao usuário do pacote acesso apenas às sub-classes.
55
http://www.tiagodemelo.info
História do Java No ano de 1992, a Sun Microsystems formou
uma equipe para desenvolver inovações tecnológicas.
Essa equipe foi liderada por James Gosling.
56
http://www.tiagodemelo.info
História do Java A ideia era criar um interpretador para
pequenos dispositivos, facilitando a reescrita de software para aparelhos eletrônicos.
O projeto resultou na criação de uma linguagem conhecida como Oak (baseada em C e C++).
57
http://www.tiagodemelo.info
História do Java O nome Java surgiu como uma referência a
uma cafeteria local, cujo café vinha de uma ilha da Indonésia de mesmo nome.
Em 1993, a Sun aposta no potencial da linguagem para uso na WEB, com o chamado conteúdo dinâmico.
58
http://www.tiagodemelo.info
História do Java Em 1994, foi construído um navegador
chamado HotJava. Em maio de 1995, a Sun anunciou o
lançamento oficial da linguagem Java. Em janeiro de 1996, a Netscape decide dar
suporte a Java. Nesse mesmo ano, foi disponibilizada a
primeira versão da linguagem (JDK 1.0).
59
http://www.tiagodemelo.info
O que é Java? Um conjunto de especificações. Uma linguagem de programação. Um conjunto de Application Programming
Interface (APIs). Máquina virtual.
60
http://www.tiagodemelo.info
Características de Java Simplicidade
Pode ser utilizada sem larga experiência ou treinamento intenso.
Programadores de C e C++ terão uma familiaridade com Java.
61
http://www.tiagodemelo.info
Características de Java Orientada a objetos
Java é uma linguagem de programação orientada a objetos (pura).
Tudo em Java são classes ou instâncias de classes.
Sem ponteiros Java não possui ponteiros, isto é, Java não permite
a manipulação direta de endereços de memória.
Distribuída Java suporta aplicações do tipo cliente/servidor
(java.net.package).
62
http://www.tiagodemelo.info
Características de Java Robusta
Java é uma linguagem fortemente tipada. Requer declaração explícita de métodos. Não suporta ponteiros, eliminando a possibilidade
de invasões de área e manipulação errônea com aritmética de ponteiros.
63
http://www.tiagodemelo.info
Características de Java Coletor de lixo (garbage collector)
Mecanismo automático de gerenciamento de memória.
Permite multithreading São recursos que permitem ao desenvolvedor criar
programas capazes de executar múltiplas rotinas concorrentemente.
Independência de plataforma Programas em Java são compilados para uma
forma intermediária (bytecodes).
64
http://www.tiagodemelo.info
Características de Java Tratamento de exceções
Permite o tratamento de situações excepcionais. Possui exceções embutidas e permite a criação de
novas exceções.
Segurança Pode executar programas via rede com restrições
de execução, além de itens específicos da linguagem, como ser fortemente tipada, ter assinaturas digitais em suas classes compiladas, etc.
65
http://www.tiagodemelo.info
Características de Java Máquina virtual Java
Utiliza o conceito de máquina virtual. Camada responsável por interpretar os bytecodes.
66
http://www.tiagodemelo.info
Características de Java Pode ser utilizada com diversas finalidades:
java.applet Appletsjava.awt Graphics, window, GUIjava.awt.datatransfer Data transfer (copy,paste)java.awt.event Eventsjava.awt.image Image (jpg, gif)java.awt.peer GUI for platform independencejava.beans JavaBeansjava.io input outputjava.lang Core languagejava.lang.reflect Reflectionjava.math Arithmeticjava.net Networkingjava.rmi +3 Remote Method Invocationjava.security +2 Securityjava.sql JDBC Sql for Databasesjava.text Internationalizationjava.util Data typesjava.util.zip Compression
67
http://www.tiagodemelo.info
Processo de criação de programas em Java
Criação de programas em duas etapas:
68
http://www.tiagodemelo.info
Processo de criação de programas em Java
Como é possível rodar o mesmo programas em arquiteturas diferentes (multiplataforma)?
69
http://www.tiagodemelo.info
Slogan de Java
Write once, run anywhere!
70
http://www.tiagodemelo.info
Plataformas Java A linguagem Java conta com três ambientes de
desenvolvimento: JSE (Java Platform, Standard Edition): é a base
da plataforma. Inclui o ambiente de execução e as bibliotecas comuns são voltadas para PCs e servidores.
JEE (Java Platform, Enterprise Edition): a edição voltada para o desenvolvimento de aplicações corporativas e para a Internet.
JME (Java Platform, Micro Edition): a edição para o desenvolvimento de aplicações para dispositivos móveis e embarcados.
71
http://www.tiagodemelo.info
Plataformas Java Além dessas, existem outras plataformas:
Java Card: voltada para dispositivos embarcados com limitações de processamento e armazenamento, como smart cards.
JavaFX: plataforma para desenvolvimento de aplicações multimídia em desktop/web (JavaFX Script) e dispositivos móveis (JavaFX Mobile).
72
http://www.tiagodemelo.info
Componentes de uma plataforma Java
JRE (Java Runtime Environment) É composta de uma JVM e por um conjunto de
bibliotecas que permite a execução de softwares em Java.
Apenas permite a execução de programas, ou seja, é necessário o programa Java compilado (.class).
73
http://www.tiagodemelo.info
Componentes de uma plataforma Java
JDK (Java Development Kit) É composto por um compilador (javac) e JVM. Visualizador de applets, bibliotecas de
desenvolvimento. Programa de composição de documentação
(javadoc). Depurador básico de programas (jdb) e a versão
runtime do ambiente de execução (JRE).
75
http://www.tiagodemelo.info
Eclipse Eclipse é um ambiente integrado de
desenvolvimento (IDE – Integrated Development Environment).
É uma ferramenta multilinguagem É possível desenvolver aplicativos em diversas
linguagens como Java, PHP, Python, C/C++, entre outras.
É uma ferramenta multiplataforma. É uma IDE para escrever, editar, compilar e
executar programas.
76
http://www.tiagodemelo.info
Eclipse O Eclipse é formado por um conjunto de
plugins É possível criar diagramas UML e gerar código a
partir dos modelos de dados. É possível fazer controle de versões de software
(SVN, CVS, Clear Case, entre outros). Integrar com servidores WEB (Apache, IIS, entre
outros) e de aplicação (Jboss, WebLogic, entre outros).
É possível trabalhar com interfaces gráficas (Java Swing).
77
http://www.tiagodemelo.info
Eclipse O Eclipse foi desenvolvido e é mantido pela
IBM. O Eclipse é software livre. Em suma, é uma ferramenta adequada para
desenvolvimento de software com diferentes finalidades.
78
http://www.tiagodemelo.info
Pontos positivos Ferramenta livre. Ferramenta gratuita. Vasta quantidade de plugins. Boa performance. Grande comunidade de usuários. Facilidade de instalação dos plugins.
79
http://www.tiagodemelo.info
Instalação Requisitos
Máquina virtual Java. Download Eclipse.
Referências http://www.eclipse.org/downloads
81
http://www.tiagodemelo.info
Conceitos básicos Workbench
Janela principal do Eclipse. Função: permitir que o usuário trabalhe com
projetos.
Visões São janelas apresentadas pelo workbench.
Perspectiva É um conjunto de visões agrupadas de maneira
pré-ordenada. Uma perspectiva exibe diversos pontos de vista de
um mesmo projeto.
82
http://www.tiagodemelo.info
Conceitos básicos Workspace
Diretório que serve como repositório de projetos. O Eclipse identifica um workspace por meio de um
diretório.
Projeto Eclipse Um projeto Eclipse é um subdiretório dentro do
workspace que possui um arquivo chamado .project.
Um projeto Eclipse é independente do sistema operacional.
86
http://www.tiagodemelo.info
Conceitos básicos Criação de um projeto Java
87
http://www.tiagodemelo.info
Conceitos básicos Criação de uma classe em Java
88
http://www.tiagodemelo.info
Conceitos básicos Criação de um primeiro programa
89
http://www.tiagodemelo.info
Conceitos básicos Criação de um primeiro programa
91
http://www.tiagodemelo.info
Fundamentos Processo de criação de um programa em Java
92
http://www.tiagodemelo.info
Fundamentos Características básicas
Comentários Classes Método principal
93
http://www.tiagodemelo.info
Fundamentos Características básicas
Uso de documentação Javadoc /** */
Java é case sensitive
94
http://www.tiagodemelo.info
Fundamentos Características básicas
A extensão do arquivo é .java A classe pública deve ter o mesmo nome do
arquivo. Método main.
98
http://www.tiagodemelo.info
Fundamentos Declaração de variáveis
Declaração de constantes Uso do modificador final.
Exemplo: final int a;
99
http://www.tiagodemelo.info
Fundamentos Leitura de valores a partir do teclado
108
http://www.tiagodemelo.info
Fundamentos Strings
String não é um tipo primitivo de Java. String também não é um array. String define um objeto. A declaração é convencional.
110
http://www.tiagodemelo.info
Classes e Objetos A Programação Orientada a Objetos (POO) é
uma técnica de programação que se baseia na construção de classes e utilização de objetos.
Os objetos são formados por dados e operações específicas, que delimitam um conjunto particular de atividades.
111
http://www.tiagodemelo.info
Classes e Objetos As classes são modelos para os objetos. Um conjunto de objetos que possuem
características (atributos) e comportamentos (métodos) comuns podem usar o mesmo modelo, ou seja, pertencem a mesma classe.
112
http://www.tiagodemelo.info
Classes e Objetos Assim, uma classe é um modelo para um novo
tipo de objeto que pode ser definido pelo programador. Já os objetos são instâncias de classes.
Dessa forma, pode-se afirmar que as classes são utilizadas para definir novos tipos na POO.
113
http://www.tiagodemelo.info
Classes e Objetos Sintaxe de classe em Java
114
http://www.tiagodemelo.info
Classes e Objetos A sintaxe da criação de um objeto é:
115
http://www.tiagodemelo.info
Classes e Objetos Aquela sentença realiza três ações:
Declaração. Nesta ação, apenas se declara que um objeto será de uma determinada classe declarada, ou seja, declarações não criam objetos. Por exemplo, o comando Pessoa obj apenas declara que obj pertencerá à classe Pessoa, porém o objeto não foi criado e, conseqüentemente, não poderá ser usado antes de ser inicializado.
Instanciação. Nesta ação, o operador new cria dinamicamente um novo objeto. Ele requer uma chamada a um construtor, que é um método especial e que será detalhado na seção sobre métodos.
116
http://www.tiagodemelo.info
Classes e Objetos Inicialização. Após ter sido criado, é necessário
inicializar o objeto. O processo de inicialização consiste em atribuir valores para os atributos dos objetos. Isto é realizado durante a execução do construtor.
117
http://www.tiagodemelo.info
Classes e Objetos Acessibilidade
Acessibilidade, também conhecida como visibilidade, é um aspecto importante na POO, pois possibilita que o programador limite o uso de certos elementos das classes.
É com a restrição de acesso que se implementa, em grande parte, o encapsulamento das classes.
Java possui três moderadores de acesso explícitos (public, private e protected) e um especificador implícito (default).
118
http://www.tiagodemelo.info
Classes e objetos Vetor de objetos
Inicialmente, devemos lembrar alguns aspectos sobre a criação de vetores em Java:
int [ ] idades; int [ ] é um tipo. Um array é sempre um objeto, portanto, a
variável idades é uma referência. É necessário criar um objeto para usar um array. idades = new int [10];
119
http://www.tiagodemelo.info
Classes e objetos Vetor de objetos
Quando criamos um array de alguma classe, ela possui referências.
O objeto, como sempre, está na memória principal e, no seu array, só ficam guardadas as referências (endereços).
No exemplo abaixo, quantas contas foram criadas?
Nenhuma, pois, na verdade, foram criados 10 espaços que o programador pode utilizar para guardar uma referência a uma Conta.
120
http://www.tiagodemelo.info
Classes e objetos Vetor de objetos
No exemplo anterior, para se usar o vetor Conta[ ] é necessário preenchê-lo antes.
ou diretamente:
122
http://www.tiagodemelo.info
Classes e objetos Devemos lembrar:
Um array de tipos primitivos guarda valores, um array de objetos guarda referências.
A partir do momento que um array foi criado, ele não pode mudar de tamanho.
123
http://www.tiagodemelo.info
Classes abstratas Uma classe em Java criada para funcionar
como um tipo e que pode instanciar objetos é considerada concreta.
Diferentemente disto, uma classe em Java será considerada como abstrata se for assim declarada ou nas situações em que os seus métodos declarados não estão implementados, mas são apenas especificados.
124
http://www.tiagodemelo.info
Classes abstratas Métodos que não possuem implementação
também são chamados de abstratos. Classes que possuam métodos abstratos são
consideradas também como abstratas e não podem ser instanciadas.
125
http://www.tiagodemelo.info
Classes abstratas Hipóteses em que uma classe Exemplo será
abstrata: Se a classe Exemplo possuir explicitamente, pelo
menos, um método abstrato. Se qualquer superclasse de Exemplo possuir um
método abstrato e a classe Exemplo não implementá-lo.
Se a classe Exemplo declarar ou herdar um método abstrato de uma interface e a classe Exemplo não implementá-lo.
126
http://www.tiagodemelo.info
Classes abstratas Sintaxe de uma classe abstrata
Sintaxe de um método abstrato
129
http://www.tiagodemelo.info
Classes internas Classes internas ou aninhadas são classes
declaradas dentro de outras classes, sendo consideradas como membros das classes externas.
O uso mais comum das classes internas é para lidar com eventos.
Os objetos das classes internas são associados aos objetos das classes externas.
Para criar um objeto de uma classe interna é necessário criar primeiro um objeto da classe externa.
131
http://www.tiagodemelo.info
Classes internas Uma classe interna tem acesso total aos
campos e métodos da classe que a envolve, incluindo aqueles de acesso privado.
De acordo com a Sun, isto não quebra o conceito de acesso privado, já que a classe aninhada também pertence à classe que a envolve.
132
http://www.tiagodemelo.info
Classes internas As classes aninhadas são elementos auxiliares
e somente devem ser criadas quando sua implementação se limita a dois ou três métodos simples.
Riscos Aumenta significativamente a complexidade do
código. Dificulta o trabalho de depuração (erros de
compilador são mais confusos em classes internas).
133
http://www.tiagodemelo.info
Classes finais Uma classe pode ser declarada como final se a
sua definição está completa e não se deseja que ela seja estendida.
Um erro de compilação ocorrerá se uma classe herdar de outra classe, quando esta for declarada como final.
Daí, pode-se afirmar que uma classe final não poderá ter subclasses.
134
http://www.tiagodemelo.info
Classes finais A sintaxe de criação de uma classe final é:
135
http://www.tiagodemelo.info
Classes anônimas Classe anônima é uma classe sem nome e
definida como uma subclasse ou para a realização de uma interface, com o propósito de servir para a instanciação de um único objeto.
Como as classes anônimas em Java comprometem a legibilidade do código, estas não devem ser usadas quando for necessário implementar mais do que dois ou três métodos de modo simples.
Assim, este tipo de classe será examinada com maior profundidade no assunto de herança.
136
http://www.tiagodemelo.info
Atributos As características dos objetos ou das suas
partes são identificadas através dos seus atributos ou campos.
A sintaxe da criação de atributos é:
137
http://www.tiagodemelo.info
Constantes Um atributo pode se tornar uma constante em
Java através do comando final.
Opcionalmente, é possível adicionar um moderador de acesso à constante em Java, com o objetivo de determinar o escopo dessa constante.
138
http://www.tiagodemelo.info
Constantes A sintaxe da declaração de constantes em
Java é:
139
http://www.tiagodemelo.info
Métodos Os métodos são blocos de rotinas associadas
aos objetos, isto é, trechos de código que permitem realizar ações ou transformações sobre os valores dos atributos, modificando o estado dos objetos e proporcionando o comportamento desejado.
140
http://www.tiagodemelo.info
Métodos A sintaxe de Java para a criação de métodos é:
O moderador de acesso determina a visibilidade do método.
Em geral, os métodos são públicos para que as outras classes possam acessar os atributos privados.
141
http://www.tiagodemelo.info
Métodos O tipo de retorno indica qual o tipo de valor
devolvido como resultado do método. Se o método não retornar um valor, deve-se
utilizar void para indicar, ao compilador, que não existirá retorno.
142
http://www.tiagodemelo.info
Métodos Exemplos de declaração de métodos:
143
http://www.tiagodemelo.info
Métodos Após a instanciação de um objeto, este pode
utilizar os seus métodos através do operador (.), também conhecido como seletor.
A sintaxe de Java para uso de métodos pelos objetos é:
145
http://www.tiagodemelo.info
Métodos construtores Construtores são métodos especiais utilizados
para inicializar e preparar novos objetos durante a sua criação.
Não existe um comando especial para diferenciar os construtores dos demais métodos. Porém, eles têm, obrigatoriamente, o mesmo nome que as suas classes.
Os construtores não têm nenhum tipo de retorno, pois o resultado de sua chamada é sempre uma nova instância.
146
http://www.tiagodemelo.info
Métodos construtores Uma classe pode conter mais de um
construtor, desde que não haja construtor com igual lista de parâmetros, ou seja, com igual assinatura do método.
Java não exige que o programador escreva construtores para as classes.
147
http://www.tiagodemelo.info
Métodos construtores A inicialização padrão de Java segue as
seguintes regras: Variáveis de tipo primitivo numéricas e caracteres
recebem o valor 0 (zero). Variáveis de tipo lógico recebem valor falso
(false).
Variáveis de instância recebem valor null, indicando a ausência de instâncias válidas.
149
http://www.tiagodemelo.info
Métodos construtores Operador this:
O operador this é utilizado para que um objeto possa acessar uma referência a si próprio.
Quando um método não estático é chamado por um objeto particular, o corpo do método utiliza implicitamente o operador this para referenciar as variáveis de instância do objeto e de outros métodos.
150
http://www.tiagodemelo.info
Métodos construtores Exemplo de uso do comando this:
151
http://www.tiagodemelo.info
Sobrecarga de métodos A sobrecarga de métodos (overload) é uma útil
característica da programação orientada a objetos que permite a existência de dois ou mais métodos com o mesmo nome, desde que possuam listas de parâmetros diferentes.
O compilador deve escolher qual método chamar.
Vários métodos podem ser sobrecarregados numa mesma classe.
152
http://www.tiagodemelo.info
Sobrecarga de métodos O benefício deste recurso para o programador
é que ele pode manter o mesmo nome para operações similares, mesmo com comportamentos distintos, conseguindo melhorar a semântica do código e simplificar o uso das classes.
153
http://www.tiagodemelo.info
Sobrecarga de métodos Exemplo de uso de métodos sobrecarregados:
154
http://www.tiagodemelo.info
Métodos sobrescritos Quando uma classe é herdada por outra, todos
os seus métodos não privados são herdados. Porém, existem algumas situações que se
deseja alterar o comportamento de alguns desses métodos herdados.
Isto é realizado através da redefinição dos métodos da superclasse, a partir de sua reescrita, definindo-os com os mesmos nomes e com a mesma lista de parâmetros.
155
http://www.tiagodemelo.info
Métodos sobrescritos Dessa forma, a chamada a um método
sobrescrito, a partir de um objeto instância da subclasse executará o comportamento redefinido pela subclasse e não mais o definido pela superclasse.
Se o objeto for instância da superclasse, o método executará o comportamento definido na própria superclasse.
156
http://www.tiagodemelo.info
Métodos estáticos Existem algumas situações em que é desejável
que as várias instâncias de uma classe compartilhem alguma informação, tal como o valor de uma constante, um número de identificação, contagem ou totalização.
Esse efeito pode ser obtido com o emprego do modificador static.
157
http://www.tiagodemelo.info
Métodos estáticos A sintaxe de Java para uso de métodos
estáticos é:
158
http://www.tiagodemelo.info
Métodos estáticos Exemplo de uso de métodos estáticos
159
http://www.tiagodemelo.info
Método main O método main(.) é o ponto de entrada de
aplicativos Java. Para criar um aplicativo, é necessário que o
programador escreva uma definição de classe que inclua o método main(.).
A declaração padrão, em Java, deste método é:
160
http://www.tiagodemelo.info
Método main Por convenção, o método main(.) é
declarado como público. No entanto, é necessário que ele seja estático,
para que possa ser executado sem a necessidade de construir uma cópia da classe correspondente.
161
http://www.tiagodemelo.info
Método main O array args, do tipo String, contém quais
argumentos que o usuário possa ter fornecido na linha de comando.
O nome do vetor é comumente chamado de args, mas poderia ter qualquer outro nome.
162
http://www.tiagodemelo.info
Pacotes Pacotes são unidades de Java que agrupam
classes relacionadas. Os pacotes definem restrições de acesso do
seu conteúdo para clientes fora da unidade. A criação de pacotes é feita através da
instrução package e que deve constar na primeira linha de um arquivo-fonte de Java.
163
http://www.tiagodemelo.info
Pacotes A seguir, um exemplo de criação de um pacote
em Java:
164
http://www.tiagodemelo.info
Pacotes Por exemplo, num programa desenvolvido
dentro da UEA, o pacote poderia ter o seguinte nome:
A seguir, um exemplo de importação de pacotes em Java:
165
http://www.tiagodemelo.info
Pacotes O asterisco indica que serão importadas todas
as classes do pacote. Para importar uma classe específica, ao invés
do uso do asterisco, o programador deveria escrever o nome da classe que deseja importar.
166
http://www.tiagodemelo.info
Interfaces Interface é o mecanismo pelo qual o
programador pode definir um conjunto de operações sem se preocupar com sua implementação, indicando assim um modelo de comportamento para outras classes.
As interfaces devem conter apenas métodos sem implementação.
Conceitualmente, as interfaces equivalem aos métodos abstratos.
167
http://www.tiagodemelo.info
Interfaces Também é permitida a declaração de
constantes. A sintaxe de uma interface em Java é:
168
http://www.tiagodemelo.info
Interfaces Para a construção das interfaces em Java é
necessário que o nome do arquivo tenha o mesmo nome da interface.
Não deve existir implementação dos métodos das interfaces, mas apenas a declaração destes métodos.
Além disso, as constantes (atributos possíveis em uma interface) são implicitamente públicas, estáticas e finais, sendo essa a forma usual de sua declaração.
169
http://www.tiagodemelo.info
Interfaces As constantes são consideradas como
estáticas porque só pode existir uma cópia do dado disponível e final porque estes dados não devem ser modificados.
Comparação entre interfaces e classes abstratas:
170
http://www.tiagodemelo.info
Exercícios Como uma classe em Java é estruturada? Qual é a diferença, quanto às restrições, dos
modificadores final e static?
Por que uma classe abstrata não pode ser instanciada?
Por que uma classe concreta não pode ter métodos abstratos?
Qual é a diferença entre uma interface e uma classe abstrata?
171
http://www.tiagodemelo.info
Exercícios Qual é a diferença entre um construtor e um
método? Como é possível reconhecer um construtor em
Java? Um método estático pode acessar membros de
classe não estáticos? Justifique a sua resposta.
173
http://www.tiagodemelo.info
Referências http://www.caelum.com.br/apostila-java-
orientacao-objetos/um-pouco-de-arrays
175
http://www.tiagodemelo.info
Encapsulamento Definição:
Mecanismo que coloca junto o código (métodos) e os dados (atributos), mantendo-os controlados em relação ao seu nível de acesso.
O conceito de encapsulamento está intimamente ligado ao conceito de ocultamento da informação (information hiding).
Objetivo: Controlar o acesso de atributos e métodos de um
objeto, através de uma interface bem definida.
176
http://www.tiagodemelo.info
Encapsulamento Exemplo:
Motor de um automóvel. O motorista não precisa ter conhecimento técnico
de como funciona cada parte do motor, mas apenas saber qual é a sua finalidade e como usá-lo.
177
http://www.tiagodemelo.info
Encapsulamento Vantagens:
Proteger os atributos do objeto quanto à manipulação por outros objetos (proteção contra acesso não-autorizado, valores inconsistentes, entre outras possibilidades).
Esconder a estrutura interna do objeto de modo que a interação com este objeto seja relativamente simples e, à medida do possível, siga um padrão de desenvolvimento que facilite o entendimento dos programadores que o utilizem.
178
http://www.tiagodemelo.info
Abstração de dados e encapsulamento
As classes, normalmente, ocultam os detalhes de implementação dos seus usuários. Isso se chama ocultamento de informações.
Exemplo: O motorista de um veículo ao fazer uso do motor
do carro está usando o motor para se locomover, porém não precisa saber dos seus detalhes de funcionamento.
Nesse exemplo, o cliente se preocupa com a funcionalidade que o motor oferece, mas não como essa funcionalidade é implementada.
Esse conceito é conhecido como abstração de dados.
179
http://www.tiagodemelo.info
Abstração de dados e encapsulamento
A Programação Orientada a Objetos (POO) tem como uma das principais atividades a criação de tipos e a expressão de interações entre objetos desses tipos.
Essa atividade está diretamente associada à noção de tipo abstrato de dados (ADT - abstract data type), que melhora o processo de desenvolvimento de programas, pois permite mais flexibilidade ao programador na criação de novos tipos de dados.
180
http://www.tiagodemelo.info
Abstração de dados e encapsulamento
Assim, pode-se afirmar que um ADT captura duas noções: representação de dados e operações que podem ser realizadas nesses dados.
Programadores Java utilizam classes para implementar tipos abstratos de dados.
181
http://www.tiagodemelo.info
Encapsulamento em Java O encapsulamento em Java ocorre nas
classes. Quando o programador cria uma classe, ele
especifica o código e os dados que irão formar essa classe.
Estes elementos serão chamados de membros da classe.
182
http://www.tiagodemelo.info
Encapsulamento em Java O comportamento e a interface de uma
classe são definidos pelos métodos que operam nas instâncias de dados.
O encapsulamento em Java é implementado através dos seus modificadores de acesso público, protegido, privado e implícito.
183
http://www.tiagodemelo.info
Encapsulamento em Java Considerando que o objetivo de uma classe é
encapsular a complexidade, existem mecanismos para ocultar a complexidade da implementação que está dentro da classe.
Cada método ou variável em uma classe pode ser definida como pública, privada ou protegida.
184
http://www.tiagodemelo.info
Encapsulamento em Java A interface de uma classe possibilita que todos
os usuários externos possam acessar livremente os dados da classe pelos quais os métodos públicos permitem.
Já os métodos privados estabelecem que os dados somente podem ser acessados pelos métodos que são membros da classe.
185
http://www.tiagodemelo.info
Encapsulamento em Java Considerando que os membros privados de
uma classe só podem ser acessados por outras partes do programa através dos métodos públicos desta classe, o programador em Java pode fazer uso do encapsulamento para garantir que ações inapropriadas ou imprevistas não ocorram.
186
http://www.tiagodemelo.info
Encapsulamento em Java Assim, o programador em Java deve ser
bastante cuidadoso ao definir a interface pública de uma classe para não expor demasiadamente o funcionamento da classe.
187
http://www.tiagodemelo.info
Encapsulamento em Java Encapsulamento em classes
188
http://www.tiagodemelo.info
Encapsulamento em Java O modificador private é o mais restritivo e
não foi criado para classes, mas apenas para membros de classes.
Apesar disso, é possível empregar o modificador private nas classes.
189
http://www.tiagodemelo.info
Encapsulamento em Java A dúvida comum que surge é: como uma
classe pode acessar uma classe privada? A solução é declarar a classe privada como
sendo interna. Exemplo:
190
http://www.tiagodemelo.info
Classes que encapsulam valores primitivos
Os tipos primitivos em Java são oriundos de classes que possibilitam a representação de valores nativos como classes, o que é particularmente útil para uso em métodos que esperam um argumento que seja um herdeiro da classe Object.
191
http://www.tiagodemelo.info
AQUI Colocar uma figura com a hierarquia das
principais classes em Java
192
http://www.tiagodemelo.info
Classes que encapsulam valores primitivos
Todas as classes que correspondem aos tipos primitivos de Java fazem parte do pacote java.lang e, por isso, não é necessário nenhum comando import para utilizá-las.
193
http://www.tiagodemelo.info
Modificadores de acesso em Java O encapsulamento relaciona os dados
(atributos) com o código (métodos) que os manipula.
O encapsulamento também fornece outro recurso importante que é o controle de acesso.
Através dos modificadores de acesso, os programadores podem controlar o acesso aos membros de uma classe.
194
http://www.tiagodemelo.info
Modificadores de acesso em Java É através desse controle que o programador
garante que não haverá um uso indesejado dos dados de uma determinada classe.
Normalmente, uma classe é criada como uma espécie de caixa preta, que pode ser usada, porém, somente através dos seus métodos públicos que foram colocados à disposição.
195
http://www.tiagodemelo.info
Modificadores de acesso em Java O modificador de acesso é uma instrução que
define como um membro de uma classe poderá ser acessado.
Java possui um rico conjunto destes modificadores.
Alguns aspectos do controle de acesso estão relacionados à herança e ao conceito de pacotes.
196
http://www.tiagodemelo.info
Modificadores de acesso em Java Java possui os seguintes modificadores de
acesso: public, private e protected.
Java também define um nível de acesso padrão (default).
O modo de acesso default também é conhecido como pacote (package).
197
http://www.tiagodemelo.info
Modificadores de acesso em Java Dica:
Um membro em Java pode ter no máximo um modificador de acesso.
198
http://www.tiagodemelo.info
Modificadores de acesso em Java Modificador de acesso public
Este modificador permite que o membro público seja acessado por qualquer outro código do programa.
O modificador de acesso public é o mais liberal e que, portanto, exige maior responsabilidade do programador ao empregá-lo.
199
http://www.tiagodemelo.info
Modificadores de acesso em Java Modificador de acesso private
Este modificador determina que o membro privado só pode ser acessado por elemento de dentro da própria classe.
O modificador de acesso private é o mais restritivo e que deve ser empregado sempre que possível.
200
http://www.tiagodemelo.info
Modificadores de acesso em Java Modificador de acesso protected
Somente os atributos e métodos podem ser declarados como protected.
Um membro protegido de uma classe está disponível a todas as classes do mesmo pacote, exatamente como um recurso padrão.
Além do mais, um recurso protegido de uma classe está disponível a todas as subclasses da classe que possui o recurso protegido.
201
http://www.tiagodemelo.info
Modificadores de acesso em Java Modificador de acesso padrão (default)
Quando não é declarado o tipo de moderador, Java adota como o padrão (default).
Não existe a palavra-chave default em Java. Os recursos default de uma classe são acessíveis
a qualquer classe no mesmo pacote que a classe em questão.
202
http://www.tiagodemelo.info
Modificadores de acesso em Java O que caracteriza um pacote em Java?
Quando um programador escreve um aplicativo que envolve várias classes diferentes, é possível que mantenha todos os seus códigos (arquivos .java) e todos os seus arquivos binários (arquivos .class) em um único diretório de trabalho.
Ao executar o código, o programador o faz a partir daquele diretório.
O ambiente de execução Java considera que todos os arquivos de classe no diretório atual de trabalho constituem um pacote.
203
http://www.tiagodemelo.info
Modificadores de acesso em Java O que pode acontecer quando um programador
Java coloca várias classes num mesmo diretório sem se preocupar com o encapsulamento?
Significa que as classes deste diretório são acessíveis a quaisquer classes deste diretório, pois como se fossem do mesmo pacote.
Isto pode levar a resultados indesejados.
204
http://www.tiagodemelo.info
Modificadores de acesso em Java Ordem de restrição dos modificadores de
acesso (mais restrito para mais liberal):
207
http://www.tiagodemelo.info
Uso dos métodos set e get Há necessidade de se ter métodos públicos
para que se possa acessar os atributos que, em geral, são privados.
O padrão adotado pelos programadores em Java para estes métodos é setNomeAtributo(.) e getNomeAtributo(.) para modificar e receber os valores dos atributos, respectivamente.
208
http://www.tiagodemelo.info
Uso dos métodos set e get Então, qual é a razão de se colocar os atributos
como privados se existem métodos que podem acessá-los?
Por que não torná-los logo como públicos? Embora os métodos set() e get() possam fornecer
acesso a dados privados, o acesso é restrito pela maneira como os métodos foram implementados pelo programador. Isso ajuda a desenvolver programas mais seguros e confiáveis.
209
http://www.tiagodemelo.info
Uso dos métodos set e get Exemplo:
Um atributo minuto de uma classe relógio. Sabe-se que esse atributo pode receber valores no
intervalo [0..60[. Não faria sentido qualquer valor fora desse
intervalo. Neste caso, recomenda-se o uso dos métodos gets
como uma forma de garantir a integridade dos dados das classes.
210
http://www.tiagodemelo.info
Uso dos métodos set e get Dica:
Os projetistas de classe não precisam fornecer métodos set() ou get() para cada atributo private.Essas capacidades devem ser fornecidas somente quando fizerem sentido.
211
http://www.tiagodemelo.info
Resumo de acesso em Java De forma resumida, os modos de acesso de
Java são: public: um recurso público que pode ser
acessado por qualquer classe. protected: um recurso protegido só pode ser
acessado por uma subclasse da classe que possui o recurso, ou por um membro do mesmo pacote da classe que possui o recurso.
212
http://www.tiagodemelo.info
Resumo de acesso em Java De forma resumida, os modos de acesso de
Java são: default : um recurso padrão só pode ser acessado
por uma classe do mesmo pacote que a classe que possui o recurso.
private: um recurso privado só pode ser acessado pela classe que possui o recurso.
213
http://www.tiagodemelo.info
Exercícios Quais são as restrições impostas pelos
comandos public, protected e private em Java? O modificador de acesso implícito impõe as
mesmas restrições do modificador protected? Justifique a sua resposta.
O método main de uma classe deve, obrigatoriamente, usar o modificador public? Justifique a sua resposta.
214
http://www.tiagodemelo.info
Exercícios Crie uma classe em Java que: a) contenha os
atributos nome, idade e altura; b) encapsule os atributos; c) crie um método main que mostre os valores que estão nos atributos.
215
http://www.tiagodemelo.info
Exercícios Crie uma classe Retangulo. A classe tem
atributos largura e altura, ambos sendo do tipo float. A classe deve ter métodos que calculam o perímetro (perimetro()) e a área (area()) do retângulo. A classe tem métodos set e get para a largura (largura) e a altura (altura). Os métodos set devem verificar se largura e altura são, cada um, números de ponto flutuante maiores que 0,0 e menores que 20,0. Escreva um programa em Java para testar a classe Retangulo.
216
http://www.tiagodemelo.info
Exercícios Considere o programa a seguir e responda às
seguintes questões: A classe Tempo segue os princípios do
encapsulamento? Comente a respeito. Como é possível estender o código para atender
aos princípios do encapsulamento? Quais seriam as vantagens que isto traria? Faça as modificações necessárias no código.
219
http://www.tiagodemelo.info
Introdução Uma interface gráfica (Graphical User Interface
– GUI) apresenta um mecanismo amigável ao usuário para interagir com um aplicativo.
As GUIs são construídas a partir de componentes GUI.
Esses componentes são chamados de controles ou widgets.
220
http://www.tiagodemelo.info
Entrada/saída baseada em GUI simples com JOptionPane
A maioria dos aplicativos utiliza caixas de diálogo para que o usuário possa interagir.
A classe JOptionPane do Java (pacote javax.swing) fornece caixas de diálogo pré-empacotadas tanto para entrada como para saída de dados.
Esses diálogos são exibidos invocando métodos estáticos do JOptionPane.
A seguir, um exemplo de programa de soma simples.
221
http://www.tiagodemelo.info
Entrada/saída baseada em GUI simples com JOptionPane
Additon.java
222
http://www.tiagodemelo.info
Entrada/saída baseada em GUI simples com JOptionPane
Constantes JOptionPane static para diálogos de mensagem:
223
http://www.tiagodemelo.info
Visão geral dos componentes Swing
A maioria dos componentes Swing são componentes Java puro, ou seja, foram completamente escritos, manipulados e exibidos em Java.
Eles fazem parte da Java Foundation Classes (JFC) – bibliotecas de Java para desenvolvimento de GUI para múltiplas plataformas.
224
http://www.tiagodemelo.info
Visão geral dos componentes Swing
Alguns componentes básicos:
225
http://www.tiagodemelo.info
Visão geral dos componentes Swing
Swing versus AWT Antes da criação do Swing, as GUIs em Java eram
construídas com componentes do Abstract Window Toolkit (AWT).
Quando um aplicativo do AWT GUI é executado em diferentes plataformas Java, os componentes do aplicativo são exibidos de maneira diferente, adaptando-se ao sistema. ↑
Os componentes Swing são implementados em Java; desse modo são mais portáteis e flexíveis do que os componentes originais do AWT. ↑
226
http://www.tiagodemelo.info
Visão geral dos componentes Swing
Superclasses comuns de muitos dos componentes do Swing.
227
http://www.tiagodemelo.info
Exibição de um frame
MeuPrimeiroFrame.java
228
http://www.tiagodemelo.info
Exibição de um frame O que o programa anterior faz?
Cria um objeto do tipo JFrame. Torna esse objeto visível.
Observações: Por padrão, a tela terá altura e largura iguais a
zero. Ficará posicionada no canto superior esquerdo da
tela. Clicar no botão X irá ocultar a tela, mas não fechar
o programa.
229
http://www.tiagodemelo.info
Exibição de um frame
MeuPrimeiroFrameMelhorado.java
230
http://www.tiagodemelo.info
Exibição de textos e imagens em uma janela
A maioria das GUIs são construídas através de uma instância da classe JFrame ou como uma subclasse de JFrame.
O componente JLabel é conhecido como rótulo e empregado para exibir uma única linha de texto de leitura, uma imagem ou tanto texto como imagem.
Os aplicativos raramente alteram o conteúdo de um rótulo após a sua criação.
O programa a seguir apresenta um exemplo de uso do JLabel.
231
http://www.tiagodemelo.info
Exibição de textos e imagens em uma janela
Um componente que pode conter outros componentes é denominado container.
A classe Container em Java: É uma classe abstrata que define as
funcionalidades básicas associadas a um container, tais como adicionar ou remover componentes.
A adição e a remoção de componentes é feita através dos métodos add( ) e remove( ).
A disposição dos componentes é feita através da gerência de layouts (método setLayout( )).
232
http://www.tiagodemelo.info
Exibição de textos e imagens em uma janela
Exemplo que demonstra o uso de labels (rótulos).
LabelTextPos.java
233
http://www.tiagodemelo.info
Exibição de textos e imagens em uma janela
Ao construir uma GUI, cada componente deve ser anexado a um contêiner, como uma janela criada com um JFrame.
Além disso, é necessário especificar onde posicionar cada componente da GUI. Isso é chamado de layout dos componentes GUI.
Java fornece vários gerenciadores de layout que podem ajudar a posicionar os componentes.
O gerenciador empregado é o GridLayout.
234
http://www.tiagodemelo.info
Gerenciador de layouts BorderLayout
Os componentes são disponibilizados em cinco áreas: top, bottom, left, right e center.
Todo espaço extra é utilizado na parte central (center).
235
http://www.tiagodemelo.info
Gerenciador de layouts BoxLayout
Essa classe coloca todos os componentes em uma única linha ou coluna.
236
http://www.tiagodemelo.info
Gerenciador de layouts CardLayout
Essa classe permite que o programador implemente uma área que contém diferentes componentes em momentos diferentes.
Essa layout é frequentemente controlado por um combobox.
237
http://www.tiagodemelo.info
Gerenciador de layouts FlowLayout
É o layout padrão para gerenciar o JPanel. Ele simplesmente coloca os componentes em uma
única linha, começando uma nova linha se o container não tiver espaço suficiente.
238
http://www.tiagodemelo.info
Gerenciador de layouts GridBagLayout
É um sofisticado e flexível gerenciador de layouts. Ele alinha os componentes colocando-os dentro de
um gride de células, permitindo que os componentes possam se expandir para mais de uma célula.
As linhas podem ter diferentes alturas e as colunas podem ter diferentes larguras.
239
http://www.tiagodemelo.info
Gerenciador de layouts GroupLayout
É um gerenciador de layout que foi desenvolvido para o uso de ferramentas que criam GUIs, mas que também pode ser utilizado manualmente.
Ele trabalha com layouts vertical e horizontal separadamente.
240
http://www.tiagodemelo.info
Gerenciador de layouts SpringLayout
É um gerenciador flexível utilizado por ferramentas para construção de GUIs.
Ele permite que o programador especifique precisamente os relacionamentos entre as pontes dos componentes que estejam sob o seu controle.
241
http://www.tiagodemelo.info
Campos de texto e uma introdução ao tratamento de eventos com classes aninhadas
As GUIs são baseadas em eventos. É através dos eventos que o usuário interage
com o programa. O código que realiza uma tarefa em resposta a
um evento é chamado de handler de evento. O processo total de responder a eventos é
conhecido como tratamento de evento.
242
http://www.tiagodemelo.info
Campos de texto e uma introdução ao tratamento de eventos com classes aninhadas
A seguir, serão apresentados dois novos componentes GUI que podem gerar eventos
JTextFields JPasswordFields
Cada um desses componentes é uma área de linha única em que o usuário pode inserir texto pelo teclado.
243
http://www.tiagodemelo.info
Campos de texto e uma introdução ao tratamento de eventos com classes aninhadas
TextFieldFrame.javaTextFieldTest.java
244
http://www.tiagodemelo.info
Campos de texto e uma introdução ao tratamento de eventos com classes aninhadas
Passos necessários para configurar o tratamento de evento de um componente GUI:
Criar uma classe que represente o handler de evento.
Implementar uma interface apropriada, conhecida como interface listener de evento, classe do passo anterior.
Indicar que um objeto da classe dos passos anteriores deve ser notificado quando o evento ocorrer. Isso é conhecido como registrar um handler de evento.
245
http://www.tiagodemelo.info
Tipos comuns de eventos GUI e interfaces ouvintes
Como visto anteriormente, as informações sobre o evento que ocorre quando o usuário pressiona Enter em um campo de texto são armazenadas em um objeto ActionEvent.
Há muitos tipos diferentes de eventos que podem ocorrer quando o usuário interage com uma GUI.
As informações sobre qualquer evento são armazenadas em um objeto de uma classe que estende AWTEvent.
246
http://www.tiagodemelo.info
Tipos comuns de eventos GUI e interfaces ouvintes
Algumas classes de evento do pacote java.awt.event.
247
http://www.tiagodemelo.info
Tipos comuns de eventos GUI e interfaces ouvintes
O tratamento de eventos pode ser resumido em três partes: a origem do evento, o objeto do evento e o ouvinte do evento.
A origem do evento é o componente GUI particular com o qual o usuário interage.
O objeto de evento encapsula informações sobre o evento que ocorreu.
O ouvinte de eventos é um objeto que é notificado pela origem de evento quando um evento ocorre.
248
http://www.tiagodemelo.info
JButton Um botão é um componente que o usuário
clica para acionar uma ação específica. Java possui vários tipos de botões: botões de
comando, caixas de seleção, botões de alternação e botões de opção.
251
http://www.tiagodemelo.info
Botões que mantêm o estado Os componentes Swing contêm três tipos de
botões de estado - JToggleButton, JCheckBox e JRadioButton - que têm valores ativado/desativo ou verdadeiro/falso.
As classes JcheckBox e JradioButton são subclasses de JtoggleButton.
Um botão de comando gera um ActionEvent quando o usuário clica no botão.
Os botões de comando são criados com a classe JButton.
252
http://www.tiagodemelo.info
Botões que mantêm o estado O texto na face de um JButton é chamado de
rótulo de botão e cada botão deve possuir um rótulo diferente, de forma a evitar a ambiguidade.
253
http://www.tiagodemelo.info
Botões que mantêm o estado O próximo programa utiliza dois objetos JCheckBox para selecionar o estilo desejado de fonte do texto exibido em um JTextField.
Quando selecionado, aplica o estilo negrito e o outro, o estilo itálico.
Se ambos são selecionados, o estilo da fonte é negrito e itálico.
Quando o aplicativo é inicialmente executado, nenhum JCheckBox está marcado (isto é, os dois são false).
254
http://www.tiagodemelo.info
Botões que mantêm o estado Os botões de opção (declarados com a classe JRadioButton) são semelhantes a caixas de seleção no sentido de que têm dois estados (selecionados e não selecionados).
Os botões de opção são utilizados para representar opções mutuamente exclusivas.
255
http://www.tiagodemelo.info
JList Uma lista exibe uma série de itens a partir da
qual o usuário pode selecionar um ou mais itens.
As listas são criadas com a classe JList, que estende diretamente da classe JComponent.
A classe JList suporta listas de uma única seleção ou listas de seleção múltipla.
256
http://www.tiagodemelo.info
JList Uma lista exibe uma série de itens a partir da
qual o usuário pode selecionar um ou mais itens.
As listas são criadas com a classe JList, que estende diretamente da classe JComponent.
A classe JList suporta listas de uma única seleção ou listas de seleção múltipla.
257
http://www.tiagodemelo.info
Tratamento de evento de mouse Os eventos de mouse podem ser capturados
por qualquer componente GUI que deriva de java.awt.Component.
Os métodos de interfaces MouseListener e MouseMotionListener são resumidos na próxima tabela.
259
http://www.tiagodemelo.info
Gerenciadores de Layout Os gerenciadores de layout são fornecidos a
fim de organizar componentes GUI em contêiner para apresentações.
Esse recurso permite que os programadores se concentrem na aparência e comportamento básicos e deixa os gerenciadores de layout processar a maioria dos detalhes de layout.
Todos os gerenciadores de layout implementam a interface LayoutManager (no pacote java.awt).
260
http://www.tiagodemelo.info
Gerenciadores de Layout Há três maneiras básicas de organizar
componentes em uma GUI: Posicionamento absoluto.
Fornece o maior nível de controle sobre a aparência de uma GUI.
Basta configurar o Container como null, aí pode-se especificar a posição absoluta de cada componente GUI em relação ao canto superior esquerdo do Container.
Esta opção pode ser mais demorada que as demais.
261
http://www.tiagodemelo.info
Gerenciadores de Layout Há três maneiras básicas de organizar
componentes em uma GUI: Gerenciadores de layout.
Utilizar gerenciadores de layout pode ser mais simples e rápido do que o posicionamento absoluto, porém o programador perde algum controle sobre o tamanho e o posicionamento precisos de componentes GUI.
262
http://www.tiagodemelo.info
Gerenciadores de Layout Há três maneiras básicas de organizar
componentes em uma GUI: Programação visual em IDE.
Diversos IDEs fornecem ferramentas que facilitam a criação de GUIs.
O Eclipse não é uma boa ferramenta para isso. A sugestão seria o IDE Netbeans.
263
http://www.tiagodemelo.info
Gerenciadores de Layout Principais gerenciadores de layout:
264
http://www.tiagodemelo.info
Referências para GUIs http://www.java2s.com/Code/Java/Swing-
JFC/CatalogSwing-JFC.htm
265
http://www.tiagodemelo.info
Exercícios No desenvolvimento das GUIs, aparência e
comportamento têm o mesmo significado? Justifique a sua resposta.
O que são widgets? O que você entende por componentes leves e
pesados? O que fornece a classe JFrame?
267
http://www.tiagodemelo.info
Arquivos Os arquivos armazenam dados de forma
permanente (dados persistentes) porque eles existem além da duração da execução do programa.
268
http://www.tiagodemelo.info
Hierarquia de dados Os caracteres em Java são caracteres Unicode
compostos de dois bytes e cada byte é composto de oito bits.
Assim como os caracteres são compostos de bits, campos são compostos de caracteres ou bytes.
Um campo é um grupo de caracteres ou bytes que transmitem um significado.
A hierarquia segue assim: bit, caracteres, campos, registros (classes) e arquivos.
269
http://www.tiagodemelo.info
Hierarquia de dados Para facilitar a recuperação de registros
específicos de um arquivo, pelo menos um campo em cada registro é escolhido como uma chave de registro.
Esse campo em geral é utilizado para pesquisar e classificar registros.
Há muitas maneiras de organizar os registros de um arquivo. A mais comum é a seqüencial.
270
http://www.tiagodemelo.info
Arquivos e Fluxos Java vê cada arquivo como um fluxo
seqüencial de bytes. Cada sistema operacional fornece um
mecanismo para determinar o fim do arquivo. Os arquivos podem ser fluxos baseados em
bytes (arquivos binários) ou em caracteres (arquivos de texto).
Programas em Java realizam o processamento de arquivos utilizando as classes no pacote java.io.
271
http://www.tiagodemelo.info
Classe File Os objetos da classe File são utilizados
frequentemente com objetos de outras classes java.io para especificar arquivos ou diretórios a manipular.
A classe File possui quatro construtores: public File (String nome);
nome → especifica o nome de um arquivo ou diretório para associar com o objeto File.
O nome pode conter informações de caminho, bem como um nome de arquivo ou diretório.
O caminho pode ser absoluto ou relativo.
272
http://www.tiagodemelo.info
Classe File public File (String caminho, String nome);
Utiliza argumento caminho para localizar o arquivo ou diretório especificado por nome.
public File (File diretorio, String nome); Utiliza o objeto diretorio para existente para
localizar o arquivo ou diretório especificado por nome;
public File (URI uri); Utiliza o objeto uri para localizar o arquivo. URI = Uniform Resource Identifier.
273
http://www.tiagodemelo.info
Classe File A classe File utiliza o método isFile( )
para determinar se um objeto File representa um arquivo (não um diretório) antes de tentar abrir um arquivo.
274
http://www.tiagodemelo.info
Classe File
FileDemonstration.javaFileDemonstrationTeste.java
275
http://www.tiagodemelo.info
Classe File Um caracter separador é utilizado para separar
diretórios e arquivos no caminho. No Windows, o separador é uma barra
invertida (\), já no Unix o separador é uma barra normal (/).
Porém, Java processa esses dois caracteres de maneira idêntica em um nome de caminho.
Uma forma alternativa é usar o File.pathSeparator para obter o caractere separador adequado.
276
http://www.tiagodemelo.info
Classe File Utilizar \ como separador de diretório em vez
de \\ em uma literal string é um erro de lógica.
277
http://www.tiagodemelo.info
Arquivos de texto de acesso seqüencial
Java não impõe nenhuma estrutura a um arquivo.
Os três programas seguintes demonstram como criar um arquivo simples de acesso sequencial que poderia ser utilizado em um sistema de contas a receber para ajudar a monitorar os valores devidos pelos seus clientes a uma empresa.
O programa assume que o usuário insere os registros em ordem de número de conta.
278
http://www.tiagodemelo.info
Arquivos de texto de acesso seqüencial
AccountRecord.javaCreateTextFile.java
CreateTextFileTest.javaReadTextFile.java
ReadTextFileTest.java
279
http://www.tiagodemelo.info
Arquivos de texto de acesso seqüencial
Os dados em muitos arquivos sequenciais não podem ser modificados sem o risco de destruir outros dados no arquivo.
O problema é que a atualização do novo registro pode ser maior que o antigo registro.
O problema aqui é que os campos em um arquivo de texto – e consequentemente os registros – podem variar de tamanho.
280
http://www.tiagodemelo.info
Arquivos de texto de acesso seqüencial
Portanto, os registros em um arquivo de acesso sequencial normalmente não são atualizados no lugar.
Em vez disso, o arquivo inteiro é normalmente regravado.
281
http://www.tiagodemelo.info
Serialização de objeto Quando sabemos exatamente a forma pela
qual os dados são armazenados em um arquivo, podemos ler ou gravar um objeto, de um determinado tipo, a partir de um arquivo.
Java possui esse tipo de recurso, chamado de serialização de objetos.
Um objeto serializado é um objeto representado como uma sequência de bytes que inclui os dados do objeto, bem como as informações sobre o tipo do objeto e os tipos dos dados armazenados no objeto.
282
http://www.tiagodemelo.info
Arquivos de acesso aleatório Os arquivos de acesso sequencial não são
apropriados para aplicativos em que a operação de busca seja importante.
Exemplos: sistemas de reserva de passagem aérea, sistemas bancários, sistemas comerciais, caixas automáticos, entre outros.
O acesso imediato pode ser realizado em arquivos de acesso aleatório e com banco de dados.
Arquivos de acesso aleatório também são chamados de acesso direto.
283
http://www.tiagodemelo.info
Arquivos de acesso aleatório Para uso de arquivos de acesso aleatório é
necessário especificar o formato desses arquivos.
Várias técnicas podem ser utilizadas para criar arquivos de acesso aleatório.
Talvez a mais simples de todas seja exigir que todos os registros em um arquivo tenham o mesmo comprimento fixo.
284
http://www.tiagodemelo.info
Arquivos de acesso aleatório A utilização de registros de largura fixa ajuda o
programa a calcular a localização exata de qualquer registro em relação ao início do arquivo.
Um programa pode inserir dados em um arquivo de acesso aleatório sem destruir os dados nesse arquivo.
Um RandomAccessFile é útil para aplicativos de acesso direto.
285
http://www.tiagodemelo.info
Arquivos de acesso aleatório Quando um programa associa um objeto da
classe RandomAccessFile com um arquivo, ele lê ou grava os dados a partir do local no arquivo especificado pelo ponteiro de posição no arquivo e manipula todos os dados como tipos primitivos.
Por exemplo, quando se grava um valor int, quatro bytes são enviados para o arquivo de saída.
286
http://www.tiagodemelo.info
Arquivos de acesso aleatório Programas de processamento de arquivos de
acesso aleatório raramente gravam um único campo em um arquivo.
Normalmente, eles gravam um objeto por vez, como mostraremos nos exemplos a seguir.
287
http://www.tiagodemelo.info
Arquivos de acesso aleatório
RandomAccessAccountRecord.javaCreateRandomFile.java
CreateRandomFileTest.java
288
http://www.tiagodemelo.info
Arquivos de acesso aleatório O programa a seguir grava os dados em um
arquivo que é aberto com um modo “rw” (para leitura e gravação).
Ele utiliza o método seek de RandomAccessFile para posicionar a localização exata no arquivo em um registro das informações é armazenado.
289
http://www.tiagodemelo.info
Arquivos de acesso aleatório O método seek configura o ponteiro de
posição no arquivo, como um local específico no arquivo relativo ao começo do arquivo, e o método RandomAccessAccountRecord write gera saída dados na posição atual no arquivo.
O programa supõe que o usuário não insere números de conta duplicados.
290
http://www.tiagodemelo.info
Arquivos de acesso aleatório
WriteRandomFile.javaWriteRandomFileTest.java
ReadRandomFile.javaReadRandomFileTest.java
291
http://www.tiagodemelo.info
Abrindo arquivos com JFileChooser
Java possui a classe JFileChooser que permite exibir uma caixa de diálogo para que os usuários possam selecionar os arquivos mais facilmente.
292
http://www.tiagodemelo.info
Abrindo arquivos com JFileChooser
FileDemonstration2.javaFileDemonstrationTest.java
293
http://www.tiagodemelo.info
Exercícios Qual é a diferença entre arquivo binário e
arquivo texto? Explique o que é hierarquia de dados. O que é chave de registro? Escreva um programa em Java que faça a
leitura de campos pelo teclado. Faça o tratamento adequado das possíveis exceções que possam ocorrer no programa.
O que é um objeto serializado?
294
http://www.tiagodemelo.info
Exercícios Quais são as principais vantagens no uso de
arquivos de acesso aleatório em relação aos arquivos de acesso seqüencial?
Implemente um programa de console capaz de armazenar em um arquivo de formato binário 100 números inteiros, gerados aleatoriamente no intervalo [0,100.000] em um arquivo, cujo nome será fornecido como argumento da aplicação. A soma dos valores deverá ser exibida na tela (mas não gravada no arquivo).
295
http://www.tiagodemelo.info
Exercícios Implemente um programa de console capaz de
efetuar a leitura de um arquivo binário, cujo nome será fornecido com argumento do programa, contendo 100 valores inteiros. A soma dos valores recuperados deve ser exibida na tela.
297
http://www.tiagodemelo.info
Relações Objetos não existem isolados
São formados por outros objetos. Objetos usam outros objetos Um programa OO possui vários objetos que
interagem entre si. Modelagem define quais objetos usamos em um
programa.
298
http://www.tiagodemelo.info
Relações entre objetos Objetos possuem relacionamentos
Composição: um objeto pode ser formado por outros objetos. Exemplos: casa, livro, jardim, agenda de contatos, etc.
Agregação: um objeto pode conter outros objetos. Exemplo: carro (motor, pneu, porta).
Associação: objetos podem usar outros objetos. Exemplo: Trem usa estrada de ferro
299
http://www.tiagodemelo.info
Composição Um livro é composto de capítulos
Capítulo é parte essencial de livro Se não existir capítulo, não existe livro Capítulo não existe fora de livro
Linha com losângulo preenchido na classe “dominante”
Livro é composto de 1 ou mais capítulos
301
http://www.tiagodemelo.info
Agregação Carro possui Pneu, Motor e Porta
Não são partes essenciais do carro. Retirando as portas um carro continua sendo um
carro. Pneus/portas existem como objetos independentes.
Linha com losângulo vazio na classe “dominante”.
303
http://www.tiagodemelo.info
Associação Objetos que usam outros objetos
Podem ser implementados como atributos.
304
http://www.tiagodemelo.info
Comentários Composição, Agregação e Associação
Mesma forma de implementar Muda apenas o conceito
Comportamento diferente Muito comum usar apenas notação da associação
Sem o losângulo. Composições e Agregações são “tipos” de
associações. Representam relacionamento “tem um”
Carro “tem uma” roda. Livro “tem um” capítulo. Trem “tem uma” estrada de ferro.
305
http://www.tiagodemelo.info
Multiplicidade Indica quantidade de objetos referenciados.
Principais:
306
http://www.tiagodemelo.info
Nomes Pode-se especificar o nome do atributo
Obrigar existência do atributo. Carro tem um atributo privado motor do tipo Motor.
307
http://www.tiagodemelo.info
Nomes Coleções
Atributos com multiplicidade * podem ser implementados de mais de uma forma.
Array é uma delas
308
http://www.tiagodemelo.info
Exemplo Modelo de objetos de uma agenda de contatos:
309
http://www.tiagodemelo.info
Observações Responsabilidades
Classes de domínio não devem interagir com o usuário.
System.out.println, Scanner, etc. Elas podem ser usadas em várias interfaces com
usuário diferentes: texto, WEB, GUI, Hand-held, Celurares, etc.
Defina uma classe que represente a interface com usuário (UI – User interface)
317
http://www.tiagodemelo.info
Exercícios Implemente e execute a Agenda de contatos e
teste. Implemente o método remover
Basta fazer referência a nulo e decrementar quantidade.
Cuidado para não deixar espaços em branco, pois afeta o funcionamento do inserir.
Reimplemente o método inserir para permitir que o a agenda tenha tamanho “infinito”
Crie um novo array maior e copie as referências para o novo array, fazendo o novo array o array da agenda.
318
http://www.tiagodemelo.info
Exercícios Implemente o método toString na Agenda
Retorna uma String contendo todos os contatos, um em cada linha, com nome e telefone.
Utilize a classe StringBuilder.
319
http://www.tiagodemelo.info
Referências http://www.cefetrn.br/~placido
320
http://www.tiagodemelo.info
Referências bibliográficas C. M. F. Rubira. Introdução à Análise Orientada a Objetos.
Editora da Unicamp, 2002.
H. M. Deitel e P. J. Deitel. Java – Como Programar. 4a. ed. Bookman, 2003.