Dúvidas ''básicas'' que não entram na cabeça

J2SE:

Qual é a real funcionalidade de uma interface?
O que é um conteiner e qual é o seu papel na Frame?
Diferença gritante entre LinkedList e ArrayList. Existe?
Alguém usa Applets? Quando usá-los?
Herança em GUI (Por exemplo todas Frames terem sempre o mesmo plano de fundo), é possivel?

J2EE:

Qual a diferença entre JSP (JavaServer Pages) e JSF (JavaServer Faces)?

Gurizada se souberem responder qual quer uma dessas a ajuda é bem vinda, são conceitos ‘‘básicos’’, mas não me entram na cabeça, por mais que eu leia-os.
Vlw (mais uma vez) :wink:

[quote=guisantogui]J2SE:

Qual é a real funcionalidade de uma interface?
O que é um conteiner e qual é o seu papel na Frame?
Diferença gritante entre LinkedList e ArrayList. Existe?
Alguém usa Applets? Quando usá-los?
Herança em GUI (Por exemplo todas Frames terem sempre o mesmo plano de fundo), é possivel?

J2EE:

Qual a diferença entre JSP (JavaServer Pages) e JSF (JavaServer Faces)?

Gurizada se souberem responder qual quer uma dessas a ajuda é bem vinda, são conceitos ‘‘básicos’’, mas não me entram na cabeça, por mais que eu leia-os.
Vlw (mais uma vez) :wink:
[/quote]

bem…vou ver se posso te ajudar…vamos por partes…

a interface serve para garantir que uma determinada classe tenha implementado determinados métodos, vamos a um exemplo real:

você tem uma classe acessada por um cliente, onde ele acessa um determinado método (você consegue fazer isso via RMI, web services…enfim, como não importa). Suponha que esse método retorne um objeto “do tipo” de interface… quando você alterar esse método, caso você precise, pode retornar qualquer objeto que implemente essa interface, você pode até criar uma classe nova que implemente essa interface, e que se adeque melhor ao que você precisa do que as classes ja existentes. Se você usasse o tipo de retorno de uma classe, você teria que retornar um objeto dessa classe e fim de papo… no máximo um objeto de uma classe filha desta, com coisa nova e obrigatoriamente com tudo o que tinha na classe antiga (que pode ser sujeira e coisa que não é mais uma coisa boa para a regra de negócio). Com a interface você não vai ter esse problema e caso você mude o tipo de retorno do seu método, você força o seu cliente a alterar o programa dele na parte que chame esse seu método, então com a classe você fica meio preso a implementação dela enquanto que com a interface você pode criar uma implementação totalmente nova…

eu não lembro muito de swing aliais eu não lembro quase nada, mas pelo que eu me lembro, o container é a parte onde você insere seus componentes, se eu não estiver enganado você precisa dele por que não da para inserir os componentes sem ele no JFrame… ele é um cara que fica no meio entre os componentes e a janela para faze-los conversarem… não lembro direito disso(to inclusive com a impreção que to falando merda)…

Ambas implementam a interface List, então tem uma série de métodos em comum… porém a LinkedList também implementa a interface Queue, que serve como implementação de filas, da uma estudada nisso (recomendo a apostila da iniciativa jedi sobre isso, acho que no primeiro módulo, ou no segundo, é free).

Applets são muito pouco usadas hoje em dia, na prática eu só vejo banco mesmo usando devido a segurança que ela fornece. É util sempre que você quiser executar código java direto na máquina do cliente remoto que acessar a página.

É sim, inclusive tem até um padrão de projetos que diz para fazer mais ou menos isso… cria o JFrame, seta a cor do fundo, faz só o que for realmente necessário e herda essa classe nas outras para adicionar componentes (voltando ao padrão que esqueci o nome, você pode criar um painel, adicionar componentes que sejam comuns a várias janelas nesse painel e ao invéz de colocar esses componentes em cada janela, coloca só o painel com todos os componentes dentro dele ja…).

JSP é uma tecnologia…digamos… ± que associada a java + html, é HTML, actions… algumas coisas a mais, enquanto que JSF é um framework, ele adiciona tags adicionais ao JSP, cria algumas facilidades para usar o padrão MVC… resumindo, é uma coisa diferente do JSP, que é usando junto com ele…digamos que um plus pro JSP em funcionalidade e facilidade de desenvolvimento (+ pra frente quando você for estudar web você vai entender isso melhor, não se preocupa com isso agora…).

bom…espero ter ajudado…

Bom, pelo seu nível aqui no fórum acredito que você já tenha se deparado com muitas respostas a respeito das suas perguntas e devem ter uma centena de perguntas retóricas para todas as respostas triviais que vierem. Mas mesmo assim:
Bom, independente de uma solução alternativa como herança múltipla ou seja lá o que for em outras linguagens, acredito que uma interface é um advento bem útil em Java, isto fica mais claro, pelo menos para mim, quando nós começamos a estudar Design Patterns acabamos percebendo o quão útil ela é.
Vou te dar um exemplo com o Padrão Observer:
Este padrão define um relacionamento de um para muitos entre objetos, e quando um objeto mude de estado todos os outros que se interessem sejam avisados.
No padrão temos um Subject(sujeito ) e Observer (observador). Subject é o objeto que avisará os Observers sobre a mudança de seu próprio estado. Bom vamos lá:
Embora a API java possua a própria classe Subject (java.util.Observable) existe certas desvantagens em utilizá-la, quando você estendê-la não poderá fazer o mesmo com nenhuma outra classe por exemplo. Talvez uma outra solução plausível seja criar uma interface Subject e uma interface Observer.
Subject terá uma coleção na qual sempre registrará Observers, para quando a classe que implementa Subject mudar de estado ela possa notificar todas os Observer registrados.
Agora pensemos, como isso ocorreria sem interface, nada poderia assegurar que uma classe que não é Observer se registrasse e ganhasse o direito a receber informações da classe Subject. Não obstante, de que forma você notificaria um Observer da mudança se você não conhece nenhum detalhe sobre a classe Observer. Aí talvez resida a funcionalidade mais trivial que a interface nos disponibiliza que é a obrigatoriedade de possuir o método da interface implementada!
Na interface Observer existirá um método update(), desta forma ao necessitar notificar a Classe Subject saberá que toda classe Observer possui esse método, dessa forma a chamada de Observer.update(), trará um meio que ele notifique todo e qualquer observer.
Bom, acho que me alonguei muito no post, mas queria tentar demonstrar de uma forma mais prática e sem código em si.

DHS…

Voce colocou a cabeca do cara em Parafuso… hehehe

Cara… as Interfaces servem pra definires um contrato… sem elas, nao ha Polimorfismo em sua forma clara e Pura… deixa eu te repassar um exemplo que foi como eu entendi o conceito de Interfaces…

Imagine a Hierarquia dos Animais abaixo vou definir as classes da forma mais simplificada possivel…

public abstract class Animal { void comer(){} abstract void andar(); }

public class Cachorro extends Animal { void andar() {} }

public class Avestruz extends Animal { void andar() {} }

Perceba que eu tenho 3 classes, Animal eh minha classe abstrata que define um metodo comer() identico para cachorro e avestruz (Mesmo sabendo que eles nao comem iguais e nem as mesmas coisas) e um metodo andar() que nao eh identico, ou seja, cachorro e avestruz terao que dizer como cada um anda… Porem, voce agora quer implementar uma nova funcionalidade em seu Ecossistema (supondo que voce Programou a Terra).

Voce quer que alguns de seus animais tenham comportamento de animais Pets, fofinhos, guti-gutis, lindinhos e bonitinhos… Eu suponho que um avestruz nao eh um animal Pet, mas com 99,9999999999999999 % de certeza, um cachorro sim…

E eu quero mais adiante, dar a opcao de qualquer pessoa no Globo escolher um animal Pet e receber qualquer animal Pet de presente (ja pensou tu ganhando um avestruz ???). A interface me ajuda muito nessa hora… Basta eu criar…

public interface Pet{ void fazerGracinha(); void acariciarDono(); }

e

public class Cachorro extends Animal implements Pet { void andar() {} void fazerGracinha(){} void acariciarDono(){} }

Agora ficas livre pra fazer

public class Gato extends Animal implements Pet { void andar() {} void fazerGracinha(){} void acariciarDono(){} }

e finalmente

public class CriancaQueEncheuOSacoDosPaisPraTerUmAnimalzinho {
    void ganharAnimal(Pet p) {
         p.acariciarDono();
    }
}

E o muleque fica feliz… e voce como programador do mundo tbm fica animado… Sendo que o Pet ali, pode ser tanto um Cachorro como um Gato, ou Periquito, ou seja, o que voce implementar… So nunca faca isso com um avestruz pois eles sao selvagens…

Cara… brincadeiras a parte, espero que tenha ficado claro… se nao, posta as duvidas ai… so lembrando que no mundo real, o escopo de interfaces eh um pouco diferente, mas o exemplo me ajudou a entender…

Att.
Adriano Ohana

[quote=adriano_si]DHS…

Voce colocou a cabeca do cara em Parafuso… hehehe

Cara… as Interfaces servem pra definires um contrato… sem elas, nao ha Polimorfismo em sua forma clara e Pura… deixa eu te repassar um exemplo que foi como eu entendi o conceito de Interfaces…

Imagine a Hierarquia dos Animais abaixo vou definir as classes da forma mais simplificada possivel…

public abstract class Animal { void comer(){} abstract void andar(); }

public class Cachorro extends Animal { void andar() {} }

public class Avestruz extends Animal { void andar() {} }

Perceba que eu tenho 3 classes, Animal eh minha classe abstrata que define um metodo comer() identico para cachorro e avestruz (Mesmo sabendo que eles nao comem iguais e nem as mesmas coisas) e um metodo andar() que nao eh identico, ou seja, cachorro e avestruz terao que dizer como cada um anda… Porem, voce agora quer implementar uma nova funcionalidade em seu Ecossistema (supondo que voce Programou a Terra).

Voce quer que alguns de seus animais tenham comportamento de animais Pets, fofinhos, guti-gutis, lindinhos e bonitinhos… Eu suponho que um avestruz nao eh um animal Pet, mas com 99,9999999999999999 % de certeza, um cachorro sim…

E eu quero mais adiante, dar a opcao de qualquer pessoa no Globo escolher um animal Pet e receber qualquer animal Pet de presente (ja pensou tu ganhando um avestruz ???). A interface me ajuda muito nessa hora… Basta eu criar…

public interface Pet{ void fazerGracinha(); void acariciarDono(); }

e

public class Cachorro extends Animal implements Pet { void andar() {} void fazerGracinha(){} void acariciarDono(){} }

Agora ficas livre pra fazer

public class Gato extends Animal implements Pet { void andar() {} void fazerGracinha(){} void acariciarDono(){} }

e finalmente

public class CriancaQueEncheuOSacoDosPaisPraTerUmAnimalzinho {
    void ganharAnimal(Pet p) {
         p.acariciarDono();
    }
}

E o muleque fica feliz… e voce como programador do mundo tbm fica animado… Sendo que o Pet ali, pode ser tanto um Cachorro como um Gato, ou Periquito, ou seja, o que voce implementar… So nunca faca isso com um avestruz pois eles sao selvagens…

Cara… brincadeiras a parte, espero que tenha ficado claro… se nao, posta as duvidas ai… so lembrando que no mundo real, o escopo de interfaces eh um pouco diferente, mas o exemplo me ajudou a entender…

Att.
Adriano Ohana

[/quote]

So pra esclarecer… voce entendeu porque NAO fazer…

public class CriancaQueEncheuOSacoDosPaisPraTerUmAnimalzinho { void ganharAnimal(Animal a) { ... } } Nao entendeu ???

Abs :wink:

Já que já estão se quebrando para responder o que são interfaces, vou falar do resto:

Container é qualquer coisa que pode ter outros componentes. Um Frame é um tipo de Container, assim como um Painel, um Window e um Dialog. Ele define os métodos básicos para as classes que vão ter que dar suporte a ter outros componentes.

Cuidado com as classes da AWT. Hoje em dia é melhor usar componentes do Swing, como o JFrame.

Sim. O ArrayList é baseado num array. O linked list é uma lista duplicamente encadeada.

Na prática, isso representa as seguintes diferenças:
a) O ArrayList ocupa memória a mais do que os elementos que estão dentro dele. Como ele é formado por um array primitivo, ele é obrigado a pré-alocar algum espaço para trabalhar, ou seria muito lento.
b) O ArrayList é rapidissimo para ser percorrido, mas tem pouca performance ao incluir ou remover elementos (exceto pelo último elemento da lista). O linkedList é ao contrário (rapidíssimo para remover elementos, lento para iterar).
c) O método get() do LinkedList tem uma implementação extremamente burra e de péssima performance.

Muito raro. Foi uma tecnologia que não colou. Como exemplos temos o teclado virtual de alguns bancos e alguns joguinhos via internet (embora o flash seja melhor para isso)… e meio que só.

O Java Web Start é um pouco mais útil, mas eu consigo pensar em várias alternativas melhores.

Sim. JFrames são classes como outras quaisquer.

Pow gurizada valeu a dedicação ai nas respostas, acho q me deu uma luz, vou continuar aqui, é que eu qria esclarecer essas duvidas antes de partir para FJ 21!
Abraço! :smiley: