Buscar

Linguagem de Programação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Linguagem de Programação
Aula 1
Um Conjunto de regras sintáticas e semânticas, utilizados para se estabelecer comunicação entre o programador e o computador. São usadas para se escrever programas ou softwares.
Métodos de implementação de Linguagens de Programação:
É a forma como uma linguagem de programação se comunica (é entendida e executada) com o computador.
O computador possui uma linguagem de máquina de nível baixo que oferece operações primitivas.
O software de sistema deve criar uma interface com os programas de nível mais alto.
O sistema operacional e as implementações de linguagens são dispostos em camadas sobre a interface de linguagem de máquina de um computador.
Introdução ao JAVA
Linguagem de programação orientada a objetos desenvolvida por um time de programadores, liderados por Patrick Naughton, Mike Sheridan e James Gosling, na empresa Sun Microsystems. Linguagem de Alto desempenho, suporta multithreading, compilação just-in-time e utilização de código nativo. É uma linguagem que é compilada para um “bytecode”, que é interpretada por uma máquina virtual – JVM.
Portabilidade - O Java pode ser executado em qualquer plataforma ou equipamento que possua um interpretador Java e que tenha sido especialmente compilado para o sistema a ser utilizado.
Orientada a objetos - Contém a sintaxe similar a linguagem C/C++, mas é baseada no modelo Simula67.
Segurança - Pode ser executado via rede, com restrições de execução, além de proteger o sistema do cliente contra possíveis ataques não intencionais.
Por que estudar Java?
Orientação a Objetos: totalmente 00 - permitindo herança e reutilização de código de forma dinâmica e estática.
Dinamismo: permite ser aumentado durante a execução.
Facilidade: Derivada do C/C++ - Bem familiar. O ambiente retira do programador a responsabilidade de gerenciar a memória e os ponteiros.
Utilizações E Aplicações Do Java:
Editor: Compilador:
Carregador:					 Verificador: 
 
Interpretador:
Ambiente De Programação Em Java
O ambiente de desenvolvimento de software Java, Java SDK (antigamente, JDK), é formado, essencialmente, por um conjunto de aplicativos que permite, entre outras tarefas, realizar a compilação e a execução de programas escritos na linguagem Java.
J2SE - Java2 Standard Edition – Fornece as principais APIs e enfoca o desenvolvimento de aplicações na arquitetura Cliente – Servidor. Não permite distribuição de objetos nem oferece suporte a tecnologias para Internet.
J2EE - Java2 Enterprise Edition – Fornece um conjunto de APIs para o desenvolvimento corporativo e enfoca na integração entre sistemas. Disponibiliza alta distribuição de objetos e oferece total suporte a tecnologias para Internet.
J2ME - Java2 Micro Edition – Fornece as APIs para o desenvolvimento de aplicações para computação móvel, em pequenos dispositivos ou tecnologias embarcadas
Stand-Alone - Aplicações baseadas na J2SE que tem total acesso aos recursos do sistema, memória, disco, rede, dispositivos, etc.
Java Apllets - Pequenas aplicações que não têm acesso aos recursos de hardware, necessitando de um navegador com suporte a J2SE para serem executados.
Java Servlets - Programas desenvolvidos para serem executados em servidores Web, baseados na J2EE, comumente usados para gerar conteúdos dinâmicos para websites.
Java Midlets - Pequenas aplicações, extremamente seguras e construídas para serem executadas dentro do J2ME.
Java Beans - São componentes de software escritos em Java que podem ser manipulados visualmente com a ajuda de uma ferramenta de desenvolvimento.
PROVA 1
1 - A tecnologia Java implementa um serviço conhecido como Garbage Collector - Coletor de Lixo. Sua função é:
R - Eliminar os objetos que não estão sendo usados se estiver com pouco espaço na memória.
2 - Seja um programa em java com o seguinte código:
public class PrimeiroPrograma {
public static void main (String args[]) {
          System.out.println("Bem vindo ao Mundo Java");
}
}
Marque a única alternativa CORRETA:
R - O arquivo deve ser salvo como PrimeiroPrograma.java, pois o java faz diferença entre letras maiúscula e minúscula.
3 - Java é uma linguagem de programação orientada a objeto desenvolvida na década de 90 por uma equipe de programadores chefiada por James Gosling, na empresa Sun Microsystems. Programas Java não são traduzidos para a linguagem de máquina, como outras linguagens estaticamente compiladas e sim para uma representação intermediária, chamada:
R – Bytecode
4 - Para programar em Java, não é necessário ter programado antes. Porém, ficaria mais fácil se tiver conhecimento em linguagem de programação, porque Java é totalmente estruturada em objetos. Para começar a programar será necessário fazer o download:
R – JDK
5 - Quando programamos em Java, devemos levar em consideração as convenções de nomenclatura para deixar nosso código o mais legível e documentável possível, pois um dos objetivos da programação orientada a objetos é o reaproveitamento do código. Com relação ao nome de classes, por convenção, marque a opção incorreta:
R - deve começar com letras minúsculas, porém não podem começar com números.
6 - No âmbito da linguagem Java, considere:
III. Na interpretação, a máquina virtual Java ou JVM analisa e executa cada instrução do código Bytecode.
R - III, somente
7 - Analisando as características da linguagem JAVA, marque a alternativa correspondente ao fato da linguagem poder ser implantada em diversas plataformas, como, por exemplo, Windows, Unix e Macintosh, sem que seja necessário modificar ou mesmo reconstruir a aplicação:
R – Portabilidade
8 - De acordo com o texto abaixo, qual a alternativa correta? (Fonte: adaptado IBM)
"é um programa que carrega e executa os aplicativos Java, convertendo os bytecodes em código executável de máquina."
R - JVM
AULA 2
As convenções do Java
A linguagem de programação Java é “Case Sensitive”. Existem várias convenções utilizadas. São elas:
Comentários em Java:
Existem três formas de se inserir comentários :
 
Tipos de Dados em Java
O Java é uma linguagem de programação fortemente tipada, ou melhor, necessita que todas as variáveis tenham um tipo declarado. Existem 8 tipos primitivos. Seis deles são numéricos, um é o caractere e o último é o booleano.
Declarando E Atribuindo Valores A Variáveis
A declaração de variáveis em Java exige que o tipo da variável seja declarado. Você inicia a declaração, indicando o tipo da variável e o nome desejado, como nos exemplos a seguir:
int x, y; //declarando duas variáveis inteiras
                    x = 6; //atribuindo valores a variáveis
                    y = 1000;
 
                    float f = 3,141516f; //ponto flutuante
                    double w = 3,2310834; //ponto flutuante de dupla precisão
                    char ch = ‘a’; //Caractere
 
                    final int MAX = 9; Define a constante MAX com o valor de 9
Blocos: 
Conjunto de linhas de códigos situadas entre um abre e um fecha chaves( {} ). É permitido criar blocos dentro de blocos. 
 { //início de bloco
...
   /*bloco de comandos*/
...
} //fim de bloco
Escopo de variáveis:
Escopo de uma variável indica em que parte do código ou bloco de comandos do programa que podemos utilizar ou enxergar a variável. Existem variáveis locais e variáveis globais. O escopo define também quando a variável será criada e destruída da memória. As locais estão visíveis apenas dentro do bloco enquanto as globais estão disponíveis em qualquer bloco do programa.
Comando Condicional:
Desvios de fluxo:
Estruturas de repetição e laços:
Manipulando Com Strings
Java é uma linguagem totalmente orientada a objetos. Então, todos os valores utilizados são objetos descritos por classes. Os tipos primitivos de dados permitem que possamos criar todos os tipos de objetos necessários para se implementarqualquer sistema. Um dos objetos mais utilizados é o String (com S maiúsculo porque, como vimos nas convenções, String é uma classe). Objetos da classe String não devem ser comparados usando os operadores relacionais, porque são objetos. Existem métodos especiais para executar tais funções. O objeto String em Java possui mais de 50 métodos diferentes.
Manipulando Com Vetores
Vetores são estruturas utilizadas para armazenar um conjunto de dados do mesmo tipo. Esses podem ser de qualquer tipo, desde variáveis primitivas até objetos complexos. A sua alocação na memória é sempre contínua.
Conversão Entre Tipos De Dados
Quando trabalhamos com expressões, o resultado de uma expressão pode ser de um tipo diferente dos seus operandos. Ou ainda, temos dois tipos de dados diferentes e queremos efetuar uma operação. Não é possível efetuar comparações ou operações com tipos diferentes. Para resolver este problema, podemos converter os tipos de dados. Existem, basicamente, dois tipos de conversões de dados. A conversão implícita e a explícita de dados.
Implícita: O primeiro caso ocorre sem a necessidade do programador interferir. Os valores são convertidos automaticamente. Isso ocorre na conversão de inteiro para real, de números para strings ou com o uso de operadores unários.
Ex.:
double x;
int i = 20;
x = i; // x recebe um valor inteiro
System.out.print(“i= ” + x); /* O valor de x é convertido para string e concatenado com a outra string para ser apresentada na tela */
Explícita: O segundo caso, o programador controla a conversão informando qual tipo será utilizado, através de um operador unário. Ex.:
float eventos = 25.7;
float dias = 7.2;
x = (int) (eventos / dias); // O resultado é o inteiro 3, pois 25/3 é 3.57
AULA 03 
Introdução As Ides
IDE, do inglês Integrated Development Enviroment ou Ambiente Integrado de Desenvolvimento, é um software que engloba características e ferramentas para o desenvolvimento de programas. As IDEs facilitam a técnica de RAD que tem como principal objetivo a maior produtividade de seus desenvolvedores. Existem várias IDEs disponíveis. Abaixo, a lista de algumas IDEs 
RAD- Rapid Application Development – Desenvolvimento Rápido de Aplicativos.
Conhecendo a IDE NetBeans
O NetBeans é uma IDE gratuita e de código aberto, totalmente escrito em Java para desenvolvedores de software na linguagem Java, C/C++, PHP, Groovy, Ruby e muito mais. Por ser escrito em Java, é multi-plataforma, ou melhor, funciona em vários ambientes como Windows, Linux, Solaris e MacOS. O NetBeans IDE oferece aos desenvolvedores ferramentas necessárias para criar aplicativos profissionais de desktop, empresariais, Web e móveis. Com projeto iniciado em 1996 por dois estudantes tchecos, teve como primeiro nome Xelfi, em alusão ao Delphi, porém foi totalmente desenvolvido em Java. Em 1999, o projeto já havia evoluído para uma IDE proprietário, com o nome de NetBeans DeveloperX2, nome este que veio da idéia de reutilização de componentes, que era a base do Java. Nessa época, a empresa Sun Microsystems havia desistido de sua IDE Java Workshop e, procurando por novas iniciativas, adquiriu o projeto NetBeans DeveloperX2 ,incorporando-o a sua linha de softwares. Por alguns meses, a Sun mudou o nome do projeto para Forte for Java e o manteve por um bom tempo como software proprietário, porém, em junho de 2000, a Sun disponibilizou o código fonte do IDE NetBeans tornando-o uma plataforma OpenSource. Desde então, a comunidade de desenvolvedores que utilizam e contribuem com o projeto não parou de crescer, tornando-se uma das IDE´s mais populares atualmente.
Introdução A Concepção De Interfaces Gráficas
	Muitos dos programas conhecidos interagem com os usuários através da troca de informações. O meio pelo qual a parte humana solicita ao programa a execução de tarefas, alguma resposta, ou qualquer comunicação entre as partes é feito pela Interface. Muitas vezes confundida com o programa em si. A interface gráfica com o usuário (GUI) fornece a um programa um conjunto consistente de componentes intuitivos, familiarizando o usuário com as diversas funções e diminuindo o tempo de aprendizado da nova ferramenta. As GUIs são construídas a partir de componentes GUI, que são objetos com o qual o usuário interage através dos dispositivos de entrada, ou seja, o mouse, o teclado, a voz, etc. Imagine que construir interfaces consiste em colar adesivos em uma tela de vidro ou colocar componentes em um contêiner de componentes. Antes de tudo, é necessário possuir uma tela, que será representada pelos contêineres. Também dispor de adesivos de diversos tamanhos que podem ser distribuídos e anexados livremente pela superfície do vidro. Tais adesivos elementares serão os painéis. Além disso, dispor de adesivos mais elaborados que já estão pré-definidos com figuras de botões, rótulos, etc. Estes podem ser colados diretamente no vidro, ou sobre os outros adesivos rudimentares (painéis), tal qual é a nossa vontade, embora se limitando à capacidade do espaço físico disponível. Na imagem você pode ver alguns dos componentes que estudaremos mais a frente. 
Criação de Interfaces Gráficas
	Em Java, as classes necessárias para criação de componentes gráficos, bem como para fornecer-lhes funcionalidade, estão agrupadas em dois grandes pacotes: java.awt e javax.swing . Os dois pacotes definem componentes com peculiaridades distintas e que serão discutidas a seguir.
Componentes Swing: O pacote javax.swing foi criado em 1997 e inclui os componentes GUI que se tornaram padrão em Java a partir da versão 1.2 da plataforma Java 2. A maioria dos componentes Swing é escrita, manipulada e exibida completamente em Java, estes são conhecidos como componentes Java puros. Isso oferece a eles um maior nível de portabilidade e flexibilidade. Os nomes de tais componentes recebem um “J”, como, por exemplo: JLabel, JButton, JFrame, JPanel, etc. Tal peculiaridade se justifica para diferenciar esses componentes dos que serão mencionados logo adiante. Os componentes Swing fornecem funcionalidade e aparência uniforme em todas as plataformas, sendo denominada de aparência de metal. O Swing também fornece flexibilidade para personalizar a aparência e o comportamento dos componentes de acordo com o modo particular de cada plataforma, ou mesmo alterá-los enquanto o programa está sendo executado. As opções são a personalização com o estilo do Microsoft Windows, do Apple Macintosh ou do Motif (UNIX). metal look-and-feel
Componentes básicos:
Paíneis:
	São áreas que comportam outros componentes, inclusive outros painéis. Em outras palavras, são elementos que fazem a intermediação entre um container e os demais GUI anexados. São criados com a classe JPanel, que é derivada da classe Container. A classe JPanel não tem painel de conteúdo como JFrames, assim, os elementos devem ser diretamente adicionados ao objeto painel. Além de agregar um conjunto de componentes GUI para fins de layout, pode-se criar áreas dedicadas de desenho e áreas que recebem eventos do mouse.
Aula 4
Princípios da Orientação a Objetos
Introdução Classes e Objetos
	Todo sistema orientado a objetos pode ser definido como um conjunto de objetos que trocam mensagens entre si. Então, quando programamos em Java, que é uma linguagem de programação orientada a objetos, estamos escrevendo ou definindo um conjunto de objetos que trocam mensagens. Bom, mas o que é um Objeto? O que é uma classe? O que é mensagens?
As classes definem a estrutura e o comportamento de um tipo de objeto. Observe a figura abaixo: A classe Árvore define um arcabouço de qualquer tipo de árvore. Uma árvore real, será um objeto com estrutura a estrutura definida pela classe, mas os valores de cada árvore serão únicas. 
Classe - Um protótipo que define os atributos e os métodos comuns a todos os objetos de um determinado tipo e da própria classe, com a finalidade de servir de molde para a criação de objetos.
Objetos - São a representação de uma entidade do mundo real, que tem identificador único,propriedades embutidas e a habilidade de interagir com outros objetos e consigo mesmo.  Um objeto é uma instância de uma classe. A classe descreve todas as características e funcionalidades de um objeto. Modelamos os objetos através das classes.
Abstração
Classes e Objetos em Java
Um programa Java é uma coleção de objetos que são descritos por um conjunto de arquivos-texto, onde são definidas as classes. Pelo menos uma destas classes é “public” e contém o método main(), que possui esta forma específica:
                     public static void main(String [] args) {
                                        // aqui o programador insere os comandos
                     }
Como vimos nas aulas anteriores todos os programas feitos tinham esta estrutura. E o nome da classe era o nome do arquivo. Então, podemos concluir que uma classe em Java é construída dentro de um arquivo texto com o mesmo nome da classe e extensão .java.  javac Oi.java
                           java Oi
Nos comandos acima, o compilador Java compila o arquivo texto Oi.java, gerando o bytecode. A máquina virtual interpreta a classe Oi, quando o comando java Oi é executado. Lembro que a classe que contém o método main() é chamada de classe principal.
Encapsulamento
É a disponibilização de uma interface pública, com granularidade controlada, para manipular os estados e executar as operações de um objeto ( * acesso permitido ). Em outras palavras, os atributos e métodos de um objeto podem ser escondidos de outros objetos por uma interface pública de métodos, de modo a impedir acessos indevidos. Para definir diferentes níveis de encapsulamento, faz-se uso do conjunto de modificadores de acesso disponíveis no Java para os membros de classe, com mostrado na tabela.
Definindo uma Classe em Java
[modif] class NomeDaClasse { 
          // corpo da classe... 
}
	A primeira linha é um comando que inicia a declaração da classe. Após a palavra-chave class, segue-se o nome da classe, que deve ser um identificador válido para a linguagem. O modificador modif é opcional; se presente, pode ser uma combinação de public e abstract ou final. A definição da classe, propriamente dita, está entre as chaves { e } que delimitam blocos na linguagem Java. Este corpo da classe, usualmente obedece à seguinte sequência de definição:
 
 
Criando Objetos em Java
	Toda classe possui atributos e métodos. Em especial, toda classe tem um construtor, que é um método responsável pela instanciação do objeto. Este processo faz com que o objeto seja criado com as características desejadas. Para que um objeto exista em memória, ele precisa ter memória alocada, um endereço definido. O construtor é o responsável por isso. 
A criação de um objeto se dá através da aplicação do operador new.
ClasseNome objeto = new ClasseNome();
	O método a direita do operador new é o construtor da classe ClasseNome. Podemos instanciar quantos objetos forem necessários. Contanto que guardemos a referência para o objeto em questão. A referência é como poderemos acessar aquele objeto. Caso um objeto não tenha mais nenhuma referência para ele, o coletor de lixo (garbage collector - GC) elimina o objeto, liberando a memória.
Atributos
	Eles representam as características de um objeto. Devem ser privados, para manter o encapsulamento. A definição de atributos de uma classe Java reflete de forma quase direta a informação que estaria contida na representação da classe em um diagrama UML. Para tanto, a sintaxe utilizada para definir um atributo de um objeto é:
[modificador] tipo nome [ = default]; Onde:
Métodos
	Os métodos representam as funcionalidades que os objetos podem desempenhar. São essencialmente procedimentos que podem manipular atributos de objetos para os quais o método foi definido. Além dos atributos de objetos, métodos podem definir e manipular variáveis locais; também podem receber parâmetros por valor através da lista de argumentos. A forma genérica para a definição de um método em uma classe é:
[modificador] tipo nome(argumentos) { 
          corpo do método 
}
	Uma boa prática de programação é manter a funcionalidade de um método simples, desempenhando uma única tarefa. O nome do método deve refletir de modo adequado a tarefa realizada. Se a funcionalidade do método for simples, será fácil encontrar um nome adequado para o método. Como ocorre para a definição de atributos, a definição de métodos reflete de forma quase direta a informação que estaria presente em um diagrama de classes UML, a não ser por uma diferença vital: o corpo do método. Métodos de mesmo nome podem co-existir em uma mesma classe desde que a lista de argumentos seja distinta, usando o mecanismo de sobrecarga.
Aula 5
Herança
	Significa a capacidade de incorporar as características e as funcionalidades de uma classe. Assim como a herança de todas as operações e dados, você pode especializar métodos da super classe e especificar novas operações e dados, para refinar, especializar, substituir ou estender a funcionalidade da classe progenitora.
Ao lado, podemos ver que a classe “Meios de Transportes” é uma classe genérica. Já as classes Terrestres, representam as características dos Meios de Transportes mais as peculiaridades dos veículos terrestres. Os meios Aéreos, também são meios de transportes, mas suas peculiaridades são diferentes dos outros tipos de meios de transportes, assim como os Marítimos.
Terminologias
Classe Abstrata
Polimorfismo
Aula 6
Encapsulamento e Associações de Classes
	Mecanismo utilizado na Programação Orientada a Objetos, que visa obter segurança, modularidade e autonomia para os objetos. Conseguido, através da definição de visibilidade privada dos atributos, ganhando-se, assim, autonomia, para definir o que o mundo externo a classe poderá visualizar e acessar, normalmente através de métodos públicos. Conclusão: Sempre defina os atributos de uma classe como privados, a não ser que tenha uma boa justificativa para isso. O Encapsulamento protege os atributos de acesso direto e permite apenas acesso através de métodos públicos.
Modificadores de visibilidade - Um modificador de acesso determina como será a visibilidade de uma classe, método ou atributo a partir de outras classes.
Abstract - Um método abstrato não implementa nenhuma funcionalidade, somente assina o método e faz com que a primeira subclasse concreta seja obrigada a implementar. Uma classe que possui um método abstrato deve ser obrigatoriamente abstrata, como vimos na aula passada.
Final - Pode ser aplicado em classes, métodos e atributos. Indica que esta é a última atribuição ou definição da estrutura. Não será permitida uma nova re-escrita. Para uma classe, não há herança em classes final. Um método não pode ser sobrescrito; e um atributo é considerado uma constante.
Métodos Get’s e Set’s
	Como vimos, é preciso criar um mecanismo para acessar os campos private de uma classe. Para isso, é comum fornecer métodos públicos para acessar as informações encapsuladas. Estes métodos são chamados de set e get. O método set atribui valores ao atributo, enquanto que o método get obtém seus valores. A composição do nome destes métodos é sempre com o nome set + <nome atributo> ou get + <nome atributo>. Abaixo vemos um exemplo de atributo que não permite alteração, logo seus atributos são privados e só foi disponibilizado os métodos get’s.
Associação de Classes
	É um vínculo que permite que objetos de uma ou mais classes se relacionem. Através destes vínculos, é possível que um objeto troque mensagens ou chame os métodos de outros objetos. Na UML, quando estamos modelando o diagrama de classes, temos a Associação, a Composição e a Agregação, como tipos de Associações. As Associações têm acoplamento fraco. As Composições têm acoplamento forte. A Agregação faz parte de. Na implementação, não há diferença entre as abordagens, o que as distingue são os controles adicionados pelo desenvolvedor. Unified Modeling Language – Linguagem de modelagem unificada.Composição
Tipo de associação onde uma nova classe usa classes existentes como atributos; 
Relacionamento “tem um”.
Ex.: uma conta tem um dono (cliente), 
um cliente tem um nome (string);
Podemos ter as seguintes multiplicidades de associações:
1 para 1
1 para *
* para *
Onde * equivale a muitos.
Aula 7
Interfaces e Polimorfismo
As interfaces gráficas em Java
	O Java fornece uma infinidade de funcionalidades para prover comunicação humano-computado, ou melhor, para desenvolver interfaces. São fornecidas duas bibliotecas para desenvolver um GUI. Elas são:
- java.awt : Abstract Window Toolkit (classes básicas);
- javax.swing : Swing Componets – Fornece um conjunto de componentes alternativos, mais funcionais que os conjuntos fornecidos pela java.awt. Essas bibliotecas são fornecidas pelo JFC. Java Foundation Classes
Componentes atômicos
	São elementos ou componentes que não permitem conter outros elementos. Podemos citar, dentre outros, botões, labels, textFields, sliders, check boxes, scrollbars, etc.
JLabel
	São rótulos estáticos que, geralmente, apresentam funcionalidades de outros componentes GUI, como por exemplo, campos de texto, ícones etc. Também, serve para apresentar um pequeno texto. As instruções são mostradas por meio de uma linha de texto: somente leitura, uma imagem ou ambas. O construtor mais elaborado é JLabel (String, Icon, int). Os argumentos representam o rótulo a ser exibido, um ícone e o alinhamento, respectivamente. Também, é possível a exibição de ícones em muito dos componentes Swing. Para JLabels, basta especificar um arquivo com extensão png, gif ou jpg no segundo argumento do construtor do JLabel, ou utilizar o método setIcon(Icon), o arquivo da imagem algumNome.xxx deve encontrar-se no mesmo diretório do programa, ou especifica-se corretamente a estrutura de diretórios até ele.
As constantes SwingConstants, que definem o posicionamento de vários componentes GUI e aqui, são apropriadas ao terceiro argumento, determinam a locação do ícone em relação ao texto. São elas:
Botões
Menus
Criando telas Polimórficas
Aula 8
Listeners e Adapters
Eventos
	Evento é um acontecimento relevante no meio externo ao sistema relevante. Pode ser considerado como o resultado da interação do usuário com algum componente GUI. Mover o mouse, clicá-lo, digitar num campo de texto, selecionar um item de menu, fechar uma janela, clicar num botão etc. são interações que enviam eventos para o programa, normalmente realizando serviços. Eventos também podem ser gerados em resposta a modificações do ambiente. Em outras palavras, definem-se eventos GUI como mensagens (chamadas a métodos) que indicam que o usuário do programa interagiu com um dos componentes GUI. Um sistema orientado a objetos é definido como um conjunto de objetos interagindo ou trocando mensagens. Os eventos representam as ações dos atores nesse processo ou alguma resposta a uma mudança de estado.
Tratamento de Eventos
	Quase todos os componentes propagam eventos. Esses eventos devem ser tratados em algum ponto do código da aplicação. Os eventos nunca são tratados no próprio componente (dado que não se tem acesso ao código do componente). Para ligar o código do tratamento de eventos aos componentes existem, no Java, um conjunto de interfaces chamadas listeners. Um listener é uma interface que especifica os métodos que uma aplicação deve ter para ser notificada da ocorrência de um determinado evento. Os componentes que geram eventos permitem que sejam adicionados ou removidos listeners em qualquer altura. O modelo de eventos do Java funciona da seguinte forma: 
O componente que produz eventos possui métodos especiais do tipo addXXListener(XXListener) que permite adicionar ou remover listeners. XX representa o nome do evento. O método addXXListener recebe, por parâmetro, o objeto que implementa a interface XXListener. A implementação do método addXXListener no componente apenas adiciona o objeto, passado por parâmetro a uma lista interna. Sempre que ocorrer um evento (exp.: botão pressionado), o componente percorre a lista e invoca, para cada elemento, o método definido na interface XXListener. No exemplo seguinte é construída uma GUI simples com um botão e uma caixa de texto. Sempre que o botão é pressionado a aplicação deve escrever na caixa de texto um número inteiro aleatório. Para processar os eventos, é necessário analisar os eventos que o botão produz. É preciso saber que, sempre que um botão é pressionado, é criado um evento do tipo ActionEvent. Para adicionar listeners, a classe que representa o botão (JButton) possui um método chamado addActionListener, que recebe por parâmetro um objeto que implemente a interface ActionListener. Na API, vê-se que a interface ActionListener especifica um método chamado actionPerformed.
Aula 9
Tratamento de Exceção
Exceção
	Uma exceção é uma ocorrência que altera o fluxo normal da execução de um programa. Esta ocorrência deve ser tratada para evitar que o programa encerre seu funcionamento. Existem diversos tipos de exceção. Erro na entrada de dados, erro na conexão com o banco de dados, erro na leitura de arquivos, erro de uma operação matemática. Sempre que o computador executa um código que gera uma exceção, ou o Sistema Operacional irá terminar seu programa ou o seu programa deverá fazer o tratamento para esta exceção. Um método pode detectar uma falha, mas não estar apto a resolver sua causa, devendo repassar essa função a quem saiba. Se o tratamento de falhas for introduzido ao longo do fluxo normal de código, pode-se estar comprometendo muito a inteligibilidade do código.
Exceções em Java
Capturando e tratando exceções
Exceções verificadas e não-verificadas
	A linguagem Java admite dois tipos de exceção: As não verificadas (unchecked, em inglês) são instâncias de subclasses de RuntimeException. O compilador não verifica se existe possibilidade de serem lançadas, e não exige que os métodos onde possam ocorrer façam qualquer tratamento. Elas representam erros ou defeitos na lógica do programa que podem causar problemas irrecuperáveis em tempo de execução (run time). Por outro lado, instâncias de Exception, ou de qualquer outra de suas subclasses, são verificadas (checked) como, p.ex, IOException, ClassNotFoundException e CloneNotSupportedException. Elas representam erros que podem ocorrer em tempo de execução, mas que não dependem da lógica do programa, em geral defeitos nos dispositivos de entrada ou saída (arquivos, rede, etc). 
	O compilador exige que um método onde possam ocorrer exceções verificadas faça uma de duas coisas: ou utilize blocos try-catch-finally para capturar e tratar essas exceções, ou declare que pode lançar essas exceções para o método chamador, colocando uma cláusula "throws" no seu cabeçalho, como por exemplo: 
public void M() throws IOException, CloneNotSupportedException { 
.............. 
} 
Essa cláusula é facultativa para o caso de exceções não-verificadas.
Construtores
A mensagem de erro é sempre retornada pelo método toString(). Toda exceção também aceita a mensagem printStackTrace(), que imprime na stream apontada por System.err um stack trace. O stack trace é um relatório detalhado da seqüência de chamadas a métodos que antecederam o lançamento da exceção. Para lançar uma exceção que seja instância das classes de verificação obrigatória a linguagem obriga o programador a declarar no cabeçalho do método quais as classes de exceção podem ter instâncias lançadas. Portanto, o formato completo do cabeçalho de definição de um método é: 
<modificadores> <tipo> <nome>(<parametros>) throws <classes> 
static void m() throws ErroDoTipoX, ErroDoTipoY, ErroDoTipoZ{ .
 .. 
throw new ErroDoTipoX();
 ... 
throw new ErroDoTipoY();
 ... 
throw new ErroDoTipoZ(); 
}
	Se o programador quiser estender a classe que contém o método m() da tela anterior e se o programador quiser sobrepor o método m() então o novo método terá de declarar o lançamento de instâncias das mesmasclasses. Isso garante que um código que trabalha com a classe base trabalhará também com as classes derivadas. A figura abaixo ilustra o relacionamento entre as exceções checked e nonchecked e a hierarquia de classes com raiz na classe Throwable. Os retângulos com nomes representam classes e os triângulos representam hierarquias de classes com classe “raiz” identificada pelo retângulo da ponta superior do triângulo. Na hierarquia de classes predefinida em Java a classe Throwable tem somente duas classes filhas (Error e Exception), mas um programador Java pode definir outras hierarquias a partir da Throwable (embora isso não seja recomendável).
	As classes e hierarquias cujo lançamento de instâncias seja de verificação obrigatória são identificadas na cor cinza. Todas as instâncias diretas e indiretas da classe Error e da classe RuntimeException são de verificação opcional. Todas as instâncias diretas e indiretas da classe Throwable, que não sejam as instâncias diretas e indiretas das classes Error e RuntimeException, são de verificação obrigatória.

Outros materiais