Páginas

quarta-feira, 1 de dezembro de 2010

Trabalho ArrayList - Maicon Feder

Entendendo a classe ArrayList

A classe ArrayList é uma implementação de array redimensionável da interface List. Esta classe implementa todas as operações opcionais de uma lista e permite todos os elementos, inclusive null. Além de implementar a interface List, esta classe fornece métodos para manipular o tamanho do array sendo usado internamente para armazenar a lista. Esta classe é quase idêntica à Vector, exceto pelo fato de que ela não é sincronizada.

As operações size, isEmpty, get, set, iterator e listIterator são executadas em tempo constante. A operação add é executada em tempo constante amortizado, ou seja, adicionar n elementos exige um tempo inicial(n). Todas as outras operações são executadas em tempo linear (por assim dizer). O fator constante é baixo se comparado àquele da implementação de LinkedList.

Cada cópia de ArrayList tem uma capacidade. A capacidade é o tamanho do array usado para armazenar os elementos da lista. É sempre igual ou maior que o tamanho da lista. À medida que elementos são adicionados à ArrayList, sua capacidade é aumentada automaticamente. Os detalhes da política de crescimento não são especificados além do fato de que adicionar um elemento tem custo de tempo constante amortizado.

Alguns dos métodos mais utilizados

add = Adiciona um objeto ao participante do ArrayList.
get = recupera o objeto na posição “n”.
clear = Remove todos os elementos a ArrayList.
clone = Cria uma cópia superficial do ArrayList.
contains = Determina se é um elemento no ArrayList.
insert = Insere um elemento a ArrayList no índice especificado.
remove = Remove a primeira ocorrência de um objeto específico a ArrayList.
removeAt = Remove o elemento no índice especificado do ArrayList.
repeat = Retorna um ArrayList cujos elementos são cópias do valor especificado.
toString = Retorna um String que representa o corrente Object.
size = retorna o número de elementos.
set = sobrescreve o objeto na posição “n” com o objeto obj.

Resumindo

O ArrayList nada mais é do que uma seqüência de objetos.

e suas propriedades são:

Armazena referências a Object;
Aumenta a capacidade interna conforme necessário;
Mantém os objetos em ordem de inserção;
As posições dos elementos são iniciadas em zero.

terça-feira, 14 de setembro de 2010

Introdução

Trabalho construído, como base no estudo da programação em Java, pesquisa sobre
programação orientada a Objetos, como classes, métodos, construtores,
sobrecarga, herança, etc.

Alunos : João Luiz Boing Junior
              Maicon Feder
              Felipe Figueiredo

Classes

"Uma classe é uma coleção com um nome, de campos que contêm valores de dados e métodos que operam sobre esses valores. As classes são somente um dos cinco tipos por referência suportados por Java, mas são o mais importante."(Flanagan, David, Java : o guia essencial / David Flanagan; tradução Edson Furmakiewick. - 5. ed. - Porto Alegre : Bookman, 2006, pg. 87)


Classes, então, são conjuntos de objetos, e métodos utilizados para manipular esses objetos e seus atributos.
A classe será armazenada em um arquivo . java com o mesmo nome que declarado nela.

Classe Exemplo, que será armazenada em um arquivo chamado Exemplo.java

Atributos

“Os dados contidos em uma classe são conhecidos como campos ou atributos daquela classe. Cada campo deve ter um nome e ser de um tipo, que será ou um tipo de dado nativo da linguagem Java, uma classe existente na linguagem ou definida pelo programador.“ (SANTOS, R., 2003, p. 15)

Os atributos são características dos objetos, ou seja, são as variáveis. Cada atributo deve ter definido um nome e um tipo de dado. 
Atributo texto do tipo String.

Métodos

"Os métodos aparecem dentro do corpo da classe. Eles contêm declarações de variável local e outras intruções do Java que são executadas por um thread que chama quando o método é invocado. As declarações de método em Java se parecem com as declarações de função no estilo C do ANSI, as com duas restrições: um método Java sempre especifica um tipo de retorno (não existe default). O valor retornado pode ser um tipo primitivo, um tipo de referência ou o tipo void, que indica nenhum valor retornado." (Niemeyer, Patrick, Aprendendo Java / Patrick Niemeyer, Jonathan Knudsen; tradução de Daniel Vieira. - Rio do Janeiro : Campus, 2000, p. 125)
 Quando definimos um objeto em um programa orientado a objetos, implementamos todo o comportamento desse objeto em um ou mais métodos. Um método em Java é equivalente a uma função, subrotina ou procedimento em outras linguagens de programação.Todos os métodos devem sempre ser definidos dentro de uma classe.
A sintaxe para construção de um método é a seguinte:

[modificador] tipo_retorno identificador ([argumentos]) {
//Corpo do método
}

Encapsulamento

"A capacidade de ocultar dados dentro de modelos, permitindo que somente operações especializadas ou dedicadas manipulem os dados ocultos chamam-se encapsulamento, e é um dos benefícios mais palpáveis de programação orientada a objetos."(Santos, Rafael, Introdução à programação orientada a objetos usando Java / Rafael Santos. - Rio do Janeiro : Elsevier, 2003 - 9ª reimpressão, p. 6)
O encapsulamento protege o acesso direto (referência) aos atributos de uma instância fora da classe onde estes foram declarados. Esta proteção consiste em se usar modificadores de acesso mais restritivos sobre os atributos definidos na classe. Depois devem ser criados métodos para manipular de forma indireta os atributos da classe.

Atributo com o encapsulamento private, que é o mais restritivo, podendo ser acessado dessa forma apenas internamente na classe, e métodos com o encapsulamento public, o menos restritivo,

Operador "new"

“O operador new cria um objeto enquanto o programa está sendo executado, obtendo memória suficiente para armazenar um objeto do tipo especificado à direita de new. O processo de criar novos objetos é também conhecido como criar uma instância ou instanciar um objeto. O operador new é conhecido como operador de alocação de memória dinâmica. O valor entre parênteses depois do tipo em um operador new é utilizado para inicializar (i. e., atribuir um valor a) o novo objeto”. (Java, como programar / H. M. Deitei e P. J. Deitei; trad. Carlos Arthur Lang Lisboa. - 4,ed. - Porto Alegre: Bookman, 2003, p.192).

Ou seja, o operador new, é responsável por três ações: primeiro, ele aloca memória para o objeto, depois inicializa variáveis de instância e por fim chama um construtor. 

Operador new instânciando o objeto Exemplo na variável ex

Construtores

"Os contrutores  de uma classe têm um papel especial a cuprir: é sua responsabilidade colocar cada objeto dessa classe, quando ele está sendo criado, em um estado previamento definido para ser utilizado. Isso também é chamado de inicialização. O construtor inicializa o objeto para um estado adequado."(Barnes, David J., Programação orientada a objetos com Java / David J. Barnes e Michael Kölling; revisão técnica João Luiz Silva Barbosa; tradução Edson Furmankiewicz. - 4. ed. - São Paulo, Pearson Prentice Hall, 2009, p. 22)

Para conseguirmos utilizar uma classe, ela deve ter pelo menos um método construtor.
O método construtor é desenvolvido da mesma forma que uma função, a única diferença é que ele tem o mesmo nome da classe. Isso se deve ao fato de que um objeto deve ser construído cada vez que chamamos a classe. E a responsabilidade de fazer isso é do construtor. Isso parte do princípio que podemos ter dois objetos com a mesma característica, mas que não são os mesmos objetos.Sempre que criamos uma classe, Java automaticamente vincula um método construtor padrão interno com o mesmo nome da classe, mas sem inicializar nenhum atributo.



Método construtor da classe Exemplo

Sobrecarga de Métodos

“Java permite que vários métodos com o mesmo nome sejam definidos, contanto que esses métodos tenham conjuntos diferentes de parâmetros (com base na quantidade, nos tipos e na ordem dos parâmetros). Esse recurso é chamado de sobrecarga de método. Quando se chama um método sobrecarregado, o compilador Java seleciona o método adequado examinando a quantidade, os tipos e a ordem dos argumentos na chamada. A sobrecarga de métodos é comumente utilizada para criar vários métodos com o mesmo nome que realizam tarefas semelhantes, mas sobre tipos de dados diferentes.” (Java, como programar / H. M. Deitei e P. J. Deitei; trad. Carlos Arthur Lang Lisboa. - 4,ed. - Porto Alegre: Bookman, 2003, p.295).

Sobrecarga do Método Construtor

"O termo contrutores sobrecarregados significa que há mais de um construtor em sua classe. Para que seja compilado, cada construtor deve ter uma lista de argumentos diferentes." (Sierra, Kathy, Use a cabeça Java / Kathy Sierra, Bart Bates, Alta Book, 2005, p. 181)

Da mesma forma que a sobrecarga de métodos, a sobrecarga do método contrutor trabalha com mais de uma "versão" do construtor da classe, seja com tipo ou quantidade de parâmetros diferentes

Sobrecarga do método contrutor da classe Exemplo.

Métodos Estáticos

"Métodos estáticos (métodos de classe), assim como variáveis estáticas, pertencem à classe e não à uma instância indivudual da classe... um método estático reside fora de qualquer instância de classe em particular. Ele pode ser chamado por nome, através do nome da classe, sem quaisquer objetos ao redor. Por não estar ligado à uma instância de objeto em particular, um método estático só pode acessar diretamente outros membros estáticos da classe."(Niemeyer, Patrick, Aprendendo Java / Patrick Niemeyer, Jonathan Knudsen; tradução de Daniel Vieira. - Rio do Janeiro : Campus, 2000, p. 128)

Um método estático está associado à classe, e não a uma instância particular da mesma. É fácil entender que o método em questão deve ser estático, pois quando resolvemos expressar um número na forma de caráteres, ainda não temos uma String. O método a ser chamado é que vai criá-la.

Herança

"Um relacionamento de herança significa que a subclasse herdará os membros da superclasse. Com o termo "membros de uma classe" queremos nos referir às variáveis de instância e métodos." (Sierra, Kathy, Use a cabeça Java / Kathy Sierra, Bart Bates, Alta Book, 2005, p. 127)

Quando classes diferentes tem caracteristicas em comum, ao inves de criarmos uma nova classe com todas as caracteristicas, usamos as caracteristicas de um objeto já existente.
Herança, é uma classe derivada de outra classe


Classe Heranca herdando a classe Exemplo
Mesmo a classe herança não tendo o método setTexto, e o método getTexto, por ela ter herdado a classe Exemplo, podemos utilizar os métodos implementados lá.

Polimorfismo


"Com o polimorfismo, é possível projetar e implementar sistemas que são mais facilmente extensíveis. Os programas podem ser escritos para processar genericamente - como objetos de superclasse - objetos de todas as classes existentes em uma hierarquia. As classes que não existem durante o desenvolvimento do programa podem ser adicionadas com pouca ou nenhuma modificação da parte genérica do programa - contanto que essas classes façam parte da hierarquia que está sendo processada genericamente. As únicas partes de um programa que requerem modificações são aquelas partes que exigem conhecimento direto da classe particular que é adicionada à hierarquia."(Java, como programar / H. M. Deitei e P. J. Deitei; trad. Carlos Arthur Lang Lisboa. - 4,ed. - Porto Alegre: Bookman, 2003, p.454).


Chamadas de método em Java são polimórficas. A mesma chamada de método pode, em momentos diferentes, invocar diferentes métodos, dependendo do tipo dinâmico da variável utilizada para fazer essa chamada.

Uma variável polimórfica é uma que pode armazenar objetos de diferentes tipos (cada variável objeto em Java é potencialmente polimórfica). De maneira semelhante, chamadas de método Java são polimórficas, uma vez que podem invocar diferentes métodos em diferentes momentos. 
 
Método println é um exemplo de polimorfismo, trabalhando com vários tipos de dados

Classes Abstratas

"Java permite definir um método, sem implementá-lo, declarando-o com o modificador abstract. Um método abstract não tem corpo, simplesmente uma definição de assinatura seguida por um ponto-e-vírgula."(Flanagan, David, Java : o guia essencial / David Flanagan; tradução Edson Furmakiewick. - 5. ed. - Porto Alegre : Bookman, 2006, pg. 87)

Classes abstratas tem uma função importante na orientação a objeto em Java.

De forma objetiva, uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos).
Como classes abstratas são modelos de classes, então, não podem ser instanciadas diretamente com o new, elas sempre devem ser herdadas por classes concretas.

Classe abstrata Shape. Seus métodos não tem corpo.
Classe Círculo extendendo a classe Shape e implementando seus métodos.

Classe Retangulo extendendo a classe Shape e implementando seus métodos.

Conclusão

A partir de todas as informações anteriores, passamos a verificar alguns aspectos
fundamentais da Programação Orientada a Objetos, informações úteis para quem está
iniciando a desenvolver aplicações a linguagem Java.