Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Introdução à Programação Orientada a Objetos em Java, Resumos de Programação Orientada a Objetos

Uma introdução à programação orientada a objetos em java, abordando conceitos fundamentais como classes, objetos, encapsulamento, herança, polimorfismo, interfaces e coleções. O texto também detalha as diferenças entre os modificadores de acesso (public, protected, private) e os métodos genéricos e classes genéricas. Além disso, é discutido a importância dos métodos get e set na programação orientada a objetos.

Tipologia: Resumos

2023

Compartilhado em 12/03/2024

dayelle-samila-pessotti
dayelle-samila-pessotti 🇧🇷

2 documentos

1 / 30

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
PARADIGMAS DE COMPUTAÇÃO
Programação
Orientada a Objetos SEMANA 1
entender a diferença entre os paradigmas de programação estruturada, não estruturada e o paradigma
de programação orientada a objetos;
tratar de alguns frameworks de desenvolvimento para facilitar a criação de aplicações segundo o
paradigma de orientação a objetos.
Programação orientada a objetos, também conhecida por sua sigla POO, facilita a relação da máquina com
o mundo real. Isso porque qualquer coisa que pertence ao mundo físico pode ter um representante na
esfera digital: uma pessoa, um emprego, um objeto, enfim, são infinitas as possibilidades. Essas “coisas” são
o que chamamos de objetos na POO. O enfoque da modelagem de sistema por objetos procura
enxergar o mundo como um conjunto de objetos que interagem entre si e apresentam
características e comportamentos próprios representados por seus atributos e suas operações.
Os atributos estão relacionados aos dados, e as operações, aos processos que um objeto executa.
Trata-se de uma forma de classificar as linguagens de programação baseada em suas
funcionalidades. Um paradigma fornece e determina a visão que o programador possui sobre a
estruturação e execução do programa.
Programadores abstraem o programa
como uma sequência de funções
executadas de modo empilhado. Trata da
computação como uma avaliação de
funções matemáticas, evitando estados ou
dados mutáveis.
FUNCIONAL
Programador modela o problema por meio
de assertivas em relação aos objetos do
universo em questão: Exemplo: SQL e
HTML.
DECLARATIVA
PROCEDURAL
É baseado no conceito de chamadas a
procedimentos, conhecidos como rotinas,
sub-rotinas, métodos. Um conjunto de
passos computacionais a serem
executados. Procedimentos podem ser
chamados a qualquer momento durante a
execução do programa, inclusive por outros
procedimentos.
POO
Programação Orientada a Objetos é um
modelo de análise, projeto e programação
de software, baseado na composição e
interação entre várias unidades conhecidas
como objetos.
A troca de mensagens ocorre entre objetos, que são organizados de maneira hierárquica - por
tipo, função, características, entre outros - para aproximar o máximo possível tanto a linguagem
como o funcionamento da computação do mundo real. Ou seja, a organização desse tipo de
programação é similar àquela “que as pessoas utilizam para descrever objetos do mundo real” .
Na POO, todos os componentes de um programa são considerados objetos e todos os objetos
possuem estado, identidade, comportamento.
Reduzir os programas em partes resulta em metas mais fáceis de se alcançar. Os programas são
basicamente interações entre objetos, o que faz com que surjam padrões comuns.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e

Pré-visualização parcial do texto

Baixe Introdução à Programação Orientada a Objetos em Java e outras Resumos em PDF para Programação Orientada a Objetos, somente na Docsity!

PARADIGMAS DE COMPUTAÇÃO

Programação

Orientada a Objetos

SEMANA 1

entender a diferença entre os paradigmas de programação estruturada, não estruturada e o paradigma de programação orientada a objetos; tratar de alguns frameworks de desenvolvimento para facilitar a criação de aplicações segundo o paradigma de orientação a objetos. Programação orientada a objetos, também conhecida por sua sigla POO, facilita a relação da máquina com o mundo real. Isso porque qualquer coisa que pertence ao mundo físico pode ter um representante na esfera digital: uma pessoa, um emprego, um objeto, enfim, são infinitas as possibilidades. Essas “coisas” são o que chamamos de objetos na POO. O enfoque da modelagem de sistema por objetos procura enxergar o mundo como um conjunto de objetos que interagem entre si e apresentam características e comportamentos próprios representados por seus atributos e suas operações. Os atributos estão relacionados aos dados, e as operações, aos processos que um objeto executa. Trata-se de uma forma de classificar as linguagens de programação baseada em suas funcionalidades. Um paradigma fornece e determina a visão que o programador possui sobre a estruturação e execução do programa. Programadores abstraem o programa como uma sequência de funções executadas de modo empilhado. Trata da computação como uma avaliação de funções matemáticas, evitando estados ou dados mutáveis.

FUNCIONAL

Programador modela o problema por meio de assertivas em relação aos objetos do universo em questão: Exemplo: SQL e HTML.

DECLARATIVA

PROCEDURAL

É baseado no conceito de chamadas a procedimentos, conhecidos como rotinas, sub-rotinas, métodos. Um conjunto de passos computacionais a serem executados. Procedimentos podem ser chamados a qualquer momento durante a execução do programa, inclusive por outros procedimentos.

POO

Programação Orientada a Objetos é um modelo de análise, projeto e programação de software, baseado na composição e interação entre várias unidades conhecidas como objetos. A troca de mensagens ocorre entre objetos, que são organizados de maneira hierárquica - por tipo, função, características, entre outros - para aproximar o máximo possível tanto a linguagem como o funcionamento da computação do mundo real. Ou seja, a organização desse tipo de programação é similar àquela “que as pessoas utilizam para descrever objetos do mundo real”. Na POO, todos os componentes de um programa são considerados objetos e todos os objetos possuem estado, identidade, comportamento. Reduzir os programas em partes resulta em metas mais fáceis de se alcançar. Os programas são basicamente interações entre objetos, o que faz com que surjam padrões comuns.

CONCEITOS ASSOCIADOS

Objetos correspondem a elementos da vida real e classes agrupam esses objetos. Assim, quando falamos de carro, e só de carro, estamos falando de uma classe. Isso porque não especificamos as características do veículo, então, várias características podem estar contidas - o que importa é que se trata de um carro. Em cada classe, temos atributos , objetos que se referem a elas. Em relação aos métodos , ou seja, o que o objeto reúne em termos de regras sobre seus atributos e operações. Ele diz ao objeto como ele deve se comportar com o recebimento da mensagem. Os próprios métodos são objetos em si. Portanto, a vantagem desse tipo de organização é permitir que o programa altere um objeto em si, iidentificando-o dentro de uma classe e solicitando uma a lteração do método, a partir de uma mensagem. “Os métodos podem ter parâmetros para fornecer informações adicionais para uma tarefa”. Tome como exemplo os famosos métodos set e get. O primeiro sinaliza que uma informação está sendo enviada. Já o segundo aponta uma informação sendo recebida. Getters e Setters são funções que tornam possível OBTER e ALTERAR o atributo. Generalização e Especialização: Quando um objeto é identificado com atributos e operações semelhantes em nosso sistema, diz-se que pode ser agrupado em uma classe. Este processo é chamado de generalização. Por outro lado, pode ocorrer que um objeto, ao ser identificado, constitua-se, na verdade, de uma classe de objetos, visto que dele podem se derivar outros objetos. Já esse processo é chamado de especialização. TIPOS DE OBJETO

ABSTRAÇÃO :

Escondemos detalhes não essenciais, embora mostramos o que é mais relevante. ENCAPSULAMENTO: É a capacidade de juntar um determinado tipo de programa em partes, ou seja, o software tem pedaços isolados entre si, que podem ser acessados de modo independente. O resultado disso é a garantia de mais flexibilidade e facilidade quando surgem modificações nos programas, por exemplo. A parte interna de um código não fica acessível para outras partes, com o intuito de proteger e manter a sua integridade. Todas as operações a serem feitas pelo usuários devem ser feitas por uma interface bem definida. Apresenta diversas camadas de abstração, dependendo do que é relevante.

**1. Objetos tangíveis.

  1. Incidente (evento ou ocorrência).
  2. De interação (transação ou contrato). Classes Públicas e Privadas:** Naturalmente, uma classe que inicie com o termo public significa que é pública. Um atributo, ou seja, um objeto que é iniciado com private é visível apenas à classe pertencente **COMO ACONTECE A COMPILAÇÃO EM JAVA?
  3. Criação de um programa Java** Inserção de códigos pelo programador usando um editor 2. Compilação do programa Java em bytecodes O compilador vai transformar o codigo.java em código.class (bytecodes), que representam as tarefas a serem executadas na fase de execução. A vantagem dos bytecodes é que eles são portáveis e independem de plataforma 3. Carrega o programa Java em memória A Java Virtual Machine (JVM) armazena o programa em memória para executá- lo, efetuando o seu carregamento. O carregador de classe, pega o .class que tem os bytecodes do programa e os transfere para a memória principal 4. Verificar os bytecodes Enquanto as classes são carregadas, o verificador examina seus bytecodes para ter certeza que são válidas. 5.Executar o programa Java A JVM executa os bytecodes utilizando uma combinação de interpretação (Just in Time), conhecido como compilador Java HotSpot. O Java HotSpot traduz os bytecodes para a linguagem de máquina, quando a JVM encontra novamente essas partes compiladas.

PILARES DA PROGRAMAÇÃO ORIENTADA AOS OBJETOS

POLIMORFISMO

É um princípio em que um organismo pode surgir de formas distintas. Indivíduos da mesma espécie possuem características similares. Em POO, a mesma operação (método) comporta-se de modo diferente nas diferentes classes de uma hierarquia MENSAGENS Quando um objeto emissor transmite uma requisição para um objeto receptor para que este execute um comportamento (método) desejado. O objeto receptor precisa já ter os métodos definidos. Os métodos respondem a um retorno à chamada.

ABSTRAÇÃO

Ignora o que não é relevante e concentra- se apenas nos aspectos principais do problema. Classes são abstrações de conceitos ENCAPSULAMENTO Capacidade de implementar dados e procedimentos que se correlacionam numa mesma entidade. A ideia é não depender do funcionamento interno, mas sim da sua interface

HERANÇA

Caracteriza-se pela hierarquização das classes em um sistema. NORMALMENTE os atributos são private. Desta forma, os métodos da própria classe é que são responsáveis por modificar e recuperar o estado dos atributos

- SETTERS e GETTERS são públicos.

ENCAPSULAMENTO

EXEMPLO DE APLICAÇÃO

traz modularidade e ocultação da informação que indica a única parte do objeto que pode ser acessada pelo mundo externo, deve ser feita por meio de operações. “Na programação orientada a objetos, os objetos comunicam-se entre si através de mensagens. A única coisa que um objeto conhece sobre outro objeto é a sua interface de comunicação. Os dados e a lógica de cada objeto são mantidos escondidos dos outros objetos. Em outras palavras, a interface encapsula o código e os dados do objeto” Interface descreve como as partes do objeto se relacionam com o exterior. Implementação : dados e código que implementam o comportamento dos objetos da classe; esta parte não é visível externamente. O encapsulamento é um conceito da POO em que os estados dos objetos (variáveis de classe) e seus comportamentos (métodos da classe) são agrupados em conjunto segundo o seu grau de relação. Ocorre através de dois métodos: SETTERS: recebe como argumento uma informação que pode ser qualquer tipo de dado suportado pela linguagem, o que evita acessos indevidos. Servem para alterar a informação de uma propriedade de um objeto. GETTERS : retorna o valor que lhe foi solicitado, mas não prejudica a integridade do dado. Servem para retornar o valor dessa propriedade cRIANDO MESSAGE BOX

Implemente a classe abaixo: Classe Bola Atributos material → string cor → string tamanho → inteiro cheia → boolean Métodos Bola() → Construtor padrão Bola(String material, String cor, int tamanho, boolean cheia) –> sobrecarga Bola(String cor, int tamanho) → sobrecarga set (alterar atributos da classe → modificadores get (retorna valores dos atributos da classe - assessores) pintar() encher() esvaziar()

Public : podem ser acessados de qualquer parte do programa que tenha uma referência ao objeto ou subslasse de uma classe. Private: só podem ser acessados dentro da própria classe a que eles pertencem. Por isto, eles não são herdados por subclasses nem podem ser chamados por outros membros ligados a ela. Protected: nível intermediário que oferece permissões médias sendo possível garantir que os membros de uma superclasse possam ser acessados apenas por subclasses e outros membros ligados a ela. Membros protegidos:

SEMANA 3

Aprender a criar novas classes a partir de classes já existentes, aproveitando-se das características existentes na classe a ser estendida; Entender que o conceito de polimorfismo permite ao desenvolvedor usar o mesmo elemento de formas diferentes e que o conceito denota uma situação na qual um objeto pode se comportar de maneiras diferentes ao receber uma mensagem; Compreender que interface é um recurso da linguagem Java que apresenta inúmeras vantagens no sentido da modelagem e instanciação de objetos. HERANÇA: Uma nova classe de objetos pode ser criada por meio de herança - essa nova classe (chamada de subclasse) começa com as características de uma classe existente (chamada superclasse) através da sua personalização e adição de aspectos próprios. Em outras palavras, a herança é uma maneira de reutilizar o código onde uma nova classe é criada absorvendo os membros de uma classe já existente que são aprimoradas com novas ou melhores capacidades. Construtores em subclasses: o papel do construtor é chamar o construtor da superclasse direta, especificando os elementos que você deseja que façam parte da classe herança. Generalização: quando várias subclasses utilizam os mesmos atributos (elementos) de uma superclasse. Especialização: ocorre quando subclasses ligadas a uma mesma superclasse apresentam diferenças entre si. Por isso, é preciso especificar essas diferenças em linha de código. Superclasses Abstratas: criadas apenas para organizar a hierarquia das heranças que apesar de não terem uma função ativa, ajudam a evitar a duplicação do código. Vantagens da Herança: Permite o reuso de software; Sem a necessidade de escrever o mesmo código novamente; Pode especializar soluções gerais já existentes; Todo objeto da subclasse é um objeto da superclasse (classe mãe). A classe filha herda todos os membros da classe mãe. Podemos declarar um campo na classe filha com o mesmo nome da classe mãe, mesmo que os tipos sejam diferentes. Também podemos declarar novos métodos e campos na classe filha, o que denomina-se de especialização. Podemos sobrescrever um método da classe mãe, declarando um método com a mesma assinatura, o que chamamos de polimorfismo

CLASSES ABSTRATAS

Usamos classes abstratas quando desejamos definir uma classe mais geral, representando objetos de modo mais genérico, porém, sem instanciá-los. Outro ponto importante é que métodos abstratos também podem ser definidos em uma classe. Para isso, a classe precisa ser abstrata. Ela só não pode ser instanciada. Se é preciso oferecer atributos, é melhor usar classes abstratas, uma vez que com herança os atributos serão herdados. abstract class Conta { private double saldo; public void setSaldo(double saldo) { this.saldo = saldo; } public double getSaldo() { return saldo; } public abstract void imprimeExtrato(); Implemente uma classe Caneta cujas características são: marca, cor e tamanho. Nesta classe devem ser implementados os métodos construtores, getters, setters e toString. Em seguida, em uma outra classe denominada CanetaTeste crie um objeto do tipo Caneta e atribua valores e exiba os dados do objeto criado.

Implemente uma classe Professor cujas propriedades são: matrícula e nome. Nesta classe devem ser implementados os métodos construtores, getters, setters e um método para calcular o salário do professor. Em seguida, implemente uma outra classe denominada ProfessorConcursado que herde as características da classe Professor. Faça o mesmo para outra classe denominada ProfessorHorista. Para ambas as classes implemente os métodos setters e getters também. Ainda no caso da classe ProfessorHorista você deve implementar um método que calcule o salário em função do valor da hora e da quantidade de horas. Para finalizar, implemente uma classe chamada TesteProfessor e exiba o salário e matricula do professor concursado e do professor horista.

Classe Stack: estende a classe Vector para implementar uma estrutura de dados de pilha. Classe PriorityQueue e interface Queue: Lembre-se de que uma fila é uma coleção que representa uma fila de espera — normalmente, inserções são feitas na parte de trás de uma fila e exclusões são feitas a partir da frente. Na Seção 21.6, discutiremos e implementaremos uma estrutura de fila de dados. Nesta seção, investigamos a interface Queue do Java e a classe PriorityQueue do pacote java.util. A interface Queue estende a interface Collection e fornece operações adicionais para inserção, remoção e inspeção de elementos em uma fila. PriorityQueue , que implementa a interface Queue , ordena elementos por sua ordem natural como especificado pelo método compareTo dos elementos Comparable ou por um objeto Comparator que é fornecido pelo construtor.A classe PriorityQueue fornece funcionalidades que permitem inserções na ordem de classificação na estrutura de dados subjacente e exclusões a partir da frente da estrutura de dados subjacente. Ao adicionar elementos a uma PriorityQueue , os elementos são inseridos na ordem de prioridade de tal modo que o elemento de maior prioridade (isto é, o maior valor) será o primeiro elemento removido da PriorityQueue .As operações PriorityQueue comuns são offer , para inserir um elemento na posição apropriada com base na ordem de prioridade, poll para remover o elemento de mais alta prioridade da fila de prioridade (isto é, a cabeça da fila), peek para obteruma referência ao elemento de mais alta prioridade da fila de prioridade (sem remover esse elemento), clear para remover todos os elementos da fila de prioridade e size , para obter o número de elementos da fila de prioridade. Set Não permite elementos duplicados SortedSet Mantém os elementos ordenados List Coleção de elementos ordenada, pode ter elementos duplicados e indexação. Qeue Representa uma fila genérica, FIFO. Deqeue Inserções e remoções podem ser feitas em qualquer extremidade

EM SÍNTESE

Métodos genéricos e classes genéricas (e interfaces) permitem especificar, com uma única declaração de método, um conjunto de métodos relacionados ou, com uma única declaração de classe, um conjunto de tipos relacionados, respectivamente. Iterator: Prover uma forma de seqüencialmente acessar os elementos de uma coleção sem expor sua representação interna Java Collections Framework: Arquitetura unificada para representar e manipular coleções, de forma independente dos detalhes de sua representação. As COLEÇÕES são objetos que agrupam vários elementos. Com as Collections utilizamos estruturas de dados existentes, sem nos preocuparmos com a maneira como são implementadas. São dinâmicas, isto é, podem crescer conforme a necessidade de expansão. A interface Collection, terão obrigatoriamente que fazer a implementação de diversos métodos que manipulam coleções de dados, tais como adicionar e remover elementos. INTERFACE COLLECTION A Collection é o topo da API Collections, sendo disponível no pacote java.util. As Collections podem ser organizadas e/ou Ordenadas. Quando organizadas: garante que as coleções serão percorridas na mesma ordem em que os elementos foram inseridos. O padrão Generics é aceitar qualquer tipo de elemento, incluindo elementos distintos (String, Double, Integer)

Set HashSet: Armazena elemento numa tabela Hash e sem garantias de ordem dos elementos TreeSet: Utiliza uma estrutura de árvore para armazenar os elementos. Mantém a ordem dos elementos LinkedHashSet: Utiliza a tabela hash como uma lista ligada. Mantém a ordem de inserções dos elementos List ArrayList: implementação indexada dos elementos LinkedList: Utiliza uma lista duplamente encadeada para armazenar os elementos Qeue add e offer: inserem um elemento na fila remove e pool: removem e retornam o elemento do início element e peek: retornam, porém não removem, o elemento do início Deqeue Inserção: addFirst. offerFirst, addLast, offerLast Remoção: removeFirst, poolFirst, removeLast, poolLast For-each: Trata-se de um ciclo for, embora adaptado para ser utilizado em Collections. Server para percorrer todos os elementos de qualquer Collection contida na API Collections. Iterator : É uma interface presente no java.útil que permite percorrer coleções da API Collection , desde que implementam a Collection. Fornece métodos como next(), hashnext(), remove(). A função de objetos do tipo Iterator é permitir percorrer e remover elementos de uma coleção. Toda coleção possui um método que retorna um Iterator. Os métodos podem ser:

CLASSES CONCRETAS

hasNext() • Retorna true se há elementos a serem lidos no iterador next() • Retorna o próximo elemento do iterador void remove() • Remove o último elemento obtido pela chamada de next() • Só é possível chamar uma vez para cada chamada de next() • Se essa regra for desrespeitada, uma exceção é lançada VANTAGENS: não depende do tipo de coleção • a Interface Collection provê método iterator() o que permite criar uma solução genérica • Não são todas as coleções que têm um método de remoção por índice como List e cada coleção possui uma maneira de percorrer os elementos A classe Collections possui alguns métodos estáticos para manipular coleções Sort: Classifica os elementos de uma List. binarySearch: Localiza um objeto em uma List. reverse: Inverte os elementos de uma List. shuffle: Ordena aleatoriamente os elementos de uma List. fill: Configura todo elemento List para referir-se a um objeto especificado. copy: Copia referências de uma List em outra.

- min: Retorna o menor elemento em uma Collection. max: Retorna o maior elemento em uma Collection. addAll Acrescenta todos os elementos em um array a uma coleção.

GENERICS

Podemos reusar código para diferentes tipos e evita o uso de casting. Os tipos genéricos referem-se a uma classe ou interface parametrizada sobre tipos. Em uma classe que não usa Generics, qualquer objeto pode ser utilizado. Declaração e Instanciação de um tipo genérico: Deve especificar qual o tipo desejado • É parecido à chamada de um método ou construtor, para qual passamos parâmetros • Mas em Generics, o parâmetro é um tipo (classe ou interface) É importante frisar que quando utilizado em métodos, o tipo genérico pertence ao escopo daquele método. Não é possível utilizar o tipo em outros métodos. Não é possível instanciar um tipo genérico utilizando tipos primitivos COLEÇÕES O programador simplesmente utiliza as estruturas de dados sem se preocupar com a maneira como são implementadas. Basicamente, são objetos capazes de armazenar conjuntos de referências para outros objetos INTERFACES: Definem métodos que podem ser usados para manipulação dos objetos nas coleções IMPLEMENTAÇÕES: Classes que implementam as interfaces, mas, internamente, manipulam os dados de forma diferente A importância dos genéricos: Quando o compilador conhece o tipo do elemento da coleção, ele pode verificar se a mesma está sendo usada corretamente e pode inserir os casts corretos nos valores recuperados da coleção. A importância dos iteradores: Quando se trabalha com coleções, surge a necessidade de manipular os objetos um a um. O mecanismo de iteração A partir de uma instância da classe que representa a coleção, cria uma “maneira de visualizar” os objetos contidos na coleção. Um iterador é um padrão de projeto de software que abstrai o processo de busca sobre uma coleção de elementos

LISTA CONJUNTOS MAPA A interface da lista permite elementos duplicados Set não permite elementos duplicados.^ O mapa não permite elementos duplicados A lista mantém o pedido de inserção. Definir não mantém nenhum pedido de inserção.^ O mapa também não mantém nenhum pedido de inserção. Podemos adicionar qualquer número de valores nulos. Mas em conjunto quase apenas um valor nulo. O mapa permite no máximo uma única chave nula e qualquer número de valores nulos. As classes de implementação de lista são Array List , LinkedList. As classes de implementação do conjunto são HashSet , LinkedHashSet e TreeSet. As classes de implementação de mapa são HashMap , HashTable , TreeMap , C oncurrentHashMap e LinkedHashMap. A lista fornece o método get() para obter o elemento em um índice especificado. Set não fornece método get para obter os elementos em um índice especificado O mapa não fornece o método get para obter os elementos em um índice especificado Se você precisa acessar os elementos com frequência usando o índice, podemos usar a lista Se você deseja criar uma coleção de elementos únicos, podemos usar o conjunto Se você quiser armazenar os dados na forma de par chave / valor, podemos usar o mapa. Para percorrer os elementos da lista usando Listlterator. O iterador pode ser usado através dos elementos definidos Por meio do conjunto de chaves, valor e conjunto de entrada.

SEMANA 5

Adquirir habilidades para a construção programas com a utilização das interfaces Set e Map; Entender e praticar o uso do TreeSet, TreeMap, HashSet e HashMap. RETOMANDO Uma coleção é uma estrutura de dados que permite armazenar vários objetos. Em Java , a coleção também é um objeto As operações que podem ser feitas em coleções variam mas normalmente incluem: • Adição de elementos; • Remoção de elementos; • Acesso aos elementos; • Pesquisa de elementos; Os três grandes tipos de coleções são: • Lista ( também chamado de “sequência“); • Conjunto; • Mapa( também chamado de “dicionário“). ArrayList : implementa uma lista de objetos num vetor cujo tamanho pode variar dinamicamente (!). é mais adequada em situações onde o acesso aleatório aos elementos é mais freqüente. A implementação do vetor de ‘tamanho variável’ é cara. LinkedList : implementa uma lista de objetos sob a forma de uma lista ligada, é mais adequada em casos onde o acesso aleatório não é freqüente e o tamanho da lista pode variar muito. CONJUNTOS: Um conjunto funciona de forma análoga aos conjuntos da matemática Trata-se de uma Collection que não permite elementos duplicados A ordem em que os elementos são armazenados pode não ser a mesma ordem em que os elementos foram inseridos no conjunto Ao percorrer um conjunto a sua ordem não é conhecida Velocidade na pesquisa de dados é mais rápida que um objeto do tipo List; Não precisa especificar a posição para adicionar um elemento; Não aceita valores duplicados. Se caso inserir um registro que já tenha no Set não será adicionado. HashSet: A classe HashSet que é implementada na estrutura de coleta é uma implementação inerente da estrutura de dados da tabela de hash. Os objetos que inserimos no HashSet não garantem que sejam inseridos na mesma ordem. Os objetos são inseridos com base em seu hashcode. Esta classe também permite a inserção de elementos NULL. Vamos ver como criar um objeto definido usando esta classe. LinkedSet : A classe LinkedHashSet que é implementada na estrutura de coleções é uma versão ordenada de HashSet que mantém uma lista duplamente vinculada em todos os elementos. Quando a ordem de iteração precisa ser mantida, essa classe é usada. Ao iterar por meio de um HashSet, a ordem é imprevisível, enquanto um LinkedHashSet nos permite iterar através dos elementos na ordem em que foram inseridos. Vamos ver como criar um objeto definido usando esta classe. TreeSet: A classe TreeSet que é implementada na estrutura de coleções e a implementação da Interface SortedSet e SortedSet estende a Interface Set. Ele se comporta como um conjunto simples, com a exceção de que armazena elementos em um formato classificado. TreeSet usa uma estrutura de dados em árvore para armazenamento. Os objetos são armazenados em ordem crescente. Mas podemos iterar em ordem decrescente usando o método TreeSet.descendingIterator().

Exemplo com HashTable public class HashtableExample { public static void main(String[] args) { Enumeration names; String key; // Cria a tabela hash Hashtable<String, String> hashtable = new Hashtable<String, String>(); // Adiciona o par chave/valor hashtable.put("Chave1","UNIVESP"); hashtable.put("Chave2","USP"); hashtable.put("Chave3","UNICAMP"); hashtable.put("Chave4","UNESP"); hashtable.put("Chave1","Mona"); names = hashtable.keys(); while(names.hasMoreElements()) { key = (String) names.nextElement(); System.out.println("Chave: " +key+ " & Valor: " + hashtable.get(key)); } } } public class TestTreeMap { public static void main(String args[]) { //Declaração do TreeMap TreeMap<Integer, String> tmap; tmap = new TreeMap<Integer, String>(); //Adiciona elementos tmap.put(1, "UNIVESP"); tmap.put(7, "USP"); tmap.put(6, "UNICAMP"); tmap.put(4, "UNESP"); tmap.put(5, "UFMG"); // Mostra o conteúdo usando o Iterator Set set = tmap.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry mentry = (Map.Entry)iterator.next(); System.out.print("A chave é: "+ mentry.getKey() + " & O valor é: "); System.out.println(mentry.getValue()); } } }

TRATAMENTO DE EXCEÇÕES

DIFERENÇA

ERRO EXCEÇÃO

indicam que algo grave o suficiente deu errado, o aplicativo deve travar em vez de tentar lidar com o erro são eventos que ocorrem no código. Um programador pode lidar com tais condições e tomar as ações corretivas necessárias.

SEMANA 6

Aprender a controlar exceções e tomar decisões baseadas nas mesmas; Criar novos tipos de exceções para melhorar o tratamento delas em sua aplicação ou biblioteca; Definição de Exceção: Uma exceção é um evento indesejado que interrompe o fluxo normal do programa. Quando ela ocorre, a execução do programa é encerrada. é um dos recursos mais importantes da programação Java que nos permite tratar os erros em tempo de execução causados por exceções. O tratamento de exceções se refere aos erros em tempo de execução Sempre que um erro ocorre , uma exceção ( objeto) é criada e lançada , a exceção (objeto) encapsula as informações do erro. Essa exceção deve ser capturada em algum momento O método utilizado no JAVA é o bloco try-catch, try-catch-finally Processo: quando ocorre uma exceção, o método cria um objeto de exceção e passa para o sistema de runtime do java (lança a exceção). A execução do programa congela naquele ponto e o runtime procura o trecho de código mais próximo que seja capaz de capturar uma exceção daquele tipo. Se a busca chegar ao main e não encontrar quem capture a exceção, o programa termina. Tipos de Exceção Todas as exceções , exceto Runtime Exceptions, são conhecidas como exceções verificadas, pois o compilador as verifica durante a compilação para ver se o programador as manipulou ou não. Se essas exceções não forem tratadas / declaradas no programa, você obterá um erro de compilação. E xemplos: SQLException, IOException, ClassNotFoundException etc. São criadas prevendo que determinada ação possa falhar

CHECKED

UNCHECKED

As exceções de tempo de execução também são conhecidas como exceções não verificadas. Essas exceções não são verificadas em tempo de compilação, então o compilador não verifica se o programador as manipulou ou não, mas é responsabilidade do programador lidar com essas exceções e fornecer uma saída segura. Exemplos: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException. Todas as subclasses da segunda categoria estão ligadas à classe-padrão RunTimeException. Exception: Precisam ser tratadas , pois são situações excepcionais em um programa que podem ser contornadas. indicam um erro de programa, prevendo falhas que não deveriam acontecer em uma operação normal.