Dúvida Conceitual sobre JPA e Hibernate![Entendido]

Pessoal alguém poderia explicar quais as diferenças entre JPA e Hibernate… por que oq escuto falar é que JPA é uma especificação e Hibernate é a implementação… mas oq seria isso… não entendi direito como isso se agrega… como funciona… quais as vantagens…

Tb tem isso com JSF… onde JSF é a especificação e o MyFaces a implementação …

Desde já agradeço pela ajuda pessoal…

Especificação pode ser comparada a uma norma.
Ela dita as características que algo tem que atender.

A implementação é a realização daquela especificação.

É como um parafuso. Existe uma norma ESPECIFICANDO as características dele. Diferentes empresas usam estar norma para FAZER (implementar) o parafuso, respeitando as especificações obrigatórias e mudando aquilo que julga conveniente e que não altere a especificação.

Hum poderia ser assim tb… quando aprendi Abstract… era isso;

Vc cria um modelo e sua extenções adotariam o modelo da forma q quisesse mas sempre seguindo aquele modelo…

Estou certo disso?

No caso das especificações não existe um MODELO a ser estendido… mas sim a ser implementado. (isso pode gerar uma discussão)

O teu exemplo cabe mais a HERANÇA do que Especificação/Implementação.

No caso de JPA, JEE, e outras especificações, elas são especificadas na forma de documentos e APIs (interfaces/classes).

Um exemplo seria uma especificação assim:

[quote]A ferramenta deve ser capaz de calcular o fatorial de um número e fornecer a seguinte interface de acesso:

public class Fatorial {
public int calcular( int x );
}[/quote]

E aí você implementa como bem desejar, desde que o resultado respeite a especificação definida.

Você poderia implementar usando recursividade (um tipo de implementação), ou outra técnica (outra implementação).

Ok agora entedi… valeu pela explicação…

Abs