Aula 16: Estudo de Caso: A API de Coleções do Java
|
|
- Danilo de Andrade Tuschinski
- 8 Há anos
- Visualizações:
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
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 maisSlide 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 maisColeçõ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 maisOrientaçã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 maisAná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 maisBSI 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 mais3.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 maisARRAYS. 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 maisCAPÍ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 maisTabela 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 maisATRIBUTOS 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 maisPROGRAMAÇÃ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 maisColeçõ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 maisPROGRAMAÇÃ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 maisEngenharia 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 maisEsta 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 maisAula 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 maisHardware (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 maisReuso 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 maisEspecificaçã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 maisMemó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 maisPROGRAMAÇÃ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 maisEXERCÍ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 maisDAS5102 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 maisPolimorfismo. 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 maisLinguagem 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 maisLaborató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 maisSistemas 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 maisProfº. 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 maisParadigmas 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 maisGuia 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 maisO 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 maisMÓ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 maisResoluçã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 maisTé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 mais3 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 maisLista 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 mais5 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 maisIntroduçã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 maisAlgoritmos 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 maisTabelas 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 maisSubtipos 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 maisAlgoritmos 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 maisFeature-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 maisINTRODUÇÃ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 maisNotas 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 maisPROCESSO 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 maisBanco 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 maisCurso: 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 maisPrototype, 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 maisEntendendo 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 maisEMENTA 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 maisSISTEMAS 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 maisProgramaçã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 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 maisManual 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 maisPersistê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 maisPragmá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 maisAULA 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 maisNotas 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 maisMicrosoft 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 maisINTRODUÇÃ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 maisSISTEMAS 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 maisExercí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 maisProgramaçã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 maisREFLEXÃ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 maisDesenvolvendo 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 maisBUSCA 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 maisEspecializaçã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 maisAula 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 maisPROGRAMAÇÃ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 maisJava 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 mais3/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 maisNOVIDADES 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 maisNetBeans. 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 mais3 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 maisTabela 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 mais04/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 maisAlgoritmos 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 maisAula 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 maisNotas 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 maisPodemos 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 maisImplementando 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 maisPrevayler. 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 mais2. 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 mais1.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 mais6.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 maisSistema 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 mais5 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 maisAVALIAÇÃ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 maisTUTORIAL 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 maisProgramaçã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 maisEngenharia 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 maisUnidade 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 maisProgramaçã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 maisUNIVERSIDADE 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