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 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

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

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

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

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

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. 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

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

Módulo 06 Desenho de Classes

Módulo 06 Desenho de Classes Módulo 06 Desenho de Classes Última Atualização: 13/06/2010 1 Objetivos Definir os conceitos de herança, polimorfismo, sobrecarga (overloading), sobreescrita(overriding) e invocação virtual de métodos.

Leia mais

Java Coleções. Rodrigo C. de Azevedo

Java Coleções. Rodrigo C. de Azevedo Java Coleções Rodrigo C. de Azevedo OMG Certified UML Professional Fundamental OMG Certified UML Professional Intermediate CompTIA Project+ Sun Certified Associate for Java Platform Sun Certified Programmer

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

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

Aula 10: Análise Dinâmica - 1a. Parte

Aula 10: Análise Dinâmica - 1a. Parte Aula 10: Análise Dinâmica - 1a. Parte A melhor forma de garantir a qualidade do software que você constrói é projetando-o cuidadosamente desde o início. Desta forma, as partes se encaixarão mais perfeitamente,

Leia mais

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM Programação OO em Java Profa Andréa Schwertner Charão DELC/CT/UFSM Sumário Classes abstratas Interfaces Tipos genéricos Coleções Classes abstratas São classes que não podem ser instanciadas, porque representam

Leia mais

Java Como Programar, 8/E. (C) 2010 Pearson Education, Inc. Todos os direitos reservados.

Java Como Programar, 8/E. (C) 2010 Pearson Education, Inc. Todos os direitos reservados. Java Como Programar, 8/E (C) 2010 Pearson Education, Inc. Todos os direitos reservados. Polimorfismo Permite programar no geral em vez de programar no específico. O polimorfismo permite escrever programas

Leia mais

Aula 11: Análise Dinâmica - 2a. parte

Aula 11: Análise Dinâmica - 2a. parte Aula 11: Análise Dinâmica - 2a. parte Nesta aula, continuaremos nossa discussão a respeito da análise dinâmica, focando na atividade de teste. Iremos dar uma breve olhada em algumas das noções básicas

Leia mais

JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo

JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo GENERICS (Tipos Parametrizados, Classes Parametrizadas) : têm o objectivo de tornar as Colecções seguras em termos

Leia mais

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM Programação OO em Java Profa Andréa Schwertner Charão DELC/CT/UFSM Sumário Classes abstratas Interfaces Tipos genéricos Coleções Introdução GUI Classes abstratas São classes que não podem ser instanciadas,

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

Prof. Marcelo Heitor Teixeira marceloheitor.com. Java Exceções e Finalizações

Prof. Marcelo Heitor Teixeira marceloheitor.com. Java Exceções e Finalizações Prof. Marcelo Heitor Teixeira marceloheitor.com Java Exceções e Finalizações # Exceções em Java # Hierarquia de Classes # Lançando, Declarando e Capturando # Classes de Exceções Personalizadas # Entendendo

Leia mais

Programação Java. em Ambiente Distribuído. Ênfase no Mapeamento Objeto-Relacional com JPA, EJB e Hibernate. Douglas Rocha Mendes.

Programação Java. em Ambiente Distribuído. Ênfase no Mapeamento Objeto-Relacional com JPA, EJB e Hibernate. Douglas Rocha Mendes. Programação Java em Ambiente Distribuído Ênfase no Mapeamento Objeto-Relacional com JPA, EJB e Hibernate Douglas Rocha Mendes Novatec Copyright 2011 da Novatec Editora Ltda. Todos os direitos reservados

Leia mais

Capítulo 21. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Capítulo 21. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Capítulo 21 Coleções Objetivos do Capítulo Analisar o conceito de coleção e sua relação com as estruturas de dados. Apresentar a arquitetura do framework de coleções do Java. Indicar as classes e interfaces

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Comunicação Remota Gustavo Reis gustavo.reis@ifsudestemg.edu.br 1 Comunicação entre processos está no coração de todo sistema distribuído. Não tem sentido estudar sistemas distribuídos

Leia mais

5. Generics, Iterators e Comparable em Java. Tipos de Dados Abstractos Generics em Java

5. Generics, Iterators e Comparable em Java. Tipos de Dados Abstractos Generics em Java 5. Generics, Iterators e Comparable em Java Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 5. Generics, Iterators e Comparable em Java Estruturas de Dados 1 / 12 Tipos de Dados Abstractos

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

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes.

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes. Desenvolvimento OO com Java 7 RTTI e Interfaces Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes.br/ ~ vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal do

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

Criando documentação com javadoc

Criando documentação com javadoc H Criando documentação com javadoc H.1 Introdução Neste apêndice, fornecemos uma introdução a javadoc ferramenta utilizada para criar arquivos HTML que documentam o código Java. Essa ferramenta é usada

Leia mais

Boas Práticas de Programação

Boas Práticas de Programação Boas Práticas de Programação João Arthur Brunet Monteiro Mestrando em Informática - COPIN 25/10/2008 João Arthur Brunet Monteiro 1/ 27 Roteiro Introdução 1 Introdução Objetivos Contextualização 2 Práticas

Leia mais

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes Modelagem e Implementação de Aquário de Peixes- por Jorge Fernandes - Página 1 Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes Jorge Fernandes Natal, Agosto de

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

Tópicos de Orientação a Objetos

Tópicos de Orientação a Objetos Capítulo 3 Tópicos de Orientação a Objetos Um bom design de software visa a uma arquitetura flexível que permita futuras alterações, facilite a produção de código organizado e legível, maximizando seu

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

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

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding Introdução à Programação Interface, Polimorfismo e Dynamic Binding Interface Programador Java PLENO Possuir sólida experiência em programação Desenvolvimento na linguagem JAVA Webservice, Struts ou JSF(desejável)

Leia mais

Programação Orientada a Objetos em Java. Herança

Programação Orientada a Objetos em Java. Herança Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 Projeto de Programas Programação Orientada a Objetos em Java Herança Professor: César Melo Slides baseados em materiais preparados

Leia mais

Aula 3: Desacoplamento 2ª. Parte

Aula 3: Desacoplamento 2ª. Parte Aula 3: Desacoplamento 2ª. Parte Na última aula, nós falamos a respeito da importância das dependências entre as partes do programa em um projeto de software. Uma boa linguagem de programação permite a

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

Estrutura de Dados Básica

Estrutura de Dados Básica Estrutura de Dados Básica Professor: Osvaldo Kotaro Takai. Aula 6: Tipos Abstratos de Dados O objetivo desta aula é introduzir os conceitos envolvidos em Tipos Abstratos de Dados e explorar esses conceitos

Leia mais

4 Conversor EDTV Raw. 4.1 Arquitetura

4 Conversor EDTV Raw. 4.1 Arquitetura 4 Conversor EDTV Raw O conversor EDTV Raw é o programa que lê um documento escrito no perfil NCL EDTV e gera um documento Raw equivalente, i.e. que define a mesma apresentação. Este capítulo, apresenta

Leia mais

Memory Leak em Java?

Memory Leak em Java? 1 Memory Leak em Java? Saiba como memory leaks se manifestam em Java e como evitá-los Sobre o Autor Carlos Eduardo G. Tosin (carlos@tosin.com.br) é formado em Ciência da Computação pela PUC-PR, pós-graduado

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

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

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

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java.

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java. Exceções em Java Miguel Jonathan DCC/IM/UFRJ (rev. abril de 2011) Resumo dos conceitos e regras gerais do uso de exceções em Java O uso de exceções permite separar a detecção da ocorrência de uma situação

Leia mais

Processos (Threads,Virtualização e Migração de Código)

Processos (Threads,Virtualização e Migração de Código) Processos (Threads,Virtualização e Migração de Código) Roteiro Processos Threads Virtualização Migração de Código O que é um processo?! Processos são programas em execução. Processo Processo Processo tem

Leia mais

Sobre o Professor Dr. Sylvio Barbon Junior

Sobre o Professor Dr. Sylvio Barbon Junior 5COP088 Laboratório de Programação Aula 1 Java Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr barbon@uel.br 1 Sobre o Professor Dr. Sylvio Barbon Junior Formação: Ciência e Engenharia da Computação (2005

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

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários.

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários. Os sistemas computacionais atuais permitem que diversos programas sejam carregados na memória e executados simultaneamente. Essa evolução tornou necessário um controle maior na divisão de tarefas entre

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

Exercícios de Revisão Java Básico

Exercícios de Revisão Java Básico Exercícios de Revisão Java Básico (i) Programação básica (estruturada) 1) Faça um programa para calcular o valor das seguintes expressões: S 1 = 1 1 3 2 5 3 7 99... 4 50 S 2 = 21 50 22 49 23 48...250 1

Leia mais

Curso Java Starter. www.t2ti.com 1

Curso Java Starter. www.t2ti.com 1 1 Apresentação O Curso Java Starter foi projetado com o objetivo de ajudar àquelas pessoas que têm uma base de lógica de programação e desejam entrar no mercado de trabalho sabendo Java, A estrutura do

Leia mais

Programação Orientada a Objetos. Padrões de Criação

Programação Orientada a Objetos. Padrões de Criação Programação Orientada a Objetos Padrões de Criação Cristiano Lehrer, M.Sc. Objetivos Apresentar cada um dos 23 padrões clássicos descrevendo: O problema que solucionam. A solução. Diagramas UML (Unified

Leia mais

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada Programação Estruturada Programação Estruturada Paradigmas de Linguagens de Programação As linguagens desse paradigma são muitas vezes chamadas de linguagens convencionais, procedurais ou imperativas.

Leia mais

Curso - Padrões de Projeto Módulo 2: Padrões de Criação

Curso - Padrões de Projeto Módulo 2: Padrões de Criação Curso - Padrões de Projeto Módulo 2: Padrões de Criação Vítor E. Silva Souza vitorsouza@gmail.com http://www.javablogs.com.br/page/engenho http://esjug.dev.java.net Sobre o Instrutor Formação: Java: Graduação

Leia mais

(ou seja, boas praticas de programação orientada a objetos devem ser empregadas mesmo se não foram explicitamente solicitadas)

(ou seja, boas praticas de programação orientada a objetos devem ser empregadas mesmo se não foram explicitamente solicitadas) PC-2 / LP-2 2009/2 Lista 2 Prof. Alexandre Sztajnberg Em todos os exercícios a(o) aluna(o) deve, além de atender aos requisitos enunciados, utilizar os conceitos e características de orientação a objetos

Leia mais

3. PARADIGMA ORIENTADO A OBJETOS

3. PARADIGMA ORIENTADO A OBJETOS Paradigmas de Linguagens I 1 3. PARADIGMA ORIENTADO A OBJETOS Este paradigma é o que mais reflete os problemas atuais. Linguagens orientada a objetos (OO) são projetadas para implementar diretamente a

Leia mais

Programa do Módulo 2. Processo Unificado: Visão Geral

Programa do Módulo 2. Processo Unificado: Visão Geral 9.1 Programa do Módulo 2 Orientação a Objetos Conceitos Básicos Análise Orientada a Objetos (UML) O Processo Unificado (RUP) Processo Unificado: Visão Geral 9.2 Encaixa-se na definição geral de processo:

Leia mais

Curso Java Starter. www.t2ti.com 1

Curso Java Starter. www.t2ti.com 1 1 Apresentação O Curso Java Starter foi projetado com o objetivo de ajudar àquelas pessoas que têm uma base de lógica de programação e desejam entrar no mercado de trabalho sabendo Java, A estrutura do

Leia mais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA:

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: PROGRAMAÇÃO ORIENTADA A OBJETOS PROFESSOR: REINALDO GOMES ASSUNTO: REVISÃO DA INTRODUÇÃO A ORIENTAÇÃO

Leia mais

Orientação a Objetos com Java

Orientação a Objetos com Java Everton Coimbra de Araújo Orientação a Objetos com Java Simples, Fácil e Eficiente Visual Books Sumário Prefácio... 11 Introdução... 13 1 Introdução à Orientação a Objetos... 17 1.1 Conceitualização...

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

Técnicas de Programação Avançada TCC- 00.174 Prof.: Anselmo Montenegro www.ic.uff.br/~anselmo anselmo@ic.uff.br

Técnicas de Programação Avançada TCC- 00.174 Prof.: Anselmo Montenegro www.ic.uff.br/~anselmo anselmo@ic.uff.br Técnicas de Programação Avançada TCC- 00.174 Prof.: Anselmo Montenegro www.ic.uff.br/~anselmo anselmo@ic.uff.br Conteúdo: Coleções Material elaborado com contribuição do Professor Luiz André Coleções Uma

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

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

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel As 52 Palavras Reservadas O que são palavras reservadas São palavras que já existem na linguagem Java, e tem sua função já definida. NÃO podem

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

FBV - Linguagem de Programação II. Um pouco sobre Java

FBV - Linguagem de Programação II. Um pouco sobre Java FBV - Linguagem de Programação II Um pouco sobre Java História 1992: um grupo de engenheiros da Sun Microsystems desenvolve uma linguagem para pequenos dispositivos, batizada de Oak Desenvolvida com base

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

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos:

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos: Estruturas de Sistemas Operacionais Podemos analisar um sistema operacional sob diversos aspectos: Os serviços que o sistema operacional oferece. A interface que o sistema operacional torna disponível

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

Programação Orientada a Objetos em java. Polimorfismo

Programação Orientada a Objetos em java. Polimorfismo Programação Orientada a Objetos em java Polimorfismo Polimorfismo Uma característica muito importante em sistemas orientados a objetos Termo proveniente do grego, e significa muitas formas Em POO, significa

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

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos Vetores Nos capítulos anteriores estudamos as opções disponíveis na linguagem C para representar: Números inteiros em diversos intervalos. Números fracionários com várias alternativas de precisão e magnitude.

Leia mais

Capítulo 5 Reuso de Classes

Capítulo 5 Reuso de Classes Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. Desenvolvimento Orientado a Objetos com Java Capítulo 5 Reuso de Classes

Leia mais

Algoritmos em Javascript

Algoritmos em Javascript Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays

Leia mais

Padrões de Projeto Curso 6170 Aulas 12 a 14

Padrões de Projeto Curso 6170 Aulas 12 a 14 Padrões de Projeto Curso 6170 Aulas 12 a 14 1. Padrões de projeto Um padrão de projeto é:. uma solução padrão para um problema comum de programação. uma técnica capaz de tornar o código mais flexível ao

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

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

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

4 Java Objet Circuits Architecture

4 Java Objet Circuits Architecture 4 Java Objet Circuits Architecture Java Object Circuits Architecture (JOCA) é uma implementação de circuitos de objetos utilizando a linguagem de programação Java (Arnold, 1996). Ela provê um ambiente

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

Porque tornar-se um profissional certificado? Por que vale a pena investir na carreira Java?

Porque tornar-se um profissional certificado? Por que vale a pena investir na carreira Java? Sumário Porque tornar-se um profissional certificado?...3 Por que vale a pena investir na carreira Java?...3 Diferenciais da DataSun...4 Sobre o treinamento "Programador Java 6"...4 Tópicos mais explorados

Leia mais

Capítulo 4. Packages e interfaces

Capítulo 4. Packages e interfaces Capítulo 4. Packages e interfaces 1/17 Índice Indice 4.1 - Package 4.2 - Interface 2/17 Índice 4.1 Package 4.1 - Package 4.2 -- Interface 3/17 4.1 Package Package ou pacote está para o Java como as directorias

Leia mais

Especialização em web com interfaces ricas

Especialização em web com interfaces ricas Especialização em web com interfaces ricas Padrões de Projeto - Comportamentais Prof. Fabrízzio Alphonsus A. M. N. Soares fabrizzio@inf.ufg.br professor.fabrizzio@gmail.com Instituto de Informática Universidade

Leia mais

Seminário - C# DSO II. Desenvolvimento de Sistemas Orientados a Objetos 2. Equipe: Diorges, Leonardo, Luís Fernando, Ronaldo

Seminário - C# DSO II. Desenvolvimento de Sistemas Orientados a Objetos 2. Equipe: Diorges, Leonardo, Luís Fernando, Ronaldo Seminário - C# DSO II Desenvolvimento de Sistemas Orientados a Objetos 2 Equipe: Diorges, Leonardo, Luís Fernando, Ronaldo Roteiro Breve Histórico Plataforma.NET Características da Linguagem Sintaxe Versões

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

1 UML (UNIFIED MODELING LANGUAGE)

1 UML (UNIFIED MODELING LANGUAGE) 1 UML (UNIFIED MODELING LANGUAGE) Segundo Tonsig (2003), para conseguir desenvolver um software capaz de satisfazer as necessidades de seus usuários, com qualidade, por intermédio de uma arquitetura sólida

Leia mais

Desenvolvendo Aplicações Web com NetBeans

Desenvolvendo Aplicações Web com NetBeans Desenvolvendo Aplicações Web com NetBeans Aula 3 Cap. 4 Trabalhando com Banco de Dados Prof.: Marcelo Ferreira Ortega Introdução O trabalho com banco de dados utilizando o NetBeans se desenvolveu ao longo

Leia mais

Programação com Objectos Teste Teórico 04 de Janeiro de 2010, 09:00 (120 minutos)

Programação com Objectos Teste Teórico 04 de Janeiro de 2010, 09:00 (120 minutos) LEIC-A LEIC-T LERC MEE MEIC-A 2009/2010 (1º Semestre) Teste Teórico (201001040900) 1/10 LEIC-A LEIC-T LERC MEE MEIC-A 2009/2010 (1º Semestre) Teste Teórico 04 de Janeiro de 2010, 09:00 (120 minutos) Nome:

Leia mais

Programação Avançada. Padrões de Projeto de Software. Fonte: Oswaldo B. Peres e K19 Treinamentos

Programação Avançada. Padrões de Projeto de Software. Fonte: Oswaldo B. Peres e K19 Treinamentos Programação Avançada Padrões de Projeto de Software 1 Fonte: Oswaldo B. Peres e K19 Treinamentos Introdução Projetar software OO reusável e de boa qualidade é uma tarefa difícil; Para realizar essa tarefa

Leia mais

3 A Biblioteca para Implementação de Máquinas Virtuais

3 A Biblioteca para Implementação de Máquinas Virtuais A Biblioteca para Implementação de Máquinas Virtuais 24 3 A Biblioteca para Implementação de Máquinas Virtuais O processo de criação e experimentação de uma máquina virtual no escopo deste trabalho é ilustrada

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

Lição 9 Trabalhando com bibliotecas de classes

Lição 9 Trabalhando com bibliotecas de classes Lição 9 Trabalhando com bibliotecas de classes Introdução à Programação I 1 Objetivos Ao final da lição, o estudante deverá estar apto a: Explicar o que é programação orientada a objetos e alguns de seus

Leia mais

Computação II Orientação a Objetos

Computação II Orientação a Objetos Computação II Orientação a Objetos Fabio Mascarenhas - 2014.1 http://www.dcc.ufrj.br/~fabiom/java Classes abstratas Até agora, usamos interfaces toda vez que queríamos representar algum conceito abstrato

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

Padrões Comportamentais

Padrões Comportamentais Padrões Comportamentais Formulário para Descrição de Padrões Nome e Classificação Intenção Também Conhecido Como Motivação Aplicabilidade Estrutura Participantes Colaboradores Conseqüências Implementação

Leia mais