Aula 16: Estudo de Caso: A API de Coleções do Java

Tamanho: px
Começar a partir da página:

Download "Aula 16: Estudo de Caso: A API de Coleções do Java"

Transcrição

1 Aula 16: Estudo de Caso: A API de Coleções do Java Você não pode ser um programador Java competente sem compreender as partes cruciais da biblioteca Java. Os tipos básicos estão todos em java.lang, e são parte da linguagem propriamente dita. O package java.util fornece coleções - conjuntos, lista e mapas - e você deve conhecer este pacote muito bem. O package java.io também é importante, mas você pode se virar mesmo sem ter muita familiaridade com este pacote, pesquisando-o melhor quando necessário. Nesta aula, analisaremos o projeto do pacote java.util, muitas vezes chamado de 'API de coleções'. É importante compreender não apenas o porquê das coleções serem extremamente úteis, mas também o porquê a API de coleções ser um ótimo exemplo de código bem projetado. A API é de muito fácil compreensão, estando muito bem documentada. Ela foi projetada e escrita por Joshua Bloch, que escreveu o livro Effective Java que recomendamos no início do curso. Ao mesmo tempo, quase todas as complexidades da programação orientada a objetos aparecem em algum lugar na API, portanto, se você estudá-la cuidadosamente, obterá uma ampla compreensão dos tópicos de programação que você, provavelmente, ainda não utilizou no seu código. De fato, não seria um exagero dizer que se você compreender inteiramente apenas uma das classes, ArrayList por exemplo, então você terá se tornado um mestre em todos os conceitos do Java. Não teremos tempo de olhar todos os tópicos hoje, mas iremos abordar muitos deles. Alguns deles, como serialização, estão além do escopo do curso Hierarquia de Tipos Aproximadamente, a API oferece três tipos de coleções: conjuntos, listas e mapas. O conjunto é uma coleção de elementos que não mantém uma ordem nem uma contagem dos elementos - cada elemento ou está no conjunto ou não. Uma lista é uma seqüência de elementos e, portanto, mantém dados a respeito de ambos, a ordem e a contagem. Um mapa é uma associação entre chaves e valores: ele mantém um conjunto de chaves e mapeia cada chave para um único valor. A API organiza suas classes em uma hierarquia de interfaces - as especificações dos vários tipos - e em uma hierarquia de implementação de classes em separado. O diagrama abaixo demonstra algumas classes de interfaces selecionadas para ilustrar a organização hierárquica. A interface Collection captura as propriedades comuns das listas e dos conjuntos, mas não dos mapas, mas iremos utilizar o termo informal 'coleções' para, também, nos referirmos aos mapas. SortedMap e SortedSet são interfaces utilizadas pelos mapas e por conjuntos que fornecem operações adicionais para recuperar os elementos em alguma ordem.

2 As implementações concretas de classes, como LinkedList, estão construídas no topo do esqueleto das implementações, assim como AbstractList da qual LinkedList descende. Esta estrutura paralela de interfaces e classes é uma importante forma de estruturação de código, ou seja, um idioma importante para ser estudado. Muitos programadores inexperientes são tentados a utilizar classes abstratas quando deveriam estar utilizando interfaces. Mas em geral, você deve preferir as interfaces ao invés das classes abstratas. Não é fácil de se aperfeiçoar uma classe existente fazendo com que ela estenda uma classe abstrata (pois uma classe só pode ter no máximo uma super classe), mas normalmente é fácil fazer com que a classe implemente uma nova interface. Bloch mostra (no capítulo 16 de seu livro: 'Prefira Interfaces ao Invés de Classes Abstratas') como combinar as vantagens de ambas, utilizando uma implementação de classes organizada na forma de um esqueleto de hierarquias, como ele faz aqui na API de coleções. Você terá as vantagens das interfaces para alcançar o desacoplamento baseado em especificações, e as vantagens das classes abstratas para fabricar código compartilhado entre implementações relacionadas.

3 Cada interface do Java vem com uma especificação informal na documentação da API Java. Este fato é importante, pois a especificação informa ao usuário de uma classe que implementa uma interface, o que esperar da interface. Se você implementar uma classe e quiser que esta classe satisfaça à especificação List, por exemplo, você deve garantir que esta classe satisfaz à especificação informal também, do contrário, ela irá falhar com relação ao comportamento esperado pelos programadores. Estas especificações são, intencionalmente, incompletas (assim como o são muitas especificações). As classes concretas também possuem especificações, e estas especificações preenchem alguns dos detalhes das interfaces. A interface List, por exemplo, não especifica se elementos não nulos podem ser armazenados, mas as classes ArrayList e LinkedList informam explicitamente que elementos nulos são permitidos. A classe HashMap admite tanto valores nulos quanto chaves nulas, diferente de Hashtable, que não permite nenhum dos dois. Quando você escreve código que utiliza classes da API de coleções, deve se referir a um objeto através da interface ou classe mais genérica possível. Por exemplo, List p = new LinkedList (); é um estilo melhor do que LinkedList p = new LinkedList (); se o seu código compilar com a primeira versão do exemplo acima, então você pode facilmente migrar para uma lista diferente em uma implementação posterior: List p = new ArrayList (); pois todo o código subseqüente será baseado apenas no fato de p ser do tipo List. Utilizando-se a segunda versão do exemplo anterior, no entanto, você pode descobrir que não será capaz de fazer a alteração, pois algumas partes do seu programa realizam operações sobre x que apenas a classe LinkedList fornece - uma operação que, de fato, pode não ser necessária. Isto está explicado em mais detalhes no item 34 do livro de Bloch ('Refira-se aos Objetos através de suas Interfaces'). Veremos um exemplo mais sofisticado deste tipo de ocorrência no estudo de caso de uma aula próxima, onde parte do código requer acesso às chaves de HashMap. Ao invés da passarmos todo o mapa passamos apenas uma visão do tipo Set:

4 Set keys = map.keyset (); agora o código que utiliza as chaves nem mesmo sabe que este conjunto é um conjunto de chaves de um mapa Métodos Opcionais A API de coleções permite que uma classe implemente uma interface de coleções sem que implemente todos os seus métodos. Por exemplo, todos os métodos do tipo modificadores da interface List são especificados como opcionais, ou optional. Isto significa que você pode implementar uma classe que satisfaz à especificação de List, mas que joga uma exceção UnsupportedOperationException toda vez que você chamar um método do tipo modificador (mutator) como, por exemplo, o método add. Esta fraqueza intencional da especificação da interface List é problemática, pois se você estiver escrevendo algum código que recebe uma lista, você não sabe, na ausência de informações adicionais a respeito da lista, se ela suporta o método add. Mas sem esta noção de operações opcionais, você teria que declarar uma interface separada denominada ImmutableList. Estas interfaces iriam se proliferar em grande número. Algumas vezes, desejamos alguns métodos modificadores e outros não. Por exemplo, o método keyset da classe HashMap retorna um conjunto (um objeto Set) contendo as chaves do mapa. O conjunto é uma visão: deletar uma chave do conjunto faz com que uma chave e seu valor associado sejam deletados do mapa. Então, o método remove é suportado. Mas o método add não, pois você não pode adicionar uma chave ao mapa sem um valor associado à chave. Portanto, a utilização das operações opcionais é um julgamento de engenharia. Isto significa menos checagens em tempo de compilação, mas reduz o número de interfaces Polimorfismo Todos estes containers - conjuntos, listas e mapas - recebem elementos do tipo Object. Estes containers são considerados polimórficos, o que significa 'muitas formas', pois eles permitem que você construa diferentes tipos de containers: listas de inteiros, listas de URLs, listas de listas, e assim por diante. Este tipo de polimorfismo é denominado polimorfismo de subtipo, poissebaseianahierarquiade tipos. Uma forma diferente de polimorfismo, denominada polimorfismo paramétrico, permiteque você defina containers através de parâmetros que indicam o tipo, de maneira que um cliente possa

5 indicar que tipo de elemento um container em específico irá conter: List[URL] bookmarks; // ilegal em Java Java não admite este tipo de polimorfismo, no entanto, já existiram muitas propostas para adicionálo. O polimorfismo paramétrico possui a grande vantagem de que o programador pode dizer ao compilador qual o tipo dos elementos. O compilador pode, então, interceptar erros nos quais um tipo errado é inserido, ou quando um elemento que é extraído for tratado como sendo de um tipo diferente. Através do polimorfismo de subtipo, você deve explicitamente moldar os elementos durante a recuperação, através da operação decast. Considere o código: List bookmarks = new LinkedList (); URL u = ; bookmarks.add (u); URL x = bookmarks.get (0); // o compilador irá rejeitar esta sentença A sentença que adiciona u está correta, pois o método add aguarda um objeto, e URL é uma subclasse de Object. A sentença que recupera x, no entanto, está errada, pois o tipo retornado pela sentença do lado direito do operador = retorna um Object, e você não pode atribuir um Object para uma variável do tipo URL, pois você não poderia se basear naquela variável como sendo uma URL. Portanto, uma operação de downcast é necessária, e precisamos escrever o seguinte código: URL x = (URL) bookmarks.get (0); Oefeitodaoperaçãodedowncast é realizar uma checagem em tempo de execução. Se a checagem tiver sucesso, e o resultado da chamada do método é do tipo URL, a execução continua normalmente. Caso a checagem falhe, no caso do tipo retornado não ser correto, uma exceção ClassCastException é jogada, e a atribuição não é realizada. Tenha certeza de que você compreende este conceito, e de que não fará nenhuma confusão (como os estudantes geralmente fazem), pensando que a operação de cast, de alguma forma, realiza uma mutação no objeto retornado pelo método. Os objetos carregam seu tipo em tempo de execução, e se um objeto foi criado com um construtor da classe URL, ele terá este tipo sempre, e não há razão para alterá-lo para que venha a ter seu próprio tipo. As operações de downcast podem ser um incômodo e, ocasionalmente, vale a pena escrever uma classe wrapper para automatizar o processo. Em um browser, você provavelmente utilizaria um tipo

6 abstrato de dados para representar uma lista de bookmarks (que suportasse funções além das oferecidas pelo tipo URL). Fazendo dessa forma, você iria realizar a operação de cast dentro do código do tipo abstrato, e seus clientes veriam códigos como o seguinte: URL geturl (int i); que não iria exigir a operação de cast em seu contexto de invocação, limitando, portanto, o escopo no qual erros de cast poderiamocorrer. O polimorfismo de subtipo fornece flexibilidades que o polimorfismo paramétrico não fornece. Você pode formar containers heterogêneos que contêm diferentes tipos de elementos. E você pode colocar containers dentro deles próprios - tente descobrir como expressar este fato como um tipo polimórfico - apesar de não ser uma coisa adequada para se fazer. De fato, como mencionamos em nossa aula anterior a respeito de igualdade, a API de classes Java será degenerada se você fizer desta forma. Uma rígida definição do tipo de elemento que um container possui é muitas vezes a parte mais importante de uma invariante rep de um tipo abstrato. Você deve criar o hábito de escrever um comentário toda vez que declarar um container, seja usando uma declaração de tipo pseudoparamétrica: List bookmarks; // List [URL] ou como uma parte da invariante rep propriamente dita: IR: bookmarks.elems in URL 16.4 Implementações Sobre Esqueletos de Hierarquias As implementações concretas das coleções estão construídas sobre esqueletos de hierarquias. Estas implementações utilizam o padrão de projeto denominado Template Method (consulte Gamma et al, páginas ). Uma classe abstrata não possui instâncias de si mesma, mas define métodos denominados templates (moldes) que invocam outros métodos denominados hooks (ganchos) que são declarados como abstratos e que não possuem código. Na subclasse herdeira, os métodos hook são sobrepostos, e os métodos template são herdados sem qualquer alteração. Na classe AbstractList, por exemplo, iterator é um método template que retorna um iterador implementando o método get como um hook. O método equals é implementado como um outro template da mesma forma que o iterator. Uma subclasse, como ArrayList, fornece então uma

7 representação (uma array de elementos, por exemplo) e uma implementação para o método get (por exemplo, o método deve retornar o i-ésimo elemento do array), podendo herdar os métodos iterator e equals. Algumas classes concretas substituem as implementações abstratas. LinkedList, por exemplo, substitui a funcionalidade do iterador, pois, ao utilizar a representação das entradas como objetos do tipo Entry diretamente, é possível ter-se uma performance melhor do que se utilizando o método get, queéumhook, e realiza uma busca seqüencial em cada invocação! 16.5 Capacidade, Alocação & Garbage Collector Uma implementação que utiliza um array para sua representação - assim como ArrayList e HashMap - deve definir um tamanho para o array quando alocá-lo. A escolha de um tamanho bom pode ser importante para a performance. Pois se o tamanho for muito pequeno, o array terá que ser substituído por um novo array, sendo necessário arcar com os custos de se alocar um novo array e de se liberar a memória do antigo. Se ele for muito grande, teremos perda de espaço, o que será um problema especialmente quando existirem muitas instâncias do tipo da coleção que estamos utilizando. Tais implementações, portanto, fornecem construtores nos quais o cliente pode definir a capacidade inicial, a partir da qual o tamanho da locação pode ser determinado. ArrayList, por exemplo, possui o construtor: public ArrayList(int initialcapacity) Constrói uma lista vazia com a capacidade inicial especificada. Parâmetros: initialcapacity - a capacidade inicial da lista. Throws: IllegalArgumentException - caso a capacidade inicial seja um valor negativo. Existem também métodos que ajustam a alocação: trimtosize, define a capacidade do container de forma que ele seja grande o suficiente para os elementos atualmente armazenados, e ensurecapacity, que garante a capacidade até uma determinada quantia. Utilizar as facilidades para gerenciamento da capacidade pode ser problemático. Se você não sabe exatamente a magnitude das coleções que você irá precisar para sua aplicação, você pode tentar gerar uma estimativa.

8 Perceba que este conceito de capacidade transforma um problema comportamental em um problema de performance - uma troca desejável. Em muitos programas antigos, existem recursos limitados, e quando eles são exauridos, o programa simplesmente falha. Com a abordagem do gerenciamento de capacidade, o programa simplesmente se torna mais lento. É uma boa idéia projetar um programa de forma que ele funcione eficientemente na maior parte do tempo, mesmo que ocorram problemas de performance ocasionalmente. Se você estudar a implementação do método remove de ArrayList, você verá este código: public Object remove(int index) { elementdata[-size] = null; // deixe que o gc (garbage collector) faça seu trabalho O que acontece neste caso? O garbage collector não funciona automaticamente? Neste caso observamos um erro comum de programadores inexperientes. Se você possui um array na sua representação, com uma variável de instância distinta que contém um índice para indicar quais elementos do array devem ser considerados como parte da coleção abstrata. É tentador pensar que, para remover os elementos, tudo que você deve fazer é decrementar este índice. Uma análise sobre a função de abstração do tipo abstrato poderá explicar esta confusão: os elementos que estão acima do índice não são considerados parte da coleção abstrata, e seus valores são irrelevantes. No entanto, há um problema. Se você não garantir a atribuição do valor null para as posições que não são utilizadas, os elementos cujas referências estão nessas posições não serão tratados pelo garbage collector, mesmo que não existam outras referências para estes elementos em qualquer outra parte do programa. O garbage collector não pode interpretar a função abstrata, portanto, ele não sabe que aqueles elementos não podem ser acessados através da coleção, mesmo que seja possível acessá-los através da representação. Se você se esquecer de atribuir null para estas posições, a performance do seu programa pode ser comprometida Cópias, Conversões, Wrappers, etc Todas as classes de coleções concretas fornecem construtores que recebem coleções como argumento. Isto permite que você copie coleções, e que possa converter um tipo de coleção para outro. Por exemplo, a classe, LinkedList possui:

9 public LinkedList(Collection c) Constrói uma lista contendo os elementos da coleção especificada, na ordem em que eles são retornados pelo iterador da coleção. Parâmetros: c - a coleção cujos elementos devem ser colocados nesta lista. a qual pode ser utilizada para cópia: List p = new LinkedList () List pcopy = new LinkedList (p) ou para que se crie uma lista encadeada a partir de um outro tipo de coleção: Set s = new HashSet () List p = new LinkedList (s) Como não podemos declarar construtores em interfaces, a especificação List não estabelece que todas as suas implementações devem ter tais construtores, apesar de que elas possuem. Existe uma classe especial denominada java.util.collections que contém um grupo de métodos estáticos que realizam operações sobre coleções ou que retornam coleções como resultado. Alguns destes métodos são algoritmos genéricos (por exemplo, para ordenação), e outros são wrappers. Por exemplo, o método unmodifiablelist recebe uma lista e retorna uma lista com os mesmos elementos, mas que é imutável : public static List unmodifiablelist(list list) Retorna uma visão não modificável da lista especificada. Este método permite que módulos forneçam aos usuários um acesso "read-only" às suas listas internas. Operações de consulta sobre a lista realizam a consulta na lista original. Tentativas dese modificar a lista retornada, diretamente ou através de um iterador, resultam em uma exceção UnsupportedOperationException. A lista retornada será serializable caso a lista original também o seja. Parâmetros:

10 list - a lista para a qual uma visão não modificável deve ser retornada. Returns: Uma visão não modificável da lista especificada. A lista retornada não é exatamente imutável, já que seus valores podem ser alterados devido a alterações ocorridas na lista subjacente (veja a seção 16.8 mais abaixo), mas ela não pode ser modificada diretamente. Existem métodos semelhantes que recebem coleções e retornam visões que são sincronizadas com a lista original através de métodos wrappers Coleções Ordenadas Uma coleção ordenada deve possuir alguma forma de se comparar os elementos para se determinar a sua ordem. A API de coleções oferece duas abordagens para fazer isto. Você pode utilizar a 'ordenação natural', que é determinada através do método compareto do tipo dos elementos armazenados, que devem implementar a interface java.lang.comparable: public int compareto(object o) que retorna um inteiro negativo, zero, ou um inteiro positivo caso o objeto (this) seja menor que, igual, ou maior que um objeto o. Quando você adicionar um elemento em uma coleção ordenada que está utilizando ordenação natural, o elemento deve ser uma instância de uma classe que implementa a interface Comparable. O método add realiza a operação de downcast para o tipo Comparable sobre o elemento adicionado de forma que seja possível compará-lo com os elementos já existentes na coleção, caso não seja possível fazer o downcast, será jogada uma exceção (lembrese que uma operação de downcast é, sobretudo, uma verificação). Alternativamente, você pode utilizar uma ordenação fornecida independentemente dos elementos, através de um elemento que implementa a interface java.util.comparator, e que possui o método public int compare(object o1, Object o2) que é semelhante ao método compareto, mas que recebe como argumento ambos os elementos que serão comparados. Esta é uma instância do padrão denominado Strategy, no qual um algoritmo é desacoplado do código que o utiliza (consulte Gamma, pp ). Qual abordagem utilizar dependerá de qual construtor você utiliza para criar a coleção de objetos. Se você utilizar o construtor que recebe um Comparator como argumento, ele será utilizado para

11 determinar a ordenação; se você utilizar o construtor sem argumentos, a ordenação natural será utilizada. A atividade de comparação sofre os mesmos problemas que a igualdade (discutida na aula 9). Uma coleção ordenada possui uma invariante rep que determina que os elementos da representação devem estar ordenados. Se a ordenação de dois elementos puder ser alterada através de uma invocação a um método público, teremos uma exposição de representação Visões Introduzimos o conceito de visões na aula 9. As visões são um mecanismo sofisticado, muito útil, mas perigoso. Elas violam muitas das nossas concepções a respeito de quais tipos de comportamentos podem ocorrer em um programa orientado a objetos bem formado. Três tipos de visões podem ser identificados, de acordo com o propósito da visão: Extensão de funcionalidade. Algumas visões são utilizadas para estender a funcionalidade de um objeto sem que seja necessária a adição de novos métodos à sua classe. Os iteradores caem nessa categoria. Seria possível, ao invés disso, colocar os métodos next e hasnext na própria classe da coleção. Mas isto iria complicar a API da classe. Seria difícil também suportar múltiplas iterações sobre a mesma coleção. Poderíamos adicionar um método reset à classe que seria invocado para reiniciar uma iteração, mas isto permitiria apenas uma iteração por vez. Tal método poderia conduzir a erros nos quais o programador se esquece de reiniciar a iteração. Desacoplamento. Algumas visões fornecem um subconjunto das funcionalidades da coleção subjacente. O método keyset da interface Map, por exemplo, retorna um conjunto constituído das chaves do mapa. O método permite, portanto, que a parte do código relacionada com as chaves, mas não a parte relacionada com os valores, seja desacoplada do resto da especificação da interface Map. Transformação Coordenada. A visão fornecida pelo método sublist da interface List provê uma espécie de transformação coordenada. Alterações na visão produzem alterações na lista subjacente. Mas o acesso à lista é realizado através de um índice que é um offset passado através do parâmetro do método sublist. As visões são perigosas por duas razões. Primeiro, as coisas são alteradas na camada subjacente: invoque o método remove a partir de um iterador e sua coleção subjacente será alterada; invoque remove em um mapa e uma determinada visão de seu conjunto de chaves será alterada (e viceversa). Esta é uma forma de aliasing abstrato no qual uma alteração em um objeto faz com que outro objeto, de um tipo diferente, seja alterado. Os dois objetos não precisam nem mesmo estar dentro do mesmo escopo léxico. Perceba que o significado de nossa cláusula 'modifies' utilizada em especificações deve ser refinada: se você definir 'modifies c' ec possui uma visão v, istoquerdizer que v também pode ser alterada?

12 Segundo, a especificação de um método que retorna uma visão muitas vezes limita os tipos de alterações que são permitidas. Para se ter certeza que seu código funciona, você precisará entender a especificação deste método. Sendo que, não surpreendente, estas especificações são muitas vezes obscuras. A cláusula 'post-requires' do texto de Liskov é uma forma de se estender nosso conceito de especificação para se manipular algumas das complicações. Algumas visões permitem que apenas a coleção subjacente seja alterada. Outras permitem que apenas a visão seja alterada - iteradores, por exemplo. Algumas permitem alterações para ambos, a visão e a coleção subjacente, mas determinam complexas implicações em função das alterações. A API de coleções, por exemplo, determina que quando uma visão na forma de uma sublist écriadaa partir de uma lista, a lista subjacente não deve sofrer nenhuma modificação estrutural; ou como está explicado na documentação da API: Modificações estruturais são aquelas que alteram o tamanho da lista, ou de outra forma, que determinam uma perturbação tal que iterações em progresso podem apresentar resultados incorretos. Não está muito claro o que isso significa. Minha sugestão é que se evite quaisquer modificações na lista subjacente. A situação é complicada ainda mais pela possibilidade de múltiplas visões sobre a mesma coleção subjacente. Você pode ter múltiplos iteradores sobre a mesma lista, por exemplo. Neste caso, você deve considerar também iterações entre visões. E se você modificar a lista através de um de seus iteradores, os outros iteradores serão invalidados, e não deverão ser utilizados novamente. Existem algumas estratégias úteis que aliviam a complexidade das visões. Se você está utilizando uma visão, você deve considerar cuidadosamente os seguintes conselhos: Você pode limitar o escopo dentro do qual a visão é acessível. Por exemplo, utilizando um loop do tipo for ao invés de uma sentença while, para se realizar a iteração. Desta forma, você estará limitandooescopodoiteradorparaoescopodopróprioloop.estapráticatornamuitomais fácil garantir que não ocorrerão interações não desejadas durante a iteração. Isto nem sempre é possível; o programa Tagger que iremos discutir mais adiante no curso altera um iterador a partir de um local a muitas invocações de métodos de distância, e em uma classe diferente, a partir do local de sua criação! Você pode evitar a alteração de uma visão ou de um objeto subjacente através do recurso de wrapping através de métodos da classe Collection. Por exemplo, se você criar uma visão a partir do método keyset de um mapa, e não pretende modificá-la, você pode tornar o conjunto

13 imutável: Set s = map.keysey (); Set safe_s = Collections.unmodifiableSet (s);

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade Page 1 podem ser comparadas com arrays, visto que também apresentam a capacidade de armazenar referências para vários objetos. Entretanto, as coleções apresentam uma gama de funcionalidades bem maior do

Leia mais

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education Java Como Programar, 8/E Slide 1 Slide 2 Slide 3 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

Leia mais

Coleções Avançadas. Programação Orientada a Objetos Java. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

Coleções Avançadas. Programação Orientada a Objetos Java. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior Coleções Avançadas Programação Orientada a Objetos Java Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior Objetivos Aprender como o conceito de coleção pode ser expresso de forma genérica Examinar

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem

Leia mais

BSI UFRPE Prof. Gustavo Callou gcallou@gmail.com

BSI UFRPE Prof. Gustavo Callou gcallou@gmail.com BSI UFRPE Prof. Gustavo Callou gcallou@gmail.com Coleções List Set Map Classes e interfaces do pacote java.util que representam listas, conjuntos e mapas. Solução flexível para armazenar objetos. Quantidade

Leia mais

3.1 Definições Uma classe é a descrição de um tipo de objeto.

3.1 Definições Uma classe é a descrição de um tipo de objeto. Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Classes Autoria:Aristófanes Corrêa Silva Adaptação:

Leia mais

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo. Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto

Leia mais

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS ATRIBUTOS PRIVADOS Podemos usar o modificador private, para tornar um atributo privado, obtendo um controle centralizado Definimos métodos para implementar todas as lógicas que utilizam ou modificam o

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 5. Tratamento de Exceções Introdução e conceitos Capturando exceção usando

Leia mais

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS Coleções Conceitos e Utilização Básica c Professores de ALPRO I Faculdade de Informática PUCRS 05/2012 ALPRO I (FACIN) Coleções: Básico 05/2012 1 / 41 Nota Este material não pode ser reproduzido ou utilizado

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem

Leia mais

Engenharia de Software III

Engenharia de Software III Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf (flavio.ceci@unisul.br) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,

Leia mais

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi 5 Conclusão Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi permitir que scripts Lua instanciem e usem

Leia mais

Aula 9: Igualdade entre objetos, Cópia de objetos e Visões

Aula 9: Igualdade entre objetos, Cópia de objetos e Visões Aula 9: Igualdade entre objetos, Cópia de objetos e Visões 9.1 O Contrato da Classe Object Toda classe estende a classe Object e, portanto, herda também todos os seus métodos. Dois destes métodos são particularmente

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

Reuso com Herança a e Composiçã

Reuso com Herança a e Composiçã Java 2 Standard Edition Reuso com Herança a e Composiçã ção Helder da Rocha www.argonavis.com.br 1 Como aumentar as chances de reuso Separar as partes que podem mudar das partes que não mudam. Exemplo:

Leia mais

Especificação do 3º Trabalho

Especificação do 3º Trabalho Especificação do 3º Trabalho I. Introdução O objetivo deste trabalho é abordar a prática da programação orientada a objetos usando a linguagem Java envolvendo os conceitos de classe, objeto, associação,

Leia mais

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos TUTORIAL Memória Flash Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS Campus Cachoeiro de Itapemirim Curso Técnico em Informática Disciplina: Análise e Projeto de Sistemas Professor: Rafael Vargas Mesquita Este exercício deve ser manuscrito e entregue na próxima aula; Valor

Leia mais

DAS5102 Fundamentos da Estrutura da Informação

DAS5102 Fundamentos da Estrutura da Informação Pilhas A estrutura de dados Pilha emula a forma de organização de objetos intuitiva que é utilizada diariamente nos mais diversos contextos da vida humana. Containeres são empilhados e desempilhados diariamente

Leia mais

Polimorfismo. Prof. Leonardo Barreto Campos 1

Polimorfismo. Prof. Leonardo Barreto Campos 1 Polimorfismo Prof. Leonardo Barreto Campos 1 Sumário Introdução; Polimorfismo; Polimorfismo Java; Métodos Abstratos Java Classes Abstratas Java Exercício - Java Polimorfismo C++ Classe Abstrata C++; Funções

Leia mais

Linguagem de Programação III

Linguagem de Programação III Linguagem de Programação III Aula-3 Criando Classes em Java Prof. Esbel Tomás Valero Orellana Da Aula Anterior Classes em Java, sintaxe básica Tipos básicos de dados em Java, como escolher o tipo apropriado

Leia mais

Laboratório de Programação. Aula 13 Java 5COP088. Aula 13 Genéricos e Conjuntos Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr barbon@uel.

Laboratório de Programação. Aula 13 Java 5COP088. Aula 13 Genéricos e Conjuntos Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr barbon@uel. 5COP088 Laboratório de Programação Aula 13 Genéricos e Conjuntos Java Prof. Dr. Sylvio Barbon Junior 1 Sumário: 1) Métodos hashcode(), equals() e tostring(); 2) Conjuntos; 3) Genéricos; 4) Resumo. 2 1)

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 13 Gerência de Memória Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso Sumário

Leia mais

Profº. Enrique Pimentel Leite de Oliveira

Profº. Enrique Pimentel Leite de Oliveira Profº. Enrique Pimentel Leite de Oliveira O termo orientação a objetos significa organizar o mundo real como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam

Leia mais

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33 PPROG Paradigmas da Programação Linguagem JAVA Interfaces (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33 PPROG Motivação para usar Interfaces Definição de Interface

Leia mais

Guia de Fatores de Qualidade de OO e Java

Guia de Fatores de Qualidade de OO e Java Qualiti Software Processes Guia de Fatores de Qualidade de OO e Java Versã o 1.0 Este documento só pode ser utilizado para fins educacionais, no Centro de Informática da Universidade Federal de Pernambuco.

Leia mais

O papel do CRM no sucesso comercial

O papel do CRM no sucesso comercial O papel do CRM no sucesso comercial Escrito por Gustavo Paulillo Você sabia que o relacionamento com clientes pode ajudar sua empresa a ter mais sucesso nas vendas? Ter uma equipe de vendas eficaz é o

Leia mais

MÓDULO 6 INTRODUÇÃO À PROBABILIDADE

MÓDULO 6 INTRODUÇÃO À PROBABILIDADE MÓDULO 6 INTRODUÇÃO À PROBBILIDDE Quando estudamos algum fenômeno através do método estatístico, na maior parte das vezes é preciso estabelecer uma distinção entre o modelo matemático que construímos para

Leia mais

Resolução da lista de exercícios de casos de uso

Resolução da lista de exercícios de casos de uso Resolução da lista de exercícios de casos de uso 1. Explique quando são criados e utilizados os diagramas de casos de uso no processo de desenvolvimento incremental e iterativo. Na fase de concepção se

Leia mais

Técnicas de Programação II

Técnicas de Programação II Técnicas de Programação II Aula 06 Orientação a Objetos e Classes Edirlei Soares de Lima Orientação a Objetos O ser humano se relaciona com o mundo através do conceito de objetos.

Leia mais

3 SCS: Sistema de Componentes de Software

3 SCS: Sistema de Componentes de Software 3 SCS: Sistema de Componentes de Software O mecanismo para acompanhamento das chamadas remotas se baseia em informações coletadas durante a execução da aplicação. Para a coleta dessas informações é necessário

Leia mais

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição Lista de Contas Lista de Contas: Assinatura null Quais são os métodos necessários? class ListaDeContas { void inserir (Conta c) { void retirar (Conta c) { Conta procurar (String num) { Listas de Contas:

Leia mais

5 Mecanismo de seleção de componentes

5 Mecanismo de seleção de componentes Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações

Leia mais

Introdução a Java. Hélder Nunes

Introdução a Java. Hélder Nunes Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais

Leia mais

Algoritmos e Estruturas de Dados II. Trabalho Prático 2

Algoritmos e Estruturas de Dados II. Trabalho Prático 2 Algoritmos e Estruturas de Dados II Entrega: 24/09/08 Devolução: 15/10/08 Trabalho individual Prof. Jussara Marques de Almeida Trabalho Prático 2 Você foi contratado pela XOL X Online para desenvolver

Leia mais

Tabelas de Espalhamento

Tabelas de Espalhamento Tabelas de Espalhamento Motivação Algumas das estruturas de dados vistas anteriormente requerem que seus elementos (células dinâmicas) sejam inspecionados seqüencialmente até que a desejada seja encontrada.

Leia mais

Subtipos e Subclasses

Subtipos e Subclasses Subtipos e Subclasses Aula 15 do curso 6.170 15 de outubro de 2001 Sumário 1Subtipos 32 2 Exemplo: Bicicletas 33 3 Exemplo: Quadrado e retângulo 37 4 Princípio de substituição 38 5 Subclasses e subtipos

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

Feature-Driven Development

Feature-Driven Development FDD Feature-Driven Development Descrição dos Processos Requisitos Concepção e Planejamento Mais forma que conteúdo Desenvolver um Modelo Abrangente Construir a Lista de Features Planejar por

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.

Leia mais

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software PROCESSO DE DESENVOLVIMENTO DE SOFTWARE Introdução Modelos de Processo de Desenvolvimento de Software Os modelos de processos de desenvolvimento de software surgiram pela necessidade de dar resposta às

Leia mais

Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados

Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Um Sistema Gerenciador de Banco de Dados (SGBD) é constituído por um conjunto de dados associados a um conjunto de programas para acesso a esses

Leia mais

Curso: Redes II (Heterogênea e Convergente) Tema da Aula: Características Roteamento

Curso: Redes II (Heterogênea e Convergente) Tema da Aula: Características Roteamento Curso: Redes II (Heterogênea e Convergente) Tema da Aula: Características Roteamento Professor Rene - UNIP 1 Roteamento Dinâmico Perspectiva e histórico Os protocolos de roteamento dinâmico são usados

Leia mais

Prototype, um Design Patterns de Criação

Prototype, um Design Patterns de Criação Prototype, um Design Patterns de Criação José Anízio Pantoja Maia Este artigo tem como finalidade compreender o funcionamento do padrão de projeto prototype, serão abordados os participantes que compõe

Leia mais

Entendendo como funciona o NAT

Entendendo como funciona o NAT Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços

Leia mais

EMENTA DO CURSO. Tópicos:

EMENTA DO CURSO. Tópicos: EMENTA DO CURSO O Curso Preparatório para a Certificação Oracle Certified Professional, Java SE 6 Programmer (Java Básico) será dividido em 2 módulos e deverá ter os seguintes objetivos e conter os seguintes

Leia mais

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 2-1. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S) As metas gerais do software de entrada e saída é organizar o software como uma série de camadas, com as mais baixas preocupadas em esconder as

Leia mais

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente

Leia mais

Árvores Binárias de Busca

Árvores Binárias de Busca Árvores Binárias de Busca Uma Árvore Binária de Busca T (ABB) ou Árvore Binária de Pesquisa é tal que ou T = 0 e a árvore é dita vazia ou seu nó contém uma chave e: 1. Todas as chaves da sub-árvore esquerda

Leia mais

Manual do PolicyKit-kde. Daniel Nicoletti Tradução: Luiz Fernando Ranghetti

Manual do PolicyKit-kde. Daniel Nicoletti Tradução: Luiz Fernando Ranghetti Daniel Nicoletti Tradução: Luiz Fernando Ranghetti 2 Conteúdo 1 Resumo 5 2 Como funciona 6 2.1 Resumo............................................ 6 2.2 O problema.........................................

Leia mais

Persistência e Banco de Dados em Jogos Digitais

Persistência e Banco de Dados em Jogos Digitais Persistência e Banco de Dados em Jogos Digitais Prof. Marcos Francisco Pereira da Silva Especialista em Engenharia de Software Jogos Digitais - Computação Gráfica 1 Agenda Vantagens de usar a abordagem

Leia mais

Pragmática das Linguagens de Programação 2004/2005

Pragmática das Linguagens de Programação 2004/2005 Instituto Superior Técnico Pragmática das Linguagens de Programação 2004/2005 Segundo Exame 11/2/2005 Número: Turma: Nome: Escreva o seu número em todas as folhas do teste. O tamanho das respostas deve

Leia mais

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP AULA 4 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila.

Leia mais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais Notas da Aula 15 - Fundamentos de Sistemas Operacionais 1. Software de Entrada e Saída: Visão Geral Uma das tarefas do Sistema Operacional é simplificar o acesso aos dispositivos de hardware pelos processos

Leia mais

Microsoft Access XP Módulo Um

Microsoft Access XP Módulo Um Microsoft Access XP Módulo Um Neste primeiro módulo de aula do curso completo de Access XP vamos nos dedicar ao estudo de alguns termos relacionados com banco de dados e as principais novidades do novo

Leia mais

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO INTRODUÇÃO 12. DOCUMENTAÇÃO Na plataforma Java SE 7, há cerca de 4000 classes e interfaces disponíveis para utilizarmos em nossas aplicações Podemos visualizar a documentação dessas classes e interfaces

Leia mais

SISTEMAS INTEGRADOS DE GESTÃO PAS 99:2006. Especificação de requisitos comuns de sistemas de gestão como estrutura para a integração

SISTEMAS INTEGRADOS DE GESTÃO PAS 99:2006. Especificação de requisitos comuns de sistemas de gestão como estrutura para a integração Coleção Risk Tecnologia SISTEMAS INTEGRADOS DE GESTÃO PAS 99:2006 Especificação de requisitos comuns de sistemas de gestão como estrutura para a integração RESUMO/VISÃO GERAL (visando à fusão ISO 31000

Leia mais

Exercícios Teóricos Resolvidos

Exercícios Teóricos Resolvidos Universidade Federal de Minas Gerais Instituto de Ciências Exatas Departamento de Matemática Exercícios Teóricos Resolvidos O propósito deste texto é tentar mostrar aos alunos várias maneiras de raciocinar

Leia mais

Programação por Objectos. Java

Programação por Objectos. Java Programação por Objectos Java Parte 2: Classes e objectos LEEC@IST Java 1/24 Classes (1) Sintaxe Qualif* class Ident [ extends IdentC] [ implements IdentI [,IdentI]* ] { [ Atributos Métodos ]* Qualif:

Leia mais

REFLEXÃO EM JAVA. INVERSÃO DE DEPENDÊNCIA FACTORY METHODS FACTORY CLASSES IoC, CONTAINERS e BEANS SPRING PARTE III

REFLEXÃO EM JAVA. INVERSÃO DE DEPENDÊNCIA FACTORY METHODS FACTORY CLASSES IoC, CONTAINERS e BEANS SPRING PARTE III REFLEXÃO EM JAVA INVERSÃO DE DEPENDÊNCIA FACTORY METHODS FACTORY CLASSES IoC, CONTAINERS e BEANS SPRING PARTE III ARQUITECTURAS DE SOFTWARE F. Mário Martins 2011 CLASS A partir de JAVA5 a classe java.lang.class

Leia mais

Desenvolvendo plugins WordPress usando Orientação a Objetos

Desenvolvendo plugins WordPress usando Orientação a Objetos Desenvolvendo plugins WordPress usando Orientação a Objetos por Daniel Antunes danieldeveloper.com @danieldeveloper Introdução Desenvolver plugins WordPress é mais que programar: é obter grandes resultados

Leia mais

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES ALGORITMOS DE BUSCA EM LISTAS COM ALOCAÇÃO SEQÜENCIAL Busca em Listas Lineares A operação de busca é

Leia mais

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Especialização em desenvolvimento para web com interfaces ricas Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Objetivos Conceito de exceções Tratar exceções pelo uso de try, catch e

Leia mais

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014 Aula 06 Introdução à Teste de Módulos II e Exercícios Alessandro Garcia LES/DI/PUC-Rio Março 2014 Princípios Discutidos até aqui Cada módulo deveria implementar uma única abstração similarmente: cada função

Leia mais

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 1. Conceitos de Orientação a Objetos Introdução O paradigma da POO Classes

Leia mais

Java 2 Standard Edition Como criar classes e objetos

Java 2 Standard Edition Como criar classes e objetos Java 2 Standard Edition Como criar classes e objetos Helder da Rocha www.argonavis.com.br 1 Assuntos abordados Este módulo explora detalhes da construção de classes e objetos Construtores Implicações da

Leia mais

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias: Arquitetura de Computadores Estrutura e Funcionamento da CPU Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Revisão dos conceitos básicos O processador é o componente vital do sistema de

Leia mais

NOVIDADES DO JAVA PARA PROGRAMADORES C

NOVIDADES DO JAVA PARA PROGRAMADORES C PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB NOVIDADES DO JAVA PARA PROGRAMADORES C Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o Conceito de Classes e Objetos Capacitar para a criação de objetos simples

Leia mais

NetBeans. Conhecendo um pouco da IDE

NetBeans. Conhecendo um pouco da IDE NetBeans Conhecendo um pouco da IDE Professor: Edwar Saliba Júnior Sumário Apresentação:...1 Criando Um Novo Projeto de Software:...1 Depurando Um Código-fonte:...4 Entendendo o Código-fonte:...7 Dica

Leia mais

3 Classes e instanciação de objectos (em Java)

3 Classes e instanciação de objectos (em Java) 3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem

Leia mais

Tabela de símbolos: tabelas de espalhamento

Tabela de símbolos: tabelas de espalhamento Tabela de símbolos: tabelas de espalhamento Marcelo K. Albertini 14 de Janeiro de 2014 2/28 Resumo de complexidades Análises para operação efetuada após N inserções pior caso caso médio keys chave get

Leia mais

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, M.Sc. @ribeirord MODELAGEM DE DADOS. Aula 2. Prof. Rafael Dias Ribeiro. M.Sc.

04/08/2012 MODELAGEM DE DADOS. PROF. RAFAEL DIAS RIBEIRO, M.Sc. @ribeirord MODELAGEM DE DADOS. Aula 2. Prof. Rafael Dias Ribeiro. M.Sc. MODELAGEM DE DADOS PROF. RAFAEL DIAS RIBEIRO, M.Sc. @ribeirord MODELAGEM DE DADOS Aula 2 Prof. Rafael Dias Ribeiro. M.Sc. @ribeirord 1 Objetivos: Revisão sobre Banco de Dados e SGBDs Aprender as principais

Leia mais

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 1 Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Linguagem a ser Utilizada? Nossa disciplina é de Algoritmos e Estrutura de Dados, e não de linguagem

Leia mais

Aula 01 - Formatações prontas e condicionais. Aula 01 - Formatações prontas e condicionais. Sumário. Formatar como Tabela

Aula 01 - Formatações prontas e condicionais. Aula 01 - Formatações prontas e condicionais. Sumário. Formatar como Tabela Aula 01 - Formatações prontas e Sumário Formatar como Tabela Formatar como Tabela (cont.) Alterando as formatações aplicadas e adicionando novos itens Removendo a formatação de tabela aplicada Formatação

Leia mais

Notas de Aula 05: Aplicação de um caso de uso

Notas de Aula 05: Aplicação de um caso de uso Notas de Aula 05: Aplicação de um caso de uso Objetivos da aula: Aprender a aplicar a técnica de casos de uso em um pequeno problema real Identificar as variáveis relevantes a serem consideradas Modelar

Leia mais

Podemos encontrar uma figura interessante no PMBOK (Capítulo 7) sobre a necessidade de organizarmos o fluxo de caixa em um projeto.

Podemos encontrar uma figura interessante no PMBOK (Capítulo 7) sobre a necessidade de organizarmos o fluxo de caixa em um projeto. Discussão sobre Nivelamento Baseado em Fluxo de Caixa. Item aberto na lista E-Plan Podemos encontrar uma figura interessante no PMBOK (Capítulo 7) sobre a necessidade de organizarmos o fluxo de caixa em

Leia mais

Implementando uma Classe e Criando Objetos a partir dela

Implementando uma Classe e Criando Objetos a partir dela Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 04 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 2 Prof. Cristóvão Cunha Implementando uma Classe

Leia mais

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Perola André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Prevayler é a implementação em Java do conceito de Prevalência. É um framework que prega uma JVM invulnerável

Leia mais

2. Representação Numérica

2. Representação Numérica 2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos

Leia mais

1.6. Tratamento de Exceções

1.6. Tratamento de Exceções Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER

Leia mais

6.170 Revisão para a Prova

6.170 Revisão para a Prova 6.170 Revisão para a Prova Tópicos: 1. Desacoplamento 2. Abstração de dados 3. Funções de Abstração e Invariantes de Representação 4. Abstração de Iteração & Iteradores 5. Modelos de Objeto e Invariantes

Leia mais

Sistema de Arquivos. Ambientes Operacionais. Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani

Sistema de Arquivos. Ambientes Operacionais. Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani Sistema de Arquivos Ambientes Operacionais Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani Gerência de Arquivos É um dos serviços mais visíveis do SO. Arquivos são normalmente

Leia mais

5 Equacionando os problemas

5 Equacionando os problemas A UA UL LA Equacionando os problemas Introdução Nossa aula começará com um quebra- cabeça de mesa de bar - para você tentar resolver agora. Observe esta figura feita com palitos de fósforo. Mova de lugar

Leia mais

AVALIAÇÃO À DISTÂNCIA 1 GABARITO

AVALIAÇÃO À DISTÂNCIA 1 GABARITO Fundação CECIERJ - Vice Presidência de Educação Superior a Distância Curso de Tecnologia em Sistemas de Computação UFF Disciplina INTRODUÇÃO À INFORMÁTICA... AD1 2 semestre de 2008. Data... AVALIAÇÃO À

Leia mais

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo TUTORIAL DO ACCESS PASSO A PASSO I. Criar um Novo Banco de Dados Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo 3. Clicar em Banco de Dados em Branco 4. Escrever um nome na caixa de diálogo

Leia mais

Programação Orientada a Objetos - 3º semestre AULA 08 Prof. André Moraes

Programação Orientada a Objetos - 3º semestre AULA 08 Prof. André Moraes Pág 50 Programação Orientada a Objetos - 3º semestre AULA 08 Prof. André Moraes 10 CORREÇÃO DE QUESTÕES DE AVALIAÇÃO 1 PARTE I - AVALIAÇÃO TEÓRICA 11 RESPONDA AS QUESTÕES ABAIXO: A) Qual a diferença entre

Leia mais

Engenharia de Requisitos

Engenharia de Requisitos Engenharia de Requisitos Introdução a Engenharia de Requisitos Professor: Ricardo Argenton Ramos Aula 08 Slide 1 Objetivos Introduzir a noção de requisitos do sistema e o processo da engenharia de requisitos.

Leia mais

Unidade 7: Panes no Excel

Unidade 7: Panes no Excel Unidade 7: Panes no Excel 7.0 Introdução A maioria das pessoas que usam o Excel já deve ter passado por redução no desempenho, congelamento e aquelas temidas palavras "O Microsoft Excel encontrou um problema

Leia mais

Programação Orientada a Objetos. Encapsulamento

Programação Orientada a Objetos. Encapsulamento Programação Orientada a Objetos Encapsulamento de Dados Ocultação de dados Garante a transparência de utilização dos componentes do software, facilitando: Entendimento Reuso Manutenção Minimiza as interdependências

Leia mais

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação SOFT DISCIPLINA: Engenharia de Software AULA NÚMERO: 10 DATA: / / PROFESSOR: Andrey APRESENTAÇÃO O objetivo desta aula é apresentar e discutir os conceitos de coesão e acoplamento. DESENVOLVIMENTO Projetar

Leia mais