135
Aula 00 Desenvolvimento de Software p/ TRF 2ª Região (Analista Judiciário - Especialidade Informática) Professores: Diego Carvalho, Milena Rocha Leite 00000000000 - DEMO

Curso de Desenvolvimento de Software para Concurso TRF 2

Embed Size (px)

Citation preview

  • Aula 00

    Desenvolvimento de Software p/ TRF 2 Regio (Analista Judicirio - EspecialidadeInformtica)

    Professores: Diego Carvalho, Milena Rocha Leite

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 1 de 133

    AULA 00

    SUMRIO PGINA

    Apresentao 01 - Java: Conceitos Bsicos 11 - Java: Sintaxe 21 - Java: Orientao A Objetos 42 - Java: Conceitos Avanados 57 Lista de Exerccios Comentados 118 Gabarito 133

    Conceitos gerais linguagem JAVA. Caracterizao JZEE, JSP, Servlet, JSF. JBPM, Mapeamento de Persistncia objeto/relacional (JPA/Hibernate) Javascript. Padres de projetos (design patterns).

    E a, querem mais teoria? Mais exerccios? Tem muito mais! Essa apenas a aula demonstrativa para que vocs conheam o mtodo e a escrita! Os demais excerccios e contedos estaro na prxima aula. Espero que vocs venham comigo... grande abrao ;)

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 2 de 133

    APRESENTAO

    Ol, sejam bem-vindos! Galera, tudo indica que o edital do concurso do TRF da 2 Regio ser publicado at novembro de 2016 e ter provas em janeiro de 2017. uma excelente oportunidade e em tempos de crise, no podemos deixar passar uma chance dessas. Vamos ficar ligados para no perder o foco e porque concorrncia no dorme! Estou aqui para ajud-los. Vamos l...

    DVIDAS DOS ALUNOS

    TOP 5

    1. Peo encarecidamente que leiam as instrues dessa primeira aula. Eu sei que chato, mas assim ns alinhamos nossas expectativas a respeito do curso.

    2. Essa a Aula Demonstrativa (est disponvel para todos na internet) o restante do contedo estar disponvel na Aula 01 (apenas para aqueles que adquirirem o curso).

    3. Esse curso no possui vdeo-aulas! Estamos trabalhando para disponibiliz-las em breve, nesse segundo semestre talvez ainda no seja possvel disponibiliz-las para esse curso.

    4. Esse curso contempla somente aquilo que est em seu cronograma. Ele no contempla todo edital de tecnologia da informao, nem outras disciplinas, nem discursivas, estudos de caso, etc.

    5. Existem questes de Mltipla Escolha (A, B, C, D, E) e existem questes de Certo/Errado (C, E). Quando

    no h itens para escolha na questo, porque a questo da Modalidade Certo/Errado.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 3 de 133

    O PROFESSOR

    Uma breve apresentao: meu nome Diego Carvalho, bacharel em Cincia da Computao pela Universidade de Braslia, ps-graduado em Gesto de Tecnologia da Informao na Administrao Pblica e Analista de Finanas e Controle da Secretaria do Tesouro Nacional. J passei por esses perrengues de concurseiro e sei de duas coisas: a estrada difcil, mas o prmio compensa! E muito!

    www.facebook.com/professordiegocarvalho

    REA

    RGOS PARA OS QUAIS J MINISTREI CURSOS

    Agncia

    ANCINE ANTAQ ANATEL

    Jurdica TRT/1 TRT/2 TRT/3 TRT/4 TJ/BA CNMP MP/PB TRT/15

    Legislativa

    CMARA DOS DEPUTADOS

    Auditoria

    TCE/RS TCE/SP TCE/CE TCM/GO TCU TCM/SP

    Fiscal ISS/SP ISS/BA

    Outros

    CEF DATAPREV DEPEN INMETRO

    Galera, l no site, ns professores temos algumas mtricas para medir se o nosso desempenho nos cursos est bacana! Os alunos podem avaliar com notas e, inclusive, escrever anonimamente o que acharam do professor e do curso. Apresento abaixo o resultado de alguns cursos ministrados recentemente. Portanto, confiem em mim... vocs vo aprender muito com esse curso!

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 4 de 133

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 5 de 133

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 6 de 133

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 7 de 133

    O CONCURSO

    CONCURSO DO TRIBUNAL REGIONAL FEDERAL DA 2 REGIO (RIO DE JANEIRO E

    ESPRITO SANTO) ANALISTA JUDICIRIO ESPECIALIDADE INFORMTICA

    REMUNERAO VAGAS - -

    EDITAL/AUTORIZAO: -

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 8 de 133

    O CURSO...

    Antes de comear o curso, vamos alinhar algumas expectativas! O curso que eu proponho abranger todo o contedo do meu cronograma, entretanto impossvel e invivel esgotar cada ponto do edital em uma aula escrita. Como se ministra Java em uma aula? Teramos uma aula de 800 pginas e no chegaramos nem perto de matar todo contedo! Imaginem agora cada ponto do Edital. Portanto, vou direcion-los pelo contedo da melhor maneira possvel. O nosso foco ter uma viso geral, mas objetiva do que de fato cai em prova e, no, elucubraes sobre cada tema. Meu foco aqui te fazer passar! Eu sei como complicado ler muita coisa (ainda mais de TI) e vocs tm outras disciplinas para estudar. Logo, vou ser simples e objetivo! Tranquilo? ;) Alm disso, o cronograma ser seguido com a maior fidelidade possvel, mas ele no esttico e poder haver alteraes no decorrer do curso. Eventualmente, posso tirar o contedo de uma aula e colocar em outra de forma que o estudo de vocs fique mais lgico, coeso e fcil de acompanhar; posso tambm inverter a ordem das aulas (adiantar uma aula e atrasar outra) sem prejudic-los. Alm disso, vamos usar questes de diversas bancas. Enfim, confiem em mim: o curso vai ajudar bastante! Qualquer dvida, s me chamar! Caso haja alguma reclamao, problema, sugesto, comentrios, erros de digitao, etc, podem enviar para o nosso frum que eu tento responder da maneira mais tempestiva possvel. Ainda duvidam que PDF no d certo com Concursos de TI? Veja abaixo:

    6 Lugar ISS/Salvador https://www.youtube.com/watch?v=b1w4H3l6mC4#t=1678 1 Lugar TRT/RJ https://www.facebook.com/video.php?v=790616534367672 2 Lugar ISS/Salvador https://www.youtube.com/watch?v=vmU1n1J-aqQ 1 Lugar Dataprev

    http://www.estrategiaconcursos.com.br/blog/entrevista-andre-furtado-aprovado-em-1o-lugar-no-concurso-dataprev-para-o-cargo-de-analistaarea-de-tecnologia-da-informacao/

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 9 de 133

    CRONOGRAM

    Aula Data Tpicos do Edital 00 01/11 Aula Demonstrativa

    01 15/11 Conceitos gerais linguagem JAVA.

    02 30/11 Caracterizao JZEE, JSP, Servlet, JSF.

    03 15/12 JBPM, Mapeamento de Persistncia objeto/relacional (JPA/Hibernate)

    Javascript.

    04 30/12 Padres de projetos (design patterns).

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 10 de 133

    AS AULAS E AS DICAS

    1 Pargrafos pequenos: observem que os pargrafos tm, no mximo, cinco linhas. Isso serve para que a leitura no fique cansativa e para que vocs no desanimem no meio do material! Para tal, eu tento dividir as disciplinas de maneira que as aulas fiquem objetivas e pequenas (em termos de teoria), mas extensa (em termos de exerccios).

    2 Viso Geral: no se atenham a detalhes antes de entender o bsico. Por que? Ora, no h nada mais irritante do que ir para uma prova que vai cair, por exemplo, RUP, saber vrios detalhes, mas no saber as fases e disciplinas. Portanto, caso estejam iniciando os estudos sobre uma matria, foquem em saber o bsico para depois se especializarem.

    3 Destaques em vermelho: quase todos os pargrafos possuem alguma palavra ou frase destacada em negrito e em vermelho. Isso ocorre por suas razes: primeiro, para enfatizar alguma informao importante; segundo, para facilitar a leitura vertical, i.e., aps uma primeira leitura, a segunda pode ser passando apenas pelos pontos em destaque.

    4 Faam muitos exerccios: ler vrias bibliografias muito trabalhoso e, geralmente, no vale o custo-benefcio. Acredito que o que funciona mesmo entender o bsico, depois fazer muitos exerccios e, eventualmente, caso encontrarem algo que no souberem, pesquisem-no separadamente. Alm disso, voc vai pegando as manhas da banca.

    5 Linguagem natural: essa uma aula para ser lida, o que por si s j pode ser cansativo. Tentarei colocar a linguagem mais coloquial possvel, simulando uma conversa. Portanto, caso virem frases ou palavras em itlico, ou uma palavra estrangeira ou a simulao de uma conversa com vocs. Pode dar um exemplo, professor? Acabei de dar! :-)

    6 Faam resumos: essa dica somente serve caso vocs tenham disponibilidade. Caso haja pouco tempo para estudar ou pouco tempo at a prova, no compensa! Se no, faam resumos organizados, pois eles economizaro um bom tempo de estudo em suas prximas provas e sempre que descobrirem novas informaes, insiram-nas no resumo.

    7 Diversas figuras: essas aulas estaro em constante evoluo, sempre procura de explicar as matrias de maneira mais compreensvel e com novas informaes/questes. Para tal, na minha opinio, fundamental a utilizao de figuras, grficos, painis, etc. Em minha experincia, bem mais fcil memorizar a partir de imagens.

    8 Revisem antes da prova: no adianta querer estudar coisas novas at o ltimo minuto antes da prova e no revisar o que estudou h um ms. Vocs iro esquecer e iro se irritar na hora da prova por no lembrarem de conceitos simples. Tirem uma semana para revisar seus resumos, decorarem algumas coisas e, certamente, iro mais confiantes para a prova.

    9 Fazer Exerccios: muitos exerccios o meio pelo qual vocs se situaro. Como assim, professor? na hora de fazer os exerccios que vocs descobriro se esto bem ou mal e avaliaro se precisam estudar mais ou menos. Para tal, h um quadrinho ao final de cada bloco de exerccios para vocs anotarem a quantidade de questes respondidas corretamente ou incorretamente.

    10 Simulado Final: ora, fazer um bloco de questes depois de estudar a teoria tranquilo. No entanto, lembrem-se que a memria de vocs no infinita e vocs tm um milho de outras coisas para estudar e decorar. Portanto, se possvel, ao fim do curso faremos um simulado com questes escolhidas que foram comentadas dentro das aulas.

    Bem, pessoal! isso... sejam bem-vindos! Espero que vocs curtam e tenham uma leitura leve e despojada da aula, mas com muito foco, ateno e dedicao. Qualquer dvida, podem entrar em contato comigo ficarei feliz em ajud-los. Bons estudos, estou torcendo por vocs!

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 11 de 133

    JAVA: CONCEITOS BSICOS

    Vamos falar agora sobre uma das linguagens mais famosas do mundo! Professor, o que Java? uma linguagem de programao orientada a objetos, multiplataforma, robusta, portvel, segura, extensvel, concorrente e distribuda. E ela totalmente orientada a objetos? No! Por que no? Porque nem todos os seus tipos de dados so objetos (possui alguns tipos primitivos: int, float, long, double, char, etc). S por causa disso, professor? No, ela tambm no suporta Herana Mltipla! Entendi, mas existe alguma linguagem totalmente orientada a objetos? Sim, por exemplo: Smalltalk! E ela uma linguagem compilada ou interpretada? Na verdade, ela hbrida, i.e., ela compilada e interpretada! Professor, ouvi dizer que Java lento! verdade? Atualmente, no! De fato, era lenta no incio! No entanto, na dcada passada houve diversas melhorias na Java Virtual Machine (JVM) e em seu Compilador JIT1. Hoje em dia, o desempenho geral do Java absurdamente rpido de acordo com diversos benchmarks. A Mquina Virtual capaz de realizar diversas otimizaes por meio de algoritmos heursticos e o Compilador capaz de identificar hotspots. Vocs sabiam que Java uma Linguagem WORA? Pois , esse acrnimo significa Write Once, Run Anywhere ou Escreva uma vez, execute em qualquer lugar. Trata-se de um slogan para exemplificar os benefcios multiplataforma da linguagem Java! Idealmente, isso significa que um programa em Java (uma vez compilado em um bytecode) pode rodar em qualquer equipamento que possua uma JVM! A linguagem Java foi criada pela Sun Microsystems, que depois foi adquirida pela Oracle, por quem mantida atualmente. Por que ela uma linguagem concisa e simples? Porque no contm redundncias e fcil de entender, implementar e utilizar. Ela possui sintaxe bastante parecida com C++, facilitando o aprendizado e a migrao por novos programadores. Professor, Java robusta? Sim! Alm de ser fortemente tipada, foi desenvolvida para garantir a criao de programas altamente confiveis. Ela no dispensa uma programao cuidadosa, porm elimina alguns tipos de erros de programao

    1 Compilador Just-In-Time (JIT) o compilador que altera a maneira na qual programas em Java so executados,

    geralmente otimizando-os e tornando-os mais rpidos.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 12 de 133

    possveis em outras linguagens. A ausncia da aritmtica de ponteiros tambm exclui toda uma classe de erros relacionados a esse tipo de estrutura. O acesso a arrays strings, e a converso de tipos so checados em tempo de execuo para assegurar a sua validade. O Garbage Collector2 faz a desalocao automtica de memria evitando, erros de referncia e desperdcio de memria. Finalmente, o recurso de Exception Handling permite o tratamento de erros em tempo de execuo, por um mecanismo robusto, anlogo ao do C++. Java tambm uma linguagem portvel e multiplataforma! O Compilador capaz de gerar um cdigo intermedirio (bytecode), que permite que o mesmo programa possa ser executado em qualquer mquina ou sistema operacional que possua uma JVM. Ademais, busca que todos os aspectos da linguagem sejam independentes de plataforma (Ex: ela especifica o tamanho e comportamento de cada tipo de dado). Dessa forma, aplicaes funcionam da mesma maneira em qualquer ambiente. Podemos dizer que Java uma linguagem concorrente ou multithreaded, i.e., pode realizar diversas tarefas assincronamente com o uso de threads, que so suportadas de modo nativo. Java torna a manipulao de threads to simples quanto trabalhar com qualquer varivel. Java uma linguagem distribuda, i.e., foi projetada para trabalhar em um ambiente de redes, oferecendo bibliotecas para facilitar a comunicao, manipulando objetos distribudos e oferecendo suporte conectividade (Ex: URL, Sockets, Protocolos, etc). Ela tambm uma linguagem segura, implementando encapsulamento, restringindo o acesso e a execuo de diversos programas, tratando excees, etc. Alm disso, possui um verificador de bytecodes, que investiga e procura cdigos maliciosos que eventualmente podem ter sido inseridos, rompendo com a integridade dos dados. Por fim, ele tambm possui o Security Manager, utilizado para impedir, por exemplo, que applets executem cdigos arbitrariamente. Isso impede o acesso direto a informaes pela memria ou inserir cdigo estranho. Para finalizar, cabe salientar que Java uma linguagem absurdamente extensvel. Por que, professor? Porque ela integra diversas bibliotecas com o cdigo nativo, alm de permitir o carregamento dinmico de classes em tempo de execuo. Em outras palavras, os programas so formados por uma coleo de classes armazenadas independentemente e que podem ser carregadas no momento de utilizao. 2 Garbage Collector (ou Coletor de Lixo) o responsvel pela automao do gerenciamento de memria. Ele

    capaz recuperar uma rea de memria inutilizada por um programa, evitando vazamento de memria.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 13 de 133

    Java tanto uma plataforma quanto uma linguagem de programao orientada a objetos que permite o desenvolvimento de aplicaes em diversas plataformas diferentes. Como j foi dito anteriormente, Java est presente desde dispositivos pequenos (Smartphone, Tablet, etc) a mquinas de grande porte (Servidores, Mainframes, etc). A linguagem Java possui quatro ambientes de desenvolvimento: Java Standard Edition (Java SE): trata-se de uma ferramenta de

    desenvolvimento para a Plataforma Java. Ela contm todo o ambiente necessrio para a criao e execuo de aplicaes Java, incluindo a Mquina Virtual (JVM), Compilador (Javac), Bibliotecas (APIs), entre outras ferramentas. Em geral, rodam em computadores pessoais, notebooks, etc.

    Java Enterprise Edition (Java EE): trata-se do padro para desenvolvimento

    de sistemas corporativos, voltada para aplicaes multicamadas, baseadas em componentes executados em servidores de aplicaes ele inclui o Java SE. Contm bibliotecas para acesso a base de dados, RPC, CORBA, entre outras. As aplicaes podem ou no estar na internet.

    Java Micro Edition (Java ME): trata-se do padro aplicado a dispositivos

    compactos ou mveis, como smartphones, tablets, controles remotos, etc. Permite o desenvolvimento de softwares embarcados, i.e., aplicaes que rodam em um dispositivo de propsito especfico, desempenhando alguma tarefa til. Em geral, possuem limitaes de recursos como memria ou processamento.

    Java Card: tecnologia que permite que pequenos aplicativos baseados em

    Java (conhecidos como Applets) sejam executados com segurana em smartcards e outros dispositivos similares com grandes limitaes de processamento e armazenamento. Sabe o chip do seu celular? Java Card! Sabe o chip do carto de crdito? Java Card!

    Java FX: trata-se de uma plataforma de software multimdia para a criao e

    disponibilizao de Rich Internet Application (RIA) que pode ser executada em diversos dispositivos diferentes. Ele permite a criao de aplicaes ricas para navegadores, smartphones, televisores, video-games, blu-rays, etc so os menos conhecidos.

    JAVA: PLATAFORMA JAVA

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 14 de 133

    Um programa escrito para a plataforma Java necessita de um ambiente de execuo chamado Java Runtime Environment (JRE)! O que tem nesse negcio, professor? Ele contm uma Mquina Virtual (JVM) e Bibiliotecas (APIs). E o Java Development Kit (JDK)? Bem, eles contm a JRE e outros componentes teis para executar aplicaes (Exemplo: Javac, Javadoc, Jar, Appletviewer, Jconsole, Jstack, Jhat, etc). Portanto, o seguinte: se voc deseja somente executar alguma aplicao Java no seu computador ou navegador, basta instalar um JRE! No entanto, se voc planeja programar em Java, voc precisar de um JDK (que contm a JRE)! Entenderam? bastante simples! JRE o mnimo que voc precisa para rodar uma aplicao e o JDK o que voc precisa para desenvolver uma aplicao!

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 15 de 133

    A Linguagem Java tem dois processos de execuo de cdigo-fonte: Compilao e Interpretao! Vamos l... o programador escreve um cdigo em Java em um editor de texto, por exemplo. Ele salva com a extenso .java e passa por um compilador (JavaC)! Esse compilador transforma o arquivo .java em cdigo de mquina e em um arquivo .class, tambm chamado bytecode como mostra a imagem abaixo.

    O bytecode um cdigo intermedirio, que posteriormente interpretado e executado por uma Java Virtual Machine (JVM). O que isso, professor? um programa que carrega e executa os aplicativos Java, convertendo bytecodes em cdigo executvel. Lembram que eu falei que Java uma Linguagem WORA? Pois , isso ocorre em grande parte por conta do bytecode e da Mquina Virtual Java.

    Por conta deles, programas escritos em Java podem funcionar em qualquer plataforma de hardware e software que possua uma JVM, tornando assim essas aplicaes independentes da plataforma, como apresenta a imagem acima (Win32, UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma geladeira. A imagem abaixo similar anterior, apenas para solidificar!

    JAVA: COMPILAO E INTERPRETAO

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 16 de 133

    Uma observao importante: Cdigo Java sempre compilado em um bytecode. No entanto, nem todo bytecode proveniente de Cdigo Java. Como assim, professor? isso mesmo! Por exemplo: eu posso compilar o Cdigo Ada em um bytecode e rod-lo em uma JVM! E quais outras linguagens? Temos tambm Eiffel, Pascal, Python, C. A JVM capaz de entender bytecodes assim como ns somos fluentes em portugus, ela fluente em bytecode. Para criar bytecodes, basta seguir um conjunto de regras de formao. Logo, se existe um compilador que seja capaz de transformar o cdigo-fonte (de qualquer linguagem) em uma bytecode seguindo as especificaes corretamente, o bytecode poder ser interpretado por uma JVM.

    CURIOSIDADE

    A Sun Microsystems declarou recentemente que existem atualmente cerca de 5.5 bilhes de dispositivos executando uma Java Virtual Machine (JVM).

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 17 de 133

    Vamos falar sobre passagem de parmetros por valor e por referncia. Vocs sabem que, quando o mdulo principal chama uma funo ou procedimento, ele passa alguns valores chamados Argumentos de Entrada. Esse negcio costuma confundir muita gente, portanto vou explicar por meio de um exemplo, utilizando a funo DobraValor(valor1, valor2) apresentada na imagem abaixo: #include void DobraValor(int valor1, int valor2) { valor1 = 2*valor1; valor2 = 2*valor2; printf("Valores dentro da Funo: \nValor 1 = %d\n Valor 2 = %d\n",valor1,valor2); } int main() { int valor1 = 5; int valor2 = 10; printf("Valores antes de chamar a Funo:\nValor 1 = %d\nValor 2 = %d\n",valor1,valor2); DobraValor(valor1,valor2); printf("Valores depois de chamar a Funo:\nValor 1 = %d\nValor 2 = %d\n",valor1,valor2); return(); }

    Essa funo recebe dois valores e simplesmente multiplica sua soma por dois. Ento o que acontece se eu passar os parmetros por valor para a funo? Bem, ela receber uma cpia das duas variveis e, no, as variveis originais. Logo, antes de a funo ser chamada, os valores sero os valores iniciais: 5 e 10. Durante a chamada, ela multiplica os valores por dois, resultando em: 10 e 20. Valores antes de chamar a Funo: Valor 1 = 5 Valor 2 = 10 Valores dentro da Funo: Valor 1 = 10 Valor 2 = 20 Valores depois de chamar a Funo: Valor 1 = 5 Valor 2 = 10

    Aps voltar para a funo principal, os valores continuam sendo os valores iniciais: 5 e 10, como apresentado acima na execuo da funo. Notem que os valores s se modificaram dentro da funo DobraValor( ). Por que, professor? Ora, porque foi passada para funo apenas uma cpia dos valores e eles que foram multiplicados por dois e, no, os valores originais.

    JAVA: PASSAGEM POR VALOR E POR REFERNCIA

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 18 de 133

    #include void DobraValor(int *valor1, int *valor2) { *valor1 = 2*(*valor1); *valor2 = 2*(*valor2); printf("Valores dentro da Funo: \nValor 1 = %d\n Valor 2 = %d\n", *valor1, *valor2); } int main() { int valor1 = 5; int valor2 = 10; printf("Valores antes de chamar a Funo:\nValor 1 = %d\nValor 2 = %d\n",valor1,valor2); DobraValor(&valor1,&valor2); printf("Valores depois de chamar a Funo:\nValor 1 = %d\nValor 2 = %d\n",valor1,valor2); return(); }

    Professor, o que ocorre na passagem por referncia? Bem, ela receber uma referncia para as duas variveis originais e, no, cpias. Portanto, antes de a funo ser chamada, os valores sero os valores iniciais: 5 e 10. Durante a chamada, ela multiplica os valores por dois, resultando em: 10 e 20. Aps voltar para a funo principal, os valores sero os valores modificados: 10 e 20. Valores antes de chamar a Funo: Valor 1 = 5 Valor 2 = 10 Valores dentro da Funo: Valor 1 = 10 Valor 2 = 20 Valores depois de chamar a Funo: Valor 1 = 10 Valor 2 = 20

    Notem que os valores se modificaram no s dentro da funo DobraValor( ), como fora tambm (na funo principal). Por que isso ocorreu, professor? Ora, porque foi passada para funo uma referncia para os valores originais e eles foram multiplicados por dois, voltando funo principal com os valores dobrados! Por isso, os valores 10 e 20. Resumindo: a passagem de parmetro por valor recebe uma cpia da varivel original e qualquer alterao no refletir no mdulo principal. A passagem de parmetro por referncia recebe uma referncia para a prpria varivel e qualquer alterao refletir no mdulo principal. Agora ateno mxima: em Java, a passagem de parmetros sempre, sempre, sempre por valor! Bacana?

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 19 de 133

    Utilizamos pacotes para organizar as classes semelhantes! Grosso modo, pacotes so apenas pastas ou diretrios do sistema operacional onde ficam armazenados os arquivos fonte de Java e so essenciais para o conceito de encapsulamento, no qual so dados nveis de acesso s classes. O empacotamento gera um arquivo .jar, que pode ser adicionado no classpath de uma aplicao. Uma vez criada uma pasta (que ser um pacote), deve-se definir para as classes a qual pacote elas pertencem. Isso feito pela palavra-reservada package: package br.com.site.pacoteEstrategia;

    Essa deve ser a primeira linha de comando a ser compilada na classe. Java possui vrios pacotes com outros pacotes internos e vrias classes j prontas para serem utilizadas. Dentre os pacotes, podemos determinar dois grandes: o pacote java, que possui as classes padres para o funcionamento da linguagem; e o pacote javax, que possui pacotes de extenso que fornecem ainda mais classes e objetos. Em geral, aquelas classes fortemente conectadas s funes nativas do sistema operacional pertencem ao pacote java e as que no so to fortemente conectadas pertencem ao pacote javax. Para utilizar os milhares de classes contidas nos inmeros pacotes de Java devemos nos referenciar diretamente a classe ou import- . Para importar um pacote usamos a palavra-reservada import. import javax.swing.JOptionPane;

    Para separar um pacote de seu sub-pacote, usam-se pontos (br.com.site.pacoteEstrategia). Ao utilizar o asterisco (*), todos os subpacotes do pacote so importados: import java.awt.* - isso importa todos os sub-pacotes pertencentes ao pacote java.awt. No entanto, podemos definir diretamente o pacote desejado: import javax.swing.JOptionPane. Isso ir importar apenas o sub-pacote JOptionPane do pacote javax.swing. A diferena entre as duas formas de importao de pacotes o consumo de recursos do computador. Como o asterisco importa todos os sub-pacotes, o consumo de memria ser alto e, muito provavelmente, no usaremos todas as classes de todos os pacotes importados. Por isso, o recomendado sempre importar apenas o pacote que ser utilizado. A ordem Package, Import e Class.

    JAVA: EMPACOTAMENTO

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 20 de 133

    Muitas linguagens orientadas a objetos (como o C++) no suportam a noo de existir uma nica classe a partir da qual todas as outras classes so derivadas, sem que isso seja um impedimento linguagem. Entretanto, na linguagem Java, a falta desse tipo de classe tornaria a linguagem limitada. Todos os objetos da linguagem Java so de mltiplas camadas. Cada classe, na hierarquia de classes, representa uma camada que adiciona diversas capacidades a um objet No topo desta hierarquia voc sempre vai encontrar uma classe chamada de Object (Objeto). Qualquer classe estende implicitamente (sem necessidade de declarar) a classe Object. Claro que, na maioria das vezes, isso ocorre indiretamente. Bacana, pessoal?

    JAVA: RAZ

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 21 de 133

    JAVA: SINTAXE

    Antes de tudo, importante ressaltar que o Java case-sensitive (Flamengo diferente de flamengo). Identificador o nome utilizado para representar variveis, classes, objetos, mtodos, pacotes, interfaces, etc. Por exemplo: na matemtica, utiliza-se um nome para as incgnitas (x, y, z) que o identificador daquela incgnita. No Java, existem um conjunto de regras para criao do identificador: Deve ser a combinao de uma ou mais letras e dgitos UNICODE-16: Letras: A-Z; Letras: a-z; Underscore: _ ; Cifro: $ ;Nmeros: 0-9.

    1. No pode ser uma palavra-reservada (palavra-chave); 2. No pode ser true, false ou null; 3. No pode comear com nmeros; 4. No pode conter espaos em branco ou caracteres de formatao;

    //CORRETO int MyVariable, myvariable, MYVARIABLE; int x, i, , OReilly; int _myvariable, $myvariaBle, _9pins; //INCORRETO int My Variable; //Contm espao int 9pins; //Comea com um dgito int a+c, test-1, o'reilly&; //Contm caractere no-alfanumrico

    JAVA: IDENTIFICADORES

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 22 de 133

    Blocos de programao so aglomerados de instrues e declaraes que tm escopo conjunto. Em outras palavras, as variveis definidas como locais dentro de um bloco somente sero presentes dentro deste bloco, assim como as instrues ali presentes. Os blocos de programao so delimitados por chaves { } e podem ser aninhados, j os comandos sempre so terminados com ponto-e-vrgula. import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { //Incio Bloco 1 int a = 10; int b = 1; if (b==3) { //Incio Bloco 2 b = a*10; } else { //Incio Bloco 3 int a = 100; b = a*10; } System.out.println("O valor de b " + b); } }

    JAVA: BLOCOS E COMANDOS

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 23 de 133

    Os comentrios, como o prprio nome preconiza, so notas que podem ser includas no cdigo-fonte de um programa para descrever o que o desenvolvedor desejar. Dessa forma, eles no modificam o programa executado e servem somente para ajudar o programador a melhor organizar os seus cdigos. Os comentrios em Java seguem a mesma sintaxe da linguagem C++: import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { /** * Comentrio de mais de uma linha! **/ int a = 10; int b = (int)(a*3.141592); //Comentrio de nica linha! System.out.println("O valor de b " + b); } }

    JAVA: COMENTRIOS

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 24 de 133

    Java possui 52 palavras-reservadas: trs palavras para modificar acesso; treze palavras para modificar classes, variveis e mtodos; doze palavras para controle de fluxo; seis palavras para tratar erros; duas palavras para controlar pacotes; oito palavras para tipos primitivos; duas palavras para variveis de referncia; uma palavra para retorno de mtodo; e duas palavras reservadas no utilizadas. Espera, professor! Mas eu contei e deu 49 palavras! que null true false no so consideradas tecnicamente palavras-reservadas, mas valores literais. No entanto, isso s tecnicamente, porque caso se tente criar identificadores com essas palavras, resultar em erro de compilao. Vamos ver todas as palavras reservadas? A tabela abaixo apresenta cada uma e sua descrio:

    Palavras Descrio abstract Aplicado a um mtodo ou classe indica que a implementao completa deste

    mtodo ou classe efetuada posteriormente, por uma subclasse. Caso seja uma classe, significa que ela no pode ser instanciada.

    boolean um tipo de dados cujos valores podem ser true ou false.

    break Comando para controle de lao, no estilo C/C++.

    byte Tipo de dados inteiros com sinal, armazenado em formato binrio na notao de complemento a dois e tamanho de 8 bits.

    case Indica uma opo entre vrias em blocos switch.

    catch utilizado juntamente com try, seu bloco executado somente em caso de o programa lanar uma exceo do tipo indicado no seu parmetro.

    char Para variveis de caracteres, onde a sua representao interna equivale a um tipo numrico.

    class Para definir o incio de um arquivo Java, todas as classes possuem pelo menos essa palavra-chave.

    JAVA: PALAVRAS RESERVADAS

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 25 de 133

    const Essa palavra no tem uso especfico em Java mas mesmo assim uma palavra-chave.

    continue Para pular a iterao atual de uma estrutura de repetio.

    default Normalmente utilizado para o final de uma ou mais opes cases de um bloco catch.

    do Estrutura de repetio que garante que o bloco ser executado pelo menos uma vez durante a execuo do programa.

    double Para variveis numricas e de pontos flutuantes com preciso de 64 bits.

    else Complemento de estrutura de condio.

    enum Palavra-chave adicionada na verso 5 do Java; um tipo especfico de dados que assemelha-se com uma classe que tem operaes e dados internos.

    extends Utilizado para aplicar o conceito de herana para uma classe, onde uma classe receber os mtodos e variveis de instncia da classe chamada de pai.

    final Marca uma varivel, classe ou mtodo para que no seja possvel modificar o seu valor ou comportamento no decorrer da execuo do programa.

    finally Compe o incio de um bloco que sempre executado para um bloco de tratamento de erros, mais utilizado para limpar recursos que foram abertos no bloco de tratamento.

    float Variveis numricas e de pontos flutuantes com preciso de 32 bits.

    for Estrutura de repetio que declara, testa e incrementa varivel para uso local.

    goto No tem uso especfico na linguagem.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 26 de 133

    if Estrutura de condio mais comum na linguagem.

    implements Informa que uma determinada classe ir implementar uma determinada interface.

    import Para relacionar classes externas atual, permitindo o uso de nomes mais curtos para recursos da classe externa.

    instanceof Testa se um objeto uma instncia de uma classe especfica ou se null.

    int Para variveis numricas de preciso -2.147.483.648 at 2.147.483.647.

    interface Informa que o modelo no uma classe, mas sim um prottipo de classe sem implementao para os mtodos, obrigando as classes que a implementaro a seguir as determinadas regras.

    long Para variveis numricas de preciso de 64 bits.

    native Mtodos marcados como native dizem que sua implementao feita em uma outra linguagem (por exemplo, C), para que se possa acessar recursos especficos do sistema operacional.

    new Utilizada para se criar novas instncias de objetos.

    package Informa em que estrutura de diretrios a classe est localizada.

    private Marca a visibilidade de um mtodo ou varivel de instncia para que apenas a prpria classe acesse.

    protected Marca a visibilidade de um mtodo ou varivel de instncia para que a prpria classe ou suas filhas acessem.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 27 de 133

    public Marca a visibilidade de uma classe, mtodo ou varivel de instncia para que todas as classes em todos os pacotes tenham acesso.

    return Devolve para o mtodo chamador de um valor que do mesmo tipo declarado na assinatura do mtodo.

    short Para variveis numricas de preciso de -32.768 at 32.767.

    static Marca um mtodo ou varivel para que se tenha apenas uma cpia da memria desse membro.

    strictfp Serve para aumentar a preciso em operaes com pontos flutuantes.

    super Chama membros da classe-pai.

    switch Representa blocos de decises de fluxos semelhantes ao if, mas com mais organizao em determinadas situaes.

    synchronized Um mtodo com essa marcao ser controlado para que no se possa ter duas threads acessando o mesmo objeto.

    this Representa a instncia que est atualmente sendo executada.

    throw utilizado para lanar uma exceo.

    throws utilizado para se declarar que um mtodo pode lanar uma exceo.

    transient Indica que uma determinada varivel de instncia no ser serializada junto com o objeto da classe.

    try Para executar mtodos que tm chances de lanar excees, mas que sero tratados em blocos catch que o seguiro.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 28 de 133

    void Representa um retorno vazio, i.e., nenhum retorno para esse mtodo.

    volatile Indica que uma determinada varivel de instncia pode ser modificada em duas threads distintas ao mesmo tempo.

    while Bloco de repetio que ser executado enquanto seu parmetro estiver retornando true.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 29 de 133

    A linguagem Java oferece um total de oito tipos primitivos para criao de programas. Esses tipos so utilizados para declarar variveis que auxiliam na construo dos algoritmos. Apesar de a linguagem oferecer tantos tipos, muitos deles so capazes de representar os mesmos tipos de dados, mas com uma capacidade de armazenamento maior (maior quantidade de bits). Variveis do tipo byte, short, int e long, por exemplo, podem ser usadas para representar nmeros inteiros, variando em diferentes faixas de valores, embora os tipos int e long sejam os mais utilizados. O mesmo acontece com variveis do tipo float double, que so usadas para representar nmeros reais. O tipo boolean usado para declarar variveis que podem assumir um os valores: true ou false.

    NOME TIPO TAMANHO MNIMO MXIMO

    DEFAULT

    LGICO boolean - false true false CARACTERE char 16 bits 0 216 1 \u0000

    INTEIRO

    byte 8 bits -27 27 1 0 short 16 bits -215 215 1 0

    int 32 bits -231 231 1 0 long 64 bits -263 263 1 0

    DECIMAL float 32 bits 7 Casas Decimais 0.0

    double 64 bits 15 Casas Decimais 0.0 Variveis booleanas so bastante usadas em comandos condicionais ou de repetio. Finalmente, o tipo char utilizado para representar caracteres, como, por exemplo, as letras de alfabetos de lnguas de diferentes pases. Apesar de, em alguns programas, ser necessrio o uso do tipo char para representar e permitir o processamento de caracteres de uma frase, o mais comum usar a classe String. Galera, vou enfatizar isso novamente porque realmente importante! String no um Tipo Primitivo! Bacana? String no um Tipo Primitivo, nunca foi e jamais ser um Tipo Primitivo. Alm disso, a Classe String pertence ao pacote Lang e herda diretamente de Object. Outra coisa: posso escrever nmeros na forma decimal (8), octal (08) ou hexadecimal (0x8).

    JAVA: TIPOS PRIMITIVOS

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 30 de 133

    OBSERVAES

    O valor-padro para um nmero decimal Double; se o programador quiser que seja Float, deve enviar como parmetro o valor acrescido da letra f (Ex: 3.14f). Da mesma forma, o valor-padro para inteiro um int. O nico tipo primitivo que no pode ser atribudo a nenhum outro tipo o boolean.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 31 de 133

    Os operadores so sinais que representam atribuies, clculos e ordem dos dados. As operaes seguem uma ordem de prioridades, ou seja, alguns clculos so processados antes de outros, assim como ocorre na matemtica. Para manipular os valores das variveis de um programa, devemos utilizar os operadores oferecidos pela linguagem de programao adotada.

    ARITMTICOS ATRIBUIO RELACIONAIS LGICOS BIT A BIT + = > ! & - += < && | * -= >= || ^ / *= %= == >>> ++ ? -- instanceof

    Operadores Aritmticos: +, -, *, /, %. $Numero = 2 + 8; //$Numero = 2 + 8 = 10 $Numero = 8 - 2; //$Numero = 8 - 2 = 6 $Numero = 2 * 8; //$Numero = 2 * 8 = 16 $Numero = 8 / 2; //$Numero = 8 / 2 = 4 $Numero = 2 % 8; //$Numero = 2 % 8 = 2 (Resto da diviso de 2 por 8) String $palavra1 = "Al"; String $palavra2 = "Mundo!"; String $frase = $palavra1 + ", " + $palavra2; //$frase = "Al, Mundo!"

    Operadores de Atribuio: =, +=, -=, *=, /=, %=, ++, --.

    int $Numero = 5; //Atribui-se o valor 5 a varivel $Numero $Numero ++; //$Numero = $Numero + 1 = 5 + 1 = 6 $Numero --; //$Numero = $Numero - 1 = 6 1 = 5 $Numero += 3; //$Numero = $Numero + 3 = 5 + 3 = 8 $Numero -= 3; //$Numero = $Numero - 3 = 8 3 = 5 $Numero *= 3; //$Numero = $Numero * 3 = 5 * 3 = 15 $Numero /= 3; //$Numero = $Numero / 3 = 15 / 3 = 5 $Numero %= 3; //$Numero = $Numero % 3 = 5 % 3 = 2 (Resto da diviso de 5 por 3)

    Operadores Relacionais: >, =,

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 32 de 133

    boolean Variavel_1; Variavel_1 = 4 < 4; //FALSE: 4 no menor que 4 Variavel_1 = 4 7; //FALSE: 3 no maior que 7 Variavel_1 = 3 >= 7; //FALSE: 3 no maior ou igual a 7 Variavel_1 = 1 == 1; //TRUE: 1 igual a 1 Variavel_1 = 2 != 1; //TRUE: 2 diferente de 1 int Variavel_2 = 4; int Variavel_3 = 8; Variavel_2 = (Variavel_2 > Variavel_3)? Variavel_2: Variavel_3; //Variavel_2: 4 no maior que 8, logo Variavel_2 recebe o valor de Variavel_3 Variavel_3 = (Variavel_2 < Variavel_3)? Variavel_2: Variavel_3; //Variavel_3: 4 menor que 8, logo Variavel_3 recebe o valor de Variavel_2 Moto $cg500 = new Moto(); Carro $celta = new Carro(); boolean Teste = $celta instanceof Carro; //TRUE: $celta uma instncia de Carro boolean Teste = $cg500 instanceof Carro; //FALSE: $cg500 no uma instncia de Carro

    Vamos ver abaixo um exemplo mais complexo: //Caso 1: y = 2 e x = 2 int x = 0; int y = x++ + ++x; //Caso 2: y = 1 e x = 2 int x = 0; int y = x++ + x++; //Caso 3: y = 3 e x = 2 int x = 0; int y = ++x + ++x; //Caso 4: y = 2 e x = 2 int x = 0; int y = ++x + x++;

    Operadores Lgicos: !, &&, ||. boolean $Variavel; $Variavel = (2

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 33 de 133

    $Variavel = $Variavel >> 1 //$Variavel = 11111101 >> 1 = 11111110 = -2 (SHIFT RIGHT) $Variavel = $Variavel > 1; //$Variavel = 11111100 >>> 1 = NMERO GIGANTE

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 34 de 133

    Um vetor uma estrutura de dados formada por um conjunto de dados ou outros elementos de um mesmo tipo, podendo ter uma dimenso ou mais (quando tem duas, chamado de matriz) e cujo acesso aos dados feito atravs de ndices. Cada item de um vetor chamado de elemento. Cada um dos elementos possui uma posio dentro do vetor, qual referenciamos atravs do ndice do elemento. Para declarar um vetor e de uma matriz, devemos utilizar a seguinte sintaxe: //Declarao 1 tipo[] identificador1; tipo identificador1[]; //Declarao 2 tipo[] identificador2 = new tipo[]; tipo identificador2[] = new tipo[]; //Declarao 3 (Para duas dimenses) tipo[][] identificador3; tipo identificador3[][];

    Para inicializar um vetor, devemos utilizar a seguinte sintaxe: //Inicializao 1 int[] Vetor1 = {34,27,91,56}; //Inicializao 2 (Invlida) int[] Vetor2 = new int[4]; Vetor2 = {34,27,91,56}; //Inicializao 3 int[] Vetor3 = new int[4]; Vetor3[0] = 34; Vetor3[1] = 27; Vetor3[2] = 91; Vetor3[3] = 56;

    JAVA: VETORES

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 35 de 133

    Muitas vezes precisamos fazer clculos e guardar o resultado em alguma outra varivel para uso posterior, porm o tipo de resultado pode no condizer com o tipo da varivel que ir receber esse resultado, seja de outra varivel ou resultado de uma expresso matemtica. A converso de tipos primitivos a transformao de um tipo para outro. Essas converses podem ser implcitas ou explcitas.

    As converses implcitas ocorrem quando atribumos um valor de menor tipo em uma varivel de tipo maior. Este tipo de converso tambm conhecido como converso de ampliao e ocorrer de forma automtica porque um valor de menor tipo sempre caber em uma varivel de maior tipo. Podemos ver um exemplo representado abaixo: import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { System.out.println("Converso Implcita:"); double a1 = 10*5.2 + 4 - 1.3; System.out.println("Varivel a1 = " + a1); double a2 = 5/2; System.out.println("Varivel a2 = " + a2); double a3 = 5/2.0; System.out.println("Varivel a3 = " + a3); System.out.println("\nConverso Explcita:"); int a4 = (int) (10*5.2 + 4 - 1.3); System.out.println("Varivel a4 = " + a4); int a5 = (int) (5/2.0); System.out.println("Varivel a5 = " + a5); } }

    O resultado das converses implcitas e explcitas so apresentados abaixo: Converso Implcita: Varivel a1 = 54.7

    JAVA: CONVERSO DE TIPOS

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 36 de 133

    Varivel a2 = 2.0 Varivel a3 = 2.5 Converso Explcita: Varivel a4 = 54 Varivel a5 = 2

    A converso explcita ou de reduo ocorre quando precisamos atribuir um valor de tipo maior para uma varivel de tipo menor. Nesse caso, precisamos informar diretamente entre parnteses (antes da varivel, literal ou resultado de uma expresso) o tipo de dado que vamos converter. Existem 19 converses implcitas e 22 converses explcitas possveis.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 37 de 133

    Professor, o que Controle de Fluxo? como se controla o fluxo de um cdigo, isto , como um programa executa suas tarefas! Por meio de comandos, tarefas podem ser executadas seletivamente, repetidamente ou excepcionalmente. No fosse o controle de fluxo, um programa poderia executar apenas uma nica sequncia de tarefas, perdendo seu dinamismo. Em Java, temos duas estruturas: Seleo e Repetio. A Estrutura de Seleo (ou Condio) consiste basicamente dos comandos if-else. Ele empregado para executar seletivamente ou condicionalmente um outro comando mediante um critrio de seleo. Esse critrio dado por uma expresso, cujo valor resultante deve ser um dado do tipo booleano, isto , true ou false. Se esse valor for true, ento o outro comando executado; se for false, a execuo do programa segue adiante. A sintaxe do if-else apresentada abaixo: if(CondioBooleana) { comando1; comando2; (...) comandoN; } else { comando1; comando2; (...) comandoN; }

    Uma variao desse comando, o if-else permite escolher alternadamente entre dois outros comandos a executar. Nesse caso, se o valor da expresso condicional que define o critrio de seleo for true, ento o primeiro dos outros dois comandos executado, do contrrio, o segundo. Lembrando que possvel aninhar ou combinar vrios comandos else e if o ltimo else opcional. int idade; if (idade 1 && idade 10 && idade 13 && idade

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 38 de 133

    Existem algumas situaes em que se sabe de antemo que as condies assumem o valor true de forma mutuamente exclusiva, i.e., apenas uma entre as condies sendo testadas assume o valor true ao mesmo momento. Nesses casos, a linguagem Java prov um comando de controle de fluxo bastante poderoso. Trata-se do comando swich, cuja sintaxe a seguinte: switch([expresso]) { case [constante 1]: [comando 1] break; case [constante 2]: [comando 2] break; ... case [constante n]: [de comando n] break; default: [comando] }

    A [expresso] pode ser qualquer expresso vlida. Ela avaliada e o seu valor resultante comparado com as constantes distintas [constante 1], [constante 2], ..., [constante n]. Caso esse valor seja igual a uma dessas constantes, o respectivo comando executado (e todos os demais so saltados). Se o valor for diferente, o comando presente sob o rtulo default: executado. Vejamos outro exemplo: int mesAtual = 5; switch (mesAtual) { case 1: System.out.println("Janeiro"); break; case 2: System.out.println("Fevereiro"); break; case 3: System.out.println("Maro"); break; case 4: System.out.println("Abril"); break; case 5: System.out.println("Maio"); break; case 6: System.out.println("Junho"); break; case 7: System.out.println("Julho"); break; case 8: System.out.println("Agosto"); break; case 9: System.out.println("Setembro"); break; case 10: System.out.println("Outubro"); break; case 11: System.out.println("Novembro"); break; case 12: System.out.println("Dezembro"); break; default:

    System.out.println("Ms invlido."); }

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 39 de 133

    Chegamos, ento, Estrutura de Repetio (ou Iterao)! Frequentemente, desejamos que uma tarefa seja executada repetidamente por um programa enquanto uma dada condio seja verdadeira. Isso possvel pela utilizao do comando while. Este comando avalia uma expresso condicional, que deve resultar no valor true ou false. Se o valor for true, ento o comando subjacente executado; se a expresso for false, ento o comando saltado e a execuo prossegue adiante. A diferena que aps executar o comando subjacente, a expresso condicional novamente avaliada e seu resultado novamente considerado. Desse modo a execuo do comando subjacente se repetir at que o valor da expresso condicional seja false. Observe, porm, que a expresso avaliada antes de uma possvel execuo do comando subjacente, o que significa que esse comando pode jamais ser executado. O comando while portanto pr-testado, isto , antes de executar qualquer comando, testa-se a condio oferecida. Caso seja verdadeira, realiza os comandos internos; caso seja falsa, sequer realiza qualquer comando. A sintaxe : while ([condio]) [comando subjacente]

    Deve-se ter cuidado para no acabar implementando um lao infinito (desde que essa no seja sua inteno). Um lao infinito um lao em que a condio de sada nunca satisfeita, portanto ele roda eternamente. Uma variao do comando while que funciona de maneira bastante anloga o do-while. A diferena que ele ps-testado, isto , executa os comandos internos e s depois avalia a condio. do [comando] while ([condio]);

    Em certas situaes, precisamos de laos de repeties nos quais alguma varivel usada para contar o nmero de iteraes. Para essa finalidade, temos o lao for. Este o tipo de lao mais geral e mais complicado disponvel na linguagem Java. Esse lao pr-testado ou ps-testado? Fcil, pr-testado! Avalia-se a condio antes de executar os comandos. Sua sintaxe a seguinte: for ([expresso 1]; [condio]; [expresso 2]) [comando]

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 40 de 133

    A [expresso 1] chamada expresso de inicializao, [condio] uma expresso condicional e [expresso 2] uma expresso qualquer a ser executado no final de cada iterao. O lao for avalia inicialmente a expresso de inicializao. Em seguida, avalia a expresso condicional. Se o valor desta for true, ento o comando executado. A segunda expresso avaliada em seguida, e finalmente o lao volta a avaliar novamente a expresso condicional. Do contrrio, se o valor da expresso for false, a execuo prossegue adiante do lao for. Observem que completamente possvel transformar um for em um while. Podemos dizer que eles so equivalentes, mas escritos de maneira diferente. [expresso 1] while ([condio]) { [comando] [expresso 2] }

    Agora vamos ver um exemplo do while: int idade = 26; while (idade > 30) { System.out.println("Minha idade " + idade); idade = idade + 1; }

    Resultado: ...

    Agora vamos ver um exemplo do do-while: int idade = 26; do { System.out.println("Minha idade " + idade); idade = idade + 1; } while (idade > 30)

    Resultado: Minha idade 26

    Agora vamos ver um exemplo do for: int idade; for (idade = 26; idade < 30; idade++) { System.out.println("Minha idade " + idade); }

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 41 de 133

    Resultado: Minha idade 26 Minha idade 27 Minha idade 28 Minha idade 29

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 42 de 133

    JAVA: ORIENTAO A OBJETOS

    A classe a planta ou esquema que indica como os objetos so criados, quais os seus comportamentos e variveis de estado. Para declarar uma classe, necessrio utilizar a sintaxe a seguir: [palavra-chave] class NomeDaClasse { //Atributos e Mtodos }

    Portanto para declarar uma classe, deve-se colocar a palavra class seguida de um identificador que ir servir de nome para a classe. O identificador pode ser qualquer palavra, exceto palavras reservadas. Por exemplo: class Conta introduz a declarao de uma nova classe chamada Conta. Note que, por conveno, o nome de uma classe inicia sempre com uma letra maiscula. A Palavra-Chave opcional, podendo ser: //Essa classe pode ser acessada por todos public class Carro {...} //Essa classe no pode gerar instncias abstract class Carro {...} //Essa classe no pode ser estendida final class Carro {...}

    JAVA: CLASSES

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 43 de 133

    Um objeto uma instncia de uma classe. Para criar um objeto, devemos utilizar a seguinte sintaxe: new construtor();

    O comando new, tambm conhecido como operador de criao, cria um novo objeto, alocando memria para o objeto e inicializando essa memria para valores default. Ele necessita de um operando: o construtor, que o nome de um mtodo especial que constri o objeto. Uma vez construdo, o objeto deve ser atribudo a uma varivel, para que possa ser utilizado e referenciado no futuro. /* 1) Operador NEW responsvel por criar um objeto; * 2) NomeClasse() o construtor da Classe NomeClasse; * 3) NomeObjeto uma varivel do Tipo NomeClasse; */ NomeClasse NomeObjeto = new NomeClasse(); /* Observem que possvel atribuir o objeto de uma * classe para uma varivel de outra classe */

    A linguagem Java assume a responsabilidade de destruir qualquer objeto criado que no esteja sendo usando. Para tal, utiliza um Coletor de Lixo (Garbage Collector), que executado em intervalos regulares, examinando cada objeto para ver se ele ainda referenciado por alguma varivel. Caso o objeto no seja utilizado ao menos por uma varivel, ele destrudo e sua memria liberada.

    JAVA: OBJETOS

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 44 de 133

    Um atributo ou campo uma varivel declarada no corpo de uma classe. Ele serve para armazenar o estado de um objeto (atributo de instncia) ou o estado de uma classe (atributo de classe). A sintaxe de declarao de um atributo a seguinte: [palavra-chave] tipoAtributo NomeAtributo [=expresso];

    A Palavra-Chave opcional, podendo ser: Final, Volatile, Static ou Transient class Empregado { final String Nome; //Indica que Nome um atributo constante; volatile Salario; //Indica que Salrio modificvel por threads distintas; static Idade; //Indica que Idade compartilhada por todos objetos; transient Sexo; //Indica que Sexo no pode ser serializvel; }

    Modificadores de Acesso: class Empregado { public String nome; //Nome: pblico private int Salario; //Salrio: privado protected short Idade; //Idade: protegido char Sexo; //Sexo: default }

    JAVA: ATRIBUTOS

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 45 de 133

    Java utiliza mtodos para se referir a trechos de cdigo que so associados a classes. Se os atributos servem para manter ou armazenar o estado ou o valor de um objeto, os mtodos servem para descrever os comportamentos de um objeto ou classe. Um mtodo muito similar a uma funo em C. A maior diferena que os mtodos da linguagem Java so declarados completamente dentro de uma classe. [Palavras-Chave] TipoRetorno NomeMetodo ([Lista de Parmetros]) { //Corpo do Mtodo }

    A sintaxe de declarao de um mtodo apresentada acima. A Palavra-Chave opcional, podendo ser: Abstract, Final, Static, Native e Synchronized //Indica que esse mtodo no possui corpo abstract int soma (int a, int b) {//...//} //Indica que esse mtodo no pode ser sobrescrito final int soma (int a, int b) {//...//} //Indica que esse mtodo s pode acessar atributos de classe e no pode ser sobrescrito static int soma (int a, int b) {//...//} //Indica que esse mtodo foi escrito outra linguagem native int soma (int a, int b) {//...//} //Indica que esse mtodo s executvel por uma thread por vez synchronized soma (int a, int b) {//...//}

    Modificadores de Acesso: public int soma (int a, int b) {//...//} private int soma (int a, int b) {//...//} protected int soma (int a, int b) {//...//} int soma (int a, int b) {//...//}

    Vamos falar agora sobre um mtodo importante: Construtor! Ele um mtodo especial, chamado pelo operador new quando um novo objeto necessita ser criado. Dentro do construtor, pode-se colocar cdigo customizado de inicializao do objeto. Em geral, ele deve ter o mesmo nome da classe em que for declarado. Alm disso, um construtor no deve ter um tipo de retorno em sua declarao. Professor, no entendo uma coisa! Em geral, no cdigo da classe no h nenhum mtodo com o nome do mtodo construtor. Ora, no h declarao de mtodo

    JAVA: MTODOS

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 46 de 133

    algum! Como isso? verdade! Basicamente, quando voc no declara um construtor para uma classe, o compilador cria um construtor padro com uma lista vazia de parmetros. Pode-se criar diversos construtores para uma mesma classe. Outro mtodo muito importante o Mtodo Main! Pois , ele sempre definido como um mtodo de classe, i.e., possui um modificador static: public static void main (String[] args) throws java.lang.Exception

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 47 de 133

    Herana a habilidade de se derivar alguma coisa especfica a partir de algo mais genrico. Ns encontramos essa habilidade ou capacidade diversas vezes em nosso cotidiano. Por exemplo: um Plio estacionado na garagem do seu vizinho uma instncia especfica da categoria Carro, mais genrica. Da mesma forma, uma Honda CG 125 uma instncia especfica da categoria mais genrica Moto. Se levarmos as categorias Carro e Moto para um outro nvel mais elevado, as duas se relacionaro uma com a outra por serem instncias especficas de uma categoria mais genrica ainda que elas: a categoria Veculo. Em outras palavras, carros e motos so veculos. A imagem abaixo esquematiza as relaes entre Plio, Carro, Honda CG 125, Moto e Veculo.

    Esse exemplo ilustrou a Herana Simples! Neste caso, uma entidade herda estados e comportamentos (atributos e mtodos) de uma e somente uma categoria. O Plio, por exemplo, herda da categoria Carro (e somente dela, diretamente). Em contraste, a Herana Mltipla permite que uma entidade herde diretamente comportamentos e estados de duas ou mais categorias ao mesmo tempo. Imagine um Empregado chamado Jos de uma empresa qualquer. Para ser mais especfico, pense em Jos como sendo tanto Gerente quanto Contador

    JAVA: HERANA

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 48 de 133

    simultaneamente dessa empresa. Ele herdaria as capacidades de um Gerente e de um Contador, concordam? Portanto, em uma hierarquia de entidades, Joo herdaria de duas classes diferentes diretamente, como apresenta a imagem abaixo:

    A sintaxe da herana sugere que voc pode estender uma e somente uma classe. O Java no suporta Herana Mltipla, porque segundo projetistas da linguagem esse tipo de implementao poderia gerar confuso. Imagine, por exemplo, duas classes-base declarando um atributo que possua o mesmo nome mas com tipos diferentes. Qual dos dois a classe-filha deveria herdar? A mesma situao poderia acontecer com um mtodo! Se dois mtodos possussem o mesmo nome, mas diferentes listas de parmetros ou tipos de retorno, qual deles a subclasse deveria herdar? Vocs percebem como isso poderia causar inconsistncias de projeto? Para prevenir tais problemas, a linguagem Java rejeita a implementao de herana mltipla. Novas classes derivam capacidades (expressas como atributos e mtodos) de classes j existentes. Isso faz com que o tempo de desenvolvimento de uma aplicao seja bem menor, pois classes j existentes e comprovadamente funcionais (livres de erros e j testadas) so reaproveitadas (ou reutilizadas). A sintaxe que expressa o conceito de extenso de classes a seguinte:

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 49 de 133

    class NomeClasseFilha extends NomeClassePai { //Atributos e Mtodos }

    Essa sintaxe pode ser lida da seguinte forma: NomeClasseFilha estende NomeClassePai. Em outras palavras, NomeClasseFilha herda (ou deriva) capacidades (expressas atravs de atributos e mtodos) de NomeClassePai. A NomeClasseFilha conhecida como subclasse, classe derivada ou classe-filha e NomeClassePai conhecida como superclasse, classe-base ou classe-pai. A palavra-chave extends faz com que uma subclasse herde (receba) todos os atributos e mtodos declarados na classe-pai (desde que ela no seja final), incluindo todas as classes-pai da classe-pai. A classe-filha pode acessar todos os atributos e mtodos no-privados. Ela herda, mas no acessa (ao menos diretamente) mtodos e atributos privados. Todo objeto criado a partir de uma subclasse tambm um objeto do tipo da sua superclasse (Ex: um objeto do tipo Carro tambm um objeto do tipo Veculo). Essa afirmao implica o fato de que voc pode atribuir um objeto de uma subclasse para uma referncia criada ou declarada para um objeto de sua superclasse. Como assim, professor? Vejamos! //Objeto do tipo Carro um objeto do tipo Veculo Veiculo v = new Carro();

    A linha de cdigo acima cria um objeto do tipo Carro e atribui sua referncia varivel v. Note que essa varivel v uma varivel que armazena referncias para objetos do tipo Veculo. Esse tipo de atribuio perfeitamente possvel, j que um Carro uma subclasse de Veculo. Atravs da varivel v, possvel chamar os mtodos que pertencem ao tipo Veculo. Portanto, pode-se utilizar esse artifcio de nomeao para transformar uma classe-filha em qualquer uma de suas classes-pai. Professor, possvel fazer o inverso? Pode-se atribuir uma classe-pai a uma classe-filha? No, isso s pode ser feito por meio de um type cast. Assim, uma varivel pode assumir momentaneamente outro tipo para que o programador possa utiliz-la.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 50 de 133

    Pessoal, ns j sabemos que para se descobrir o que um objeto pode fazer, basta olhar para as assinaturas de seus mtodos pblicos definidos na classe desse objeto que formam uma interface de uso. A assinatura de um mtodo composta pelo seu nome e seus parmetros. Por outro lado, para descobrir como um objeto realiza suas operaes, deve-se observar o corpo de cada um dos mtodos da classe. Os corpos dos mtodos constituem a implementao das operaes dos objetos. Professor, por que ns encapsulamentos classes, atributos e mtodos? Cara, por duas razes: desenvolvimento e manutenibilidade. O encapsulamento ajuda a aumentar a diviso de responsabilidades (ou coeso) e, dessa forma, fica mais fcil e rpido desenvolver sistemas em mdulos. Da mesma forma, ele ajuda a manuteno, visto que para torna-se mais difcil fazer besteiras no cdigo e atrapalhar manutenes futuras. Trazendo isso para a vida real, lidamos com encapsulamento o tempo inteiro. Voc sabe como usar um controle remoto, mas voc no sabe como ele funciona internamente. Encapsula-se seu funcionamento interno e disponibiliza-se apenas sua interface ao usurio. Chegamos ao conceito de Modificadores de Acesso! Eles so utilizados para modificar o modo como classes, mtodos e variveis so acessadas. Existem trs modificadores de acesso e um quarto nvel (acesso default/friendly), quando no se usa nenhum dos modificadores citados. Toda classe, mtodo e variveis de instncia declaradas possuem um controle de acesso. Pessoal, esses Modificadores de Acesso determinam quo acessveis so esses elementos. Vamos v-los agora em mais detalhes: : essa instruo indica que a classe, mtodo ou atributo assim declaradas

    podem ser acessadas em qualquer lugar e a qualquer momento da execuo do programa o modificador menos restritivo.

    : essa instruo indica que mtodos ou atributos (classes, no) assim

    declaradas podem ser acessadas apenas dentro da classe que os criou. Subclasses herdam-nos, mas no os acessam o modificador mais restritivo3.

    3 Em tese, no Mundo Java, classes no herdam nem acessam membros privados objetos herdam membros privados, mas no o acessam; no Mundo OO, classes e objetos acessam membros privados, mas no o acessam.

    A documentao oficial afirma da seguinte forma: "Members of a class that are declared private are not inherited

    by subclasses of that class

    JAVA: ENCAPSULAMENTO

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 51 de 133

    : essa instruo indica que mtodos ou atributos (classes, no) assim

    declaradas somente podem ser acessadas dentro do pacote em que est contida ou por subclasses no mesmo pacote.

    tambm chamado friendly, no h palavra para esse modificador porque

    ele , na verdade, a ausncia de um modificador. Indica-se que a classe, mtodo ou atributo podem ser acessadas por classes do mesmo pacote.

    Especificador Prpria Classe Subclasse Pacote Global

    Privado (-) Sim No No No (~) Sim No* Sim No

    Protegido (#) Sim Sim Sim No Pblico (+) Sim Sim Sim Sim

    Pensem comigo! Acessar ou editar propriedades de objetos, manipulando-as diretamente, pode ser muito perigoso e gerar muitos problemas. Por conta disso, mais seguro, para a integridade dos objetos e, consequentemente, para a integridade da aplicao, que esse acesso ou edio sejam realizados atravs de mtodos desse objeto. Utilizando mtodos, podemos controlar como consultas e modificaes so realizadas, controlando-as. Para tal, podemos utilizar Mtodos Getters e Setters para recuperar dados e inserir dados, respectivamente. Para o primeiro, utiliza-se o Mtodo Get; para o segundo, utiliza-se o Mtodo Set. Em geral, costuma-se declarar atributos como privados, e mtodos e classes como pblicos. class Classe1 { //Atributo privado private String Algo;

    OBSERVAO importante ressaltar que, em caso de no haver modificador, a subclasse pode ou no acessar os mtodos e atributos da sua superclasse, e isso depende da localizao da subclasse. Se ela estiver em um pacote diferente do pacote da superclasse, no poder acessar. Se estiver em um mesmo pacote da superclasse, poder acessar. Logo, para diferenciar o Modificador Pacote do Modificador Protegido, deve-se saber primeiramente se desejvel que a subclasse possa ter acesso a atributos e mtodos da classe.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 52 de 133

    //Mtodo pblico para recuperar dados public String getAlgo() { return this.Algo; } //Mtodo pblico para modificar/inserir dados public void setAlgo(String Algo) { this.Algo = Algo; } }

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 53 de 133

    Galera, o que uma Interface? simplesmente um contrato! Quando vocs assinam o contrato do seguro de um carro, vocs esto se comprometendo a atender aquilo que l est escrito. Analogamente, a interface um contrato que obriga aqueles que a assinam a implementar os mtodos l presentes. Elas ajudam a padronizar implementaes entradas e sadas. Em outras palavras, um recurso utilizado em Java para obrigar a um determinado grupo de classes a ter mtodos ou propriedades em comum para existir em um determinado contexto, contudo os mtodos podem ser implementados em cada classe de uma maneira diferente. Em geral, as interfaces so compostas basicamente de um conjunto de assinaturas de mtodos pblicos e abstratos. public interface FiguraGeometrica { public String getNomeFigura(); public int getArea(int vertice); public int getPerimetro(); }

    A sintaxe para implementar uma Interface utiliza a palavra reservada implements: public class ClasseImplementadoraDeInterfaces implements FiguraGeometrica

    Professor, qual a diferena entre uma Interface e uma Classe Abstrata? Bem, Interfaces no so classes; so, na verdade, entidades que no possuem qualquer implementao, apenas assinatura, sendo que todos os seus mtodos so pblicos e abstratos. J as Classes Abstratas tambm contm, em geral, mtodos abstratos (sem corpo), mas podem ter vrios mtodos concretos. Uma Classe Abstrata pode, inclusive, no conter nenhum mtodo abstrato, i.e., todos os seus mtodos so concretos. No entanto, se uma classe tiver um nico mtodo abstrato que seja, ela ser considerada uma Classe Abstrata. Alis, uma Interface tambm chamada de classe abstrata pura por conta disso, ou seja, no h impurezas (isto , mtodos concretos).

    JAVA: INTERFACE

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 54 de 133

    A palavra Polimorfismo vem do grego: muitas formas. Trata-se da capacidade de um objeto poder se comportar de diversas formas dependendo da mensagem recebida Observem que isso no quer dizer que o objeto fica transformando seu tipo a todo momento. Na verdade, um objeto nasce com um tipo e morre com esse mesmo tipo. O que muda, ento? a forma como ns nos referimos a esse objeto! Existem dois tipos de polimorfismo:

    Polimorfismo Esttico: ocorre quando uma classe possui mtodos com mesmo

    nome, entretanto assinaturas diferentes, i.e., mtodos de uma mesma classe se sobrecarregando. Pode ser chamada tambm de Sobrecarga ou Overloading. Ocorre em Tempo de Compilao e alguns no o consideram um tipo de polimorfismo, porque a assinatura diferente.

    Polimorfismo Dinmico: ocorre quando uma classe possui um mtodo com

    mesmo nome e mesma assinatura que um mtodo de sua suplerclasse, i.e., o mtodo da classe-filha sobrescreve o mtodo da classe-pai. Pode ser chamada tambm de Sobrescrita, Overriding, Redefinio ou Sobreposio. Ocorre em Tempo de Execuo e um corolrio do conceito de herana.

    Professor, o que voc quer dizer com mesma assinatura e assinatura diferente? a mesma quantidade, tipo e ordem dos parmetros. Em outras palavras: //Assinatura Igual: quantidade, tipo e ordem public String EntendendoAssinatura(int A, char B); public String EntendendoAssinatura(int C, char D); //Assinatura Diferente: quantidade diferente public String EntendendoAssinatura(long A, long B, long C); public String EntendendoAssinatura(long A, long B); //Assinatura Diferente: tipo diferente public String EntendendoAssinatura(long A, long B); public String EntendendoAssinatura(char A, long B); //Assinatura Diferente: ordem diferente public String EntendendoAssinatura(int A, char B); public String EntendendoAssinatura(char B, int A);

    Agora vamos ver um exemplo de Polimorfismo Dinmico. Eu pensei comigo mesmo: O que seria uma caracterstica comum de praticamente todos os animais? Emitir sons! Observem que eu criei uma classe abstrata que possui um nico mtodo tambm abstrato , que no retorna valor algum e no recebe nenhum argumento. Vejam a classe abaixo:

    JAVA: POLIMORFISMO

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 55 de 133

    abstract class Animal { abstract void som(); }

    Dito isso, vou criar dois animais do meu gosto pessoal: um gato e um cachorro! Bem, o gato um animal! Que relacionamento esse um? Herana! Portanto as classes gato e cachorro sero classes filhas da superclasse Animal. Observem abaixo que ambas implementam o mtodo abstract void som( ), porm cada uma a sua maneira, visto que gatos e cachorros emitem sons diferentes! class Gato extends Animal { void som() { System.out.println("MIAU!"); } } class Cachorro extends Animal { void som() { System.out.println("AUAU!"); } }

    Pois bem! Vamos ver agora o Polimorfismo Dinmico em ao. Criaremos um objeto do tipo Gato e atribuiremos a um objeto do tipo Animal. Professor, voc pode fazer isso? Sim, porque Gato filho de Animal similar a um casting implcito! Em seguida chamaremos o mtodo som( ). Por fim, faremos o mesmo procedimento com o objeto do tipo Cachorro. public static void main(String[] args) { Animal animal = new Gato(); animal.som(); //Emite o som MIAU! Animal animal = new Cachorro(); animal.som(); //Emite o som AUAU! }

    Olha que bacana: existem dois mtodos com exatamente o mesmo nome e mesma assinatura! Como o compilador saber qual deve ser chamado? Ele no saber tem que ser em tempo de execuo. No primeiro momento, ele apresentar MIAU!, porque animal nesse instante um gato. Depois fazemos outra atribuio e ele apresentar AUAU, porque animal naquele instante um cachorro. O Polimorfismo Esttico bem mais simples! Imaginem que eu deseje fazer dois clculos matemticos. Primeiro somar trs nmeros e depois somar apenas dois nmeros. Eu posso ter dois mtodos com mesmo nome, mas assinaturas diferentes. Dessa forma, se eu passar trs valores, ele saber que um mtodo; e se eu passar dois valores, ele saber que outro mtodo. Simples, no?

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 56 de 133

    class Calculo { void soma(int a,int b){ System.out.println(a+b); } void soma(int a,int b,int c){ System.out.println(a+b+c); } public static void main(String args[]) { Calculo x = new Calculo(); x.soma(10,10,10); //Mesmo nome, mas assinatura diferente (3 valores) x.soma(20,20); //Mesmo nome, mas assinatura diferente (2 valores) } }

    OBSERVAO Atributos com o mesmo nome na classe/subclasse substituem os herdados. Ademais, mtodos declarados com a palavra-reservada final no podem ser redefinidos. J os mtodos abstratos devem ser redefinidos na subclasse ou declarados como abstratos para que sejam implementados pela classe-neta. Por fim, membros definidos na superclasse podem ser acessados na subclasse por meio da palavra-reservada super, a menos que tenham sido declarados como privados.

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 57 de 133

    JAVA: CONCEITOS AVANADOS

    A Plataforma Java oferece recursos para construo de interfaces grficas de usurio (GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro um conjunto bsico de classes e interfaces que definem os componentes de uma janela desktop. J o Swing um conjunto sofisticado de classes e interfaces que definem os componentes visuais necessrios para construir uma interface grfica de usurio. Vocs entenderam mais ou menos? O primeiro um conjunto bsico que serve de base para o segundo, que um conjunto mais sofisticado. Os componentes Swing so implementados com nenhum cdigo nativo totalmente Java puro, i.e., apesar de serem sensivelmente mais lentos que os componentes nativos em AWT (Abstract Window Toolkit), eles oferecem uma maior liberdade aos programadores. O AWT (javax.awt) veio primeiro, mais pesado, gerado pelo sistema operacional, logo dependente de plataforma. O Swing (javax.swing) mais leve, gerado por uma Mquina Virtual Java (JVM), logo independente de plataforma. Galera, nem tudo diferente! Vejam: ambos so fceis de programar, porque a orientao a objetos proporciona alterar partes do programa, sem alterar toda a estrutura.

    JAVA: INTERFACE GRFICA

    00000000000

    00000000000 - DEMO

  • Analista Judicirio Especialidade Informtica/TRF.02 Curso de Desenvolvimento

    Prof. Diego Carvalho Aula 00

    Prof. Diego Carvalho www.estrategiaconcursos.com.br Pg. 58 de 133

    O Swing mantm as funcionalidades dos componentes AWT! Ao acrescentarmos a letra J aos componentes AWT, as novas classes sero como componentes Swing, i.e., JButton, JTextField, JList tem os mesmos argumentos que Button, TextField e List componentes AWT. Ns vamos ver logo frente a definio de alguns componentes Swing. Professor, o que um componente? Bem, os itens que aparecem em uma interface grfica de interao com usurio (janelas, caixas de texto, botes, listas, caixas de seleo, entre outros) so chamados de componentes. Alguns componentes podem ser colocados dentro de outros componentes, por exemplo, uma caixa de texto dentro de uma janela. Abaixo podemos ver a definio bsica dos principais componentes: JFrame: define janelas com ttulo, borda e alguns itens definidos pelo sistema

    operacional como boto para minimizar ou maximizar;

    JPanel: define um componente que basicamente utilizado para agrupar nas janelas outros componentes como caixas de texto, botes, listas, entre outros;

    JTextField: define os campos de texto menores que podem ser preenchidos pelo usurio;

    JTextArea: define os campos de texto maiores que podem ser preenchidos pelo usurio;

    JPasswordField: define os campos de caixa de texto de formulrios para digitar senhas;

    JButton: permite que os usurios indiquem quais aes ele deseja que a aplicao execute;

    JCheckBox: permite criar formulrios com checkboxs (aquelas caixinhas para voc dar um check);

    JComboBox: permite criar formulrios com comboboxs (aquela listinha de opes).

    Agora vamos falar um pouquinho sobre o Layout Manager (ou Gerenciador de Disposio)! Galera, uma coisa criar diversos componentes, outra coisa posicion-los e dimension-los. O Layout Manager o objeto que determina como