Vous êtes sur la page 1sur 263

Professor

Antonio Benedito Coimbra Sampaio Jr


Misso
Capacitar mo-de-obra para o
concorrido mercado de trabalho na
rea de Tecnologia da Informao.
Valores
Excelncia nos Treinamentos,
Profissionalismo e Preo Justo.
Viso
Ser um portal de referncia no oferecimento
de cursos profissionalizantes na rea de
Tecnologia da Informao.
2
OBJETIVOS
3
O Curso de JAVA 8 para Web objetiva formar desenvolvedores de
software JAVA. Aps a realizao do curso, o aluno dever ter obtido
competncias e habilidades para: 1. Desenvolver software fazendo
uso do framework Java para os ambientes desktop e Web; e 2.
Utilizar ferramentas OPEN SOURCE para a construo de software;
No ano de 2014, o Curso de JAVA para Web completa 12 anos de
mercado, tendo sido ministrado para mais de 700
profissionais. SUCESSO DE PBLICO E DE CRTICA!
O curso segue a filosofia 'hands-on', isto , todas as aulas so
prticas.
OBJETIVOS
4
Pblico-Alvo (Tcnico):
Pessoal Tcnico de Instituies Empresariais e Comerciais da regio
que desenvolvem atividades na rea de informtica;
Acadmicos de Computao e Engenharias;
Profissionais da rea de informtica ou correlata.
Pblico-Alvo (No Tcnico):
Interessados na rea de Tecnologia em geral, com grande interesse
na rea de desenvolvimento de software;
Gestores de negcio que necessitam ter o mnimo conhecimento de
Java para que possam melhor definir/decidir as suas necessidades na
rea de sistemas;
OBJETIVOS
5
Pr-Requisitos:
Conhecimentos Bsicos de Informtica;
Ideal j ter prvio conhecimento de Programao de Computadores.
Carga Horria:
Organizado em 04 disciplinas de 20h cada;
Cada disciplina de 20h organizada em vrias unidades;
Cada unidade possui os seus slides (em formato PDF) e as suas
videoaulas.
EMENTA
6
Primeira Disciplina
JAVA 8 - Fundamentos Tericos e Orientao a Objetos (20h)
UNIDADE 1: Introduo Tecnologia Java
UNIDADE 2: Introduo Sintaxe Java
UNIDADE 3: Programao Orientada a Objetos em Java (Parte I)
UNIDADE 4: Programao Orientada a Objetos em Java (Parte II)
Segunda Disciplina
JAVA 8 - Pacotes, Tratamento de Excees, Applets, Genricos,
Collections e Interfaces Grficas (20h)
UNIDADE 1: Pacotes, Erros e Excees
UNIDADE 2: Applets, Anotaes e Entrada/Sada
UNIDADE 3: Genricos
UNIDADE 4: Framework Collections
UNIDADE 5: Novidades Java 8
UNIDADE 6: Aplicaes Grficas em Java
EMENTA
7
Terceira Disciplina
JEE - Persistncia de Dados com JDBC e Hibernate (20h)
UNIDADE 1: Arquitetura JEE
UNIDADE 2: Introduo a Banco de Dados com Oracle
UNIDADE 3: Persistncia de Dados com JDBC
UNIDADE 4: Framework Hibernate
UNIDADE 5: Introduo ao JPA
Quarta Disciplina
JEE - Java Servlets e JSP (20h)
UNIDADE 1: Introduo Internet, WEB e HTML
UNIDADE 2: Java Servlets
UNIDADE 3: JSP
UNIDADE 4: Padro de Projeto MVC (Integrando Servlet e JSP)
MERCADO
8
MERCADO
9
http:/ /javahistory.blogspot.com.br/
MERCADO
10
a principal linguagem de programao utilizada para criar APPs no
Google Android.
SALRIOS 2014 (BRASIL)
11
http:/ /www.michaelpage.com.br/productsApp_br/2014/Estudo_Rem_MP_IT.pdf
R$6.000 a R$10.000/MS
SALRIOS 2014 (EUA)
12
http: / /www.indeed.com/salary/Java-Developer.html
US$4,000 a US$11,000/MS
PARCEIROS
13
CERTIFICAES
14
JAVA 7
JAVA SE
Oracle Certified Associate, Java SE 7 Programmer
Oracle Certified Professional, Java SE 7 Programmer
JAVA EE
Oracle Certified Expert, Java Platform, EE 6 Web Component
Developer
Oracle Certified Expert, Java EE 6 Web Services Developer
Oracle Certified Expert, Java EE 6 Persistence API Developer
Oracle Certified Expert, Java EE 6 Enterprise JavaBeans Developer
Oracle Certified Master, Java EE 6 Enterprise Architect
JAVA ME
Oracle Certified Professional, Java ME 1 Mobile Application Developer
LIVROS
15
NACIONAIS
LIVROS
16
IMPORTADOS
REVISTAS
17
NACIONAIS
www.devmedia.com.br/java/
REVISTAS
18
NACIONAIS
www.mundoj.com.br
REVISTAS
19
IMPORTADAS
www.oraclejavamagazine-digital.com/javamagazine/
REVISTAS
20
IMPORTADAS
java.sys-con.com
INTERNET
21
www.oracle.com/ technetwork/java/index.html
INTERNET
22
docs.oracle.com/javase/tutorial /
VDEOS
23
Vdeo 01
Vdeo 02
Professor
Antonio Benedito Coimbra Sampaio Jr
Primeira
Disciplina
JAVA 8 - Fundamentos Tericos e Orientao a Objetos
UNIDADE 1: Introduo Tecnologia Java
UNIDADE 2: Introduo Sintaxe Java
UNIDADE 3: Programao Orientada a Objetos em Java (Parte I)
UNIDADE 4: Programao Orientada a Objetos em Java (Parte II)
2
UNIDADE 1
INTRODUO
TECNOLOGIA JAVA
3
Conceito do JAVA
Java uma Plataforma Tecnolgica para a Criao de
Software.
4
Conceito do JAVA
5
JAVA :
Uma linguagem de programao orientada a objetos;
Uma coleo de APIs (classes, componentes, frameworks) para o
desenvolvimento de aplicaes multiplataforma;
Um ambiente de execuo presente em browsers, mainframes, SOs,
dispositivos mveis, cartes inteligentes, eletrodomsticos.
JAVA APIs
6
JAVA APIs
7
http:/ /www.oracle.com/br/technologies/java/overview/index.html?ssSourceSiteId
JAVA APIs
8
http:/ /www.oracle.com/br/technologies/java/overview/index.html?ssSourceSiteId
Exemplo JAVA SE
9
Exemplo JAVA EE
10
Exemplo JAVA ME
11
Histrico
12
INCIO:
Projeto Green:
1991 - James Gosling e outros engenheiros da Sun
Objetivo: criar aplicaes para controlar produtos eletrnicos
Linguagem Oak baseada em C++
As tentativas frustradas:
*7 - controle remoto inteligente - sem patrocnio
Histria Completa no site
http:/ /www.oracle.com/technetwork/java/javase/overview/javahistory-index-198355.html
EM 1995 A SUN LANA O JAVA:
Programao na Web com Java Applet
Since 1995, Java has changed our world . . . and our expectations..
Histrico
13
1995 A INFLUNCIA DA WEB:
Netscape Navigator 2.0 compatvel com Java 1.0 (independncia de
plataforma, confiabilidade, segurana, processamento em tempo real,
etc.)
Desde ento, cinco grandes revises:
- Java Development Kit (JDK) 1.0/1.0.2
- Java Development Kit (JDK) 1.1/1.1.8
- Java 2 Platform (Java 2 SDK e JRE 1.2, 1.3, 1.4)
- Java Tiger (Java SDK 1.5)
- Java SDK 8 (maro 2014)
Write Once, Run Anywhere
Histrico
14
http:/ /javatutorial-for-beginners.blogspot.com.br/
Histrico
15
http:/ /javatutorial-for-beginners.blogspot.com.br/
Histrico
16
Java 8 no pode ser instalado no Windows XP
ltimas Verses do Java
Verso do Curso
Evoluo
17
JCPs (Java Community Process - www.jcp.org)
Processo criado pela Sun e pelos primeiros licenciados da tecnologia
Java como forma de evoluir e manter a tecnologia aberta e disponvel
para todos;
Mais de 600 empresas participam;
Definem as JSRs (Java Specification Request) que especificam novas
tecnologias Java.
Evoluo
18
JSRs (Java Specification Requests)
927 especificaes (jcp.org/en/jsr/all);
Exemplos:
JSR-174 (Monitoring and Management Specification for the Java
Virtual Machine)
JSR-335 (Lambda Expressions for the Java Programming Language)
Presente e Futuro
19
INTERNET DAS COISAS (IoT Internet of Things)
A Internet das coisas uma revoluo tecnolgica que representa o futuro
da computao e da comunicao e cujo desenvolvimento depende da
inovao tcnica dinmica em campos to importantes como os sensores
wireless e a nanotecnologia. [Wikipedia]
BIG DATA
o conjunto de solues tecnolgicas capaz de lidar com dados digitais em
volume, variedade e velocidade inditos at hoje. Na prtica, a tecnologia
permite analisar qualquer tipo de informao digital em tempo real, sendo
fundamental para a tomada de decises.
Presente e Futuro
20
INTERNET DAS COISAS (IoT Internet of Things)
http:/ /scoop.intel.com/celebrating-international-internet-of-things-day/
Presente e Futuro
21
BIG DATA
http:/ /www.business2community.com/big-data/big-data-big-insights-for-social-media-with-ibm-0501158#!FUJl6
Introduo ao JAVA
22
VANTAGENS COMO LINGUAGEM DE PROGRAMAO:
Orientada a Objetos (O.O)
cdigo sem bugs: mais fcil em Java que em C++
desalocao manual de memria no existe
arrays verdadeiros + ausncia de aritmtica de ponteiro
substituio de herana mltipla por interface
independncia de plataforma!
Introduo ao JAVA
23
SIMPLES
Sintaxe similar a C / C++
No possui os recursos perigosos,
desnecessrios ou pouco usados:
Aritmtica de ponteiros (*--pt = vet+5)
Estruturas (struct)
Definio de tipos (typedef)
Pr-processamento (#define)
Liberao explcita de memria (free)
Eliminao de 50% dos erros mais comuns
Interpretadores pequenos (256 Kb)
Introduo ao JAVA
24
ORIENTADA A OBJETOS
Utiliza tecnologia de objetos
similar a de C++, com alguns
acrscimos e simplificaes.
Introduo ao JAVA
25
DISTRIBUDA
Implementa os protocolos da
arquitetura TCP/IP, tais como:
HTTP, SMTP, TCP, UDP, RTP, FTP,
etc.
Introduo ao JAVA
26
ROBUSTA
Possui checagem em tempo de
compilao e execuo.
Gerenciamento automtico de
memria (coletor de lixo ou garbage
collector ).
Ausncia de recursos perigosos.
Extensiva verificao do cdigo.
Introduo ao JAVA
27
ROBUSTA COLETOR DE LIXO
A memria utilizada pela aplicao Java no liberada pelo programador, ou
seja, objetos criados no so destrudos pelo programador.
Helder da Rocha
Introduo ao JAVA
28
ROBUSTA COLETOR DE LIXO
Quando um objeto no tem mais referncias apontando para ele, seus dados
no mais podem ser usados, e a memria deve ser liberada;
O coletor de lixo ir liberar a memria na primeira oportunidade.
Helder da Rocha
Introduo ao JAVA
29
INDEPENDENTE DE PLATAFORMA
O fonte compilado para um
cdigo intermedirio
(bytecode).
O interpretador funciona
como uma Mquina Virtual Java
(JVM).
write once, run anywhere
Introduo ao JAVA
30
INDEPENDENTE DE PLATAFORMA JVM
write once, run anywhere
Introduo ao JAVA
31
INDEPENDENTE DE PLATAFORMA JVM
Cabe ao interpretador Java de cada plataforma de hardware especfica
assegurar a execuo do cdigo compilado para a JVM.
write once, run anywhere
Introduo ao JAVA
32
INDEPENDENTE DE PLATAFORMA JVM
Bytecode (*.class) o cdigo de mquina que roda em qualquer mquina
atravs da Mquina Virtual Java (JVM).
Helder da Rocha
Introduo ao JAVA
33
INTERPRETADA
Os bytecodes so executados por um interpretador
(JVM) embora existam opes de compilao.
JVM
34
DEFINIO
Mquina imaginria implementada como uma aplicao de software em uma
mquina real;
A mquina virtual Java hoje um sofisticado sistema de software, de alto
grau de complexidade;
HotSpot e JRockit so exemplos de tecnologias de mquina virtual imediatas
comprovadas que fazem do Java um dos ambientes de programao mais
rpidos;
Otimizaes incorporadas para ambientes multithread o deixam ainda mais
rpido.
JVM
35
DEFINIO
A JVM uma especificao e no um software! Assim sendo, possvel
escolher a JVM de um determinado fabricante, caso algum detalhe da Oracle
JVM (padro do SDK) no estiver atendendo a alguma necessidade em
particular.
Oferece vrios algoritmos de Coleta de Lixo:
- SGC (SerialGC) Aplicao tpica, um processador, < 2GB RAM
- TGC (ParallelGC) Muitas threads alocando objetos
- CMS (ConcMarkSweepGC) - Pode compartilhar recursos do processador
com o coletor de lixo enquanto a aplicao est executando
- Train(TrainGC) - Requerimento de pausas mnimas; aceita eficincia
baixa.
JVM
36
E O SUPORTE A LINGUAGENS DINMICAS
As linguagens de programao LISP, Erlang, OCaml, Scala, Python/Django e
Ruby on Rails podem rodar sobre a JVM (Mquina Virtual Java);
a implementao 100% em puro Java da linguagem de
programao Ruby, possibilitando que os scripts Ruby sejam executados na
JVM.
Leandro Nunes
JVM
37
E O SUPORTE A LINGUAGENS DINMICAS
Leandro Nunes
JVM
38
E O SEU GERENCIAMENTO DE MEMRIA
JVM
39
E O SEU GERENCIAMENTO DE MEMRIA
JVM
40
E O SEU GERENCIAMENTO DE MEMRIA
JVM
41
E O PROBLEMA DE MEMORY LEAK
Ao contrrio do que muitas pessoas pensam, uma aplicao escrita em
Java pode sim apresentar problemas de vazamento de memria, termo
comumente conhecido por memory leak. Infelizmente, um grande nmero de
programadores Java acha que memory leak coisa de C/C++ e que o
garbage collector do Java resolve esse problema completamente.
Elimine todas as referncias a objetos desnecessrios. Fazendo isso, o
garbage collector ter condies de fazer o seu trabalho completamente e
voc estar livre dos memory leaks em suas aplicaes.
Carlos Tosin
Introduo ao JAVA
42
PARALELIZVEL
Suporta a programao baseada em
light weight processes (threads).
Ambiente JAVA
43
DISPONVEL GRATUITAMENTE NA INTERNET
Java 8 DK (Java 8 Development Kit) o ambiente padro distribudo pela
Oracle para desenvolvimento de aplicaes Java.
O J8DK consiste de:
- JRE (Java Runtime Environment) - tambm distribudo separadamente:
ambiente para execuo de aplicaes;
- Ferramentas para desenvolvimento: compilador, debugger, gerador de
documentao, empacotador JAR, etc;
- Cdigo-fonte das classes da API;
- Demonstraes de uso das APIs, tais como Applets, interfaces grficas
com Swing e o uso de recursos de multimdia.
A documentao das APIs distribuda separadamente.
Ambiente JAVA
44
JDK
O Java Development Kit (JDK) o conjunto de ferramentas para o
desenvolvedor Java. Fazem parte do JDK:
- javac (compilador)
- java (interpretador mquina virtual)
- javadoc (gerador automtico de documentao)
- applet viewer (visualizador de Applets)
- jconsole (monitorador de aplicaes)
- javap (mostra o mneumnico de um bytecode)
- javaws (permite fazer download e executar aplicativos Java via Internet)
- Outros (/bin).
Ambiente JAVA
45
JCONSOLE
Ambiente JAVA
46
VERSES DO JDK
Desde o lanamento do primeiro JDK, em 1995, vrias verses j surgiram:
1996: Verso 1.0 do (JDK) foi disponibilizado pela Sun.
- 8 pacotes com 212 classes
- Netscape 2.0-4.0 inclua o Java 1.0.
- Microsoft e outras empresas licenciaram o Java.
1997: Verso 1.1
- 23 pacotes - 504 classes
- Microsoft desenvolveu a sua prpria Java Virtual Machine para o Internet
Explorer.
- Pacote Swing melhorado.
Ambiente JAVA
47
VERSES DO JDK
1999: Verso 1.2, tambm conhecida como Java 2 Platform:
- 59 pacotes - 1520 classes
- Collections API includa para oferecer suporte a listas, conjuntos e hash
tables.
- Diviso do Java 2:
- Java 2 Micro Edition (J2ME)
- Java 2 Standard Edition (J2SE)
- Java 2 Enterprise Edition (J2EE)
2000: Verso 1.3:
- 76 pacotes - 1842 classes;
- Melhoria de performance da JVM.
Ambiente JAVA
48
VERSES DO JDK
2002: Verso 1.4:
- 135 pacotes - 2991 classes
- Mudanas no framework Collections e nas classes de Rede
- Melhorias - IO, suporte a XML, etc.
2004: Verso 1.5 (Java Tiger):
- Introduz novidades na sintaxe
- Esta verso incluiu novas funcionalidades como Generics
- Annotations
- Autoboxing e Auto-unboxing
- Enumerations e Static import
- For-each e Varargs
- Entrada e Sada formatadas (java.util.Scanner e Formatter)
- Novos estilos look-and-feel (GTK/Linux e Windows XP)
Ambiente JAVA
49
CDIGO ANTES DO JAVA 5
List lista = new ArrayList();
// no restringe tipo dos elementos
lista.add(new Integer(25));
// boxing: converter int 25 em objeto Integer
lista.add(new Integer(33));
// boxing: converter 33 em Integer
int total = 0;
for (Iterator it = lista.iterator(); it.hasNext();) {
Integer elem = (Integer)it.next();
// iterao next() e cast explcito (Integer)
total += elem.intValue();
// unboxing: intValue()
}
Ambiente JAVA
50
CDIGO APS O JAVA 5
List lista = new ArrayList();
List<Integer> lista = new ArrayList<Integer>();
// generics: define tipo do elemento Integer
lista.add(25);
// autoboxing
lista.add(33);
// autoboxing
int total = 0;
for (Integer elem : lista) {
// for() melhorado: iterao implcita, dispensa cast
total += elem;
// autoboxing: unboxing implcito
}
Ambiente JAVA
51
VERSES DO JDK
2006: Verso 1.6 (Java Mustang):
- Suporte nativo a XML (API JAX-B)
- Novas APIs como JSR-223 (javax.script), JSR-269 (javax.annotation)
Ambiente JAVA
52
O QUE O PROJETO OPENJDK?
O OpenJDK um projeto que foi iniciado pela Sun Microsystems para a
criao de um JDK baseado totalmente em software livre e de cdigo aberto.
O projeto foi iniciado em 2006 e teve como base a JVM da Sun (HotSpot).
O projeto OpenJDK funciona como a implementao de referncia Open
Source do Java Standard Edition. Empresas como a Oracle, IBM, e Azul
Systems suportam e investem no projeto OpenJDK para continuar evoluindo
a plataforma Java.
O Oracle JDK baseado no OpenJDK, mas traz outras ferramentas como
o Mission Control, e a mquina virtual traz algumas features avanadas
como por exemplo o Flight Recorder. At a verso 6, a Oracle oferecia duas
mquinas virtuais: JRockit (BEA) e HotSpot (Sun). A partir da verso 7 a
Oracle unificou as mquinas virtuais, e levou as features avanadas do
JRockit para dentro da VM HotSpot.
Ambiente JAVA
53
CRCULO VICIOSO
Ambiente JAVA
54
VERSES DO JDK
2011: Verso 1.7 (Java Dolphin):
- Switch com suporte a String
- Nova verificao de referncia nula
- Suporte representao de Binrios
- Sufixos para byte e short
- Inicializao de Mapas de forma mais simples
- Uso mais elegante de tipos Genricos
- Tratamento de vrias excees no mesmo bloco
- Variao do bloco try{}
- Indexao de arrays com 64b
Ambiente JAVA
55
VERSES DO JDK
2014: Verso 1.8 (Descontinuado codinome):
- Expresses Lambda
- Nova API de datas
- Novos mtodos nas APIs de Collections, Concurrency, IO/NIO
- Remoo do PermGen e a criao do Metaspace para ocupar o seu lugar
- Interfaces com mtodos estticos e mtodos com implementao
- Interface com apenas um mtodo (@FunctionalInterface)
// CDIGO ANTES DO JAVA 8 (SEM LAMBDA)
List<Integer> lista = Arrays.asList(1,2,3,4,5);
For (Integer inteiro : lista)
System.out.println(Nmero: + inteiro);
// CDIGO APS O JAVA 8 (COM LAMBDA)
List<Integer> lista = Arrays.asList(1,2,3,4,5);
lista.forEach(valor->System.out.println(valor));
JAVA 8
56
A verso Java SE 8 o resultado do desenvolvimento que
envolveu reviso aberta, compilaes semanais e extensa
colaborao entre engenheiros da Oracle e membros da comunidade de
desenvolvedores Java em todo o mundo por meio da comunidade OpenJDK
e do Java Community Process (JCP).
O Java SE 8 contribui para maior produtividade do desenvolvedor e
aumentos significativos de desempenho de aplicativos, melhores colees e
anotaes, modelos de programao paralela mais simples e uso mais
eficiente de processadores multicore modernos.
Os principais recursos do JDK 8 so o Project Lambda (JSR 335), uma nova
API de data e hora (JSR 310), um conjunto de perfis compactos e a remoo
da gerao permanente da HotSpot Java Virtual Machine (JVM).
JAVA 8
57
O Oracle JDK 8 j alcanou desempenho recorde mundial em sistemas de
quatro soquetes em servidores baseados em Intel da NEC e sistemas de
dois soquetes em servidores SPARC T5 da Oracle, com uma melhoria de
desempenho de 12% a 41% em comparao com o JDK 7 na mesma
configurao Oracle .
Outro benefcio que a compatibilidade do Java SE 8 com verses
anteriores da plataforma preserva os conjuntos de habilidades dos atuais
desenvolvedores de software em Java e ajuda a proteger os investimentos
nesta tecnologia.
Obtendo o JDK 8
58
http:/ /www.oracle.com/technetwork/java/javase/downloads/index.html
Instalando o JDK 8
59
Checando a Instalao
60
Documentao da API
61
http:/ /docs.oracle.com/javase/8/docs/api/
Essa documentao descreve todas as classes Java e como elas
devem ser usadas.
Ambiente de Desenvolvimento
62
DEFINIO
Ambiente Integrado de Desenvolvimento ou IDE (Integrated Development
Environment) um programa de computador que rene ferramentas de
apoio (compilador, interpretador, debug, etc.) para o desenvolvimento de
software.
ECLIPSE
NETBEANS
INTELLIJ
JCREATOR
O Eclipse possui suporte para o Java 8 a partir da verso Luna (4.4).
Ambiente de Desenvolvimento
63
ECLIPSE
http:/ /eclipse.org/downloads/
Ambiente de Desenvolvimento
64
ECLIPSE
Ambiente de Desenvolvimento
65
ECLIPSE
Ambiente de Desenvolvimento
66
ECLIPSE
Professor
Antonio Benedito Coimbra Sampaio Jr
Primeira
Disciplina
JAVA 8 - Fundamentos Tericos e Orientao a Objetos
UNIDADE 1: Introduo Tecnologia Java
UNIDADE 2: Introduo Sintaxe Java
UNIDADE 3: Programao Orientada a Objetos em Java (Parte I)
UNIDADE 4: Programao Orientada a Objetos em Java (Parte II)
2
UNIDADE 2
INTRODUO
SINTAXE JAVA
3
Primeiro Programa JAVA
4
Inicialmente, necessrio criar um Projeto Java no Eclipse.
Primeiro Programa JAVA
5
Depois, deve-se criar a Classe Java.
Primeiro Programa JAVA
6
Digite o programa HelloWorldApp.java apresentado abaixo no editor
do Eclipse.
/*** Primeiro Programa Java ***/
class HelloWorldApp
{
public static void main(String arg[])
{
System.out.println(Hello World!);
}
}
Primeiro Programa JAVA
7
Anatomia do Programa JAVA
8
Helder da Rocha
Primeiro Programa JAVA
9
/* texto */
// texto
/*** Primeiro Programa Java ***/
COMENTRIOS
Os comentrios em Java seguem a mesma sintaxe da linguagem C;
O compilador ignora essas linhas.
CLASSE
a unidade bsica para uma linguagem O.O como Java;
class a palavra reservada que marca o incio da declarao de uma
classe.
class Nome
{
...}
Primeiro Programa JAVA
10
BLOCOS
um bloco est sempre entre chaves { }
Em Java as instrues terminam em ponto-e-vrgula (;)
MTODO MAIN
Toda aplicao Java SE deve possuir o mtodo main.
O mtodo main indica o incio de execuo de qualquer programa Java.
public static void main (String args[]){
System.out.println("Hello World!");
}
MTODO PRINTLN
Escreve na tela o contedo nos parntesis.
Chamada do mtodo println para o atributo out da classe System.
O argumento (...) do tipo String.
Detalhes Importantes
11
BLOCOS
Um programa fonte Java deve sempre ter a extenso .java;
Um programa Java compilado deve sempre ter a extenso .class;
A linguagem case-sensitive, letras maisculas so diferentes de letras
minsculas;
Cada programa uma classe;
Nome da classe no programa tem que ser igual ao nome do arquivo fsico
.java;
Sintaxe similar a linguagem C/C++;
As classes podem estar agrupadas em package;
Package um subdiretrio. Exemplo: java.awt, java.math;
As classes podem ser compactadas (zip ou jar);
Exerccios
12
1) Escreva um programa Java que imprima na tela vrias mensagens de
texto.
2) Adapte o mesmo programa para mostrar as mensagens como uma janela
grfica.
- Dica: Pesquise na Java SE DOC API a classe JOptionPane.
Estruturas de Programao
13
IDENTIFICADORES
Nomeiam variveis, funes, classes e objetos;
Podem conter letras e/ou dgitos, _ e $;
No podem ser iniciados por dgito;
No podem ser palavras reservadas;
No tem tamanho mximo.
VARIVEIS
Variveis so usadas em linguagens em geral para armazenar valores
Valores so passados para variveis atravs de operaes de atribuio
Sintaxe Padro no Java:
<TIPO_VARIAVEL> nomeVariavel;
Exemplo:
int anoNascimento;
Nomes das Variveis
14
VLIDOS
INVLIDOS
Nome NumDepen
total_geral NOME
1prova
total geral
class // Palavra-chave
Palavras-Chaves
15
Tipos das Variveis
16
Atribuio s Variveis
17
A ATRIBUIO REALIZADA COM O OPERADOR =
= serve apenas para atribuio no pode ser usado em comparaes (que
usa ==)!
Copia o valor da varivel ou constante do lado direito para a varivel do lado
esquerdo.
EX: y = 13; // copia a constante inteira 13 para y
INICIALIZAO PADRO JAVA
variveis numricas com 0;
variveis booleanas com false;
outras variveis com null.
Declaraes das Variveis
18
DECLARAES E ATRIBUIES DAS VARIVEIS
As declaraes podem ser exibidas em qualquer posio do cdigo-fonte.
int x, y;
float z = 3.144f;
double w = 3.1415;
boolean verdade = true;
char c, d;
c = A;
d = \u0013;
x = 6;
y = 1000;
Declaraes das Variveis
19
LGICO
boolean terminou;
terminou = true;
terminou = false;
TEXTO
char: representa um caracter Unicode de 16 bits (exemplos: a, M, \t,
\u02B1)
String: representa uma seqncia de caracteres.
char opcao;
opcao = s;
opcao = n;
String frase;
frase = Ordem e Progresso;
Declaraes das Variveis
20
TIPO INTEGRAL (INTEIRO)
Representaes: 2 (decimal) / 077 (octal) / 0xBA (hexadecimal)
byte 8 bits 2
7
... 2
7
-1
short 16 bits 2
15
... 2
15
-1
int 32 bits 2
31
... 2
31
-1
long 64 bits 2
63
... 2
63
-1
INTEIRO
byte index = 50;
short soma = 2000;
int num_carros = 5;
long valor = 0XDADAL;
Declaraes das Variveis
21
TIPOS PONTO FLUTUANTE (REAL)
float (32 bits)
double (64 bits)
Representaes: 3.14 / 6.02E23 / 2.718F / 123.4E+306D
float pi = 3.1415f;
double pi = 3.1415;
TIPO NUMRICO COM UNDERSCORE
Exerccios
22
1) Escreva um programa que calcule o faturamento trimestral de uma
empresa de software. Sabendo que, em Janeiro, as vendas foram de
R$15.000, em Fevereiro, R$23.000 e em Maro, R$17.000. O valor final
dever ser impresso na tela.
2) Adapte o programa acima para que a leitura das vendas mensais seja
informada pelo usurio final .
- Dica: Pesquise na Java SE DOC API o mtodo showInputDialog(..,..) da classe
JOptionPane.
Operadores
23
Um operador produz um novo valor a partir de um ou mais argumentos
Os operadores em Java so praticamente os mesmos encontrados em
outras linguagens
+, -, /, *, =, ==, <, >, >=, &&, etc.
A maior parte dos operadores s trabalha com valores de tipos primitivos.
Excees:
+ e += so usados na concatenao de strings
!=, = e == so usados tambm com objetos
Lista de Operadores JAVA
24
Operadores Matemticos
25
(+) Soma
(- ) Subtrao
(*) Multiplicao
(/) Diviso
(%) Resto
O operador + no apenas aritmtico (por exemplo, pode ser utilizado
para inicializao e concatenao de strings);
Existe o tipo booleano, logo os operadores relacionais e lgicos NO
geram inteiros.
ATENO (PROGRAMADORES C/C++):
Operadores Relacionais
26
(==) igual
(!= ) diferente
( < ) menor
(<=) menor ou igual
( > ) maior
(>=) maior ou igual
Sempre produzem um resultado booleano (true ou false).
Operadores Lgicos
27
(&&) E
(||) OU
( ! ) Negao
Sempre produzem um resultado booleano (true ou false).
Exerccios
28
1) Escreva um programa Java que leia o valor de dois nmeros inteiros e
calcule as operaes aritmticas abaixo.
(+) Adio
(-) Subtrao
(/) Diviso
(*) Multiplicao
2) Adapte o programa acima para fazer uso dos Operadores Relacionais e
Lgicos listados abaixo:
( < ) menor
( > ) maior
(>=) maior ou igual
(&&) E ( | | ) OU
Controle de Execuo
29
O controle do fluxo da execuo em Java utiliza os mesmos comandos
existentes em outras linguagens;
Seleo: if-else, switch-case
Repetio: for, while, do-while
Desvios (somente em estruturas de repetio): continue e
break
No existe o comando goto.
Seleo
30
IF-ELSE
Seleo
31
IF-ELSE
if (cont == 0)
{
System.out.Println(Cont = 0);
}
else if (cont == 1)
{
System.out.println(Cont = 1);
}
else
{
System.out.println(Cont = Erro);
}
Seleo
32
SWITCH - CASE
Seleo
33
SWITCH CASE
BREAK E DEFAULT
A instruo break (opcional) impede que o fluxo de execuo continue
pelas opes seguintes;
A instruo default (opcional) chamada quando nenhuma clusula
case for executada.
char cor = ;
switch (cor){
case 0:
setBackground(Color.black);
break;
case 2:
setBackground(Color.red);
break;
default:
setBackground(Color.white);
break;
}
Seleo
34
SWITCH CASE COM STRING
String cor = ;
switch (cor)
{
case azul:
setBackground(Color.black);
break;
case vermelho:
setBackground(Color.red);
break;
default:
setBackground(Color.white);
break;
}
Exerccio
35
1) Escreva um programa que leia uma nota (0 a 100) e escreva o conceito
associado.
[90,100] Excelente
[70,90[ Bom
[50, 70[ Regular
[0,50[ Insuficiente
Repetio
36
WHILE & DO-WHILE
int cont = 0;
while (cont < 100){
System.out.println(contando + cont);
cont++;
}
int cont = 0;
do {
System.out.println(contando + cont);
cont++;
} while (cont <100);
Repetio
37
CONTINUE
A instruo continue (opcional) interrompe o fluxo de execuo de um
bloco de repetio.
Repetio
38
FOR
for (int x=0; x<10; x++)
{
System.out.println(Valor do X : + x);
}
Repetio
39
FOR-EACH
for (var: Collection framework)
{bloco de comandos}
int nums[]={1,2,3,4,5,6,7,8,9,10};
int sum = 0;
for (int x:nums)
{
sum = sum + x;
}
Exerccios
40
1) Escreva um programa para calcular a mdia aritmtica, maior e menor
valores de um conjunto de valores inteiros positivos.
- Observao: considere o valor (-1) como finalizador.
2) Escreva um programa para gerar a seguinte srie abaixo para os 50
primeiros termos.
...
5 4 3 2 1
5 4 3 2 1
+ + + + + =
x x x x x
e
x
Vetores (Arrays)
41
DECLARAO
Podem ser declarados arrays de quaisquer dos tipos atravs dos
smbolos [ e ].
A declarao no cria o array, isto , no aloca memria. Isso feito pela
instruo new (arrays so objetos em Java).
Os colchetes podem ser usados antes ou depois da varivel.
Exemplo: char s[] ou char []s;
char s[ ]; // declarao
s = new char[3]; // Criao
s[0] = A; s[1] = B;
s[2] = C; // atribuio
Vetores (Arrays)
42
DECLARANDO, CRIANDO E INICIALIZANDO
Em Java, array um objeto, mesmo quando composto por tipos
primitivos. Apenas a declarao no cria o objeto, sendo necessrio o
uso da palavra reservada new.
Quando um array criado, todos os seus elementos so inicializados:
- null, para objetos;
- 0, para int, long, short, byte, float, double;
- Unicode 0, para char;
- false, para boolean.
char s[ ] = {A,B,C};
// declarao, criao e inicializao
Vetores (Arrays)
43
DECLARANDO, CRIANDO E INICIALIZANDO
Point p[ ] = new Point[5];
p[0] = new Point();
p[1] = new Point();
Vetores (Arrays)
44
Arrays no podem ser dimensionados na definio:
Arrays no podem ser utilizados sem a criao:
Todo vetor em Java possui a propriedade length que informa o nmero
de elementos que possui.
length uma propriedade read-only e j foi extremamente til em
blocos de repetio antes do JAVA 5.
int vector[5]; //ERRADO!
int vector[];
vector[0] = 4; //ERRADO!
LENGTH
Vetores (Arrays)
45
LENGTH
//ANTES DO JAVA 5
int lista [] = new int [10];
for (int j = 0; j < lista.length; j++)
{
System.out.println(lista[j]);
}
//APS O JAVA 5
int lista [] = new int [10];
for (int j : lista)
System.out.println(j);
Vetores (Arrays)
46
TIPOS PRIMITIVOS X OBJETOS
Helder da Rocha
Matrizes
47
VETORES MULTIDIMENSIONAIS
int matriz [][] = new int [4][4];
matriz [0][0] = 300;
matriz [1][3] = 600;
300
600
//MATRIZ NULA
for(x=0; x <4; x++)
for (y=0; y <4; y++)
matriz[x][y] = 0;
Exerccios
48
1) Escreva um programa que leia um vetor A de 50 elementos, construa e
imprima outro vetor B da seguinte forma:
- Os elementos de ordem par so correspondentes a (2*A);
- Os elementos de ordem mpar so correspondentes a (A/2).
2)Construa uma matriz Identidade I=3 (apenas os valores diagonais so = 1).
Todos os outros so 0.
Professor
Antonio Benedito Coimbra Sampaio Jr
Primeira
Disciplina
JAVA 8 - Fundamentos Tericos e Orientao a Objetos
UNIDADE 1: Introduo Tecnologia Java
UNIDADE 2: Introduo Sintaxe Java
UNIDADE 3: Programao Orientada a Objetos em Java (Parte I)
UNIDADE 4: Programao Orientada a Objetos em Java (Parte II)
2
UNIDADE 3
PROGRAMAO
ORIENTADA A OBJETOS
EM JAVA (PARTE I)
3
Orientao a Objetos
4
Paradigma do momento na Engenharia de Software, pois afeta a
anlise, o projeto e a codificao do software;
A Anlise Orientada a Objetos:
- Determina o que o sistema deve fazer: Quais os atores envolvidos?
Quais as atividades a serem realizadas?
- Decompe o sistema em objetos: Quais so? Quais tarefas cada
objeto ter que fazer?
O Projeto Orientado a Objetos:
- Define como o sistema ser implementado;
- Modela os relacionamentos entre os objetos e atores (pode-se usar
uma linguagem especfica como UML);
- Utiliza e reutiliza abstraes como classes, objetos, funes,
frameworks, APIs, padres de projeto.
Anlise O.O (1) x
Anlise Procedural (2)
5
Helder da Rocha
Vantagens da Anlise O.O
6
A Orientao a objetos ajudar a melhor organizar e escrever menos
cdigo, alm de concentrar as responsabilidades nos pontos certos,
flexibilizando a aplicao e encapsulando a lgica de negcios;
Outra enorme vantagem, onde se vai economizar muito cdigo, o
polimorfismo das referncias, que ser visto mais adiante.
O Mundo composto de Objetos!
7
O que um Objeto?
8
UTILIDADES
Facilita a compreenso;
Oferece base real para implementao no computador.
DEFINIES
Uma Abstrao;
Alguma coisa que faz sentido no domnio da aplicao.
Descrio de um Objeto
9
Um objeto representado por um conjunto de atributos (tambm
conhecidos como propriedades) e por um conjunto de mtodos (que
definem o comportamento de um dado objeto):
Motor
Cor
Potncia
Fabricante
Acelerar
Retroceder
Parar
Abastecer
Atributos Mtodos
substantivos
verbos
Exemplo de um Objeto
10
Motor: V12
Cor: Azul
Potncia: 600cv
Fabricante:
Ferrari
Atributos Mtodos
substantivos verbos
Acelerar
Retroceder
Parar
Abastecer
Classe de Objetos
11
DEFINIO
O grupo de objetos que possuem os mesmos atributos e mtodos diz-se que
pertencem mesma classe.
Classe Carro
Classe de Objetos
12
CLASSES X OBJETOS
O grupo de objetos que possuem os mesmos atributos e mtodos diz-se que
pertencem mesma classe.
Classe de Objetos
13
CLASSES X OBJETOS
Uma classe um modelo ou prottipo que define as propriedades e mtodos
(comportamento) comuns a um conjunto de objetos;
Classes so moldes que definem as variveis e os mtodos comuns a
todos os objetos de um determinado tipo;
No mundo real existem vrios objetos do mesmo tipo. Por exemplo, o seu
carro um dos milhares que existem no mundo;
Usando a terminologia de orientao a objetos, o objeto seu carro uma
instncia da classe de objetos carro.
Orientao a Objetos em JAVA
14
Programas em Java provavelmente iro criar diversos objetos de diversos
tipos de classes;
Os objetos interagem entre si atravs da troca de mensagens;
Aps o objeto ter realizado o trabalho proposto, o mesmo eliminado
atravs da coleta automtica de lixo;
Para a construo de software em Java, faz-se uso:
- Das classes j existentes no Java:
- String (java.lang)
- List, Iterator, etc. (Collections API)
- Frame (java.awt)
- Outras.
Das novas classes criadas pelo engenheiro de software.
Classe String
15
A classe String representa uma seqncia de caracteres;
O seu objeto pode ser criado com ou sem a palavra reservada new;
Operaes com String:
String e = ; // uma string vazia
String alo = Alo Pessoal;
String nova;
nova = Sou nova;
String nome = new String(Antonio);
// Concatenao
String nova = alo + , tudo Ok ?;
// Edio
String substr = alo.substring(0,3); // Alo
// Verificando tamanho
int tam = alo.length(); // tamanho = 11
Nova Classe em JAVA
16
DECLARAO
Atributos
Mtodo
Carro
+ motor: String
+ cor: String
+ acelerar(): void
Classe
Representao em UML
Novo Objeto em JAVA
17
Um objeto de uma classe criado utilizando-se a palavra new.
null
car1
car1
Carro car1;
// cria apenas a referncia
Carro car1 = new Carro();
// aloca memria e atribui
// endereo referncia
Exemplo
18
Para cada objeto do tipo Carro criado, alocado um espao de memria
especfico.
class Aplicacao {
public static void main(String arg[])
{
Carro car1, car2, car3;
car1 = new Carro();
car2 = new Carro();
car3 = new Carro();
if (car1.TemGasolina())
{ car1.ligar();}
if (car2.TemGasolina())
{ car2.ligar();}
}
}
Objeto Carro:
Instncia 2
Instanciando Objetos
Objeto Carro:
Instncia 1
Objeto Carro:
Instncia 3
Atributos
19
As propriedades dos objetos podem ser manipuladas diretamente pelo
operador de ponto (.).
Os valores das propriedades podem ser obtidos facilmente pelo operador de
ponto (.)
Carro car1 = new Carro();
car1.cor = azul;
car1.fabricante = ferrari;
System.out.println(Cor carro: + car1.cor); //azul
System.out.println(Fabricante carro: + car1.fabricante);
//ferrari
Exerccio
20
1) Escreva uma classe Casa com trs atributos. No mtodo main(...) crie trs
objetos da mesma.
Mtodos
21
Definem o comportamento da classe;
Possuem sintaxe semelhante sintaxe de definio das funes de um
programa procedural;
Determinam o comportamento da classe e a troca de mensagens com outras
classes.
DECLARAO
class Carro {
String fabricante, cor;
int capacidadeTanque;
float consumo;
public float autonomia ( ) {
return capacidadeTanque * consumo;
}
}
Mtodos
22
ASSINATURA
A PALAVRA-CHAVE RETURN
A palavra-chave return especifica o que ser retornado aps a chamada a
um mtodo. Se o mtodo for void, no haver o uso do return.
() autonomia float
Tipo de Retorno Nome Argumento
Chamadas de Mtodos
23
A troca de mensagens entre os objetos realizada atravs da chamada de
mtodos.
EXEMPLO
class Aplicacao
{
public static void main (String args[]) {
Carro car1 = new Carro();

System.out.println(car1.autonomia());
}
}
Chamada do mtodo
Mtodo MAIN(...)
24
O mtodo main() chamado (automaticamente) pelo interpretador Java;
Sempre deve possuir a seguinte assinatura:
Exerccio
25
Na classe Casa (construda no exerccio anterior), crie o mtodo abrePorta().
Ao ser executado este mtodo, retornar falso se a pessoa no possuir a
chave dessa casa. Caso contrrio, retornar verdadeiro.
Palavra Reservada 'THIS'
26
As vezes necessrio que o objeto se auto-referencie;
Existe uma palavra reservada this que significa uma referncia ao prprio
objeto.
class Carro {
float consumo;
void acelerar(float consumo) {
this.consumo = consumo;
}
}
Passagem de Argumentos
27
TIPOS DE ARGUMENTOS
Objetos (Passagem por Referncia) - As referncias originais so sujeitas
a alteraes dentro do mtodo;
Tipos Primitivos (Passagem por Valor) As referncias originais no so
sujeitas a alteraes dentro do mtodo.
class Conta {
int cpf, numero;
float saldo;
public boolean transfere (Conta conta,
float valor) {
...
boolean resultado = true;
}
}
Objeto
Tipo
Variveis Locais
28
Alm das propriedades de um objeto, podem ser definidas variveis, locais a
um mtodo ou a um bloco de operaes;
Essas variveis existiro enquanto o procedimento (mtodo, bloco de
controle de execuo) a que estiverem associadas for executado;
No podem ser usadas fora do procedimento onde foram criadas;
No pode ter modificadores de acesso (private, public, package).
Variveis Locais
29
Tipos de Variveis Locais
30
As variveis podem ser declaradas por um tipo primitivo (int, float, char, etc.)
ou por um tipo de Classe (prpria ou do Java);
No primeiro caso (tipo primitivo), o espao em memria alocado como
parte da operao. No segundo caso (tipo Classe), no h prvia alocao
de memria, somente quando o objeto da classe for criado pela chamada da
instruo new.
Exerccio
31
1) Crie a classe Conta conforme o diagrama abaixo:
2) Posteriormente, implemente o mtodo transfere conforme o trecho de
cdigo abaixo:
lconta1.transfere(conta2, 50);
lA leitura deste cdigo seria Conta1 transfere para conta2 50 reais.
VARARGS
32
ASSINATURA TRADICIONAL DE MTODO
No exemplo do mtodo somar, se houver necessidade de incluir mais notas,
por exemplo quatro, o mesmo mtodo dever ser alterado.
public static void somar(double n1, double n2)
{
double soma = n1 + n2;
System.out.println(soma);
}
public static void somar(double n1, double n2,
double n3, double n4)
{
double soma = n1 + n2 + n3 + n4;
System.out.println(soma);
}
VARARGS
33
Com o recurso do VARARGS (Variable-Length Arguments) possvel
declarar um mtodo sem especificar a quantidade de parmetros exata,
trazendo maior flexibilidade ao desenvolvedor.
Com esta nova assinatura, o mtodo somar pode receber de 0 a N
parmetros (neste caso, nmeros do tipo double).
public static void somar(double ...numeros)
{
double soma = 0;
for(double numero: numeros)
soma = soma + numero;
System.out.println(soma);
}
VARARGS
34
SINTAXE
No possvel declarar novos parmetros aps o uso de varargs.
EXEMPLO INVLIDO
EXEMPLO VLIDO
void doIt(int a, int b, int ...v) {
//instrues
}
void doIt(int a, int b, int ...v, int c){
//instrues
}
Construtores
35
Utiliza-se construtores para inicializar o estado inicial dos objetos de uma
determinada classe, isto , atribuir valores aos seus atributos no momento de
criao do objeto pela instruo new;
Os Construtores possuem o mesmo nome da classe e no tm tipo de
retorno;
class Carro {
float consumo;
...
Carro(float consumo) {
this.consumo = consumo;
}
Carro() { ...
}
}
Construtores
36
Toda classe Java define (implicitamente) um construtor padro vazio, isto ,
no h atribuio de valores aos atributos de um determinado Objeto;
Carro car1 = new Carro();
// chamado o construtor vazio
class Carro {
float consumo;
...
Carro() { ...
}
}
Construtor
Construtores
37
Quando se cria um novo construtor em uma determinada classe, p construtor
padro (vazio) deixa de existir e substitudo pelo novo criado pelo
desenvolvedor;
Carro car1 = new Carro(500);
// chamado o novo construtor
class Carro {
...
Carro(float consumo)
{
...
}
}
Carro car1 = new Carro();
Construtores
38
No Java possvel criar uma classe com vrios construtores;
A escolha de qual construtor ser chamado vai depender dos argumentos
que sero passados (ou no) no momento da criao do Objeto.
class Carro {
float consumo;
...
Carro(float consumo) {
this.consumo = consumo;
}
Carro() { ...
}
}
Construtores
39
EXEMPLO
Carro car1 = new Carro();
// chamado o construtor vazio
Carro car2 = new Carro(500);
// chamado o construtor que
//recebe parmetro
Exerccios
40
1) Crie pelo menos dois construtores para a Classe Conta do exerccio
anterior.
2) Altere o atributo nome da Classe Conta para ser um tipo de objeto
Cliente.
Membros de Classe
41
Como j foi visto, uma classe composta de atributos e mtodos (tambm
conhecidos como seus membros);
No Java, possvel que esses membros sejam de objeto ( o comum, j
estudado at aqui) e que tambm sejam de classe (a ser estudado agora);
Os Membros de Classe ou Estticos so aqueles utilizados para fazer
referncia a uma determinada classe, sem haver qualquer relao com os
objetos que sero criados da mesma. Neste caso, no se replicam quando
novos objetos so criados.
Todo membro de classe (atributo e mtodo) deve usar o qualificador static.
Membros de Classe
42
QUANDO UTILIZAR?
Considere o trecho de cdigo abaixo. Pergunta-se: possvel saber o total
de contas criadas pela classe Contas?
Com o cdigo acima, o valor de 'totalDeContas' ser sempre 1!
Por qu? Como o referido atributo 'de objeto', toda vez que um objeto
'Conta' for criado, o valor de sua varivel 'totalDeContas' ser 1!
Soluo: o referido atributo dever ser de 'Classe', sendo nico para todos
os objetos dessa classe.
Membros de Classe
43
SOLUO
Com o cdigo acima, o atributo 'totalDeContas' passa a ser nico e o seu
contedo nico para a classe 'Conta';
Para ter acesso a um atributo esttico, utiliza-se a sintaxe:
<<Classe.membro_esttico>>
Exemplo: Conta.totalDeContas
Membros de Classe
44
SOLUO
Conta
Joao
Maria
totalDeContas
nome
nome
Membro de
Classe
new Conta();
new Conta();
Exerccio
45
1) Alterar o construtor da Classe Conta incluindo a varivel totalDeContas
(com e sem static).
Procedimentos de Inicializao
46
Usados para inicializar objetos ou classes.
class Example {
...
static {
...
}
}
Membros de Classe (Resumo)
47
Helder da Rocha
Membros Constantes
48
So declarados com a palavra reservada final
class Teste {
// Atributos constantes
final int ESQUERDA = 0;
final int DIREITA = 0;
// Mtodo constante
private final static void main (String args[]) {
...
}
...
}
Atributos Constantes
49
Utilizados para determinar valores que no podem ser alterados;
As constantes geralmente so utilizadas em mtodos.
class Teste {
// Atributos constantes
public static final int INVERNO = 0;
public static final int PRIMAVERA = 1;
public static final int VERAO = 2;
public static final int OUTONO= 3;
}
setEstacao(int estacao){ ... }
Membros de Classe
50
DESVANTAGENS
(1) No typesafe: como estacao apenas um int, o seguinte cdigo
possvel:
setEstacao(4); //estao no existente
(2) No tem namespace: mistura-se com outras constantes existentes na
classe;
(3) Requer recompilao do cdigo se novas constantes forem adicionadas.
SOLUO: ENUMERATIONS
ENUMERATIONS
51
So classes Java que definem constantes;
No podem ser instanciadas usando a palavra new.
Os nicos valores aceitos por um tipo enum so os valores previamente
definidos.
public enum Conceito
{
RUIM, REGULAR, BOM, EXCELENTE
}
Conceito c = Conceito.EXCELENTE;
if (c == Conceito.REGULAR)
...
switch (c)
{
case RUIM:
//...
ENUMERATIONS
52
Essas classes podem possuir construtores, mtodos e atributos de instncia.
public enum Estacao {
INVERNO, PRIMAVERA, VERAO, OUTONO;
}
public class TesteEstacao {
public static void main(String[] args) {
for (Estacao estacao: Estacao.values())
System.out.println(estacao);
}
}
ENUMERATIONS
53
Definindo valores s Constantes:
As constantes so sempre declaradas no incio.
public enum Estacao {
INVERNO(1), PRIMAVERA(2), VERAO(3), OUTONO(4);
private int valor;
Estacao(int valor){
this.valor = valor;
}
public int getValor(){
return this.valor;
}
}
MTODOS CONSTANTES
54
So aqueles que no podem ser modificados no processo de herana.
class Teste {
// Mtodo constante
private final static void main (String args[]) {
...
}
...
}
MTODOS CONSTANTES
55
So aqueles que no podem ser modificados no processo de herana.
class Teste {
// Mtodo constante
private final static void main (String args[]) {
...
}
...
}
Exerccio
56
1) Crie um tipo Enumeration com as propriedades (nome,endereco,bandeira)
de um Revendedor de Veculos. Essas propriedades sero acessadas por
um mtodo especfico (getRevendedor()) da classe Veiculo.
BOAS PRTICAS AO ESCREVER
CLASSES
57
Use, e abuse, dos espaos;
A ordem dos membros no importante, mas seguir convenes melhora a
legibilidade do cdigo:
- Mantenha os membros do mesmo tipo juntos (no misture mtodos
estticos com mtodos de instncia)
- Declare as variveis antes ou depois dos mtodos (no misture mtodos,
construtores e variveis)
- Mantenha os seus construtores juntos, de preferncia bem no incio
Se for necessrio definir blocos static, defina apenas um, e coloque-o no
incio ou no final da classe.
Professor
Antonio Benedito Coimbra Sampaio Jr
Primeira
Disciplina
JAVA 8 - Fundamentos Tericos e Orientao a Objetos
UNIDADE 1: Introduo Tecnologia Java
UNIDADE 2: Introduo Sintaxe Java
UNIDADE 3: Programao Orientada a Objetos em Java (Parte I)
UNIDADE 4: Programao Orientada a Objetos em Java (Parte II)
2
UNIDADE 4
PROGRAMAO
ORIENTADA A OBJETOS
EM JAVA (PARTE II)
3
Encapsulamento
4
Esconder os detalhes da implementao de um objeto chamado
encapsulamento.
Isto feito com a restrio de acesso aos mtodos e atributos de uma
classe, tendo por objetivo proteger os dados contra uma modificao
imprpria.
Encapsulamento
5
O encapsulamento fundamental para garantir que as mudanas em
uma determinada classe, no afete o funcionamento das outras
classes que se relacionam com ela, visto que as regras de negcios
ficam definidas em apenas um nico lugar.
Simplifica o acesso a um determinado objeto, expondo apenas a sua
interface essencial.
possvel alterar a visibilidade de Atributos e Mtodos de uma
classe, fazendo-se uso dos chamados Modificadores de Acesso.
Estes esto listados abaixo:
PUBLIC
PRIVATE
PACKAGE
PROTECTED
Modificadores de Acesso
6
PUBLIC
Acessvel na prpria classe, nas subclasses, nas classes do mesmo pacote
e por todas as outras classes.
Resumindo: acessvel por todo mundo!
Deve ser utilizado preferencialmente para construtores e mtodos que
fazem parte da interface do objeto.
Evite usar em construtores, mtodos de uso restrito e campos de dados de
objetos.
PRIVATE
Acessvel apenas na prpria classe!
Use para mtodos que no fazem parte da interface do objeto e para
campos de dados de objetos.
Public x Private
7
w.tiagodemelo.info
Exemplo
8
class Pessoa {
private String nome; private int idade;
public String obs;
Pessoa (String nome, int idade) {
this.nome = nome;
}
public void imprimeNome() {
System.out.println(Nome: + nome);
}
}
...
Pessoa p1 = new Pessoa(Joao,10);
p1.nome = Raul;//ERRO DE COMPILAO!
p1.obs = bom garoto; //OK!
p1.imprimeNome(); //OK!
// Nome: Joao
Modificadores de Acesso
9
PROTECTED
Acessvel na prpria classe, nas subclasses e nas classes do mesmo
pacote.
Use para mtodos que devem ser sobrepostos.
Evite usar em mtodos com restrio sobreposio e em campos de
dados de objetos.
PACKAGE
Acessvel na prpria classe, nas subclasses e nas classes do mesmo
pacote.
Se no houver outro modificador de acesso, o acesso desse tipo.
Use para construtores e mtodos que s devem ser chamados pelas classes
e subclasses do pacote.
Evite usar em campos de dados de objetos.
Exerccios
10
1) Na classe Casa construda na Unidade 3, atribua o modificador de acesso
indicado;
2) Na classe Conta construda na Unidade 3, atribua o modificador de
acesso indicado;
Mtodos Getters e Setters
11
Para permitir o acesso aos atributos private de uma maneira controlada, a
prtica mais comum criar dois mtodos, um que retorna o valor e outro que
muda o valor.
A conveno para esses mtodos de colocar a palavra get ou set antes do
nome do atributo.
importante ressaltar que uma m prtica criar uma classe e, logo em
seguida, criar getters e setters para todos seus atributos. Mtodos getter e
setter s se houver real necessidade.
Java Bean
12
Quando se cria uma classe com todos os seus atributos privados, todos os
seus mtodos get e set e um construtor vazio (padro), na verdade est se
construindo um Java Bean.
Um Java Bean no um EJB (Enterprise Java Beans - tecnologia de objetos
distribudos em Java).
Exerccios
13
1) Crie um JavaBean para a classe Casa.
2) Crie um JavaBean para a classe Conta.
Reuso
14
Para entregar software de qualidade em menos tempo, preciso reutilizar.
O Reuso veio para agilizar o processo de desenvolvimento de software,
aumentando a sua confiabilidade e diminuindo o seu custo, de uma forma
simples e contemplando as boas prticas de engenharia de software.
Principais Formas de Reuso:
Reuso - Composio
15
Criao de uma nova classe usando classes existentes como atributos.
import java.util.*;
class Trem
{
Locomotiva locomotiva = new Locomotiva();
Collection<Vagao> vagao = new ArrayList<Vagao>();
...
}
Reuso - Agregao
16
Criao de uma nova classe usando classes existentes como atributos.
import java.util.*;
class Locomotiva
{
Collection<Farol> farol = new ArrayList<Farol>();
...
}
Reuso - Associao
17
Criao de uma nova classe fazendo uso de outras usando classes
(acoplamento menor).
class Trem
{
EstradaDeFerro estrada = new EstradaDeFerro();
...
}
Exerccio
18
1) Utilize a tcnica de Reuso mais adequada para representar o
relacionamento das classes Conta e Cliente.
Reuso - Herana
19
Criao de novas classes estendendo classes existentes. O relacionamento
um [subtipo de].
class Veiculo
{
...
}
class Carro extends Veiculo
{
...
}
Reuso - Herana
20
Herana um mecanismo que permite a uma classe herdar todos os
mtodos e os atributos de outra classe.
Uma classe que herda de outra classe chamada subclasse e a classe que
fornece a herana chamada superclasse.
A classe A a superclasse de B.
A classe B uma subclasse de A.
A classe B a superclasse de C, D e E.
As classes C, D e E so subclasses de B.
Classe A
Classe B
Classe E Classe D Classe C
Reuso - Herana
21
As superclasses definem atributos e mtodos genricos que sero herdados
pelas classes derivadas.
Um mtodo herdado de uma superclasse pode ser redefinido pela classe
derivada, mantendo o mesmo nome mas agindo de forma diferente.
Normalmente os atributos de um objeto s podem ser consultados ou
modificados atravs dos seus mtodos (getters e setters).
Reuso - Herana
22
Java adota o modelo de rvore.
A classe Object a raiz da hierarquia de classes qual todas as classes
existentes pertencem.
http:/ /docs.oracle.com
Reuso - Herana
23
Quando no declaramos que uma classe estende outra, ela, implicitamente,
estende Object.
Uma classe Java estende apenas uma outra classe (herana simples ou
nica).
Para criar uma subclasse, usamos a palavra reservada extends.
Os construtores das subclasses no herdam os construtores das
superclasses. Portanto, a chamada a elas deve ser feita pelo uso do
comando super().
Reuso - Herana
24
Reuso - Herana
25
class Forma {
...
}
class Circulo extends Forma {
...
}
class Quadrado extends Forma {
...
}
class Triangulo extends Forma {
...
}
Herana em Java
26
Classe
Classe Classe
Classe Classe
Objeto Objeto
Definio de
mtodo
A mensagem enviada ao
objeto e percorre
verticalmente uma
hierarquia de classe at que
uma definio seja
encontrada.
Como realizada a chamada de mtodos em uma hierarquia de classes.
Herana em Java
27
O uso de herana aumenta o acoplamento entre as classes, isto , a
dependncia de uma classe em relao a outra.
A relao entre classe pai e filha muito forte e isso acaba fazendo com
que o desenvolvedor tenha que conhecer a implementao da superclasse e
das suas subclasses.
O forte acoplamento da Herana dificulta a mudana pontual no sistema.
Mesmo depois de reescrever um mtodo da superclasse, a subclasse ainda
pode acessar o mtodo da superclasse.
Sintaxe padro: super.mtodo().
Herana em Java
28
DIFERENAS super e super()
A palavra reservada super utilizada para fazer referncia aos membros
(atributos e mtodos) da superclasse.
O comando super() utilizado para chamar construtores da superclasse.
Por definio, o super() chamado (implicitamente) pelo construtor da
subclasse. Se houver necessidade de cham-lo explicitamente, os seus
argumentos devero ser informados.
Por fim, toda a chamada a super() dever ser feita na primeira instruo do
construtor da subclasse.
Herana em Java
29
DIFERENAS super e super()
class Circulo extends Forma {
public float raio;
Circulo(float raio){
super(raio);
...
}
public void apaga() ){
super.apaga();
...
}
}
Exerccio
30
1) Implemente o relacionamento de Herana apresentado abaixo.
Herana em Java
31
MANIPULAO DE MTODOS NAS SUBCLASSES
Sobrecarga (overloading)
Ocorre quando uma subclasse define um mtodo com o mesmo nome
do mtodo herdado da superclasse, contudo com a sua assinatura
diferente.
Anulao ou Sobreposio (overriding)
Ocorre quando uma subclasse define um mtodo com o mesmo nome e
a mesma assinatura do mtodo herdado da superclasse.
Mtodos constantes no podem ser sobrepostos.
Extenso
Ocorre quando uma subclasse define novos mtodos, sem qualquer
relao com os mtodos herdados da superclasse.
Sobrecarga (overloading)
32
EXEMPLO DE SOBRECARGA
Uma boa prtica usar a sobrecarga, somente, nos mtodos que possuam a
mesma funcionalidade.
A sobrecarga pode ser feita igualmente nos mtodos construtores.
Sobrecarga (overloading)
33
EXEMPLO
void mover (int dx, int dy) {
x += dx;
y += dy;
}
void mover (int raio, float ang) {
x += raio*Math.cos(ang);
y += raio*Math.sen(ang);
}
void doIt(int ...v){
//instrues
}
void doIt(boolean ...v){
//instrues
}
SUPERCLASSE
SUBCLASSE
SUPERCLASSE
SUBCLASSE
Sobrecarga (overloading)
34
EXEMPLO - CONSTRUTOR
A sobrecarga de construtores visa definir diferentes formas de criar um objeto.
Exemplo:
class Ponto {
int x, y;
Ponto () { }
Ponto (int x, int y) {
this.x = x;
this.y = y;
}
}
Ponto p1 = new Ponto();//p1 est em (0,0)
Ponto p2 = new Ponto(1,2);//p2 est em (1,2)
Sobrecarga (overloading)
35
ENCADEAMENTO DE CONSTRUTOR
O encadeamento de construtor ocorre quando um construtor faz referncia a
outro. Isto feito pelo uso do comando this().
Essa chamada dever ser feita na primeira linha do construtor!
Ponto () {
this(0,0);
}
Ponto (int x, int y) {
this.x = x;
this.y = y;
}
Sobrecarga (overloading)
36
DIFERENAS this e this()
A palavra reservada this utilizada para informar que a varivel manipulada
um atributo da classe, e no uma simples varivel.
No exemplo anterior, os atributos x e y de Ponto recebem os valores passados
pelas variveis x e y.
O comando this() utilizado para chamar construtores.
Sobrecarga (overloading)
37
DIFERENAS this e super
Usados quando for necessrio referenciar explicitamente a instncia (this) ou
a superclasse (super).
No confundir this e super com this() e super(). Estes ltimos so usados
apenas em chamadas de construtores!
Anulao (overriding)
38
Funcionamento quando uma subclasse define um mtodo que possui a
mesma assinatura do mtodo herdado da superclasse.
Classe
Classe
Classe Classe
Objeto Objeto
Definio de
mtodo
inicial
A mensagem enviada
ao objeto e percorre
verticalmente uma
hierarquia de classe at
que uma definio seja
encontrada.
Mtodo
anulado por
esta
definio
Anulao (overriding)
39
EXEMPLO
void mover (int dx, int dy) {
x += dx;
y += dy;
}
void mover (int dx, int dy) {
x += dx - dy;
y += dy - dx;
}
SUPERCLASSE
SUBCLASSE
Extenso
40
Novos mtodos so criados na subclasse.
Exerccios
41
1) Altere os mtodos herdados pela classe Carro, fazendo uso das tcnicas
de sobrecarga e anulao.
2) Crie novos mtodos (extenso) para a classe Carro.
Mtodos Constantes
42
So os mtodos que no podem ser anulados pelas subclasses.
Deve ser utilizado a palavra reservada final.
final void mover (int dx, int dy) {
x += dx;
y += dy;
}
void mover (int dx, int dy) {
x += dx - dy;
y += dy - dx;
}
SUPERCLASSE
SUBCLASSE
Classes Constantes
43
So as classes que no podem ser estendidas (serem superclasses).
Todos os mtodos dessa classe so finais. Muito til em classes que contm
funes utilitrias e constantes.
public final class A {
...
}
Exerccios
44
1) Criar uma classe Funcionrio com os seguintes atributos (nome, cpf,
salrio e funo) e os seus mtodos getters e setters.
2) Criar uma classe Empresa especificando os seus atributos (nome, cnpj e
funcionrios) e os seguintes mtodos: cadastrarFuncionario(...),
consultarFuncionario (...), excluirFuncionrio (...) e
calcularFolhaPagamento(...).
- obs: utilize o mecanismo de reuso indicado.
Polimorfismo
45
Polimorfismo (poli=muitos, morfo=forma) a capacidade de um objeto tomar
vrias formas e uma caracterstica inerente das linguagens orientadas a
objetos.
No exerccio anterior, a classe Funcionrio poder ser especializada de
acordo com as tarefas a serem realizadas.
http: / /tdsb2014.blogspot.com
Polimorfismo
46
No exemplo acima, possvel verificar o benefcio polimorfismo com a
criao de um tipo Funcionario (jose) que, em tempo de execuo, poder
adquirir formas mais especializadas de Funcionrio (Professor, Diretor ou
Administrativa).
public class Funcionario{}
public class Professor extends Funcionario{}
public class Diretor extends Funcionario{}
//Cdigo
Funcionario jose = new Professor();
//Promoo
jose = new Diretor();
Polimorfismo
47
No exemplo acima, o atributo departamento visvel apenas na classe
Diretor, sendo que o objeto jose do tipo Funcionario.
A correo se d com Casting de Objetos que ser estudado no final desta
Unidade.
public class Funcionario{}
public class Diretor extends Funcionario{
String departamento;
}
//Cdigo
Funcionario jose = new Diretor();
jose.departamento = Financeiro; //Erro
Polimorfismo
48
Polimorfismo o nome formal para o fato de que, quando se precisa de um
objeto de determinado tipo, pode-se utilizar uma verso mais especializada
dele.
Ao se estender ou especializar uma classe, no se perde a compatibilidade
com a superclasse.
OPERADOR instanceof
utilizado para identificar se um determinado objeto pertence a uma
hierarquia de classes.
Sintaxe Padro:
O resultado da condio ser true se objeto for do tipo Funcionario ou das
suas subclasses (Diretor, Professor e Administrador). Caso contrrio, o
resultado ser false.
if (objeto instanceof Funcionario){
...
}
Polimorfismo
49
OPERADOR instanceof
void verificartipoFuncionario(Funcionario objeto)
{
if (objeto instanceof Diretor)
System.out.println(Objeto Diretor);
else if (objeto instanceof Professor)
System.out.println(Objeto Professor);
else
System.out.println(Objeto Administrador);
}
Exerccio
50
1) Criar as subclasses da classe Funcionrio e implementar o mtodo
verificartipoFuncionario(...).
Casting, Converso de Objetos e
Tipos Primitivos
51
Java uma linguagem dita fortemente tipada pois exige a declarao de um
tipo.
Quando se definem argumentos em mtodos ou variveis em expresses, a
utilizao dos mesmos com os tipos de dados corretos obrigatrio.
Por exemplo:
void realizarConversao(int valor)
{
...
}
//Execuo
Objeto.realizarConversao(antonio);
//Erro de compilao => tipo requerido int
Casting, Converso de Objetos e
Tipos Primitivos
52
Muitas vezes, haver uma definio na classe, no mtodo, no atributo ou na
varivel cujo tipo no o ideal em determinada situao.
Pode ser a classe errada ou o tipos de dados errado, como por exemplo um
float quando se precisa de um int.
Nesta situao, utiliza-se o Casting para converter um valor de um tipo para
outro.
O uso de Casting no Java dividido em trs partes:
Casting entre tipos primitivos;
Casting de Objetos;
Casting de tipos primitivos para objetos e vice-versa.
Casting de Tipos Primitivos
53
O Casting entre tipos primitivos permite converter o valor de um tipo para
outro tipo primitivo.
O Java converter automaticamente um tipo de dados em outro (Upcasting)
sempre que houver garantia de no haver perda de informao.
Helder da Rocha
int a; byte b;
b = (byte) a; //Downcasting
Casting de Objetos
54
O Casting de Objetos ocorre quando se deseja converter uma instncia de
uma classe A para uma instncia de outra classe B.
Esta converso automtica desde que B seja uma superclasse (direta ou
indireta) de A ou B seja uma interface implementada por A.
Exemplo:
Casting de Objetos
55
Pode-se utilizar uma verso mais especializada quando se precisa de um
objeto de certo tipo. Neste caso, a converso automtica.
No sentido inverso, quando for necessrio fazer a converso de volta ao tipo
mais especializado, a converso dever ser explcita!
Veiculo v = new Carro();
Carro c = (Carro)v;
//Cdigo Slide 47
Funcionario jose = new Diretor();
jose.departamento = Financeiro; //Erro
((Diretor)jose).departamento = Financeiro;//OK
Casting de Tipos Primitivos para
Objetos e Vice-versa
56
No Java os tipos primitivos e os objetos so muito diferentes entre si.
Portanto, para que haja uma converso adequada entre eles, devem-se
utilizar as classes Java conhecidas como Wrappers.
Estas classes so utilizadas para encapsular tipos primitivos em objetos
Java.
Casting de Tipos Primitivos para
Objetos e Vice-versa
57
AUTOBOXING e AUTOUNBOXING
O Autoboxing o processo que transforma automaticamente um tipo
primitivo em seu Objeto equivalente.
O Autounboxing o processo inverso que transforma automaticamente um
Objeto no seu tipo primitivo.
A principal vantagem do recurso de AUTOBOXING e UNBOXING simplificar
o cdigo e prevenir erros de converso.
//ANTES
Integer iob = new Integer(100);
//COM AUTOBOXING
Integer iob = 100;
//ANTES
int i = iob.intValue();
//COM AUTOUNBOXING
int i = iob;
Casting de Tipos Primitivos para
Objetos e Vice-versa
58
OBSERVAO: No se deve abandondar
o uso de tipos primitivos para utilizar
apenas objetos! pouco eficiente!
Classes Abstratas
59
Ao se criar uma classe para ser estendida, muito comum no se ter idia
de como codificar os seus mtodos, isto , somente as suas subclasses
sabero implement-los.
Uma classe deste tipo no pode ser instanciada pois sua funcionalidade est
incompleta. Tal classe dita abstrata.
CLASSE
ABSTRATA
CLASSE
ABSTRATA
Classes Abstratas
60
No nosso exemplo em questo, nas faz sentido criar objetos do tipo
Funcionrio, mas sim objetos do tipo Diretor, Professor e Administrador.
Nesta caso, especificando Funcionario como classe abstrata, economiza-se
cdigo e ganha-se o poliformismo para a criao de mtodos genricos que
serviro a diversos objetos.
Java suporta o conceito de classes abstratas. Pode-se declarar uma classe
abstrata usando o modificador abstract.
Mtodos tambm podem ser declarados abstratos para que as suas
implementaes s sejam realizadas pelas subclasses. Da mesma forma,
utiliza-se o modificador abstract e omite-se a implementao desse mtodo.
As classes abstratas podem ter mtodos concretos, campos de dados e
construtores. Os objetos das suas subclasses podero fazer uso deles.
Classes Abstratas
61
abstract class Funcionario {
public abstract double getbonificacao();
}
public class Professor extends Funcionario{
public double getBonificacao()
{
return this.salario * 1,4;
}
}
Exerccio
62
1) Altere a superclasse Funcionrio e implemente o mtodo abstrato
getBonificacao(...) nas suas subclasses.
Interfaces
63
Todos os mtodos pblicos (public) de uma classe podem ser acessados
por objetos de outras classes. Este conjunto de mtodos define a interface
de acesso a uma classe.
No Java existe o conceito de interface que define uma srie de mtodos,
sem conter as suas implementaes. A interface s expe o que o objeto
deve fazer, e no como ele faz, nem o que ele tem. Como ele faz vai ser
definido em uma implementao dessa interface.
interface Autenticavel {
boolean autentica(int senha);
}
Interfaces
64
Para implementar uma interface em uma classe utiliza-se a palavra
reservada implements.
interface Autenticavel {
boolean autentica(int senha);
}
public class Professor extends Funcionario
implements Autenticavel {
boolean autentica(int senha){
...
}
}
Interfaces
65
Em Java, uma classe pode estender uma outra classe e implementar zero ou
mais interfaces.
public class Professor extends Funcionario
implements Autenticavel,Contribuinte,Cidadao
{ ... }
//Cdigo
Autenticavel a = new Professor();
Interfaces
66
O Java no permite herana mltipla com herana de cdigo, porm torna
possvel herdar mltiplas interfaces.
Uma vez que uma interface no possui implementao, deve-se notar que:
- seus campos devem ser pblicos, estticos e constantes;
- seus mtodos devem ser pblicos e abstratos.
Como esses qualificadores so fixos, no necessrio a sua declarao.
OBSERVAO: O Java 8 possvel definir
implementaes de mtodos em interfaces
conhecido como mtodos default.
Interfaces
67
HIERARQUIA DE INTERFACES NO JAVA API
O framework Collections todo baseado em interfaces.
Interfaces Java servem para fornecer polimorfismo sem herana!
Deve ser utilizado interfaces sempre que possvel, pois o cdigo fica mais
flexvel.
Interfaces
68
CONCLUSO
mais fcil evoluir classes concretas que interfaces.
No fcil acrescentar mtodos a uma interface depois que ela j estiver em
uso, visto a necessidade de alterao de todas as classes que fazem uso da
mesma.
Quando a evoluo for mais importante que a flexibilidade oferecida pelas
interfaces, deve-se utilizar classes abstratas.
Exerccio
69
1) Implemente a estrutura abaixo:
obs: o modelo das interfaces Contribuinte e Cidadao est descrito abaixo.